From 20232c9cd81864d9cd5b14c02a7a3e7bebb59c80 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 16 Nov 2019 15:09:59 +0100 Subject: [PATCH] Core/Spells: improved Fulmination damage effect handling and fixed logic mistakes within the calculation --- src/server/scripts/Spells/spell_shaman.cpp | 33 +++++++++++----------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index d74b98921e5..cc5ff88e9c6 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -1545,35 +1545,34 @@ class spell_sha_earth_shock : public SpellScript void HandleFulmination(SpellEffIndex /*effIndex*/) { Unit* caster = GetCaster(); - - Unit* target = GetExplTargetUnit(); + Unit* target = GetHitUnit(); if (!target) return; - AuraEffect const* fulminationEffect = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_FULMINATION, EFFECT_0); - if (!fulminationEffect) - return; - - Aura* lightningShieldAura = caster->GetAura(SPELL_SHAMAN_LIGHTNING_SHIELD); - if (!lightningShieldAura) - return; - - if (uint8 surplousCharges = std::max(0, (lightningShieldAura->GetCharges() - fulminationEffect->GetAmount()))) + if (AuraEffect const* fulminationEffect = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_FULMINATION, EFFECT_0)) { - if (SpellInfo const* shieldDamageSpell = sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LIGHTNING_SHIELD_DAMAGE)) + if (Aura* lightningShieldAura = caster->GetAura(SPELL_SHAMAN_LIGHTNING_SHIELD, caster->GetGUID())) { - lightningShieldAura->SetCharges(fulminationEffect->GetAmount()); - int32 basepoints = (shieldDamageSpell->Effects[EFFECT_0].CalcValue() + caster->SpellDamageBonusDone(target, shieldDamageSpell, 0, SPELL_DIRECT_DAMAGE, EFFECT_0)) * surplousCharges; - caster->CastCustomSpell(SPELL_SHAMAN_FULMINATION_DAMAGE, SPELLVALUE_BASE_POINT0, basepoints, target, true); + uint8 surplousCharges = std::max(0, lightningShieldAura->GetCharges() - fulminationEffect->GetAmount()); + if (surplousCharges) + { + SpellInfo const* lightningShieldSpell = sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_LIGHTNING_SHIELD_DAMAGE); + lightningShieldAura->SetCharges(fulminationEffect->GetAmount()); - caster->RemoveAurasDueToSpell(SPELL_SHAMAN_FULMINATION_PROC); + int32 bp = lightningShieldSpell->Effects[EFFECT_0].CalcValue(caster, nullptr, target); + bp = caster->SpellDamageBonusDone(target, lightningShieldSpell, bp, SPELL_DIRECT_DAMAGE, EFFECT_0); + bp *= surplousCharges; + + caster->CastCustomSpell(SPELL_SHAMAN_FULMINATION_DAMAGE, SPELLVALUE_BASE_POINT0, bp, target, true); + caster->RemoveAurasDueToSpell(SPELL_SHAMAN_FULMINATION_PROC); + } } } } void Register() override { - OnEffectLaunch += SpellEffectFn(spell_sha_earth_shock::HandleFulmination, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); + OnEffectLaunchTarget += SpellEffectFn(spell_sha_earth_shock::HandleFulmination, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); } };