diff options
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 5e6534459e0..700e98902cd 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -397,14 +397,6 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData) } } - // 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; - } - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME); stmt->setString(0, createInfo->Name); @@ -556,6 +548,13 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData) return; } + // Check name uniqueness in the same step as saving to database + if (sCharacterCache->GetCharacterCacheByName(createInfo->Name)) + { + SendCharCreate(CHAR_CREATE_NAME_IN_USE); + return; + } + Player newChar(this); newChar.GetMotionMaster()->Initialize(); if (!newChar.Create(sObjectMgr->GetGenerator<HighGuid::Player>().Generate(), createInfo.get())) |