diff options
Diffstat (limited to 'src/server/scripts')
| -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; } }; |
