Core/Scenarios: Fix bad criteria evaluation in scenarios
Port From (https://github.com/TrinityCore/TrinityCore/commit/6cd44e6ca8c90194ffd679a9ca9e7f07ecfc2c06)
This commit is contained in:
@@ -192,37 +192,40 @@ namespace Game.Scenarios
|
|||||||
public override bool CanCompleteCriteriaTree(CriteriaTree tree)
|
public override bool CanCompleteCriteriaTree(CriteriaTree tree)
|
||||||
{
|
{
|
||||||
ScenarioStepRecord step = tree.ScenarioStep;
|
ScenarioStepRecord step = tree.ScenarioStep;
|
||||||
if (step == null)
|
ScenarioStepState state = GetStepState(step);
|
||||||
|
if (state == ScenarioStepState.Done)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (step.ScenarioID != _data.Entry.Id)
|
ScenarioStepRecord currentStep = GetStep();
|
||||||
|
if (currentStep == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (step.IsBonusObjective())
|
if (step.IsBonusObjective())
|
||||||
return !IsComplete();
|
if (step != currentStep)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (step != GetStep())
|
return base.CanCompleteCriteriaTree(tree);
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void CompletedCriteriaTree(CriteriaTree tree, Player referencePlayer)
|
public override void CompletedCriteriaTree(CriteriaTree tree, Player referencePlayer)
|
||||||
{
|
{
|
||||||
ScenarioStepRecord step = tree.ScenarioStep;
|
ScenarioStepRecord step = tree.ScenarioStep;
|
||||||
if (step == null)
|
if (!IsCompletedStep(step))
|
||||||
return;
|
|
||||||
|
|
||||||
if (!step.IsBonusObjective() && step != GetStep())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (GetStepState(step) == ScenarioStepState.Done)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SetStepState(step, ScenarioStepState.Done);
|
SetStepState(step, ScenarioStepState.Done);
|
||||||
CompleteStep(step);
|
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)
|
public override void SendPacket(ServerPacket data)
|
||||||
{
|
{
|
||||||
foreach (ObjectGuid guid in _players)
|
foreach (ObjectGuid guid in _players)
|
||||||
|
|||||||
Reference in New Issue
Block a user