diff options
author | Xinef <none@empty.com> | 2017-02-05 16:39:56 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-04-26 22:58:51 +0200 |
commit | 6f7ff9a3efd10cd4f776a67540109e7bb774f1c5 (patch) | |
tree | 7a7339a82880134b10f6f4b0856d95cbbc44892b /src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp | |
parent | 0763844fb604075580e1c84672cb2e4a4fe19cde (diff) |
Core/Achievements: Optimized resetting achievement criteria by condition and changed the functionality to properly reset all possible criteria with given condition
Closes #18905
(cherry picked from commit 7c7b877c3fc0292f33f54f4e8b514be3bf8514a6)
Diffstat (limited to 'src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp')
-rw-r--r-- | src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp index f804ad52e94..8486db1c166 100644 --- a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp +++ b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp @@ -161,36 +161,35 @@ void QuestObjectiveCriteriaMgr::SaveToDB(CharacterDatabaseTransaction& trans) } } -void QuestObjectiveCriteriaMgr::ResetCriteria(CriteriaTypes type, uint64 miscValue1, uint64 miscValue2, bool evenIfCriteriaComplete) +void QuestObjectiveCriteriaMgr::ResetCriteria(CriteriaCondition condition, int32 failAsset, bool evenIfCriteriaComplete) { - TC_LOG_DEBUG("criteria.quest", "QuestObjectiveCriteriaMgr::ResetCriteria(%u, " UI64FMTD ", " UI64FMTD ")", type, miscValue1, miscValue2); + TC_LOG_DEBUG("criteria.quest", "QuestObjectiveCriteriaMgr::ResetCriteria(%u, %d, %s)", condition, failAsset, evenIfCriteriaComplete ? "true" : "false"); // disable for gamemasters with GM-mode enabled if (_owner->IsGameMaster()) return; - CriteriaList const& playerCriteriaList = GetCriteriaByType(type); - for (Criteria const* playerCriteria : playerCriteriaList) + if (CriteriaList const* playerCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(condition, failAsset)) { - if (playerCriteria->Entry->FailEvent != miscValue1 || (playerCriteria->Entry->FailAsset && playerCriteria->Entry->FailAsset != int64(miscValue2))) - continue; - - std::vector<CriteriaTree const*> const* trees = sCriteriaMgr->GetCriteriaTreesByCriteria(playerCriteria->ID); - bool allComplete = true; - for (CriteriaTree const* tree : *trees) + for (Criteria const* playerCriteria : *playerCriteriaList) { - // don't update already completed criteria if not forced - if (!(IsCompletedCriteriaTree(tree) && !evenIfCriteriaComplete)) + std::vector<CriteriaTree const*> const* trees = sCriteriaMgr->GetCriteriaTreesByCriteria(playerCriteria->ID); + bool allComplete = true; + for (CriteriaTree const* tree : *trees) { - allComplete = false; - break; + // don't update already completed criteria if not forced + if (!(IsCompletedCriteriaTree(tree) && !evenIfCriteriaComplete)) + { + allComplete = false; + break; + } } - } - if (allComplete) - continue; + if (allComplete) + continue; - RemoveCriteriaProgress(playerCriteria); + RemoveCriteriaProgress(playerCriteria); + } } } |