diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/database/Database/Implementation/CharacterDatabase.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 16 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 3 | ||||
-rw-r--r-- | src/server/game/World/World.h | 1 | ||||
-rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 10 |
5 files changed, 31 insertions, 1 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index ce01b0eb245..9a75a870c21 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -56,7 +56,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHAR_RACE, "SELECT race FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_LEVEL, "SELECT level FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_ZONE, "SELECT zone FROM characters WHERE guid = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_CHARACTER_NAME_DATA, "SELECT race, class, gender, level FROM characters WHERE guid = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_CHARACTER_NAME_DATA, "SELECT race, class, gender, level, name FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_POSITION_XYZ, "SELECT map, position_x, position_y, position_z FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_POSITION, "SELECT position_x, position_y, position_z, orientation, map, taxi_path FROM characters WHERE guid = ?", CONNECTION_SYNCH); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 786c708da93..4bc3e09caaf 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1370,6 +1370,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) uint8 plrRace = fields[0].GetUInt8(); uint8 plrClass = fields[1].GetUInt8(); uint8 plrGender = fields[2].GetUInt8(); + std::string plrName = fields[4].GetString(); if (!Player::ValidateAppearance(plrRace, plrClass, plrGender, customizeInfo.HairStyle, customizeInfo.HairColor, customizeInfo.Face, customizeInfo.FacialHair, customizeInfo.Skin, true)) { @@ -1398,6 +1399,13 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) return; } + // prevent character rename + if (sWorld->getBoolConfig(CONFIG_PREVENT_RENAME_CUSTOMIZATION) && (customizeInfo.Name != plrName)) + { + SendCharCustomize(CHAR_NAME_FAILURE, customizeInfo); + return; + } + // prevent character rename to invalid name if (!normalizePlayerName(customizeInfo.Name)) { @@ -1614,6 +1622,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) return; } + std::string oldName = nameData->Name; uint8 oldRace = nameData->Race; uint8 playerClass = nameData->Class; uint8 level = nameData->Level; @@ -1656,6 +1665,13 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) } } + // prevent character rename + if (sWorld->getBoolConfig(CONFIG_PREVENT_RENAME_CUSTOMIZATION) && (factionChangeInfo.Name != oldName)) + { + SendCharFactionChange(CHAR_NAME_FAILURE, factionChangeInfo); + return; + } + // prevent character rename to invalid name if (!normalizePlayerName(factionChangeInfo.Name)) { diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index b5c5b9f82b6..551fbfe5474 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1331,6 +1331,9 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_HOTSWAP_INSTALL_ENABLED] = sConfigMgr->GetBoolDefault("HotSwap.EnableInstall", true); m_bool_configs[CONFIG_HOTSWAP_PREFIX_CORRECTION_ENABLED] = sConfigMgr->GetBoolDefault("HotSwap.EnablePrefixCorrection", true); + // prevent character rename on character customization + m_bool_configs[CONFIG_PREVENT_RENAME_CUSTOMIZATION] = sConfigMgr->GetBoolDefault("PreventRenameCharacterOnCustomization", false); + // call ScriptMgr if we're reloading the configuration if (reload) sScriptMgr->OnConfigLoad(reload); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 4456b7a553e..a1ed807e311 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -175,6 +175,7 @@ enum WorldBoolConfigs CONFIG_HOTSWAP_BUILD_FILE_RECREATION_ENABLED, CONFIG_HOTSWAP_INSTALL_ENABLED, CONFIG_HOTSWAP_PREFIX_CORRECTION_ENABLED, + CONFIG_PREVENT_RENAME_CUSTOMIZATION, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index b832d0e8224..549ccd0cfc6 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -3029,6 +3029,16 @@ NoGrayAggro.Above = 0 NoGrayAggro.Below = 0 # +# PreventRenameCharacterOnCustomization +# Description: If option is set to 1, player can not rename the character in character customization. +# Applies to all character customization commands. +# Default: 0 - (Disabled, character can be renamed in Character Customization) +# 1 - (Enabled, character can not be renamed in Character Customization) +# + +PreventRenameCharacterOnCustomization = 0 + +# ################################################################################################### ################################################################################################### |