From 1fc1153f676f58eca908da1e9270d2aabfc93745 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 6 Feb 2024 16:05:00 -0500 Subject: [PATCH] Core/Players: Fixed CharacterCache by-name storage holding data for deleted characters Port From (https://github.com/TrinityCore/TrinityCore/commit/d03e0d69353852636e12911a7f7149cb0bca40ef) --- Source/Game/Cache/CharacterCache.cs | 17 +++++++++++------ Source/Game/Entities/Player/Player.DB.cs | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Source/Game/Cache/CharacterCache.cs b/Source/Game/Cache/CharacterCache.cs index 8d6db9595..b2e57bc26 100644 --- a/Source/Game/Cache/CharacterCache.cs +++ b/Source/Game/Cache/CharacterCache.cs @@ -51,7 +51,8 @@ namespace Game.Cache data.IsDeleted = isDeleted; // Fill Name to Guid Store - _characterCacheByNameStore[name] = data; + if (!isDeleted) + _characterCacheByNameStore[name] = data; _characterCacheStore[guid] = data; } @@ -92,7 +93,7 @@ namespace Game.Cache _characterCacheStore[guid].Sex = (Gender)gender; } - + public void UpdateCharacterLevel(ObjectGuid guid, byte level) { if (!_characterCacheStore.ContainsKey(guid)) @@ -125,14 +126,18 @@ namespace Game.Cache _characterCacheStore[guid].ArenaTeamId[slot] = arenaTeamId; } - public void UpdateCharacterInfoDeleted(ObjectGuid guid, bool deleted, string name = null) + public void UpdateCharacterInfoDeleted(ObjectGuid guid, bool deleted, string name) { - if (!_characterCacheStore.ContainsKey(guid)) + if (!_characterCacheStore.TryGetValue(guid, out var cacheEntry)) return; + if (deleted) + _characterCacheByNameStore.Remove(cacheEntry.Name); + else + _characterCacheByNameStore[name] = cacheEntry; + + _characterCacheStore[guid].Name = name; _characterCacheStore[guid].IsDeleted = deleted; - if (!name.IsEmpty()) - _characterCacheStore[guid].Name = name; } public bool HasCharacterCacheEntry(ObjectGuid guid) diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index 069343240..95397e49f 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -4521,7 +4521,7 @@ namespace Game.Entities stmt.AddValue(0, guid); trans.Append(stmt); - Global.CharacterCacheStorage.UpdateCharacterInfoDeleted(playerGuid, true); + Global.CharacterCacheStorage.UpdateCharacterInfoDeleted(playerGuid, true, ""); break; } default: