Core/Quests: Improved criteria tree quest objective type
* Fixed _completedObjectives not being cleaned when adding quest * Fixed objective credit being granted if just the criteria tree row containing criteria id was completed (instead of the entire tree linked to objective) * Retroactively grant progress on quest accept for criteria types that require action that cannot be repeated (such as learning a spell) Port From (https://github.com/TrinityCore/TrinityCore/commit/4e89a302fcce7644bcd8cf239edad3b409950438)
This commit is contained in:
@@ -9,6 +9,7 @@ using Game.Networking;
|
||||
using Game.Networking.Packets;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Game
|
||||
{
|
||||
@@ -150,9 +151,11 @@ namespace Game
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetCriteriaTree(uint criteriaTreeId)
|
||||
public void ResetCriteriaTree(QuestObjective questObjective)
|
||||
{
|
||||
CriteriaTree tree = Global.CriteriaMgr.GetCriteriaTree(criteriaTreeId);
|
||||
_completedObjectives.Remove(questObjective.Id);
|
||||
|
||||
CriteriaTree tree = Global.CriteriaMgr.GetCriteriaTree((uint)questObjective.ObjectID);
|
||||
if (tree == null)
|
||||
return;
|
||||
|
||||
@@ -160,6 +163,12 @@ namespace Game
|
||||
{
|
||||
RemoveCriteriaProgress(criteriaTree.Criteria);
|
||||
});
|
||||
|
||||
CriteriaManager.WalkCriteriaTree(tree, criteriaTree =>
|
||||
{
|
||||
if (criteriaTree.Criteria != null && CriteriaManager.GetRetroactivelyUpdateableCriteriaTypes().Contains(criteriaTree.Criteria.Entry.Type))
|
||||
UpdateCriteria(criteriaTree.Criteria, 0, 0, 0, null, _owner);
|
||||
});
|
||||
}
|
||||
|
||||
public override void SendAllData(Player receiver)
|
||||
@@ -274,7 +283,9 @@ namespace Game
|
||||
if (objective == null)
|
||||
return;
|
||||
|
||||
CompletedObjective(objective, referencePlayer);
|
||||
CriteriaTree entireObjectiveTree = Global.CriteriaMgr.GetCriteriaTree((uint)objective.ObjectID);
|
||||
if (IsCompletedCriteriaTree(entireObjectiveTree))
|
||||
CompletedObjective(objective, referencePlayer);
|
||||
}
|
||||
|
||||
public override void SendPacket(ServerPacket data)
|
||||
|
||||
Reference in New Issue
Block a user