Core/Scenarios: Fix bad criteria evaluation in scenarios

Port From (https://github.com/TrinityCore/TrinityCore/commit/6cd44e6ca8c90194ffd679a9ca9e7f07ecfc2c06)
This commit is contained in:
hondacrx
2022-05-30 14:04:40 -04:00
parent 702e8c0feb
commit c804b0fd17
+17 -14
View File
@@ -192,37 +192,40 @@ namespace Game.Scenarios
public override bool CanCompleteCriteriaTree(CriteriaTree tree)
{
ScenarioStepRecord step = tree.ScenarioStep;
if (step == null)
ScenarioStepState state = GetStepState(step);
if (state == ScenarioStepState.Done)
return false;
if (step.ScenarioID != _data.Entry.Id)
ScenarioStepRecord currentStep = GetStep();
if (currentStep == null)
return false;
if (step.IsBonusObjective())
return !IsComplete();
if (step != currentStep)
return false;
if (step != GetStep())
return false;
return true;
return base.CanCompleteCriteriaTree(tree);
}
public override void CompletedCriteriaTree(CriteriaTree tree, Player referencePlayer)
{
ScenarioStepRecord step = tree.ScenarioStep;
if (step == null)
return;
if (!step.IsBonusObjective() && step != GetStep())
return;
if (GetStepState(step) == ScenarioStepState.Done)
if (!IsCompletedStep(step))
return;
SetStepState(step, ScenarioStepState.Done);
CompleteStep(step);
}
bool IsCompletedStep(ScenarioStepRecord step)
{
CriteriaTree tree = Global.CriteriaMgr.GetCriteriaTree(step.CriteriaTreeId);
if (tree == null)
return false;
return IsCompletedCriteriaTree(tree);
}
public override void SendPacket(ServerPacket data)
{
foreach (ObjectGuid guid in _players)