diff options
author | Naddley <64811442+Naddley@users.noreply.github.com> | 2025-05-11 17:00:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-11 17:00:25 +0200 |
commit | 2c6ef0699f4dccd88c73de86ac878012b75321ab (patch) | |
tree | 32a6043359dc21afcecac840e9f11b92ba43d75d /src | |
parent | fc879ee87e725773c6e976bcfc07460a01438766 (diff) |
Scripts/Spells: Implement spell no NPC damage below override (#30932)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index f2186a1d072..8831ab23a0c 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5575,6 +5575,40 @@ class spell_gen_force_phase_update : public AuraScript } }; +class spell_gen_no_npc_damage_below_override : public AuraScript +{ +public: + spell_gen_no_npc_damage_below_override(float healthPct) : _healthPct(healthPct) {} + + static void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + amount = -1; + } + + void HandleAbsorb(AuraEffect const* /*aurEff*/, DamageInfo const& dmgInfo, uint32& absorbAmount) + { + if (!dmgInfo.GetAttacker() || !dmgInfo.GetAttacker()->IsCreature()) + { + PreventDefaultAction(); + return; + } + + if (GetTarget()->GetHealthPct() <= _healthPct) + absorbAmount = dmgInfo.GetDamage(); + else + PreventDefaultAction(); + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_no_npc_damage_below_override::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + OnEffectAbsorb += AuraEffectAbsorbFn(spell_gen_no_npc_damage_below_override::HandleAbsorb, EFFECT_0); + } + +private: + float _healthPct; +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_gen_absorb0_hitlimit1); @@ -5761,4 +5795,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_spatial_rift); RegisterAreaTriggerAI(at_gen_spatial_rift); RegisterSpellScript(spell_gen_force_phase_update); + RegisterSpellScriptWithArgs(spell_gen_no_npc_damage_below_override, "spell_gen_no_npc_damage_below_override_70", 70.0f); } |