summaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_achievement.cpp28
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;
}
};