aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 2d0a40cd7b2..f8ac3169e92 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -30,6 +30,12 @@
namespace Scripts::Spells::Mage
{
+ enum MageSpells
+ {
+ SPELL_MAGE_ARCANE_MISSILES = 5143,
+ SPELL_MAGE_ARCANE_MISSILES_AURASTATE = 79808
+ };
+
// 71761 - Deep Freeze Immunity State
class spell_mage_deep_freeze_immunity_state : public AuraScript
{
@@ -55,10 +61,64 @@ namespace Scripts::Spells::Mage
DoCheckEffectProc += AuraCheckEffectProcFn(spell_mage_deep_freeze_immunity_state::CheckEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
+
+ // 79684 - Offensive State (DND)
+ class spell_mage_offensive_state_dnd : public AuraScript
+ {
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_ARCANE_MISSILES });
+ }
+
+ bool CheckEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ // Only allow Arcane Missiles! to proc when the player has learned the according spell
+ if (!GetTarget()->HasSpell(SPELL_MAGE_ARCANE_MISSILES))
+ return false;
+
+ // Arcane Missiles cannot trigger itself
+ if ((eventInfo.GetSpellInfo()->SpellFamilyFlags[0] & (0x800 | 0x200000)) != 0)
+ return false;
+
+ return roll_chance_i(aurEff->GetAmount());
+ }
+
+ void Register() override
+ {
+ DoCheckEffectProc += AuraCheckEffectProcFn(spell_mage_offensive_state_dnd::CheckEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
+ }
+ };
+
+ // 79683 - Arcane Missiles!
+ class spell_mage_arcane_missiles : public AuraScript
+ {
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_ARCANE_MISSILES_AURASTATE });
+ }
+
+ void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(nullptr, SPELL_MAGE_ARCANE_MISSILES_AURASTATE, aurEff);
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(SPELL_MAGE_ARCANE_MISSILES_AURASTATE, GetCasterGUID());
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_mage_arcane_missiles::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectApplyFn(spell_mage_arcane_missiles::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
}
void AddSC_mage_spell_scripts()
{
using namespace Scripts::Spells::Mage;
RegisterSpellScript(spell_mage_deep_freeze_immunity_state);
+ RegisterSpellScript(spell_mage_offensive_state_dnd);
+ RegisterSpellScript(spell_mage_arcane_missiles);
}