diff options
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 60 | 
1 files changed, 34 insertions, 26 deletions
| diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 76fa55b4a1c..e2f7e32c46b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -7950,6 +7950,9 @@ int32 Unit::SpellBaseHealingBonusTaken(SpellSchoolMask schoolMask) const  bool Unit::IsImmunedToDamage(SpellSchoolMask schoolMask) const  { +    if (schoolMask == SPELL_SCHOOL_MASK_NONE) +        return false; +      // If m_immuneToSchool type contain this school type, IMMUNE damage.      uint32 schoolImmunityMask = GetSchoolImmunityMask();      if ((schoolImmunityMask & schoolMask) == schoolMask) // We need to be immune to all types @@ -7975,22 +7978,24 @@ bool Unit::IsImmunedToDamage(SpellInfo const* spellInfo) const      if (spellInfo->HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) || spellInfo->HasAttribute(SPELL_ATTR2_UNAFFECTED_BY_AURA_SCHOOL_IMMUNE))          return false; -    uint32 schoolMask = spellInfo->GetSchoolMask(); -    // If m_immuneToSchool type contain this school type, IMMUNE damage. -    uint32 schoolImmunityMask = 0; -    SpellImmuneContainer const& schoolList = m_spellImmune[IMMUNITY_SCHOOL]; -    for (auto itr = schoolList.begin(); itr != schoolList.end(); ++itr) -        if ((itr->first & schoolMask) && !spellInfo->CanPierceImmuneAura(sSpellMgr->GetSpellInfo(itr->second))) -            schoolImmunityMask |= itr->first; +    if (uint32 schoolMask = spellInfo->GetSchoolMask()) +    { +        // If m_immuneToSchool type contain this school type, IMMUNE damage. +        uint32 schoolImmunityMask = 0; +        SpellImmuneContainer const& schoolList = m_spellImmune[IMMUNITY_SCHOOL]; +        for (auto itr = schoolList.begin(); itr != schoolList.end(); ++itr) +            if ((itr->first & schoolMask) && !spellInfo->CanPierceImmuneAura(sSpellMgr->GetSpellInfo(itr->second))) +                schoolImmunityMask |= itr->first; -    // // We need to be immune to all types -    if ((schoolImmunityMask & schoolMask) == schoolMask) -        return true; +        // // We need to be immune to all types +        if ((schoolImmunityMask & schoolMask) == schoolMask) +            return true; -    // If m_immuneToDamage type contain magic, IMMUNE damage. -    uint32 damageImmunityMask = GetDamageImmunityMask(); -    if ((damageImmunityMask & schoolMask) == schoolMask) // We need to be immune to all types -        return true; +        // If m_immuneToDamage type contain magic, IMMUNE damage. +        uint32 damageImmunityMask = GetDamageImmunityMask(); +        if ((damageImmunityMask & schoolMask) == schoolMask) // We need to be immune to all types +            return true; +    }      return false;  } @@ -8041,21 +8046,24 @@ bool Unit::IsImmunedToSpell(SpellInfo const* spellInfo, Unit* caster) const      if (immuneToAllEffects) //Return immune only if the target is immune to all spell effects.          return true; -    uint32 schoolImmunityMask = 0; -    SpellImmuneContainer const& schoolList = m_spellImmune[IMMUNITY_SCHOOL]; -    for (auto itr = schoolList.begin(); itr != schoolList.end(); ++itr) +    if (uint32 schoolMask = spellInfo->GetSchoolMask())      { -        if ((itr->first & spellInfo->GetSchoolMask()) == 0) -            continue; +        uint32 schoolImmunityMask = 0; +        SpellImmuneContainer const& schoolList = m_spellImmune[IMMUNITY_SCHOOL]; +        for (auto itr = schoolList.begin(); itr != schoolList.end(); ++itr) +        { +            if ((itr->first & schoolMask) == 0) +                continue; -        SpellInfo const* immuneSpellInfo = sSpellMgr->GetSpellInfo(itr->second); -        if (!(immuneSpellInfo && immuneSpellInfo->IsPositive() && spellInfo->IsPositive() && caster && IsFriendlyTo(caster))) -            if (!spellInfo->CanPierceImmuneAura(immuneSpellInfo)) -                schoolImmunityMask |= itr->first; -    } +            SpellInfo const* immuneSpellInfo = sSpellMgr->GetSpellInfo(itr->second); +            if (!(immuneSpellInfo && immuneSpellInfo->IsPositive() && spellInfo->IsPositive() && caster && IsFriendlyTo(caster))) +                if (!spellInfo->CanPierceImmuneAura(immuneSpellInfo)) +                    schoolImmunityMask |= itr->first; +        } -    if ((schoolImmunityMask & spellInfo->GetSchoolMask()) == spellInfo->GetSchoolMask()) -        return true; +        if ((schoolImmunityMask & schoolMask) == schoolMask) +            return true; +    }      return false;  } | 
