rendered paste bodyIndex: src/game/CharacterHandler.cpp===================================================================--- src/game/CharacterHandler.cpp (revision 3636)+++ src/game/CharacterHandler.cpp (working copy)@@ -35,6 +35,9 @@ #include "Transports.h" #include "Group.h" +// check used symbols in playwer name at creating and rename+static std::string const notAllowedChars = "\t\v\b\f\a\n\r\\\0\"\'\? <>[](){}_=+-|/!@#$%^&*~`.,0123456789";+ void WorldSession::HandleCharEnumOpcode( WorldPacket & recv_data ) { // keys can be non cleared if player open realm list and close it by 'cancel'@@ -105,9 +108,6 @@ normalizePlayerName(name); - // check used symbols- static std::string const notAllowedChars = "\t\v\b\f\a\n\r\\\0\"\'\? <>[](){}_=+-|/!@#$%^&*~`.,0123456789";- if(name.find_first_of(notAllowedChars)!=name.npos) { data.Initialize( SMSG_CHAR_CREATE, 1 );@@ -686,3 +686,40 @@ else _player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK); }++void WorldSession::HandleChangePlayerNameOpcode(WorldPacket& recv_data)+{+ uint64 guid;+ std::string newname;+ + recv_data >> guid;+ recv_data >> newname;++ // prevent character rename to invalid name+ if(newname.size() != 0)/**************/+ {+ WorldPacket data( SMSG_CHAR_RENAME, 1 );+ data << (uint8)CHAR_NAME_INVALID_CHARACTER;+ SendPacket( &data );+ return;+ }++ normalizePlayerName(newname);++ if(newname.find_first_of(notAllowedChars)!=newname.npos)+ {+ WorldPacket data( SMSG_CHAR_RENAME, 1 );+ data << (uint8)CHAR_NAME_INVALID_CHARACTER;;+ SendPacket( &data );+ return;+ }++ sDatabase.escape_string(newname); + sDatabase.PQuery("UPDATE `character` set `name` = '%s' WHERE `guid` ='%u'", newname.c_str(), GUID_LOPART(guid)); ++ WorldPacket data(SMSG_CHAR_RENAME,1+8+(newname.size()+1));+ data << uint8(0);+ data << guid;+ data << newname;+ SendPacket(&data);+}Index: src/game/Chat.cpp===================================================================--- src/game/Chat.cpp (revision 3636)+++ src/game/Chat.cpp (working copy)@@ -283,6 +283,7 @@ { "ps", 3, &ChatHandler::HandlePlaySound2Command, "", NULL }, { "scn", 3, &ChatHandler::HandleSendChannelNotifyCommand,"", NULL }, { "scm", 3, &ChatHandler::HandleSendChatMsgCommand, "", NULL },+ { "rename", 2, &ChatHandler::HandleRenameCommand, "", NULL }, //! Development Commands { "setvalue", 3, &ChatHandler::HandleSetValue, "", NULL },Index: src/game/Chat.h===================================================================--- src/game/Chat.h (revision 3636)+++ src/game/Chat.h (working copy)@@ -299,6 +299,7 @@ bool HandleRemoveQuest(const char * args); bool HandleSaveAllCommand(const char* args); bool HandleGetItemState(const char * args);+ bool HandleRenameCommand(const char * args); Player* getSelectedPlayer(); Creature* getSelectedCreature();Index: src/game/Level2.cpp===================================================================--- src/game/Level2.cpp (revision 3636)+++ src/game/Level2.cpp (working copy)@@ -2608,3 +2608,48 @@ return true; } // HandleWpShowCommand++bool ChatHandler::HandleRenameCommand(const char* args)+{ + Player* target = NULL;+ uint64 targetGUID = 0;++ char* px = strtok((char*)args, " ");++ if (px)+ {+ std::string oldname = px;+ normalizePlayerName(oldname);+ target = objmgr.GetPlayer(oldname.c_str());++ if (!target)+ targetGUID = objmgr.GetPlayerGUIDByName(oldname.c_str());+ }++ if(!target && !targetGUID)+ {+ target = getSelectedPlayer();+ }++ if(!target && !targetGUID)+ {+ SendSysMessage(LANG_PLAYER_NOT_FOUND);+ return true;+ }++ if(target)+ {+ target->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_NEED_RENAME);+ }+ else+ {+ std::vector<std::string> values;+ Player::LoadValuesArrayFromDB(values, targetGUID);+ uint32 flags = Player::GetUInt32ValueFromArray(values, PLAYER_FLAGS);++ Player::SetUInt32ValueInArray(values,PLAYER_FLAGS, flags | PLAYER_FLAGS_NEED_RENAME);+ Player::SaveValuesArrayInDB(values,targetGUID);+ }++ return true;+}Index: src/game/MiscHandler.cpp===================================================================--- src/game/MiscHandler.cpp (revision 3636)+++ src/game/MiscHandler.cpp (working copy)@@ -1090,12 +1090,6 @@ GetPlayer()->SetUInt32Value( PLAYER_FIELD_BYTES, temp); } -void WorldSession::HandleChangePlayerNameOpcode(WorldPacket& recv_data)-{- // TODO- // need to be written-}- void WorldSession::HandleWardenDataOpcode(WorldPacket& recv_data) { CHECK_PACKET_SIZE(recv_data,1);Index: src/game/Player.h===================================================================--- src/game/Player.h (revision 3636)+++ src/game/Player.h (working copy)@@ -289,6 +289,7 @@ PLAYER_FLAGS_GM = 0x00000008, PLAYER_FLAGS_GHOST = 0x00000010, PLAYER_FLAGS_RESTING = 0x00000020,+ PLAYER_FLAGS_NEED_RENAME = 0x00000040, // if (flag) then need rename character on next login PLAYER_FLAGS_FFA_PVP = 0x00000080, PLAYER_FLAGS_UNK = 0x00000100, // show PvP in tooltip PLAYER_FLAGS_IN_PVP = 0x00000200,