From efad3a3123aee9347f2aaa3034550cd0b0543e60 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 30 Jun 2015 11:44:11 +0200 Subject: Core/Spells: Implemented CAST_FLAG_IMMUNITY --- src/server/game/Entities/Unit/Unit.cpp | 22 +++++++++++++++++++++- src/server/game/Entities/Unit/Unit.h | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'src/server/game/Entities/Unit') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b9d4650de47..34481449334 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11136,6 +11136,26 @@ bool Unit::IsImmunedToSpell(SpellInfo const* spellInfo) const return false; } +uint32 Unit::GetSchoolImmunityMask() const +{ + uint32 mask = 0; + SpellImmuneList const& mechanicList = m_spellImmune[IMMUNITY_SCHOOL]; + for (SpellImmuneList::const_iterator itr = mechanicList.begin(); itr != mechanicList.end(); ++itr) + mask |= itr->type; + + return mask; +} + +uint32 Unit::GetMechanicImmunityMask() const +{ + uint32 mask = 0; + SpellImmuneList const& mechanicList = m_spellImmune[IMMUNITY_MECHANIC]; + for (SpellImmuneList::const_iterator itr = mechanicList.begin(); itr != mechanicList.end(); ++itr) + mask |= (1 << itr->type); + + return mask; +} + bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const { if (!spellInfo || !spellInfo->Effects[index].IsEffect()) @@ -16464,7 +16484,7 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) data << float(-speedZ); // Z Movement speed (vertical) player->GetSession()->SendPacket(&data); - + if (player->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || player->HasAuraType(SPELL_AURA_FLY)) player->SetCanFly(true, true); } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 2593ca2c728..a61b406cbbd 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1958,6 +1958,8 @@ class Unit : public WorldObject void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply); void ApplySpellDispelImmunity(const SpellInfo* spellProto, DispelType type, bool apply); virtual bool IsImmunedToSpell(SpellInfo const* spellInfo) const; // redefined in Creature + uint32 GetSchoolImmunityMask() const; + uint32 GetMechanicImmunityMask() const; bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask) const; bool IsImmunedToDamage(SpellInfo const* spellInfo) const; -- cgit v1.2.3