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

@@ -0,0 +1,9 @@
-- Scriptname
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_gen_no_npc_damage_below_override_70';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(155893, 'spell_gen_no_npc_damage_below_override_70');
-- Template Addon
DELETE FROM `creature_template_addon` WHERE `entry` IN (128703 /*128703 (Vengeful Bones) - No NPC Damage Below Override Points%*/);
INSERT INTO `creature_template_addon` (`entry`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
(128703, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '155893'); -- 128703 (Vengeful Bones) - No NPC Damage Below Override Points%

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