mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-09 03:18:57 +01:00
Core/Spells: fixed Glyph of Shadow Word: Death
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user