Scripts/Spells: Implemented Priest talent Sanctuary

Port From (https://github.com/TrinityCore/TrinityCore/commit/c7149492d3cc2403b90f2ff03e83c3d89e38cb2e)
This commit is contained in:
Hondacrx
2024-08-25 20:52:16 -04:00
parent 22ec091beb
commit 9ad961e64a
+82
View File
@@ -143,6 +143,9 @@ namespace Scripts.Spells.Priest
public const uint RenewedHope = 197469;
public const uint RenewedHopeEffect = 197470;
public const uint RevelInPurity = 373003;
public const uint Sanctuary = 231682;
public const uint SanctuaryAbsorb = 208771;
public const uint SanctuaryAura = 208772;
public const uint RhapsodyProc = 390636;
public const uint SayYourPrayers = 391186;
public const uint Schism = 424509;
@@ -2757,6 +2760,85 @@ namespace Scripts.Spells.Priest
}
}
[Script] // 208771 - Sanctuary (Absorb)
class spell_pri_sanctuary_absorb : AuraScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.SanctuaryAura);
}
void CalcAbsorbAmount(AuraEffect aurEff, DamageInfo dmgInfo, ref uint absorbAmount)
{
PreventDefaultAction();
Unit attacker = dmgInfo.GetAttacker();
if (attacker == null)
return;
AuraEffect amountHolderEffect = attacker.GetAuraEffect(SpellIds.SanctuaryAura, 0, GetCasterGUID());
if (amountHolderEffect == null)
return;
if (dmgInfo.GetDamage() >= amountHolderEffect.GetAmount())
{
amountHolderEffect.GetBase().Remove(AuraRemoveMode.EnemySpell);
dmgInfo.AbsorbDamage((uint)amountHolderEffect.GetAmount());
}
else
{
amountHolderEffect.ChangeAmount((int)(amountHolderEffect.GetAmount() - dmgInfo.GetDamage()));
dmgInfo.AbsorbDamage(dmgInfo.GetDamage());
}
}
public override void Register()
{
OnEffectAbsorb.Add(new(CalcAbsorbAmount, 0));
}
}
[Script] // Smite - 585
class spell_pri_sanctuary_trigger : SpellScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.Sanctuary, SpellIds.SanctuaryAura, SpellIds.SanctuaryAbsorb);
}
void HandleEffectHit(uint effIndex)
{
Player caster = GetCaster()?.ToPlayer();
if (caster == null)
return;
AuraEffect sanctuaryEffect = caster.GetAuraEffect(SpellIds.Sanctuary, 0);
if (sanctuaryEffect != null)
{
Unit target = GetHitUnit();
if (target != null)
{
float absorbAmount = MathFunctions.CalculatePct(caster.SpellBaseDamageBonusDone(SpellSchoolMask.Shadow), sanctuaryEffect.GetAmount());
MathFunctions.AddPct(ref absorbAmount, caster.GetRatingBonusValue(CombatRating.VersatilityDamageDone));
caster.CastSpell(caster, SpellIds.SanctuaryAbsorb, new CastSpellExtraArgs()
.SetTriggerFlags(TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError)
.SetTriggeringSpell(GetSpell()));
caster.CastSpell(target, SpellIds.SanctuaryAura, new CastSpellExtraArgs()
.AddSpellMod(SpellValueMod.BasePoint0, (int)absorbAmount)
.SetTriggerFlags(TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError)
.SetTriggeringSpell(GetSpell()));
}
}
}
public override void Register()
{
OnEffectHitTarget.Add(new(HandleEffectHit, 0, SpellEffectName.SchoolDamage));
}
}
[Script] // 280391 - Sins of the Many
class spell_pri_Sins_of_the_many : AuraScript
{