From fbe09a92f960e24b90711b55f0d2f3a864605d3d Mon Sep 17 00:00:00 2001 From: thenecromancer Date: Wed, 20 Jan 2010 21:10:18 +0100 Subject: Allow spells with effect mechanic to allow apply other effects when effect with mechanic would be fail due to effect/state immunity. --HG-- branch : trunk --- src/game/Unit.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/game/Unit.cpp') diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 070cabbe563..915410430f3 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -10743,9 +10743,10 @@ bool Unit::IsImmunedToSpell(SpellEntry const* spellInfo) for (int i=0;i<3;++i) { // State/effect immunities applied by aura expect full spell immunity - // However function also check for mechanic, so ignore that for now - if (IsImmunedToSpellEffect(spellInfo, i, false)) - return true; + // Ignore effects with mechanic, they are supposed to be checked separately + if (!spellInfo->EffectMechanic[i]) + if (IsImmunedToSpellEffect(spellInfo, i)) + return true; } if (spellInfo->Id != 42292 && spellInfo->Id !=59752) @@ -10761,7 +10762,7 @@ bool Unit::IsImmunedToSpell(SpellEntry const* spellInfo) return false; } -bool Unit::IsImmunedToSpellEffect(SpellEntry const* spellInfo, uint32 index, bool checkMechanic) const +bool Unit::IsImmunedToSpellEffect(SpellEntry const* spellInfo, uint32 index) const { if (!spellInfo) return false; @@ -10772,15 +10773,12 @@ bool Unit::IsImmunedToSpellEffect(SpellEntry const* spellInfo, uint32 index, boo if (itr->type == effect) return true; - if (checkMechanic) + if (uint32 mechanic = spellInfo->EffectMechanic[index]) { - if (uint32 mechanic = spellInfo->EffectMechanic[index]) - { - SpellImmuneList const& mechanicList = m_spellImmune[IMMUNITY_MECHANIC]; - for (SpellImmuneList::const_iterator itr = mechanicList.begin(); itr != mechanicList.end(); ++itr) - if (itr->type == spellInfo->EffectMechanic[index]) - return true; - } + SpellImmuneList const& mechanicList = m_spellImmune[IMMUNITY_MECHANIC]; + for (SpellImmuneList::const_iterator itr = mechanicList.begin(); itr != mechanicList.end(); ++itr) + if (itr->type == spellInfo->EffectMechanic[index]) + return true; } if (uint32 aura = spellInfo->EffectApplyAuraName[index]) -- cgit v1.2.3