diff options
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp | 23 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 6 | ||||
-rw-r--r-- | src/server/game/World/World.h | 6 | ||||
-rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 31 |
4 files changed, 52 insertions, 14 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp index 0cd7fd98445..e777071b306 100644 --- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp @@ -175,7 +175,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket & recv_data) if (GetSecurity() == SEC_PLAYER) { - if (uint32 mask = sWorld.getIntConfig(CONFIG_CHARACTERS_CREATING_DISABLED)) + if (uint32 mask = sWorld.getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED)) { bool disabled = false; @@ -224,6 +224,25 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket & recv_data) return; } + if (GetSecurity() == SEC_PLAYER) + { + uint32 raceMaskDisabled = sWorld.getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK); + if ((1 << (race_ - 1)) & raceMaskDisabled) + { + data << uint8(CHAR_CREATE_DISABLED); + SendPacket(&data); + return; + } + + uint32 classMaskDisabled = sWorld.getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK); + if ((1 << (class_ - 1)) & classMaskDisabled) + { + data << uint8(CHAR_CREATE_DISABLED); + SendPacket(&data); + return; + } + } + // prevent character creating with invalid name if (!normalizePlayerName(name)) { @@ -295,7 +314,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket & recv_data) } // speedup check for heroic class disabled case - uint32 req_level_for_heroic = sWorld.getIntConfig(CONFIG_MIN_LEVEL_FOR_HEROIC_CHARACTER_CREATING); + uint32 req_level_for_heroic = sWorld.getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER); if (GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT && req_level_for_heroic > sWorld.getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) { data << (uint8)CHAR_CREATE_LEVEL_REQUIREMENT; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 1988f667dc6..06ec2e20077 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -705,7 +705,9 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_MIN_PET_NAME] = 2; } - m_int_configs[CONFIG_CHARACTERS_CREATING_DISABLED] = sConfig.GetIntDefault ("CharactersCreatingDisabled", 0); + m_int_configs[CONFIG_CHARACTER_CREATING_DISABLED] = sConfig.GetIntDefault("CharacterCreating.Disabled", 0); + m_int_configs[CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK] = sConfig.GetIntDefault("CharacterCreating.Disabled.RaceMask", 0); + m_int_configs[CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK] = sConfig.GetIntDefault("CharacterCreating.Disabled.ClassMask", 0); m_int_configs[CONFIG_CHARACTERS_PER_REALM] = sConfig.GetIntDefault("CharactersPerRealm", 10); if (m_int_configs[CONFIG_CHARACTERS_PER_REALM] < 1 || m_int_configs[CONFIG_CHARACTERS_PER_REALM] > 10) @@ -729,7 +731,7 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_HEROIC_CHARACTERS_PER_REALM] = 1; } - m_int_configs[CONFIG_MIN_LEVEL_FOR_HEROIC_CHARACTER_CREATING] = sConfig.GetIntDefault("MinLevelForHeroicCharacterCreating", 55); + m_int_configs[CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER] = sConfig.GetIntDefault("CharacterCreating.MinLevelForHeroicCharacter", 55); m_int_configs[CONFIG_SKIP_CINEMATICS] = sConfig.GetIntDefault("SkipCinematics", 0); if (int32(m_int_configs[CONFIG_SKIP_CINEMATICS]) < 0 || m_int_configs[CONFIG_SKIP_CINEMATICS] > 2) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index cf72cd01519..dc04e38e45f 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -202,11 +202,13 @@ enum WorldIntConfigs CONFIG_MIN_PLAYER_NAME, CONFIG_MIN_CHARTER_NAME, CONFIG_MIN_PET_NAME, - CONFIG_CHARACTERS_CREATING_DISABLED, + CONFIG_CHARACTER_CREATING_DISABLED, + CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK, + CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK, CONFIG_CHARACTERS_PER_ACCOUNT, CONFIG_CHARACTERS_PER_REALM, CONFIG_HEROIC_CHARACTERS_PER_REALM, - CONFIG_MIN_LEVEL_FOR_HEROIC_CHARACTER_CREATING, + CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER, CONFIG_SKIP_CINEMATICS, CONFIG_MAX_PLAYER_LEVEL, CONFIG_MIN_DUALSPEC_LEVEL, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 1a8edbce36b..4f05fa8cec7 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -695,7 +695,11 @@ ChatLogTimestamp = 0 # Minimal name length (1..12) # Default: 2 # -# CharactersCreatingDisabled +# MaxWhoListReturns +# Set the max number of players returned in the /who list and interface. +# Default: 49 (stable) +# +# CharacterCreating.Disabled # Disable characters creating for specific team or any # (non-player accounts not affected) # Default: 0 - enabled @@ -703,9 +707,19 @@ ChatLogTimestamp = 0 # 2 - disabled only for Horde # 3 - disabled for both teams # -# MaxWhoListReturns -# Set the max number of players returned in the /who list and interface. -# Default: 49 (stable) +# CharacterCreating.Disabled.RaceMask +# Mask of races which cannot be created (ignored for GM accounts). +# Default: 0 - all races are enabled +# Check http://www.trinitycore.info/index.php/Characters_tc2#race +# for race mask values. +# Example: 1536 = 1024 + 512 - Blood Elf and Draenei races are disabled. +# +# CharacterCreating.Disabled.ClassMask +# Mask of classes which cannot be created (ignored for GM accounts). +# Default: 0 - all classes are enabled +# Check http://www.trinitycore.info/index.php/Characters_tc2#class +# for class mask values. +# Example: 288 = 32 + 256 - Death Knight and Warlock classes are disabled. # # CharactersPerAccount # Limit numbers of characters per account (at all realms). @@ -724,14 +738,13 @@ ChatLogTimestamp = 0 # Default: 1 # The number must be between 0 (not allowed) and 10 # -# MinLevelForHeroicCharacterCreating +# CharacterCreating.MinLevelForHeroicCharacter # Limit creating heroic characters only for account with another # character of specific level (ignored for GM accounts) # 0 - not require any existed chaarcter # 1 - require at least any character existed # Default: 55 - default requirement # -# # SkipCinematics # Disable in-game script movie at first character's login # (allows to prevent buggy intro in case of custom start @@ -962,11 +975,13 @@ MaxWhoListReturns = 49 MinPlayerName = 2 MinCharterName = 2 MinPetName = 2 -CharactersCreatingDisabled = 0 +CharacterCreating.Disabled = 0 +CharacterCreating.Disabled.RaceMask = 0 +CharacterCreating.Disabled.ClassMask = 0 CharactersPerAccount = 50 CharactersPerRealm = 10 HeroicCharactersPerRealm = 1 -MinLevelForHeroicCharacterCreating = 55 +CharacterCreating.MinLevelForHeroicCharacter = 55 SkipCinematics = 0 MaxPlayerLevel = 80 MinDualSpecLevel = 40 |