diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index 3eebae4d8..0e3a67ac3 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -100,6 +100,11 @@ namespace PlayerNameMapHolder PlayerNameMap.erase(p->GetName()); } + void RemoveByName(std::string const& name) + { + PlayerNameMap.erase(name); + } + Player* Find(std::string const& name) { std::string charName(name); @@ -290,3 +295,9 @@ void ObjectAccessor::RemoveObject(Player* player) HashMapHolder::Remove(player); PlayerNameMapHolder::Remove(player); } + +void ObjectAccessor::UpdatePlayerNameMapReference(std::string oldname, Player* player) +{ + PlayerNameMapHolder::RemoveByName(oldname); + PlayerNameMapHolder::Insert(player); +} diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 41c3e0171..dd39251f0 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -106,6 +106,8 @@ namespace ObjectAccessor template<> void RemoveObject(Player* player); + + void UpdatePlayerNameMapReference(std::string oldname, Player* player); } #endif diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 3305748df..e720cda0d 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -381,6 +381,8 @@ public: { target->SetName(newName); + ObjectAccessor::UpdatePlayerNameMapReference(player->GetName(), target); + if (WorldSession* session = target->GetSession()) session->KickPlayer("HandleCharacterRenameCommand GM Command renaming character"); }