aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Scenarios/Scenario.cpp37
-rw-r--r--src/server/game/Scenarios/Scenario.h1
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);