aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-07-21 19:57:15 +0200
committerShauren <shauren.trinity@gmail.com>2020-07-21 19:57:15 +0200
commitf50575ca77fd683ee265998c436a86d544df213a (patch)
treeec734424bcbabac8d14e966d13f551226f6f2e86 /src
parentf773bf68e0f96a97b706f366da4071ba28060b04 (diff)
Core/PlayerDump: Fixed overwriting cached character data on .pdump load when importing a character with duplicate name
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Tools/PlayerDump.cpp16
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;