From 0a135aa6f3dc1ef3553416ffa73dde2bfcd179c0 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Sun, 15 Jun 2025 17:31:17 -0400 Subject: [PATCH] Core/Units: Refactor GetCastSpellInfo to return values via return value and hide internal lookup state tracker Port From (https://github.com/TrinityCore/TrinityCore/commit/e233079d2d8dbdc1bcd7beb593f047b26a6c4cc9) --- Source/Game/Entities/Player/Player.Spells.cs | 11 +++++---- Source/Game/Entities/Unit/Unit.Spells.cs | 26 +++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/Source/Game/Entities/Player/Player.Spells.cs b/Source/Game/Entities/Player/Player.Spells.cs index b30700014..70f8f46b4 100644 --- a/Source/Game/Entities/Player/Player.Spells.cs +++ b/Source/Game/Entities/Player/Player.Spells.cs @@ -274,7 +274,7 @@ namespace Game.Entities return false; } - public override SpellInfo GetCastSpellInfo(SpellInfo spellInfo, TriggerCastFlags triggerFlag, GetCastSpellInfoContext context) + public override SpellInfo GetCastSpellInfo(SpellInfo spellInfo, ref TriggerCastFlags triggerFlag, GetCastSpellInfoContext context) { var overrides = m_overrideSpells.LookupByKey(spellInfo.Id); if (!overrides.Empty()) @@ -285,12 +285,12 @@ namespace Game.Entities { SpellInfo newInfo = Global.SpellMgr.GetSpellInfo(spellId, GetMap().GetDifficultyID()); if (newInfo != null) - return GetCastSpellInfo(newInfo, triggerFlag, context); + return GetCastSpellInfo(newInfo, ref triggerFlag, context); } } } - return base.GetCastSpellInfo(spellInfo, triggerFlag, context); + return base.GetCastSpellInfo(spellInfo, ref triggerFlag, context); } public void SetOverrideSpellsId(uint overrideSpellsId) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.OverrideSpellsID), overrideSpellsId); } @@ -3889,8 +3889,9 @@ namespace Game.Entities } // Check possible spell cast overrides - GetCastSpellInfoContext overrideContext = new(); - spellInfo = castingUnit.GetCastSpellInfo(spellInfo, triggerFlag, overrideContext); + var (overrideSpellInfo, overrideTriggerFlag) = castingUnit.GetCastSpellInfo(spellInfo); + spellInfo = overrideSpellInfo; + triggerFlag |= overrideTriggerFlag; if (spellInfo.IsPassive()) { CancelPendingCastRequest(); diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index b0700ec2f..ecacab19c 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -944,9 +944,18 @@ namespace Game.Entities spell.Finish(result); } - public virtual SpellInfo GetCastSpellInfo(SpellInfo spellInfo, TriggerCastFlags triggerFlag, GetCastSpellInfoContext context) + public (SpellInfo, TriggerCastFlags) GetCastSpellInfo(SpellInfo spellInfo) { - SpellInfo findMatchingAuraEffectIn(AuraType type) + GetCastSpellInfoContext context = new(); + TriggerCastFlags triggerFlag = TriggerCastFlags.None; + + var newSpellInfo = GetCastSpellInfo(spellInfo, ref triggerFlag, context); + return (newSpellInfo, triggerFlag); + } + + public virtual SpellInfo GetCastSpellInfo(SpellInfo spellInfo, ref TriggerCastFlags triggerFlag, GetCastSpellInfoContext context) + { + SpellInfo findMatchingAuraEffectIn(AuraType type, ref TriggerCastFlags triggerFlag) { foreach (AuraEffect auraEffect in GetAuraEffectsByType(type)) { @@ -967,26 +976,25 @@ namespace Game.Entities triggerFlag &= ~TriggerCastFlags.IgnoreShapeshift; return info; - } } } return null; - } + }; - SpellInfo newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpells); + SpellInfo newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpells, ref triggerFlag); if (newInfo != null) { triggerFlag &= ~TriggerCastFlags.IgnoreCastTime; - return GetCastSpellInfo(newInfo, triggerFlag, context); + return GetCastSpellInfo(newInfo, ref triggerFlag, context); } - newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpellsTriggered); + newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpellsTriggered, ref triggerFlag); if (newInfo != null) { triggerFlag |= TriggerCastFlags.IgnoreCastTime; - return GetCastSpellInfo(newInfo, triggerFlag, context); + return GetCastSpellInfo(newInfo, ref triggerFlag, context); } return spellInfo; @@ -4644,7 +4652,7 @@ namespace Game.Entities return true; } - return false; + return false;// no free slots left } } }