Scripts/Spells: Implemented Priest talent Shadow Word: Death

Port From (https://github.com/TrinityCore/TrinityCore/commit/1b894be4330b1678c4de73716d5d7dcc6b94ac34)
This commit is contained in:
Hondacrx
2024-09-01 17:30:05 -04:00
parent 382b983820
commit 632548b3b8
+46
View File
@@ -153,6 +153,7 @@ namespace Scripts.Spells.Priest
public const uint SearingLight = 196811;
public const uint ShadowMendDamage = 186439;
public const uint ShadowWordDeath = 32379;
public const uint ShadowWordDeathDamage = 32409;
public const uint ShadowMendPeriodicDummy = 187464;
public const uint ShadowWordPain = 589;
public const uint ShieldDiscipline = 197045;
@@ -2991,6 +2992,51 @@ namespace Scripts.Spells.Priest
}
}
// 32379 - Shadow Word: Death
class spell_pri_shadow_word_death : SpellScript
{
static TimeSpan BACKLASH_DELAY = TimeSpan.FromSeconds(1);
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.ShadowWordDeathDamage)
&& ValidateSpellEffect((spellInfo.Id, 4));
}
void HandleDamageCalculation(Unit victim, ref int damage, ref int flatMod, ref float pctMod)
{
if (victim.HealthBelowPct(GetEffectInfo(1).CalcValue(GetCaster())))
MathFunctions.AddPct(ref pctMod, GetEffectInfo(2).CalcValue(GetCaster()));
}
void DetermineKillStatus(DamageInfo damageInfo, ref uint resistAmount, ref int absorbAmount)
{
bool killed = damageInfo.GetDamage() >= damageInfo.GetVictim().GetHealth();
if (!killed)
{
Unit caster = GetCaster();
int backlashDamage = (int)caster.CountPctFromMaxHealth(GetEffectInfo(4).CalcValue(caster));
var originalCastId = GetSpell().m_castId;
caster.m_Events.AddEventAtOffset(() =>
{
caster.CastSpell(caster, SpellIds.ShadowWordDeathDamage, new CastSpellExtraArgs()
.SetTriggerFlags(TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError)
.SetOriginalCastId(originalCastId)
.AddSpellMod(SpellValueMod.BasePoint0, backlashDamage));
}, BACKLASH_DELAY);
}
}
public override void Register()
{
CalcDamage.Add(new(HandleDamageCalculation));
// abuse OnCalculateResistAbsorb to determine if this spell will kill target or not (its still not perfect - happens before absorbs are applied)
OnCalculateResistAbsorb.Add(new(DetermineKillStatus));
}
}
[Script] // 109186 - Surge of Light
class spell_pri_surge_of_light : AuraScript
{