aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
diff options
context:
space:
mode:
authorXinef <none@empty.com>2017-02-05 16:39:56 +0100
committerShauren <shauren.trinity@gmail.com>2020-04-26 22:58:51 +0200
commit6f7ff9a3efd10cd4f776a67540109e7bb774f1c5 (patch)
tree7a7339a82880134b10f6f4b0856d95cbbc44892b /src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
parent0763844fb604075580e1c84672cb2e4a4fe19cde (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.cpp35
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);
+ }
}
}