diff options
| author | silinoron <none@none> | 2010-09-05 13:12:24 -0700 |
|---|---|---|
| committer | silinoron <none@none> | 2010-09-05 13:12:24 -0700 |
| commit | be7d94f24e77d3c5e98fd8790c810bb2f95327e9 (patch) | |
| tree | 21916cced4665501c3d2bdcdddeca91c15dbacfe /src/server/game/Chat | |
| parent | de59ac3bc36ebdd9cd87f6f12d640f5fc12ded5e (diff) | |
Add support for character race and faction transfers.
Based (loosely) on patch by Ner'zhul, DarkXuan, and darkshines@sakha.net.
Fixes issue #3429.
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Chat')
| -rw-r--r-- | src/server/game/Chat/Chat.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Chat/Chat.h | 2 | ||||
| -rw-r--r-- | src/server/game/Chat/Commands/Level2.cpp | 55 |
3 files changed, 67 insertions, 8 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 581145a1e5f..c41b34d817d 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -131,14 +131,16 @@ ChatCommand * ChatHandler::getCommandTable() static ChatCommand characterCommandTable[] = { - { "customize", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterCustomizeCommand, "", NULL }, - { "deleted", SEC_GAMEMASTER, true, NULL, "", characterDeletedCommandTable}, - { "erase", SEC_CONSOLE, true, &ChatHandler::HandleCharacterEraseCommand, "", NULL }, - { "level", SEC_ADMINISTRATOR, true, &ChatHandler::HandleCharacterLevelCommand, "", NULL }, - { "rename", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterRenameCommand, "", NULL }, - { "reputation", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterReputationCommand, "", NULL }, - { "titles", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterTitlesCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "customize", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterCustomizeCommand, "", NULL }, + { "changefaction", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterChangeFactionCommand, "", NULL }, + { "changerace", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterChangeRaceCommand, "", NULL }, + { "deleted", SEC_GAMEMASTER, true, NULL, "", characterDeletedCommandTable}, + { "erase", SEC_CONSOLE, true, &ChatHandler::HandleCharacterEraseCommand, "", NULL }, + { "level", SEC_ADMINISTRATOR, true, &ChatHandler::HandleCharacterLevelCommand, "", NULL }, + { "rename", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterRenameCommand, "", NULL }, + { "reputation", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterReputationCommand, "", NULL }, + { "titles", SEC_GAMEMASTER, true, &ChatHandler::HandleCharacterTitlesCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand channelSetCommandTable[] = diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index b966a76c622..052d3b66c35 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -138,6 +138,8 @@ class ChatHandler bool HandleCastTargetCommand(const char *args); bool HandleCharacterCustomizeCommand(const char * args); + bool HandleCharacterChangeFactionCommand(const char * args); + bool HandleCharacterChangeRaceCommand(const char * args); bool HandleCharacterDeletedDeleteCommand(const char* args); bool HandleCharacterDeletedListCommand(const char* args); bool HandleCharacterDeletedRestoreCommand(const char* args); diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp index 763726e79ae..838d3e861d9 100644 --- a/src/server/game/Chat/Commands/Level2.cpp +++ b/src/server/game/Chat/Commands/Level2.cpp @@ -3254,6 +3254,61 @@ bool ChatHandler::HandleCharacterCustomizeCommand(const char* args) return true; } +bool ChatHandler::HandleCharacterChangeFactionCommand(const char * args) +{ + Player* target; + uint64 target_guid; + std::string target_name; + + if(!extractPlayerTarget((char*)args,&target,&target_guid,&target_name)) + return false; + + if(target) + { + // TODO : add text into database + PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str()); + target->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION); + CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '64' WHERE guid = %u", target->GetGUIDLow()); + } + else + { + std::string oldNameLink = playerLink(target_name); + + // TODO : add text into database + PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid)); + CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '64' WHERE guid = %u", GUID_LOPART(target_guid)); + } + + return true; +} + +bool ChatHandler::HandleCharacterChangeRaceCommand(const char * args) +{ + Player* target; + uint64 target_guid; + std::string target_name; + if(!extractPlayerTarget((char*)args,&target,&target_guid,&target_name)) + return false; + + if(target) + { + // TODO : add text into database + PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str()); + target->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE); + CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '128' WHERE guid = %u", target->GetGUIDLow()); + } + else + { + std::string oldNameLink = playerLink(target_name); + + // TODO : add text into database + PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid)); + CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '128' WHERE guid = %u", GUID_LOPART(target_guid)); + } + + return true; +} + bool ChatHandler::HandleCharacterReputationCommand(const char* args) { Player* target; |
