aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/CharacterHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-04-10 20:57:34 +0200
committerShauren <shauren.trinity@gmail.com>2018-04-10 20:57:34 +0200
commitfdb2b90685ebc3852740c424170101a196c29ebb (patch)
treeb99fb1fa315ffc4e9d4bcd46262de685491a79dc /src/server/game/Handlers/CharacterHandler.cpp
parent4fa4b6df567eee2bef072f4faeb874d99faeef75 (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.cpp8
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);