diff options
author | Shauren <shauren.trinity@gmail.com> | 2018-04-10 20:57:34 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-09-25 15:34:20 +0200 |
commit | 47630708f07b726cf8090c84cfa1d87b634609a0 (patch) | |
tree | b835dc7a46cb666b6e869d091468b7aca4590d3f /src/server/game/Handlers/CharacterHandler.cpp | |
parent | 9775b4353ed4fabb1b2be531df5028060f4bf70b (diff) |
Core/Players: Prevent creating characters with duplicate name by reserving name early in the process
Closes #21656
Closes #21809
(cherry picked from commit fdb2b90685ebc3852740c424170101a196c29ebb)
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 20652bb9fee..9410cc7174b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -704,6 +704,14 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact } std::shared_ptr<WorldPackets::Character::CharacterCreateInfo> createInfo = charCreate.CreateInfo; + // Reserve the name for the duration of callback chain + createInfo->NameToken = sCharacterCache->TryCreateCharacterWithName(createInfo->Name); + if (!createInfo->NameToken) + { + SendCharCreate(CHAR_CREATE_NAME_IN_USE); + return; + } + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME); stmt->setString(0, charCreate.CreateInfo->Name); |