From ee6e74eb3c7c02425dd564e22bbec6318f8bfc6a Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 15 Sep 2024 15:55:45 -0300 Subject: [PATCH] fix(Scripts/Commands): Fix level up achievements not being granted (#19969) --- src/server/game/Handlers/CharacterHandler.cpp | 8 ++++++-- src/server/scripts/Commands/cs_character.cpp | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 4021d541f..77fe6a4c1 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -987,8 +987,12 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder const& holder) if (pCurrChar->HasAtLoginFlag(AT_LOGIN_CHECK_ACHIEVS)) { - pCurrChar->RemoveAtLoginFlag(AT_LOGIN_CHECK_ACHIEVS, true); - pCurrChar->CheckAllAchievementCriteria(); + // If we process the check while players are loading they won't be notified of the changes. + pCurrChar->m_Events.AddEventAtOffset([pCurrChar] + { + pCurrChar->RemoveAtLoginFlag(AT_LOGIN_CHECK_ACHIEVS, true); + pCurrChar->CheckAllAchievementCriteria(); + }, 1s); } bool firstLogin = pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index fc479a383..8e5311a65 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -23,6 +23,7 @@ Category: commandscripts EndScriptData */ #include "AccountMgr.h" +#include "AchievementMgr.h" #include "Chat.h" #include "CommandScript.h" #include "DBCStores.h" @@ -272,6 +273,8 @@ public: stmt->SetData(1, playerGuid.GetCounter()); CharacterDatabase.Execute(stmt); + sAchievementMgr->UpdateAchievementCriteriaForOfflinePlayer(playerGuid.GetCounter(), ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL); + sCharacterCache->UpdateCharacterLevel(playerGuid, newLevel); } }