From 86e5c189a4be888cd924cc5078fa382282d2d494 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Fri, 11 Nov 2022 21:09:55 +0100 Subject: [PATCH] Core/Spells: greatly simplified Combustion's calculation and properly use its provided spellInfo data to determine eligible spells --- src/server/scripts/Spells/spell_mage.cpp | 49 ++++++++---------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 5f96e101a4..36671d5329 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -2078,14 +2078,10 @@ class spell_mage_combustion : public SpellScript { bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo( - { - SPELL_MAGE_COMBUSTION_DAMAGE, - SPELL_MAGE_LIVING_BOMB - }); + return ValidateSpellInfo({ SPELL_MAGE_COMBUSTION_DAMAGE }); } - void HandleDotEffect(SpellEffIndex /*effIndex*/) + void HandleScriptEffect(SpellEffIndex effIndex) { Unit* caster = GetCaster(); if (!caster) @@ -2093,41 +2089,30 @@ class spell_mage_combustion : public SpellScript Unit* target = GetHitUnit(); - int32 totalAmount = 0; + int32 basePoints = 0; + float scalingFactor = static_cast(GetEffectValue()); + for (AuraEffect const* aurEff : target->GetAuraEffectsByType(SPELL_AURA_PERIODIC_DAMAGE)) { - if (aurEff->GetCasterGUID() == caster->GetGUID() && aurEff->GetSpellInfo()->SpellFamilyFlags[2] & 0x00000008) - { - if (aurEff->GetSpellInfo()->Id == SPELL_MAGE_COMBUSTION_DAMAGE) - continue; + if (aurEff->GetCasterGUID() != caster->GetGUID() + || !(aurEff->GetSpellInfo()->GetSchoolMask() & SPELL_SCHOOL_MASK_FIRE) + || aurEff->GetSpellInfo()->SpellFamilyName != SPELLFAMILY_MAGE) + continue; - switch (aurEff->GetSpellInfo()->Id) - { - case SPELL_MAGE_IGNITE: - totalAmount += aurEff->GetAmount() / 2; - break; - case SPELL_MAGE_LIVING_BOMB: - case SPELL_MAGE_PYROBLAST: - case SPELL_MAGE_PYROBLAST_HOT_STREAK: - totalAmount += aurEff->GetAmount() / 3; - break; - default: - break; - } - } + // Only combine auras specified in the script effect's class mask + if (!aurEff->GetSpellInfo()->IsAffected(SPELLFAMILY_MAGE, GetSpellInfo()->Effects[effIndex].SpellClassMask)) + continue; + + basePoints = CalculatePct(aurEff->GetAmount(), scalingFactor); + if (basePoints > 0) + caster->CastSpell(target, SPELL_MAGE_COMBUSTION_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(basePoints)); } - - if (totalAmount) - caster->CastSpell(target, SPELL_MAGE_COMBUSTION_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(totalAmount)); } void Register() override { - OnEffectHitTarget.Register(&spell_mage_combustion::HandleDotEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHitTarget.Register(&spell_mage_combustion::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } - -private: - std::vector _fireDotEffects; }; // 44614 - Frostfire Bolt