diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-07-21 19:57:15 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-07-21 19:57:15 +0200 |
commit | f50575ca77fd683ee265998c436a86d544df213a (patch) | |
tree | ec734424bcbabac8d14e966d13f551226f6f2e86 | |
parent | f773bf68e0f96a97b706f366da4071ba28060b04 (diff) |
Core/PlayerDump: Fixed overwriting cached character data on .pdump load when importing a character with duplicate name
-rw-r--r-- | src/server/game/Tools/PlayerDump.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 035548ad035..445ad5b3c41 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -925,17 +925,17 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s level = uint8(atoul(GetColumn(ts, line, "level").c_str())); if (name.empty()) { - // check if the original name already exists - name = GetColumn(ts, line, "name"); + // generate a temporary name + std::string guidPart = Trinity::StringFormat("%X", guid); + std::size_t maxCharsFromOriginalName = MAX_PLAYER_NAME - guidPart.length(); - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME); - stmt->setString(0, name); - PreparedQueryResult result = CharacterDatabase.Query(stmt); + name = GetColumn(ts, line, "name").substr(0, maxCharsFromOriginalName) + guidPart; // characters.at_login set to "rename on login" - if (result) - if (!ChangeColumn(ts, line, "at_login", "1")) - return DUMP_FILE_BROKEN; + if (!ChangeColumn(ts, line, "name", name)) + return DUMP_FILE_BROKEN; + if (!ChangeColumn(ts, line, "at_login", "1")) + return DUMP_FILE_BROKEN; } else if (!ChangeColumn(ts, line, "name", name)) // characters.name return DUMP_FILE_BROKEN; |