diff options
| author | Angelo Venturini <nefertum.dev@protonmail.com> | 2022-08-09 08:25:57 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-09 08:25:57 -0300 |
| commit | 031dfc4c5baec027157a99deeab4dc4ff078cb52 (patch) | |
| tree | dd61a55e6b0d40dbe18f4a19f209cebd2dc7da36 /src/server/scripts/Commands | |
| parent | 5734630e7e3004d98b0c1a9165986ebe629238b8 (diff) | |
fix(Core/Commands): Achievement checkall (#12649)
Diffstat (limited to 'src/server/scripts/Commands')
| -rw-r--r-- | src/server/scripts/Commands/cs_achievement.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp index 1fb43b2db5..070ae2d4f1 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<PlayerIdentifier> 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; } }; |
