From 031dfc4c5baec027157a99deeab4dc4ff078cb52 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Tue, 9 Aug 2022 08:25:57 -0300 Subject: [PATCH] fix(Core/Commands): Achievement checkall (#12649) --- .../scripts/Commands/cs_achievement.cpp | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp index 1fb43b2db..070ae2d4f 100644 --- a/src/server/scripts/Commands/cs_achievement.cpp +++ b/src/server/scripts/Commands/cs_achievement.cpp @@ -40,7 +40,7 @@ public: static ChatCommandTable achievementCommandTable = { { "add", HandleAchievementAddCommand, SEC_GAMEMASTER, Console::No }, - { "checkall", HandleAchievementCheckAllCommand, SEC_ADMINISTRATOR, Console::No } + { "checkall", HandleAchievementCheckAllCommand, SEC_ADMINISTRATOR, Console::Yes } }; static ChatCommandTable commandTable = { @@ -63,17 +63,33 @@ public: return true; } - static bool HandleAchievementCheckAllCommand(ChatHandler* handler) + static bool HandleAchievementCheckAllCommand(ChatHandler* handler, Optional player) { - Player* target = handler->getSelectedPlayer(); - if (!target) + if (!player) { - handler->SendSysMessage(LANG_NO_CHAR_SELECTED); + player = PlayerIdentifier::FromTarget(handler); + } + + if (!player) + { + handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); handler->SetSentErrorMessage(true); return false; } - target->CheckAllAchievementCriteria(); + if (player->IsConnected()) + { + if (Player* target = player->GetConnectedPlayer()) + target->CheckAllAchievementCriteria(); + } + else + { + auto* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); + stmt->SetData(0, uint16(AT_LOGIN_CHECK_ACHIEVS)); + stmt->SetData(1, player->GetGUID().GetCounter()); + CharacterDatabase.Execute(stmt); + } + return true; } };