From 41a20b1e4008d450d075847ef1fe367f0e3a240f Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 25 Sep 2023 00:53:56 +0200 Subject: Core/Achievements: Fixed achievement criteria StartEvent and FailEvent * Criteria using StartEvent cannot be updated without that event triggering first (not only for timed achievements) * Implemented most StartEvent and FailEvent types * Fixed saving criteria removed by RemoveCriteriaProgress --- src/server/game/Achievements/AchievementMgr.cpp | 39 ------------------------- 1 file changed, 39 deletions(-) (limited to 'src/server/game/Achievements/AchievementMgr.cpp') diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index e223a9ae9dd..39328c9f9c2 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -98,13 +98,6 @@ bool AchievementMgr::CanUpdateCriteriaTree(Criteria const* criteria, CriteriaTre return false; } - if (achievement->InstanceID != -1 && referencePlayer->GetMapId() != uint32(achievement->InstanceID)) - { - TC_LOG_TRACE("criteria.achievement", "AchievementMgr::CanUpdateCriteriaTree: (Id: {} Type {} Achievement {}) Wrong map", - criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), achievement->ID); - return false; - } - if ((achievement->Faction == ACHIEVEMENT_FACTION_HORDE && referencePlayer->GetTeam() != HORDE) || (achievement->Faction == ACHIEVEMENT_FACTION_ALLIANCE && referencePlayer->GetTeam() != ALLIANCE)) { @@ -369,38 +362,6 @@ void PlayerAchievementMgr::SaveToDB(CharacterDatabaseTransaction trans) } } -void PlayerAchievementMgr::ResetCriteria(CriteriaFailEvent failEvent, int32 failAsset, bool evenIfCriteriaComplete) -{ - TC_LOG_DEBUG("criteria.achievement", "PlayerAchievementMgr::ResetCriteria({}, {}, {})", uint32(failEvent), failAsset, evenIfCriteriaComplete ? "true" : "false"); - - // Disable for GameMasters with GM-mode enabled or for players that don't have the related RBAC permission - if (_owner->IsGameMaster() || _owner->GetSession()->HasPermission(rbac::RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS)) - return; - - if (CriteriaList const* achievementCriteriaList = sCriteriaMgr->GetCriteriaByFailEvent(failEvent, failAsset)) - { - for (Criteria const* achievementCriteria : *achievementCriteriaList) - { - std::vector const* trees = sCriteriaMgr->GetCriteriaTreesByCriteria(achievementCriteria->ID); - bool allComplete = true; - for (CriteriaTree const* tree : *trees) - { - // don't update already completed criteria if not forced or achievement already complete - if (!(IsCompletedCriteriaTree(tree) && !evenIfCriteriaComplete) || !HasAchieved(tree->Achievement->ID)) - { - allComplete = false; - break; - } - } - - if (allComplete) - continue; - - RemoveCriteriaProgress(achievementCriteria); - } - } -} - void PlayerAchievementMgr::SendAllData(Player const* /*receiver*/) const { VisibleAchievementCheck filterInvisible; -- cgit v1.2.3