Scripts/Spells: Fixed arcane barrage + explosion

This commit is contained in:
Matan Shukry
2021-04-06 09:02:00 +03:00
committed by Shauren
parent e2964dadf4
commit be8cbab4b3
4 changed files with 97 additions and 1 deletions

View File

@@ -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);