Scripts/Spells: Implement spell no NPC damage below override (#30932)

This commit is contained in:
Naddley
2025-05-11 17:00:25 +02:00
committed by GitHub
parent fc879ee87e
commit 2c6ef0699f
2 changed files with 44 additions and 0 deletions

View File

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