aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp50
1 files changed, 32 insertions, 18 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 2b4e8265606..73e9420699c 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -34,6 +34,7 @@
enum MageSpells
{
SPELL_MAGE_ARCANE_BARRAGE_R3 = 321526,
+ SPELL_MAGE_ARCANE_MAGE = 137021,
SPELL_MAGE_BLAZING_BARRIER_TRIGGER = 235314,
SPELL_MAGE_CAUTERIZE_DOT = 87023,
SPELL_MAGE_CAUTERIZED = 87024,
@@ -51,6 +52,7 @@ enum MageSpells
SPELL_MAGE_LIVING_BOMB_EXPLOSION = 44461,
SPELL_MAGE_LIVING_BOMB_PERIODIC = 217694,
SPELL_MAGE_MANA_SURGE = 37445,
+ SPELL_MAGE_REVERBERATE = 281482,
SPELL_MAGE_RING_OF_FROST_DUMMY = 91264,
SPELL_MAGE_RING_OF_FROST_FREEZE = 82691,
SPELL_MAGE_RING_OF_FROST_SUMMON = 113724,
@@ -120,34 +122,46 @@ class spell_mage_arcane_explosion : public SpellScript
{
PrepareSpellScript(spell_mage_arcane_explosion);
- void PreventEnergize(SpellEffIndex effIndex)
+ bool Validate(SpellInfo const* spellInfo) override
{
- PreventHitDefaultEffect(effIndex);
+ if (!ValidateSpellInfo({ SPELL_MAGE_ARCANE_MAGE, SPELL_MAGE_REVERBERATE }))
+ return false;
+
+ SpellEffectInfo const* damageEffect = spellInfo->GetEffect(EFFECT_1);
+ return damageEffect && damageEffect->IsEffect(SPELL_EFFECT_SCHOOL_DAMAGE);
}
- void HandleTargetHit(SpellEffIndex /*effIndex*/)
+ void CheckRequiredAuraForBaselineEnergize(SpellEffIndex effIndex)
{
- if (_once)
+ if (!GetUnitTargetCountForEffect(EFFECT_1) || !GetCaster()->HasAura(SPELL_MAGE_ARCANE_MAGE))
+ PreventHitDefaultEffect(effIndex);
+ }
+
+ void HandleReverberate(SpellEffIndex effIndex)
+ {
+ bool procTriggered = [&]()
{
- if (SpellEffectInfo const* effInfo = GetEffectInfo(EFFECT_0))
- {
- Unit* caster = GetCaster();
- int32 value = effInfo->CalcValue(caster);
- caster->ModifyPower(Powers(effInfo->MiscValue), value);
- }
- _once = false;
- }
+ Unit const* caster = GetCaster();
+ AuraEffect const* triggerChance = caster->GetAuraEffect(SPELL_MAGE_REVERBERATE, EFFECT_0);
+ if (!triggerChance)
+ return false;
+
+ AuraEffect const* requiredTargets = caster->GetAuraEffect(SPELL_MAGE_REVERBERATE, EFFECT_1);
+ if (!requiredTargets)
+ return false;
+
+ return GetUnitTargetCountForEffect(EFFECT_1) >= requiredTargets->GetAmount() && roll_chance_i(triggerChance->GetAmount());
+ }();
+
+ if (!procTriggered)
+ PreventHitDefaultEffect(effIndex);
}
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);
+ OnEffectHitTarget += SpellEffectFn(spell_mage_arcane_explosion::CheckRequiredAuraForBaselineEnergize, EFFECT_0, SPELL_EFFECT_ENERGIZE);
+ OnEffectHitTarget += SpellEffectFn(spell_mage_arcane_explosion::HandleReverberate, EFFECT_2, SPELL_EFFECT_ENERGIZE);
}
-
-private:
- bool _once = true;
};
// 235313 - Blazing Barrier