summaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorAngelo Venturini <nefertum.dev@protonmail.com>2022-08-09 08:25:57 -0300
committerGitHub <noreply@github.com>2022-08-09 08:25:57 -0300
commit031dfc4c5baec027157a99deeab4dc4ff078cb52 (patch)
treedd61a55e6b0d40dbe18f4a19f209cebd2dc7da36 /src/server/scripts/Commands
parent5734630e7e3004d98b0c1a9165986ebe629238b8 (diff)
fix(Core/Commands): Achievement checkall (#12649)
Diffstat (limited to 'src/server/scripts/Commands')
-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;
}
};