aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp')
-rw-r--r--src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
index 09c29dbac4d..4fe4e246663 100644
--- a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
+++ b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
@@ -165,9 +165,11 @@ void QuestObjectiveCriteriaMgr::SaveToDB(CharacterDatabaseTransaction trans)
}
}
-void QuestObjectiveCriteriaMgr::ResetCriteriaTree(uint32 criteriaTreeId)
+void QuestObjectiveCriteriaMgr::ResetCriteriaTree(QuestObjective const* questObjective)
{
- CriteriaTree const* tree = sCriteriaMgr->GetCriteriaTree(criteriaTreeId);
+ _completedObjectives.erase(questObjective->ID);
+
+ CriteriaTree const* tree = sCriteriaMgr->GetCriteriaTree(questObjective->ObjectID);
if (!tree)
return;
@@ -175,6 +177,12 @@ void QuestObjectiveCriteriaMgr::ResetCriteriaTree(uint32 criteriaTreeId)
{
RemoveCriteriaProgress(criteriaTree->Criteria);
});
+
+ CriteriaMgr::WalkCriteriaTree(tree, [this](CriteriaTree const* criteriaTree)
+ {
+ if (criteriaTree->Criteria && advstd::ranges::contains(CriteriaMgr::GetRetroactivelyUpdateableCriteriaTypes(), CriteriaType(criteriaTree->Criteria->Entry->Type)))
+ UpdateCriteria(criteriaTree->Criteria, 0, 0, 0, nullptr, _owner);
+ });
}
void QuestObjectiveCriteriaMgr::SendAllData(Player const* /*receiver*/) const
@@ -210,7 +218,7 @@ void QuestObjectiveCriteriaMgr::CompletedObjective(QuestObjective const* questOb
bool QuestObjectiveCriteriaMgr::HasCompletedObjective(QuestObjective const* questObjective) const
{
- return _completedObjectives.find(questObjective->ID) != _completedObjectives.end();
+ return _completedObjectives.contains(questObjective->ID);
}
void QuestObjectiveCriteriaMgr::SendCriteriaUpdate(Criteria const* criteria, CriteriaProgress const* progress, Seconds timeElapsed, bool timedCompleted) const
@@ -293,7 +301,9 @@ void QuestObjectiveCriteriaMgr::CompletedCriteriaTree(CriteriaTree const* tree,
if (!objective)
return;
- CompletedObjective(objective, referencePlayer);
+ CriteriaTree const* entireObjectiveTree = sCriteriaMgr->GetCriteriaTree(objective->ObjectID);
+ if (IsCompletedCriteriaTree(entireObjectiveTree))
+ CompletedObjective(objective, referencePlayer);
}
void QuestObjectiveCriteriaMgr::SendPacket(WorldPacket const* data) const