diff options
author | Aqua Deus <95978183+aquadeus@users.noreply.github.com> | 2023-08-26 18:30:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-26 18:30:09 +0200 |
commit | 78531ed6bff3fb59c0e2367f06f2c628f12d98ed (patch) | |
tree | 159159c43f7c8de119a45da09d463deeb28685de /src | |
parent | c9751eb7375b1caaef37ac5fccd1b82fad1177fa (diff) |
Scripts/Spells: Implement Cheat Death (#29201)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index ac52ff3768a..ab79fba6484 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -42,6 +42,9 @@ enum RogueSpells SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK = 22482, SPELL_ROGUE_BROADSIDE = 193356, SPELL_ROGUE_BURIED_TREASURE = 199600, + SPELL_ROGUE_CHEAT_DEATH_DUMMY = 31231, + SPELL_ROGUE_CHEATED_DEATH = 45181, + SPELL_ROGUE_CHEATING_DEATH = 45182, SPELL_ROGUE_DEATH_FROM_ABOVE = 152150, SPELL_ROGUE_GRAND_MELEE = 193358, SPELL_ROGUE_GRAPPLING_HOOK = 195457, @@ -162,6 +165,39 @@ class spell_rog_blade_flurry : public AuraScript Unit* _procTarget = nullptr; }; +// 31230 - Cheat Death +class spell_rog_cheat_death : public AuraScript +{ + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ SPELL_ROGUE_CHEAT_DEATH_DUMMY, SPELL_ROGUE_CHEATED_DEATH, SPELL_ROGUE_CHEATING_DEATH }) + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); + } + + void HandleAbsorb(AuraEffect const* /*aurEff*/, DamageInfo const& /*dmgInfo*/, uint32& absorbAmount) + { + Unit* target = GetTarget(); + if (target->HasAura(SPELL_ROGUE_CHEATED_DEATH)) + { + absorbAmount = 0; + return; + } + + PreventDefaultAction(); + + target->CastSpell(target, SPELL_ROGUE_CHEAT_DEATH_DUMMY, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); + target->CastSpell(target, SPELL_ROGUE_CHEATED_DEATH, TRIGGERED_DONT_REPORT_CAST_ERROR); + target->CastSpell(target, SPELL_ROGUE_CHEATING_DEATH, TRIGGERED_DONT_REPORT_CAST_ERROR); + + target->SetHealth(target->CountPctFromMaxHealth(GetEffectInfo(EFFECT_1).CalcValue(target))); + } + + void Register() override + { + OnEffectAbsorb += AuraEffectAbsorbOverkillFn(spell_rog_cheat_death::HandleAbsorb, EFFECT_0); + } +}; + // 2818 - Deadly Poison class spell_rog_deadly_poison : public SpellScript { @@ -955,6 +991,7 @@ void AddSC_rogue_spell_scripts() { RegisterSpellScript(spell_rog_backstab); RegisterSpellScript(spell_rog_blade_flurry); + RegisterSpellScript(spell_rog_cheat_death); RegisterSpellScript(spell_rog_deadly_poison); RegisterSpellScript(spell_rog_envenom); RegisterSpellScript(spell_rog_eviscerate); |