Core/Spell: improved immunity logic for dispels

This commit is contained in:
hondacrx
2018-03-12 13:31:19 -04:00
parent 060bc0b7a8
commit 9af60df765
6 changed files with 24 additions and 24 deletions
+2 -2
View File
@@ -492,10 +492,10 @@ namespace Game.Spells
// check target immunities
for (byte effIndex = 0; effIndex < SpellConst.MaxEffects; ++effIndex)
{
if (unit.IsImmunedToSpellEffect(GetSpellInfo(), effIndex))
if (unit.IsImmunedToSpellEffect(GetSpellInfo(), effIndex, caster))
value &= (byte)~(1 << effIndex);
}
if (value == 0 || unit.IsImmunedToSpell(GetSpellInfo())
if (value == 0 || unit.IsImmunedToSpell(GetSpellInfo(), caster)
|| !CanBeAppliedOn(unit))
addUnit = false;
+3 -3
View File
@@ -1628,7 +1628,7 @@ namespace Game.Spells
// Check for effect immune skip if immuned
foreach (SpellEffectInfo effect in GetEffects())
if (effect != null && target.IsImmunedToSpellEffect(m_spellInfo, effect.EffectIndex))
if (effect != null && target.IsImmunedToSpellEffect(m_spellInfo, effect.EffectIndex, m_caster))
effectMask &= ~(uint)(1 << (int)effect.EffectIndex);
ObjectGuid targetGUID = target.GetGUID();
@@ -2102,14 +2102,14 @@ namespace Game.Spells
return SpellMissInfo.Evade;
// For delayed spells immunity may be applied between missile launch and hit - check immunity for that case
if (m_spellInfo.Speed != 0.0f && unit.IsImmunedToSpell(m_spellInfo))
if (m_spellInfo.Speed != 0.0f && unit.IsImmunedToSpell(m_spellInfo, m_caster))
return SpellMissInfo.Immune;
// disable effects to which unit is immune
SpellMissInfo returnVal = SpellMissInfo.Immune;
foreach (SpellEffectInfo effect in GetEffects())
if (effect != null && Convert.ToBoolean(effectMask & (1 << (int)effect.EffectIndex)))
if (unit.IsImmunedToSpellEffect(m_spellInfo, effect.EffectIndex))
if (unit.IsImmunedToSpellEffect(m_spellInfo, effect.EffectIndex, m_caster))
effectMask &= (uint)~(1 << (int)effect.EffectIndex);
if (effectMask == 0)