diff options
Diffstat (limited to 'src/server/game/Scenarios/Scenario.cpp')
| -rw-r--r-- | src/server/game/Scenarios/Scenario.cpp | 50 |
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); } } |
