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:
File diff suppressed because it is too large
Load Diff
@@ -785,7 +785,7 @@ namespace Game.Entities
|
|||||||
GetReputationMgr().SetVisible(factionEntry);
|
GetReputationMgr().SetVisible(factionEntry);
|
||||||
break;
|
break;
|
||||||
case QuestObjectiveType.CriteriaTree:
|
case QuestObjectiveType.CriteriaTree:
|
||||||
m_questObjectiveCriteriaMgr.ResetCriteriaTree((uint)obj.ObjectID);
|
m_questObjectiveCriteriaMgr.ResetCriteriaTree(obj);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using Game.Networking;
|
|||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Game
|
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)
|
if (tree == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -160,6 +163,12 @@ namespace Game
|
|||||||
{
|
{
|
||||||
RemoveCriteriaProgress(criteriaTree.Criteria);
|
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)
|
public override void SendAllData(Player receiver)
|
||||||
@@ -274,7 +283,9 @@ namespace Game
|
|||||||
if (objective == null)
|
if (objective == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CompletedObjective(objective, referencePlayer);
|
CriteriaTree entireObjectiveTree = Global.CriteriaMgr.GetCriteriaTree((uint)objective.ObjectID);
|
||||||
|
if (IsCompletedCriteriaTree(entireObjectiveTree))
|
||||||
|
CompletedObjective(objective, referencePlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SendPacket(ServerPacket data)
|
public override void SendPacket(ServerPacket data)
|
||||||
|
|||||||
Reference in New Issue
Block a user