aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp36
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);
}