diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index 08082c9f2..8b9cef7ba 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -2928,6 +2928,7 @@ namespace Game.Entities public void RemoveAurasWithMechanic(ulong mechanicMaskToRemove, AuraRemoveMode removeMode = AuraRemoveMode.Default, uint exceptSpellId = 0, bool withEffectMechanics = false) { + List aurasToUpdateTargets = new(); RemoveAppliedAuras(aurApp => { Aura aura = aurApp.GetBase(); @@ -2943,9 +2944,12 @@ namespace Game.Entities return true; // effect mechanic matches required mask for removal - don't remove, only update targets - aura.UpdateTargetMap(aura.GetCaster()); + aurasToUpdateTargets.Add(aura); return false; }, removeMode); + + foreach (Aura aura in aurasToUpdateTargets) + aura.UpdateTargetMap(aura.GetCaster()); } public void RemoveAurasDueToSpellBySteal(uint spellId, ObjectGuid casterGUID, WorldObject stealer, int stolenCharges = 1) { diff --git a/Source/Game/Spells/SpellInfo.cs b/Source/Game/Spells/SpellInfo.cs index b881b8f54..861f7ee5e 100644 --- a/Source/Game/Spells/SpellInfo.cs +++ b/Source/Game/Spells/SpellInfo.cs @@ -2439,15 +2439,19 @@ namespace Game.Spells target.RemoveAurasWithMechanic(mechanicImmunity, AuraRemoveMode.Default, Id); else { + List aurasToUpdateTargets = new(); target.RemoveAppliedAuras(aurApp => { Aura aura = aurApp.GetBase(); if ((aura.GetSpellInfo().GetAllEffectsMechanicMask() & mechanicImmunity) != 0) - aura.UpdateTargetMap(aura.GetCaster()); + aurasToUpdateTargets.Add(aura); // only update targets, don't remove anything return false; }); + + foreach (Aura aura in aurasToUpdateTargets) + aura.UpdateTargetMap(aura.GetCaster()); } } }