aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp78
1 files changed, 77 insertions, 1 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 5a2f88df076..2b4e8265606 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -33,6 +33,7 @@
enum MageSpells
{
+ SPELL_MAGE_ARCANE_BARRAGE_R3 = 321526,
SPELL_MAGE_BLAZING_BARRIER_TRIGGER = 235314,
SPELL_MAGE_CAUTERIZE_DOT = 87023,
SPELL_MAGE_CAUTERIZED = 87024,
@@ -64,7 +65,6 @@ enum MageSpells
SPELL_MAGE_ICY_VEINS = 12472,
SPELL_MAGE_CHAIN_REACTION_DUMMY = 278309,
SPELL_MAGE_CHAIN_REACTION = 278310,
- SPELL_MAGE_TOUCH_OF_THE_MAGI_AURA = 210824,
SPELL_MAGE_TOUCH_OF_THE_MAGI_EXPLODE = 210833,
};
@@ -76,6 +76,80 @@ enum MiscSpells
SPELL_MAGE_CHILLED = 205708
};
+// 44425 - Arcane Barrage
+class spell_mage_arcane_barrage : public SpellScript
+{
+ PrepareSpellScript(spell_mage_arcane_barrage);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_ARCANE_BARRAGE_R3 });
+ }
+
+ void HandleEffectHitTarget(SpellEffIndex /*effIndex*/)
+ {
+ // Consume all arcane charges; for each charge add 30% additional damage
+ Unit* caster = GetCaster();
+ double charges = double(-caster->ConsumeAllPower(POWER_ARCANE_CHARGES));
+
+ double currDamage = double(GetHitDamage());
+ double extraDamage = (charges * 0.3) * currDamage;
+ SetHitDamage(int32(currDamage + extraDamage));
+
+ if (Aura const* aura = caster->GetAura(SPELL_MAGE_ARCANE_BARRAGE_R3))
+ {
+ if (AuraEffect const* auraEffect = aura->GetEffect(EFFECT_0))
+ {
+ double pct = charges * (double(auraEffect->GetAmount()) * 0.01);
+ int32 maxMana = caster->GetMaxPower(POWER_MANA);
+
+ int32 extraMana = CalculatePct(double(maxMana), pct);
+ caster->ModifyPower(POWER_MANA, extraMana);
+ }
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mage_arcane_barrage::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+};
+
+// 1449 - Arcane Explosion
+class spell_mage_arcane_explosion : public SpellScript
+{
+ PrepareSpellScript(spell_mage_arcane_explosion);
+
+ void PreventEnergize(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ }
+
+ void HandleTargetHit(SpellEffIndex /*effIndex*/)
+ {
+ if (_once)
+ {
+ if (SpellEffectInfo const* effInfo = GetEffectInfo(EFFECT_0))
+ {
+ Unit* caster = GetCaster();
+ int32 value = effInfo->CalcValue(caster);
+ caster->ModifyPower(Powers(effInfo->MiscValue), value);
+ }
+ _once = false;
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mage_arcane_explosion::PreventEnergize, EFFECT_0, SPELL_EFFECT_ENERGIZE);
+ OnEffectHitTarget += SpellEffectFn(spell_mage_arcane_explosion::PreventEnergize, EFFECT_2, SPELL_EFFECT_ENERGIZE);
+ OnEffectHitTarget += SpellEffectFn(spell_mage_arcane_explosion::HandleTargetHit, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+
+private:
+ bool _once = true;
+};
+
// 235313 - Blazing Barrier
class spell_mage_blazing_barrier : public AuraScript
{
@@ -868,6 +942,8 @@ class spell_mage_water_elemental_freeze : public SpellScript
void AddSC_mage_spell_scripts()
{
+ RegisterSpellScript(spell_mage_arcane_barrage);
+ RegisterSpellScript(spell_mage_arcane_explosion);
RegisterAuraScript(spell_mage_blazing_barrier);
RegisterAuraScript(spell_mage_burning_determination);
RegisterSpellAndAuraScriptPair(spell_mage_cauterize, spell_mage_cauterize_AuraScript);