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 } } }