From 049e83c5760909ec6ee66574c52c9560ec2c8466 Mon Sep 17 00:00:00 2001 From: qwe900 Date: Mon, 27 May 2024 21:15:13 +0200 Subject: [PATCH] fix(Scripts/IcecrownCitadel): Gunship Cannons generates heat on Cast not on Hit (#18805) * Update boss_icecrown_gunship_battle.cpp Makes the Cannons on Gunship Blizzlike. They generate power (heat) on cast and not on Hit. Removes Engergize from Spell 69399 cause its only triggers on target->hit in core Still uses spellscript effect but on cast instead * Update boss_icecrown_gunship_battle.cpp --- .../boss_icecrown_gunship_battle.cpp | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 3f151ab85..2ec36b0f9 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -2383,20 +2383,45 @@ public: return GetCaster()->GetTypeId() == TYPEID_UNIT; } - void CheckEnergy() + void CalculatePower() { - if (GetCaster()->GetPower(POWER_ENERGY) >= 100) + Unit* caster = GetCaster(); + if (!caster) + return; + + SpellInfo const* spellInfo = GetSpellInfo(); + if (!spellInfo) + return; + + // Check if the effect is energize + if (spellInfo->Effects[EFFECT_1].Effect == SPELL_EFFECT_ENERGIZE) { - GetCaster()->CastSpell(GetCaster(), SPELL_OVERHEAT, true); - if (Vehicle* vehicle = GetCaster()->GetVehicleKit()) - if (Unit* passenger = vehicle->GetPassenger(0)) - sCreatureTextMgr->SendChat(GetCaster()->ToCreature(), SAY_OVERHEAT, passenger); + int32 energizeAmount = spellInfo->Effects[EFFECT_1].CalcValue(caster); + + // Apply the power gain directly to the caster + caster->ModifyPower(POWER_ENERGY, energizeAmount); } + + if (caster->GetPower(POWER_ENERGY) >= 100) + { + caster->CastSpell(caster, SPELL_OVERHEAT, true); + if (Vehicle* vehicle = caster->GetVehicleKit()) + if (Unit* passenger = vehicle->GetPassenger(0)) + sCreatureTextMgr->SendChat(caster->ToCreature(), SAY_OVERHEAT, passenger); + } + + } + + void PreventPowerGainOnHit(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); } void Register() override { - AfterHit += SpellHitFn(spell_igb_cannon_blast_SpellScript::CheckEnergy); + OnCast += SpellCastFn(spell_igb_cannon_blast_SpellScript::CalculatePower); + OnEffectHitTarget += SpellEffectFn(spell_igb_cannon_blast_SpellScript::PreventPowerGainOnHit, EFFECT_1, SPELL_EFFECT_ENERGIZE); + } };