diff options
| author | Skjalf <47818697+Nyeriah@users.noreply.github.com> | 2022-10-24 22:43:46 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-24 22:43:46 -0300 |
| commit | 192bf4736bd0c5c8e84751d2d17a7dbb2e2945f7 (patch) | |
| tree | 8e39fa8d8f70ddecf1f6ece01f1c66eb94b8f8c2 /src/server/scripts/Commands | |
| parent | e55d7cb95177dceb53f874d02cd2d4ee53229335 (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.cpp | 50 |
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() |
