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)
This commit is contained in:
Hondacrx
2025-06-15 17:31:17 -04:00
parent 827c97a613
commit 0a135aa6f3
2 changed files with 23 additions and 14 deletions
+6 -5
View File
@@ -274,7 +274,7 @@ namespace Game.Entities
return false; 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); var overrides = m_overrideSpells.LookupByKey(spellInfo.Id);
if (!overrides.Empty()) if (!overrides.Empty())
@@ -285,12 +285,12 @@ namespace Game.Entities
{ {
SpellInfo newInfo = Global.SpellMgr.GetSpellInfo(spellId, GetMap().GetDifficultyID()); SpellInfo newInfo = Global.SpellMgr.GetSpellInfo(spellId, GetMap().GetDifficultyID());
if (newInfo != null) 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); } 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 // Check possible spell cast overrides
GetCastSpellInfoContext overrideContext = new(); var (overrideSpellInfo, overrideTriggerFlag) = castingUnit.GetCastSpellInfo(spellInfo);
spellInfo = castingUnit.GetCastSpellInfo(spellInfo, triggerFlag, overrideContext); spellInfo = overrideSpellInfo;
triggerFlag |= overrideTriggerFlag;
if (spellInfo.IsPassive()) if (spellInfo.IsPassive())
{ {
CancelPendingCastRequest(); CancelPendingCastRequest();
+17 -9
View File
@@ -944,9 +944,18 @@ namespace Game.Entities
spell.Finish(result); 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)) foreach (AuraEffect auraEffect in GetAuraEffectsByType(type))
{ {
@@ -967,26 +976,25 @@ namespace Game.Entities
triggerFlag &= ~TriggerCastFlags.IgnoreShapeshift; triggerFlag &= ~TriggerCastFlags.IgnoreShapeshift;
return info; return info;
} }
} }
} }
return null; return null;
} };
SpellInfo newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpells); SpellInfo newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpells, ref triggerFlag);
if (newInfo != null) if (newInfo != null)
{ {
triggerFlag &= ~TriggerCastFlags.IgnoreCastTime; 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) if (newInfo != null)
{ {
triggerFlag |= TriggerCastFlags.IgnoreCastTime; triggerFlag |= TriggerCastFlags.IgnoreCastTime;
return GetCastSpellInfo(newInfo, triggerFlag, context); return GetCastSpellInfo(newInfo, ref triggerFlag, context);
} }
return spellInfo; return spellInfo;
@@ -4644,7 +4652,7 @@ namespace Game.Entities
return true; return true;
} }
return false; return false;// no free slots left
} }
} }
} }