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); } }