From 1568798985fe2f8920d8897bd25ad068c0431dc2 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 15 Aug 2021 06:56:32 +0200 Subject: [PATCH] Core/Spells: fixed Glyph of Shadow Word: Death --- src/server/scripts/Spells/spell_priest.cpp | 40 +++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 44a53fc3da2..0fd92cf096f 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -25,6 +25,7 @@ #include "GridNotifiers.h" #include "Player.h" #include "SpellAuraEffects.h" +#include "SpellHistory.h" #include "SpellMgr.h" #include "SpellScript.h" #include "TemporarySummon.h" @@ -66,6 +67,7 @@ enum PriestSpells SPELL_PRIEST_GLYPH_OF_POWER_WORD_SHIELD_HEAL = 56160, SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL = 56161, SPELL_PRIEST_GLYPH_OF_SHADOW = 107906, + SPELL_PRIEST_GLYPH_OF_SHADOW_WORD_DEATH = 95652, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, SPELL_PRIEST_HOLY_WORD_CHASTISE = 88625, SPELL_PRIEST_HOLY_WORD_SANCTUARY = 88686, @@ -113,7 +115,8 @@ enum PriestSpellIcons PRIEST_ICON_ID_HARNESSED_SHADOWS = 554, PRIEST_ICON_ID_IMPROVED_MIND_BLAST = 95, PRIEST_ICON_ID_MIND_MELT = 3139, - PRIEST_ICON_ID_SHADOW_ORB = 4941 + PRIEST_ICON_ID_SHADOW_ORB = 4941, + PRIEST_ICON_ID_GLYPH_OF_SHADOW_WORD_DEATH = 1980 }; enum MiscSpells @@ -817,7 +820,11 @@ class spell_pri_shadow_word_death : public SpellScript { bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_PRIEST_SHADOW_WORD_DEATH }); + return ValidateSpellInfo( + { + SPELL_PRIEST_SHADOW_WORD_DEATH, + SPELL_PRIEST_GLYPH_OF_SHADOW_WORD_DEATH + }); } void HandleDamageBonus(SpellEffIndex /*effIndex*/) @@ -838,6 +845,8 @@ class spell_pri_shadow_word_death : public SpellScript if (AuraEffect const* effect = target->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_MIND_MELT, EFFECT_0)) AddPct(damage, effect->GetAmount()); } + + _launchHealthPct = target->GetHealthPct(); } SetEffectValue(damage); @@ -846,19 +855,42 @@ class spell_pri_shadow_word_death : public SpellScript void HandleSelfDamagingEffect(SpellEffIndex /*effIndex*/) { int32 damage = GetHitDamage(); + Unit* caster = GetCaster(); // Pain and Suffering reduces damage - if (AuraEffect* aurEff = GetCaster()->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_PAIN_AND_SUFFERING, EFFECT_1)) + if (AuraEffect* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_PAIN_AND_SUFFERING, EFFECT_1)) AddPct(damage, aurEff->GetAmount()); - GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, CastSpellExtraArgs(true).AddSpellBP0(damage)); + caster->CastSpell(caster, SPELL_PRIEST_SHADOW_WORD_DEATH, CastSpellExtraArgs(true).AddSpellBP0(damage)); + } + + void HandleGlyphEffect() + { + Unit* target = GetHitUnit(); + Unit* caster = GetCaster(); + + if (!target || !caster || caster == target) + return; + + if (AuraEffect const* glyphEffect = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_GLYPH_OF_SHADOW_WORD_DEATH, EFFECT_0)) + { + if (_launchHealthPct <= glyphEffect->GetAmount() && target->IsAlive() && !caster->HasAura(SPELL_PRIEST_GLYPH_OF_SHADOW_WORD_DEATH)) + { + caster->GetSpellHistory()->ResetCooldown(GetSpellInfo()->Id, true); + caster->CastSpell(caster, SPELL_PRIEST_GLYPH_OF_SHADOW_WORD_DEATH, true); // Cooldown marker + } + } } void Register() override { OnEffectLaunchTarget.Register(&spell_pri_shadow_word_death::HandleDamageBonus, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); OnEffectHitTarget.Register(&spell_pri_shadow_word_death::HandleSelfDamagingEffect, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + AfterHit.Register(&spell_pri_shadow_word_death::HandleGlyphEffect); + } +private: + float _launchHealthPct = 0.f; }; // 15473 - Shadowform