summaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorSkjalf <47818697+Nyeriah@users.noreply.github.com>2022-10-24 22:43:46 -0300
committerGitHub <noreply@github.com>2022-10-24 22:43:46 -0300
commit192bf4736bd0c5c8e84751d2d17a7dbb2e2945f7 (patch)
tree8e39fa8d8f70ddecf1f6ece01f1c66eb94b8f8c2 /src/server/scripts/Commands
parente55d7cb95177dceb53f874d02cd2d4ee53229335 (diff)
feat(Scripts/Commands): Implement character changeaccount command (#13532)
* feat(Scripts/Commands): Implement character changeaccount command * strings and stuff * clear unused
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_character.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index e720cda0da..bd34f10bba 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -72,6 +72,7 @@ public:
{ "customize", HandleCharacterCustomizeCommand, SEC_GAMEMASTER, Console::Yes },
{ "changefaction", HandleCharacterChangeFactionCommand, SEC_GAMEMASTER, Console::Yes },
{ "changerace", HandleCharacterChangeRaceCommand, SEC_GAMEMASTER, Console::Yes },
+ { "changeaccount", HandleCharacterChangeAccountCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "check", characterCheckCommandTable },
{ "erase", HandleCharacterEraseCommand, SEC_CONSOLE, Console::Yes },
{ "deleted", characterDeletedCommandTable },
@@ -1061,6 +1062,55 @@ public:
handler->PSendSysMessage("--------------------------------------");
return true;
}
+
+ static bool HandleCharacterChangeAccountCommand(ChatHandler* handler, std::string accountName, Optional<PlayerIdentifier> player)
+ {
+ if (!player)
+ {
+ player = PlayerIdentifier::FromTargetOrSelf(handler);
+ }
+
+ if (!player)
+ {
+ handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (uint32 accountId = AccountMgr::GetId(accountName))
+ {
+ if (AccountMgr::GetCharactersCount(accountId) >= 10)
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_CHARACTER_LIST_FULL, accountName, accountId);
+ handler->SetSentErrorMessage(true);
+ return true;
+ }
+
+ if (CharacterCacheEntry const* cache = sCharacterCache->GetCharacterCacheByName(player->GetName()))
+ {
+ std::string accName;
+ AccountMgr::GetName(cache->AccountId, accName);
+ handler->PSendSysMessage(LANG_CMD_CHAR_CHANGE_ACC_SUCCESS, player->GetName(), player->GetGUID().GetCounter(), accName, cache->AccountId, accountName, accountId);
+ }
+
+ if (player->IsConnected())
+ {
+ player->GetConnectedPlayer()->GetSession()->KickPlayer("CMD char changeaccount");
+ }
+
+ CharacterDatabase.Query("UPDATE characters SET account = {} WHERE guid = {}", accountId, player->GetGUID().GetCounter());
+ sCharacterCache->UpdateCharacterAccountId(player->GetGUID(), accountId);
+
+ }
+ else
+ {
+ handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
+ handler->SetSentErrorMessage(true);
+ return true;
+ }
+
+ return true;
+ }
};
void AddSC_character_commandscript()