aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAqua Deus <95978183+aquadeus@users.noreply.github.com>2023-08-26 18:30:09 +0200
committerGitHub <noreply@github.com>2023-08-26 18:30:09 +0200
commit78531ed6bff3fb59c0e2367f06f2c628f12d98ed (patch)
tree159159c43f7c8de119a45da09d463deeb28685de /src
parentc9751eb7375b1caaef37ac5fccd1b82fad1177fa (diff)
Scripts/Spells: Implement Cheat Death (#29201)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp37
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);