bool Totem::IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index) const { switch(spellInfo->Effect[index]) { case SPELL_EFFECT_ATTACK_ME: // immune to any type of regeneration effects hp/mana etc. case SPELL_EFFECT_HEAL: case SPELL_EFFECT_HEAL_MAX_HEALTH: case SPELL_EFFECT_HEAL_MECHANICAL: case SPELL_EFFECT_HEAL_PCT: case SPELL_EFFECT_ENERGIZE: case SPELL_EFFECT_ENERGIZE_PCT: return true; default: break; } if (!IsPositiveSpell(spellInfo)) { // immune to all negative auras if (IsAuraApplyEffect(spellInfo, index)) return true; } else { // immune to any type of regeneration auras hp/mana etc. if (IsPeriodicRegenerateEffect(spellInfo, index)) return true; } return Creature::IsImmuneToSpellEffect(spellInfo, index); }
bool Totem::IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index) const { switch (spellInfo->SpellFamilyName) { //Check for Shaman Mana Spring & Healing Stream totems //They have periodic regenerate effect, but function close before it get //that check. This check - better way to fix this problem. case SPELLFAMILY_SHAMAN: if ( spellInfo->IsFitToFamilyMask(UI64LIT(0x000260CE000))) return false; break; default: break; } switch (spellInfo->Effect[index]) { case SPELL_EFFECT_ATTACK_ME: // immune to any type of regeneration effects hp/mana etc. case SPELL_EFFECT_HEAL: case SPELL_EFFECT_HEAL_MAX_HEALTH: case SPELL_EFFECT_HEAL_MECHANICAL: case SPELL_EFFECT_HEAL_PCT: case SPELL_EFFECT_ENERGIZE: case SPELL_EFFECT_ENERGIZE_PCT: return true; default: break; } if (!IsPositiveSpell(spellInfo)) { // immune to all negative auras if (IsAuraApplyEffect(spellInfo, index)) return true; } else { // immune to any type of regeneration auras hp/mana etc. if (IsPeriodicRegenerateEffect(spellInfo, index)) return true; } return Creature::IsImmuneToSpellEffect(spellInfo, index); }
bool Totem::IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index, bool castOnSelf) const { // Check for Mana Spring & Healing Stream totems switch (spellInfo->SpellFamilyName) { case SPELLFAMILY_SHAMAN: if (spellInfo->IsFitToFamilyMask(UI64LIT(0x00000002000)) || spellInfo->IsFitToFamilyMask(UI64LIT(0x00000004000))) return false; break; default: break; } switch (spellInfo->Effect[index]) { case SPELL_EFFECT_ATTACK_ME: // immune to any type of regeneration effects hp/mana etc. case SPELL_EFFECT_HEAL: case SPELL_EFFECT_HEAL_MAX_HEALTH: case SPELL_EFFECT_HEAL_MECHANICAL: case SPELL_EFFECT_HEAL_PCT: case SPELL_EFFECT_ENERGIZE: case SPELL_EFFECT_ENERGIZE_PCT: return true; default: break; } if (!IsPositiveSpell(spellInfo)) { // immune to all negative auras if (IsAuraApplyEffect(spellInfo, index)) return true; } else { // immune to any type of regeneration auras hp/mana etc. if (IsPeriodicRegenerateEffect(spellInfo, index)) return true; } return Creature::IsImmuneToSpellEffect(spellInfo, index, castOnSelf); }
bool Totem::IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index) const { if (!spellInfo) return true; // Author - Velvet. seems not fully correct, but usable. if (spellInfo->GetSpellFamilyFlags().test<CF_SHAMAN_MANA_SPRING, CF_SHAMAN_HEALING_STREAM, CF_SHAMAN_MISC_TOTEM_EFFECTS>()) return false; switch(spellInfo->Effect[index]) { case SPELL_EFFECT_ATTACK_ME: // immune to any type of regeneration effects hp/mana etc. case SPELL_EFFECT_HEAL: case SPELL_EFFECT_HEAL_MAX_HEALTH: case SPELL_EFFECT_HEAL_MECHANICAL: case SPELL_EFFECT_HEAL_PCT: case SPELL_EFFECT_ENERGIZE: case SPELL_EFFECT_ENERGIZE_PCT: return true; default: break; } if (!IsPositiveSpell(spellInfo)) { // immune to all negative auras if (IsAuraApplyEffect(spellInfo, index)) return true; } else { // immune to any type of regeneration auras hp/mana etc. if (IsPeriodicRegenerateEffect(spellInfo, index)) return true; } return Creature::IsImmuneToSpellEffect(spellInfo, index); }
bool Totem::IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index, bool castOnSelf) const { // Totem may affected by some specific spells // Mana Spring, Healing stream, Mana tide // Flags : 0x00000002000 | 0x00000004000 | 0x00004000000 -> 0x00004006000 if (spellInfo->SpellFamilyName == SPELLFAMILY_SHAMAN && spellInfo->IsFitToFamilyMask(uint64(0x00004006000))) return false; switch (spellInfo->Effect[index]) { case SPELL_EFFECT_ATTACK_ME: // immune to any type of regeneration effects hp/mana etc. case SPELL_EFFECT_HEAL: case SPELL_EFFECT_HEAL_MAX_HEALTH: case SPELL_EFFECT_HEAL_MECHANICAL: case SPELL_EFFECT_HEAL_PCT: case SPELL_EFFECT_ENERGIZE: case SPELL_EFFECT_ENERGIZE_PCT: return true; default: break; } if (!IsPositiveSpell(spellInfo)) { // immune to all negative auras if (IsAuraApplyEffect(spellInfo, index)) return true; } else { // immune to any type of regeneration auras hp/mana etc. if (IsPeriodicRegenerateEffect(spellInfo, index)) return true; } return Creature::IsImmuneToSpellEffect(spellInfo, index, castOnSelf); }