aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Scenarios/Scenario.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-06-07 15:37:34 +0200
committerShauren <shauren.trinity@gmail.com>2021-06-07 15:37:34 +0200
commitd0be92ec0ad0334c38b4073a7e24a571982b17da (patch)
tree7b3fecbd3345b28a7cfb7e40dfeacc2f50adc33a /src/server/game/Scenarios/Scenario.cpp
parent626c8f5de12daac6b88989807eba65d3d7a061dd (diff)
Core/Achievements: Defined all modifier tree types and implemented many of them
Diffstat (limited to 'src/server/game/Scenarios/Scenario.cpp')
-rw-r--r--src/server/game/Scenarios/Scenario.cpp50
1 files changed, 33 insertions, 17 deletions
diff --git a/src/server/game/Scenarios/Scenario.cpp b/src/server/game/Scenarios/Scenario.cpp
index b669a59edfd..6e92b5625f4 100644
--- a/src/server/game/Scenarios/Scenario.cpp
+++ b/src/server/game/Scenarios/Scenario.cpp
@@ -28,8 +28,8 @@ Scenario::Scenario(ScenarioData const* scenarioData) : _data(scenarioData), _cur
{
ASSERT(_data);
- for (auto step : _data->Steps)
- SetStepState(step.second, SCENARIO_STEP_NOT_STARTED);
+ for (std::pair<uint8 const, ScenarioStepEntry const*> const& scenarioStep : _data->Steps)
+ SetStepState(scenarioStep.second, SCENARIO_STEP_NOT_STARTED);
if (ScenarioStepEntry const* step = GetFirstStep())
SetStep(step);
@@ -112,12 +112,12 @@ void Scenario::OnPlayerExit(Player* player)
bool Scenario::IsComplete()
{
- for (auto step : _data->Steps)
+ for (std::pair<uint8 const, ScenarioStepEntry const*> const& scenarioStep : _data->Steps)
{
- if (step.second->IsBonusObjective())
+ if (scenarioStep.second->IsBonusObjective())
continue;
- if (GetStepState(step.second) != SCENARIO_STEP_DONE)
+ if (GetStepState(scenarioStep.second) != SCENARIO_STEP_DONE)
return false;
}
@@ -222,7 +222,7 @@ void Scenario::BuildScenarioState(WorldPackets::Scenario::ScenarioState* scenari
scenarioState->CriteriaProgress = GetCriteriasProgress();
scenarioState->BonusObjectives = GetBonusObjectivesData();
// Don't know exactly what this is for, but seems to contain list of scenario steps that we're either on or that are completed
- for (auto state : _stepStates)
+ for (std::pair<ScenarioStepEntry const* const, ScenarioStepState> const& state : _stepStates)
{
if (state.first->IsBonusObjective())
continue;
@@ -246,7 +246,7 @@ ScenarioStepEntry const* Scenario::GetFirstStep() const
{
// Do it like this because we don't know what order they're in inside the container.
ScenarioStepEntry const* firstStep = nullptr;
- for (auto scenarioStep : _data->Steps)
+ for (std::pair<uint8 const, ScenarioStepEntry const*> const& scenarioStep : _data->Steps)
{
if (scenarioStep.second->IsBonusObjective())
continue;
@@ -258,6 +258,22 @@ ScenarioStepEntry const* Scenario::GetFirstStep() const
return firstStep;
}
+ScenarioStepEntry const* Scenario::GetLastStep() const
+{
+ // Do it like this because we don't know what order they're in inside the container.
+ ScenarioStepEntry const* lastStep = nullptr;
+ for (std::pair<uint8 const, ScenarioStepEntry const*> const& scenarioStep : _data->Steps)
+ {
+ if (scenarioStep.second->IsBonusObjective())
+ continue;
+
+ if (!lastStep || scenarioStep.second->OrderIndex > lastStep->OrderIndex)
+ lastStep = scenarioStep.second;
+ }
+
+ return lastStep;
+}
+
void Scenario::SendScenarioState(Player* player)
{
WorldPackets::Scenario::ScenarioState scenarioState;
@@ -268,16 +284,16 @@ void Scenario::SendScenarioState(Player* player)
std::vector<WorldPackets::Scenario::BonusObjectiveData> Scenario::GetBonusObjectivesData()
{
std::vector<WorldPackets::Scenario::BonusObjectiveData> bonusObjectivesData;
- for (auto itr = _data->Steps.begin(); itr != _data->Steps.end(); ++itr)
+ for (std::pair<uint8 const, ScenarioStepEntry const*> const& scenarioStep : _data->Steps)
{
- if (!itr->second->IsBonusObjective())
+ if (!scenarioStep.second->IsBonusObjective())
continue;
- if (sCriteriaMgr->GetCriteriaTree(itr->second->Criteriatreeid))
+ if (sCriteriaMgr->GetCriteriaTree(scenarioStep.second->Criteriatreeid))
{
WorldPackets::Scenario::BonusObjectiveData bonusObjectiveData;
- bonusObjectiveData.BonusObjectiveID = itr->second->ID;
- bonusObjectiveData.ObjectiveComplete = GetStepState(itr->second) == SCENARIO_STEP_DONE;
+ bonusObjectiveData.BonusObjectiveID = scenarioStep.second->ID;
+ bonusObjectiveData.ObjectiveComplete = GetStepState(scenarioStep.second) == SCENARIO_STEP_DONE;
bonusObjectivesData.push_back(bonusObjectiveData);
}
}
@@ -291,13 +307,13 @@ std::vector<WorldPackets::Achievement::CriteriaProgress> Scenario::GetCriteriasP
if (!_criteriaProgress.empty())
{
- for (auto critItr = _criteriaProgress.begin(); critItr != _criteriaProgress.end(); ++critItr)
+ for (std::pair<uint32 const, CriteriaProgress> const& progressPair : _criteriaProgress)
{
WorldPackets::Achievement::CriteriaProgress criteriaProgress;
- criteriaProgress.Id = critItr->first;
- criteriaProgress.Quantity = critItr->second.Counter;
- criteriaProgress.Date = critItr->second.Date;
- criteriaProgress.Player = critItr->second.PlayerGUID;
+ criteriaProgress.Id = progressPair.first;
+ criteriaProgress.Quantity = progressPair.second.Counter;
+ criteriaProgress.Date = progressPair.second.Date;
+ criteriaProgress.Player = progressPair.second.PlayerGUID;
criteriasProgress.push_back(criteriaProgress);
}
}