Scripts/Spells: Implemented Priest talent Divine Aegis/ Fixed PW:S Crit
Port From (https://github.com/TrinityCore/TrinityCore/commit/0abdd8ce3d426d7a1c9ecec5380114a02d150da6)
This commit is contained in:
@@ -45,6 +45,8 @@ namespace Scripts.Spells.Priest
|
|||||||
public const uint DarkReprimandDamage = 373130;
|
public const uint DarkReprimandDamage = 373130;
|
||||||
public const uint DarkReprimandHealing = 400187;
|
public const uint DarkReprimandHealing = 400187;
|
||||||
public const uint DazzlingLight = 196810;
|
public const uint DazzlingLight = 196810;
|
||||||
|
public const uint DivineAegis = 47515;
|
||||||
|
public const uint DivineAegisAbsorb = 47753;
|
||||||
public const uint DivineBlessing = 40440;
|
public const uint DivineBlessing = 40440;
|
||||||
public const uint DivineHymnHeal = 64844;
|
public const uint DivineHymnHeal = 64844;
|
||||||
public const uint DivineImageSummon = 392990;
|
public const uint DivineImageSummon = 392990;
|
||||||
@@ -1886,7 +1888,7 @@ namespace Scripts.Spells.Priest
|
|||||||
public override bool Validate(SpellInfo spellInfo)
|
public override bool Validate(SpellInfo spellInfo)
|
||||||
{
|
{
|
||||||
return ValidateSpellInfo(SpellIds.StrengthOfSoul, SpellIds.StrengthOfSoulEffect, SpellIds.AtonementEffect, SpellIds.TrinityEffect, SpellIds.ShieldDiscipline, SpellIds.ShieldDisciplineEffect, SpellIds.PvpRulesEnabledHardcoded)
|
return ValidateSpellInfo(SpellIds.StrengthOfSoul, SpellIds.StrengthOfSoulEffect, SpellIds.AtonementEffect, SpellIds.TrinityEffect, SpellIds.ShieldDiscipline, SpellIds.ShieldDisciplineEffect, SpellIds.PvpRulesEnabledHardcoded)
|
||||||
&& ValidateSpellEffect((SpellIds.MasteryGrace, 0), (SpellIds.Rapture, 1), (SpellIds.Benevolence, 0));
|
&& ValidateSpellEffect((SpellIds.MasteryGrace, 0), (SpellIds.Rapture, 1), (SpellIds.Benevolence, 0), (SpellIds.DivineAegis, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CalculateAmount(AuraEffect auraEffect, ref int amount, ref bool canBeRecalculated)
|
void CalculateAmount(AuraEffect auraEffect, ref int amount, ref bool canBeRecalculated)
|
||||||
@@ -1909,14 +1911,32 @@ namespace Scripts.Spells.Priest
|
|||||||
if (GetUnitOwner().HasAura(SpellIds.AtonementEffect) || GetUnitOwner().HasAura(SpellIds.TrinityEffect))
|
if (GetUnitOwner().HasAura(SpellIds.AtonementEffect) || GetUnitOwner().HasAura(SpellIds.TrinityEffect))
|
||||||
MathFunctions.AddPct(ref modifiedAmount, masteryGraceEffect.GetAmount());
|
MathFunctions.AddPct(ref modifiedAmount, masteryGraceEffect.GetAmount());
|
||||||
|
|
||||||
if (player.GetPrimarySpecialization() != ChrSpecialization.PriestHoly)
|
switch (player.GetPrimarySpecialization())
|
||||||
{
|
{
|
||||||
modifiedAmount *= 1.25f;
|
case ChrSpecialization.PriestDiscipline:
|
||||||
if (caster.HasAura(SpellIds.PvpRulesEnabledHardcoded))
|
modifiedAmount *= 1.37f;
|
||||||
modifiedAmount *= 0.8f;
|
break;
|
||||||
|
case ChrSpecialization.PriestShadow:
|
||||||
|
modifiedAmount *= 1.25f;
|
||||||
|
if (caster.HasAura(SpellIds.PvpRulesEnabledHardcoded))
|
||||||
|
modifiedAmount *= 0.8f;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float critChanceDone = caster.SpellCritChanceDone(null, auraEffect, GetSpellInfo().GetSchoolMask(), GetSpellInfo().GetAttackType());
|
||||||
|
float critChanceTaken = GetUnitOwner().SpellCritChanceTaken(caster, null, auraEffect, GetSpellInfo().GetSchoolMask(), critChanceDone, GetSpellInfo().GetAttackType());
|
||||||
|
|
||||||
|
if (RandomHelper.randChance(critChanceTaken))
|
||||||
|
{
|
||||||
|
modifiedAmount *= 2;
|
||||||
|
|
||||||
|
// Divine Aegis
|
||||||
|
AuraEffect divineEff = caster.GetAuraEffect(SpellIds.DivineAegis, 1);
|
||||||
|
if (divineEff != null)
|
||||||
|
MathFunctions.AddPct(ref modifiedAmount, divineEff.GetAmount());
|
||||||
|
}
|
||||||
|
|
||||||
// Rapture talent (Tbd: move into DoEffectCalcDamageAndHealing hook).
|
// Rapture talent (Tbd: move into DoEffectCalcDamageAndHealing hook).
|
||||||
AuraEffect raptureEffect = caster.GetAuraEffect(SpellIds.Rapture, 1);
|
AuraEffect raptureEffect = caster.GetAuraEffect(SpellIds.Rapture, 1);
|
||||||
if (raptureEffect != null)
|
if (raptureEffect != null)
|
||||||
@@ -1961,6 +1981,42 @@ namespace Scripts.Spells.Priest
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Script] // 47515 - Divine Aegis
|
||||||
|
class spell_pri_divine_aegis : AuraScript
|
||||||
|
{
|
||||||
|
public override bool Validate(SpellInfo spellInfo)
|
||||||
|
{
|
||||||
|
return ValidateSpellEffect((SpellIds.DivineAegisAbsorb, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CheckProc(ProcEventInfo eventInfo)
|
||||||
|
{
|
||||||
|
return eventInfo.GetHealInfo() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo)
|
||||||
|
{
|
||||||
|
Unit caster = eventInfo.GetActor();
|
||||||
|
if (caster == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int aegisAmount = (int)MathFunctions.CalculatePct(eventInfo.GetHealInfo().GetHeal(), aurEff.GetAmount());
|
||||||
|
AuraEffect existingAegis = eventInfo.GetProcTarget().GetAuraEffect(SpellIds.DivineAegisAbsorb, 0, caster.GetGUID());
|
||||||
|
if (existingAegis != null)
|
||||||
|
aegisAmount += existingAegis.GetAmount();
|
||||||
|
|
||||||
|
CastSpellExtraArgs args = new(aurEff);
|
||||||
|
args.SetTriggerFlags(TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError);
|
||||||
|
args.AddSpellMod(SpellValueMod.BasePoint0, aegisAmount);
|
||||||
|
caster.CastSpell(eventInfo.GetProcTarget(), SpellIds.DivineAegisAbsorb, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Register()
|
||||||
|
{
|
||||||
|
OnEffectProc.Add(new(HandleProc, 0, AuraType.Dummy));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Script] // 129250 - Power Word: Solace
|
[Script] // 129250 - Power Word: Solace
|
||||||
class spell_pri_power_word_solace : SpellScript
|
class spell_pri_power_word_solace : SpellScript
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user