diff options
Diffstat (limited to 'src/server/game/Cache/CharacterCache.cpp')
-rw-r--r-- | src/server/game/Cache/CharacterCache.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/server/game/Cache/CharacterCache.cpp b/src/server/game/Cache/CharacterCache.cpp index 20b0e1ffd9d..f424e5bd113 100644 --- a/src/server/game/Cache/CharacterCache.cpp +++ b/src/server/game/Cache/CharacterCache.cpp @@ -107,7 +107,8 @@ void CharacterCache::AddCharacterCacheEntry(ObjectGuid const& guid, uint32 accou data.IsDeleted = isDeleted; // Fill Name to Guid Store - _characterCacheByNameStore[name] = &data; + if (!isDeleted) + _characterCacheByNameStore[name] = &data; } void CharacterCache::DeleteCharacterCacheEntry(ObjectGuid const& guid, std::string const& name) @@ -186,16 +187,19 @@ void CharacterCache::UpdateCharacterArenaTeamId(ObjectGuid const& guid, uint8 sl itr->second.ArenaTeamId[slot] = arenaTeamId; } -void CharacterCache::UpdateCharacterInfoDeleted(ObjectGuid const& guid, bool deleted, std::string const* name /*=nullptr*/) +void CharacterCache::UpdateCharacterInfoDeleted(ObjectGuid const& guid, bool deleted, std::string const& name /*=nullptr*/) { auto itr = _characterCacheStore.find(guid); if (itr == _characterCacheStore.end()) return; - itr->second.IsDeleted = deleted; + if (deleted) + _characterCacheByNameStore.erase(itr->second.Name); + else + _characterCacheByNameStore[name] = &itr->second; - if (name) - itr->second.Name = *name; + itr->second.Name = name; + itr->second.IsDeleted = deleted; } /* |