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:
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user