diff options
| author | Shauren <shauren.trinity@gmail.com> | 2018-04-10 20:57:34 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-04-10 20:57:34 +0200 |
| commit | fdb2b90685ebc3852740c424170101a196c29ebb (patch) | |
| tree | b99fb1fa315ffc4e9d4bcd46262de685491a79dc /src/server/game/Handlers/CharacterHandler.cpp | |
| parent | 4fa4b6df567eee2bef072f4faeb874d99faeef75 (diff) | |
Core/Players: Prevent creating characters with duplicate name by reserving name early in the process
Closes #21656
Closes #21809
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 ec4873b35ed..5e6534459e0 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -397,6 +397,14 @@ 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); |
