diff --git a/Source/Game/Spells/Auras/AuraEffect.cs b/Source/Game/Spells/Auras/AuraEffect.cs index 48b522b37..cf0f100de 100644 --- a/Source/Game/Spells/Auras/AuraEffect.cs +++ b/Source/Game/Spells/Auras/AuraEffect.cs @@ -587,15 +587,12 @@ namespace Game.Spells { if (spell == null) return false; - // Check family name - if (spell.SpellFamilyName != m_spellInfo.SpellFamilyName) + + // Check family name and EffectClassMask + if (!spell.IsAffected(m_spellInfo.SpellFamilyName, GetSpellEffectInfo().SpellClassMask)) return false; - // Check EffectClassMask - if (GetSpellEffectInfo().SpellClassMask & spell.SpellFamilyFlags) - return true; - - return false; + return true; } void SendTickImmune(Unit target, Unit caster) diff --git a/Source/Game/Spells/SpellInfo.cs b/Source/Game/Spells/SpellInfo.cs index 9eb2fac66..a4e8986ec 100644 --- a/Source/Game/Spells/SpellInfo.cs +++ b/Source/Game/Spells/SpellInfo.cs @@ -597,6 +597,20 @@ namespace Game.Spells return !(HasAttribute(SpellAttr1.NoThreat) || HasAttribute(SpellAttr3.NoInitialAggro)); } + public bool IsAffected(SpellFamilyNames familyName, FlagArray128 familyFlags) + { + if (familyName == 0) + return true; + + if (familyName != SpellFamilyName) + return false; + + if (familyFlags && !(familyFlags & SpellFamilyFlags)) + return false; + + return true; + } + bool IsAffectedBySpellMods() { return !HasAttribute(SpellAttr3.NoDoneBonus); @@ -608,15 +622,10 @@ namespace Game.Spells return false; SpellInfo affectSpell = Global.SpellMgr.GetSpellInfo(mod.spellId); - // False if affect_spell == NULL or spellFamily not equal - if (affectSpell == null || affectSpell.SpellFamilyName != SpellFamilyName) + if (affectSpell == null) return false; - // true - if (mod.mask & SpellFamilyFlags) - return true; - - return false; + return IsAffected(affectSpell.SpellFamilyName, mod.mask); } public bool CanPierceImmuneAura(SpellInfo aura) diff --git a/Source/Game/Spells/SpellManager.cs b/Source/Game/Spells/SpellManager.cs index 760858102..bb69f2e2e 100644 --- a/Source/Game/Spells/SpellManager.cs +++ b/Source/Game/Spells/SpellManager.cs @@ -505,12 +505,9 @@ namespace Game.Entities if (eventInfo.GetTypeMask().HasAnyFlag(ProcFlags.PeriodicMask | ProcFlags.SpellMask)) { SpellInfo eventSpellInfo = eventInfo.GetSpellInfo(); - - if (procEntry.SpellFamilyName != 0 && eventSpellInfo != null && (procEntry.SpellFamilyName != eventSpellInfo.SpellFamilyName)) - return false; - - if (eventSpellInfo != null && !(procEntry.SpellFamilyMask & eventSpellInfo.SpellFamilyFlags)) - return false; + if (eventSpellInfo != null) + if (!eventSpellInfo.IsAffected(procEntry.SpellFamilyName, procEntry.SpellFamilyMask)) + return false; } // check spell type mask (if set)