aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/CharacterHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 7e44225f8da..09e945981af 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -58,6 +58,7 @@
#include "ReputationMgr.h"
#include "ScriptMgr.h"
#include "SocialMgr.h"
+#include "StringConvert.h"
#include "SystemPackets.h"
#include "Util.h"
#include "World.h"
@@ -2505,11 +2506,20 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
// Title conversion
if (!knownTitlesStr.empty())
{
+ std::vector<std::string_view> tokens = Trinity::Tokenize(knownTitlesStr, ' ', false);
std::vector<uint32> knownTitles;
- Tokenizer tokens(knownTitlesStr, ' ');
- for (uint32 index = 0; index < tokens.size(); ++index)
- knownTitles.push_back(atoul(tokens[index]));
+ for (std::string_view token : tokens)
+ {
+ if (Optional<uint32> thisMask = Trinity::StringTo<uint32>(token))
+ knownTitles.push_back(*thisMask);
+ else
+ {
+ TC_LOG_WARN("entities.player", "%s has invalid title data '%s' - skipped, this may result in titles being lost",
+ GetPlayerInfo().c_str(), std::string(token).c_str());
+ knownTitles.push_back(0);
+ }
+ }
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChangeTitles.begin(); it != sObjectMgr->FactionChangeTitles.end(); ++it)
{
@@ -2553,8 +2563,8 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
}
std::ostringstream ss;
- for (uint32 index = 0; index < knownTitles.size(); ++index)
- ss << knownTitles[index] << ' ';
+ for (uint32 mask : knownTitles)
+ ss << mask << ' ';
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE);
stmt->setString(0, ss.str());