diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-09-21 13:38:55 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-09-21 13:38:55 +0200 |
commit | f2ff7fa68359724979c7c0c8085691d0aa383930 (patch) | |
tree | d308326ff83e7890d63210096cf882ba7f1aa673 /src | |
parent | 0e322fdbf40f91bd532bac045d46f69bd19416ae (diff) |
Scripts/Spells: fixed mage Deep Freeze ability
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 2154ce7af9e..2d0a40cd7b2 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -22,7 +22,43 @@ */ #include "ScriptMgr.h" +#include "Creature.h" +#include "SpellAuraEffects.h" +#include "SpellMgr.h" +#include "SpellScript.h" +#include "Unit.h" + +namespace Scripts::Spells::Mage +{ + // 71761 - Deep Freeze Immunity State + class spell_mage_deep_freeze_immunity_state : public AuraScript + { + bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) + { + // Though the tooltip states that any target that is permanently stun immune can take damage, only creatures can actually achieve such a state + // So we save ourselves some checks by filtering for creatures first + if (!eventInfo.GetProcTarget() || !eventInfo.GetProcTarget()->IsCreature()) + return false; + + // We check for permanent immunities first by checking for a DB set immunities value. + // If that check passes, we will check for the creature's current stun immunity to determine if we may proc or not. + if (CreatureImmunities const* immunities = SpellMgr::GetCreatureImmunities(eventInfo.GetProcTarget()->ToCreature()->GetCreatureTemplate()->CreatureImmunitiesId)) + if ((immunities->Mechanic.to_ulong() & (1 << MECHANIC_STUN)) != 0) + if ((eventInfo.GetProcTarget()->GetMechanicImmunityMask() & (1 << MECHANIC_STUN)) != 0) + return true; + + return false; + } + + void Register() override + { + DoCheckEffectProc += AuraCheckEffectProcFn(spell_mage_deep_freeze_immunity_state::CheckEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; +} void AddSC_mage_spell_scripts() { + using namespace Scripts::Spells::Mage; + RegisterSpellScript(spell_mage_deep_freeze_immunity_state); } |