From f50575ca77fd683ee265998c436a86d544df213a Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 21 Jul 2020 19:57:15 +0200 Subject: Core/PlayerDump: Fixed overwriting cached character data on .pdump load when importing a character with duplicate name --- src/server/game/Tools/PlayerDump.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src') 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; -- cgit v1.2.3