From 56a90ee5cae7d878bec336e9b146493384cd3577 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 9 Sep 2021 13:44:56 -0400 Subject: [PATCH] Core/Spells: fix issues with delayed spells and auras Port From (https://github.com/TrinityCore/TrinityCore/commit/f420a439f92d3504c1e2c8e33f5f50e5ee4fdaee) --- Source/Game/Spells/Spell.cs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index 030f1b0b4..c4d511920 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -2895,42 +2895,40 @@ namespace Game.Spells // now recheck units targeting correctness (need before any effects apply to prevent adding immunity at first effect not allow apply second spell effect and similar cases) { - Func selectedCondition = target => + List delayedTargets = new(); + m_UniqueTargetInfo.RemoveAll(target => { if (single_missile || target.TimeDelay <= offset) { target.TimeDelay = offset; + delayedTargets.Add(target); return true; } else if (next_time == 0 || target.TimeDelay < next_time) next_time = target.TimeDelay; return false; - }; - List delayedTargets = new(); - delayedTargets.AddRange(m_UniqueTargetInfo.Where(selectedCondition)); - - m_UniqueTargetInfo.RemoveAll(new Predicate(selectedCondition)); + }); DoProcessTargetContainer(delayedTargets); } // now recheck gameobject targeting correctness { - Func selectedCondition = goTarget => + List delayedGOTargets = new(); + m_UniqueGOTargetInfo.RemoveAll(goTarget => { if (single_missile || goTarget.TimeDelay <= offset) { goTarget.TimeDelay = offset; + delayedGOTargets.Add(goTarget); return true; } else if (next_time == 0 || goTarget.TimeDelay < next_time) next_time = goTarget.TimeDelay; return false; - }; + }); - List delayedTargets = new(m_UniqueGOTargetInfo.Where(selectedCondition)); - - m_UniqueGOTargetInfo.RemoveAll(new Predicate(selectedCondition)); + DoProcessTargetContainer(delayedGOTargets); } FinishTargetProcessing();