diff options
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); + } } } |