diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Scenarios/Scenario.cpp | 37 | ||||
-rw-r--r-- | src/server/game/Scenarios/Scenario.h | 1 |
2 files changed, 21 insertions, 17 deletions
diff --git a/src/server/game/Scenarios/Scenario.cpp b/src/server/game/Scenarios/Scenario.cpp index 37032069e26..e7debb993b5 100644 --- a/src/server/game/Scenarios/Scenario.cpp +++ b/src/server/game/Scenarios/Scenario.cpp @@ -175,38 +175,41 @@ bool Scenario::CanUpdateCriteriaTree(Criteria const * /*criteria*/, CriteriaTree bool Scenario::CanCompleteCriteriaTree(CriteriaTree const* tree) { - ScenarioStepEntry const* step = tree->ScenarioStep; - if (!step) + ScenarioStepEntry const* step = ASSERT_NOTNULL(tree->ScenarioStep); + ScenarioStepState const state = GetStepState(step); + if (state == SCENARIO_STEP_DONE) return false; - if (step->ScenarioID != _data->Entry->ID) + ScenarioStepEntry const* currentStep = GetStep(); + if (!currentStep) return false; - if (step->IsBonusObjective()) - return !IsComplete(); - - if (step != GetStep()) - return false; + if (!step->IsBonusObjective()) + if (step != currentStep) + return false; - return true; + return CriteriaHandler::CanCompleteCriteriaTree(tree); } void Scenario::CompletedCriteriaTree(CriteriaTree const* tree, Player* /*referencePlayer*/) { - ScenarioStepEntry const* step = tree->ScenarioStep; - if (!step) - return; - - if (!step->IsBonusObjective() && step != GetStep()) - return; - - if (GetStepState(step) == SCENARIO_STEP_DONE) + ScenarioStepEntry const* step = ASSERT_NOTNULL(tree->ScenarioStep); + if (!IsCompletedStep(step)) return; SetStepState(step, SCENARIO_STEP_DONE); CompleteStep(step); } +bool Scenario::IsCompletedStep(ScenarioStepEntry const* step) +{ + CriteriaTree const* tree = sCriteriaMgr->GetCriteriaTree(step->Criteriatreeid); + if (!tree) + return false; + + return IsCompletedCriteriaTree(tree); +} + void Scenario::SendPacket(WorldPacket const* data) const { for (ObjectGuid guid : _players) diff --git a/src/server/game/Scenarios/Scenario.h b/src/server/game/Scenarios/Scenario.h index 683c317c8d4..65bd75c8362 100644 --- a/src/server/game/Scenarios/Scenario.h +++ b/src/server/game/Scenarios/Scenario.h @@ -64,6 +64,7 @@ class TC_GAME_API Scenario : public CriteriaHandler virtual void Update(uint32 /*diff*/) { } bool IsComplete(); + bool IsCompletedStep(ScenarioStepEntry const* step); void SetStepState(ScenarioStepEntry const* step, ScenarioStepState state) { _stepStates[step] = state; } ScenarioEntry const* GetEntry() const; ScenarioStepState GetStepState(ScenarioStepEntry const* step); |