diff options
Diffstat (limited to 'src/server/game/Scenarios/Scenario.cpp')
| -rw-r--r-- | src/server/game/Scenarios/Scenario.cpp | 37 |
1 files changed, 20 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) |
