aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp82
1 files changed, 80 insertions, 2 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 8b50efa6ee0..5474d3d67df 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -68,7 +68,8 @@ enum MageSpells
SPELL_MAGE_T8_4P_BONUS = 64869,
SPELL_MAGE_MISSILE_BARRAGE = 44401,
SPELL_MAGE_FINGERS_OF_FROST_AURASTATE_AURA = 44544,
- SPELL_MAGE_PERMAFROST_AURA = 68391
+ SPELL_MAGE_PERMAFROST_AURA = 68391,
+ SPELL_MAGE_ARCANE_MISSILES_R1 = 5143
};
enum MageSpellIcons
@@ -106,6 +107,38 @@ class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript
}
};
+// -5143 - Arcane Missiles
+class spell_mage_arcane_missiles : public AuraScript
+{
+ PrepareAuraScript(spell_mage_arcane_missiles);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_T10_2P_BONUS, SPELL_MAGE_T10_2P_BONUS_EFFECT });
+ }
+
+ void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (target->HasAura(SPELL_MAGE_T10_2P_BONUS) && _canProcT10)
+ target->CastSpell(nullptr, SPELL_MAGE_T10_2P_BONUS_EFFECT, aurEff);
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_mage_arcane_missiles::OnRemove, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
+ }
+
+private:
+ bool _canProcT10 = false;
+
+public:
+ void AllowT10Proc()
+ {
+ _canProcT10 = true;
+ }
+};
+
// -31571 - Arcane Potency
class spell_mage_arcane_potency : public SpellScriptLoader
{
@@ -728,7 +761,6 @@ class spell_mage_focus_magic : public SpellScriptLoader
}
};
-// 44401 - Missile Barrage
// 48108 - Hot Streak
// 57761 - Fireball!
class spell_mage_gen_extra_effects : public SpellScriptLoader
@@ -1301,6 +1333,50 @@ class spell_mage_missile_barrage : public SpellScriptLoader
}
};
+// 44401 - Missile Barrage
+class spell_mage_missile_barrage_proc : public AuraScript
+{
+ PrepareAuraScript(spell_mage_missile_barrage_proc);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_T10_2P_BONUS, SPELL_MAGE_T8_4P_BONUS });
+ }
+
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ Unit* caster = eventInfo.GetActor();
+ // Prevent double proc for Arcane missiles
+ if (caster == eventInfo.GetProcTarget())
+ return false;
+
+ // Proc chance is unknown, we'll just use dummy aura amount
+ if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_MAGE_T8_4P_BONUS, EFFECT_0))
+ if (roll_chance_i(aurEff->GetAmount()))
+ return false;
+
+ return true;
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* caster = GetTarget();
+ if (caster->HasAura(SPELL_MAGE_T10_2P_BONUS))
+ if (Aura* aura = caster->GetAuraOfRankedSpell(SPELL_MAGE_ARCANE_MISSILES_R1))
+ if (spell_mage_arcane_missiles* missiles = aura->GetScript<spell_mage_arcane_missiles>(ScriptName))
+ missiles->AllowT10Proc();
+ }
+
+ void Register() override
+ {
+ DoCheckProc += AuraCheckProcFn(spell_mage_missile_barrage_proc::CheckProc);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_mage_missile_barrage_proc::OnRemove, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL);
+ }
+
+public:
+ static char constexpr const ScriptName[] = "spell_mage_arcane_missiles";
+};
+
enum SilvermoonPolymorph
{
NPC_AUROSALIA = 18744,
@@ -1398,6 +1474,7 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader
void AddSC_mage_spell_scripts()
{
new spell_mage_arcane_potency();
+ RegisterAuraScript(spell_mage_arcane_missiles);
new spell_mage_blast_wave();
new spell_mage_blazing_speed();
new spell_mage_burning_determination();
@@ -1427,6 +1504,7 @@ void AddSC_mage_spell_scripts()
new spell_mage_master_of_elements();
RegisterAuraScript(spell_mage_mirror_image);
new spell_mage_missile_barrage();
+ RegisterAuraScript(spell_mage_missile_barrage_proc);
new spell_mage_polymorph_cast_visual();
new spell_mage_summon_water_elemental();
}