Scripts/Spells: Fixed various paladin spell scripts and removed outdated ones

Port From (https://github.com/TrinityCore/TrinityCore/commit/1086007f98c8d120f353650d7567d82f6b9aa0f8)
This commit is contained in:
hondacrx
2021-03-04 21:09:05 -05:00
parent ef73fb171b
commit 9293b4ee17
4 changed files with 259 additions and 98 deletions
+1 -1
View File
@@ -6502,7 +6502,7 @@ namespace Game.Spells
SendChannelUpdate((uint)m_timer);
}
bool HasPowerTypeCost(PowerType power)
public bool HasPowerTypeCost(PowerType power)
{
return m_powerCost.Any(cost => cost.Power == power);
}
+2 -2
View File
@@ -2675,7 +2675,7 @@ namespace Game.Spells
return RecoveryTime > CategoryRecoveryTime ? RecoveryTime : CategoryRecoveryTime;
}
SpellPowerCost CalcPowerCost(PowerType powerType, bool optionalCost, Unit caster, SpellSchoolMask schoolMask, Spell spell = null)
public SpellPowerCost CalcPowerCost(PowerType powerType, bool optionalCost, Unit caster, SpellSchoolMask schoolMask, Spell spell = null)
{
var spellPowerRecord = PowerCosts.First(spellPowerEntry => spellPowerEntry?.PowerType == powerType);
if (spellPowerRecord == null)
@@ -2684,7 +2684,7 @@ namespace Game.Spells
return CalcPowerCost(spellPowerRecord, optionalCost, caster, schoolMask, spell);
}
SpellPowerCost CalcPowerCost(SpellPowerRecord power, bool optionalCost, Unit caster, SpellSchoolMask schoolMask, Spell spell = null)
public SpellPowerCost CalcPowerCost(SpellPowerRecord power, bool optionalCost, Unit caster, SpellSchoolMask schoolMask, Spell spell = null)
{
if (power.RequiredAuraSpellID != 0 && !caster.HasAura(power.RequiredAuraSpellID))
return null;
+207 -95
View File
@@ -22,13 +22,14 @@ using Game.Spells;
using System;
using System.Collections.Generic;
using System.Linq;
using Game.DataStorage;
namespace Scripts.Spells.Paladin
{
struct SpellIds
{
public const uint AvengersShield = 31935;
public const uint AuraMasteryImmune = 64364;
public const uint AvengingWrath = 31884;
public const uint BeaconOfLight = 53563;
public const uint BeaconOfLightHeal = 53652;
public const uint BlessingOfLowerCityDruid = 37878;
@@ -50,6 +51,8 @@ namespace Scripts.Spells.Paladin
public const uint FinalStand = 204077;
public const uint FinalStandEffect = 204079;
public const uint Forbearance = 25771;
public const uint GuardianOfAcientKings = 86659;
public const uint HammerOfJustice = 853;
public const uint HandOfSacrifice = 6940;
public const uint HolyMending = 64891;
public const uint HolyPowerArmor = 28790;
@@ -61,10 +64,18 @@ namespace Scripts.Spells.Paladin
public const uint HolyShockR1Healing = 25914;
public const uint ImmuneShieldMarker = 61988;
public const uint ItemHealingTrance = 37706;
public const uint JudgementDamage = 54158;
public const uint JudementGainHolyPower = 220637;
public const uint JudgementProtRetR3 = 315867;
public const uint RighteousDefenseTaunt = 31790;
public const uint SealOfCommand = 105361;
public const uint RighteousVerdictAura = 267611;
public const uint SealOfRighteousness = 25742;
public const uint TemplarVerdictDamage = 224266;
public const uint ZealAura = 269571;
}
struct SpellVisualKits
{
public const uint DivineStorm = 73892;
}
// 37877 - Blessing of Faith
@@ -167,6 +178,25 @@ namespace Scripts.Spells.Paladin
}
}
[Script] // 196926 - Crusader Might
class spell_pal_crusader_might : AuraScript
{
bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.HolyShockR1);
}
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo)
{
GetTarget().GetSpellHistory().ModifyCooldown(SpellIds.HolyShockR1, aurEff.GetAmount());
}
void Register()
{
OnEffectProc .Add(new EffectProcHandler(HandleEffectProc, 0, AuraType.Dummy));
}
}
[Script] // 642 - Divine Shield
class spell_pal_divine_shield : SpellScript
{
@@ -248,34 +278,53 @@ namespace Scripts.Spells.Paladin
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.DivineStormDamage);
return CliDB.SpellVisualKitStorage.HasRecord(SpellVisualKits.DivineStorm);
}
void HandleOnCast()
{
Unit caster = GetCaster();
caster.SendPlaySpellVisualKit(73892, 0, 0);
}
void HandleDummy(uint effIndex)
{
Unit caster = GetCaster();
Unit target = GetHitUnit();
if (!target)
return;
caster.CastSpell(target, SpellIds.DivineStormDamage, true);
GetCaster().SendPlaySpellVisualKit(SpellVisualKits.DivineStorm, 0, 0);
}
public override void Register()
{
OnCast.Add(new CastHandler(HandleOnCast));
OnEffectHitTarget.Add(new EffectHandler(HandleDummy, 0, SpellEffectName.Dummy));
}
}
// -75806 - Grand Crusader
[Script]
[Script] // 234299 - Fist of Justice
class spell_pal_fist_of_justice : AuraScript
{
bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.HammerOfJustice);
}
bool CheckEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo)
{
Spell procSpell = eventInfo.GetProcSpell();
if (procSpell != null)
return procSpell.HasPowerTypeCost(PowerType.HolyPower);
return false;
}
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo procInfo)
{
int value = aurEff.GetAmount() / 10;
GetTarget().GetSpellHistory().ModifyCooldown(SpellIds.HammerOfJustice, -value);
}
void Register()
{
DoCheckEffectProc .Add(new CheckEffectProcHandler(CheckEffectProc, 0, AuraType.Dummy));
OnEffectProc .Add(new EffectProcHandler(HandleEffectProc, 0, AuraType.Dummy));
}
}
[Script] // -85043 - Grand Crusader
class spell_pal_grand_crusader : AuraScript
{
public override bool Validate(SpellInfo spellInfo)
@@ -354,6 +403,46 @@ namespace Scripts.Spells.Paladin
}
}
[Script] // 327193 - Moment of Glory
class spell_pal_moment_of_glory : SpellScript
{
bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.AvengersShield);
}
void HandleOnHit()
{
GetCaster().GetSpellHistory().ResetCooldown(SpellIds.AvengersShield);
}
void Register()
{
OnHit .Add(new HitHandler(HandleOnHit));
}
}
[Script] // 20271/275779 - Judgement Ret/Prot
class spell_pal_judgement : SpellScript
{
bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.JudgementProtRetR3, SpellIds.JudementGainHolyPower);
}
void HandleOnHit()
{
Unit caster = GetCaster();
if (caster.HasSpell(SpellIds.JudgementProtRetR3))
caster.CastSpell(caster, SpellIds.JudementGainHolyPower, TriggerCastFlags.FullMask);
}
void Register()
{
OnHit .Add(new HitHandler(HandleOnHit));
}
}
// 20473 - Holy Shock
[Script]
class spell_pal_holy_shock : SpellScript
@@ -480,43 +569,6 @@ namespace Scripts.Spells.Paladin
}
}
// 20271 - Judgement
// Updated 4.3.4
[Script]
class spell_pal_judgement : SpellScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.JudgementDamage);
}
void HandleScriptEffect(uint effIndex)
{
uint spellId = SpellIds.JudgementDamage;
// some seals have SPELL_AURA_DUMMY in EFFECT_2
var auras = GetCaster().GetAuraEffectsByType(AuraType.Dummy);
foreach (var eff in auras)
{
if (eff.GetSpellInfo().GetSpellSpecific() == SpellSpecificType.Seal && eff.GetEffIndex() == 2)
{
if (Global.SpellMgr.HasSpellInfo((uint)eff.GetAmount(), GetCastDifficulty()))
{
spellId = (uint)eff.GetAmount();
break;
}
}
}
GetCaster().CastSpell(GetHitUnit(), spellId, true);
}
public override void Register()
{
OnEffectHitTarget.Add(new EffectHandler(HandleScriptEffect, 0, SpellEffectName.Dummy));
}
}
// 633 - Lay on Hands
[Script]
class spell_pal_lay_on_hands : SpellScript
@@ -601,56 +653,94 @@ namespace Scripts.Spells.Paladin
}
}
// 85256 - Templar's Verdict
// Updated 4.3.4
[Script]
class spell_pal_templar_s_verdict : SpellScript
// 204074 - Righteous Protector
class spell_pal_righteous_protector : AuraScript
{
public override bool Validate(SpellInfo spellEntry)
SpellPowerCost _baseHolyPowerCost;
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.DivinePurposeProc);
return ValidateSpellInfo(SpellIds.AvengingWrath, SpellIds.GuardianOfAcientKings);
}
public override bool Load()
bool CheckEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo)
{
if (!GetCaster().IsTypeId(TypeId.Player))
return false;
if (GetCaster().ToPlayer().GetClass() != Class.Paladin)
return false;
return true;
}
void ChangeDamage(uint effIndex)
{
Unit caster = GetCaster();
float damage = GetHitDamage();
if (caster.HasAura(SpellIds.DivinePurposeProc))
damage *= 7.5f; // 7.5*30% = 225%
SpellInfo procSpell = eventInfo.GetSpellInfo();
if (procSpell != null)
_baseHolyPowerCost = procSpell.CalcPowerCost(PowerType.HolyPower, false, eventInfo.GetActor(), eventInfo.GetSchoolMask());
else
{
switch (caster.GetPower(PowerType.HolyPower))
{
case 0: // 1 Holy Power
//damage = damage;
break;
case 1: // 2 Holy Power
damage *= 3; // 3*30 = 90%
break;
case 2: // 3 Holy Power
damage *= 7.5f; // 7.5*30% = 225%
break;
}
}
_baseHolyPowerCost = null;
SetHitDamage((int)damage);
return _baseHolyPowerCost != null;
}
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo)
{
int value = aurEff.GetAmount() * 100 * _baseHolyPowerCost.Amount;
GetTarget().GetSpellHistory().ModifyCooldown(SpellIds.AvengingWrath, -value);
GetTarget().GetSpellHistory().ModifyCooldown(SpellIds.GuardianOfAcientKings, -value);
}
public override void Register()
{
OnEffectHitTarget.Add(new EffectHandler(ChangeDamage, 0, SpellEffectName.WeaponPercentDamage));
DoCheckEffectProc .Add(new CheckEffectProcHandler(CheckEffectProc, 0, AuraType.Dummy));
OnEffectProc .Add(new EffectProcHandler(HandleEffectProc, 0, AuraType.Dummy));
}
}
[Script] // 267610 - Righteous Verdict
class spell_pal_righteous_verdict : AuraScript
{
bool Validate(SpellInfo spellEntry)
{
return ValidateSpellInfo(SpellIds.RighteousVerdictAura);
}
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo procInfo)
{
procInfo.GetActor().CastSpell(procInfo.GetActor(), SpellIds.RighteousVerdictAura, true);
}
void Register()
{
OnEffectProc .Add(new EffectProcHandler(HandleEffectProc, 0, AuraType.Dummy));
}
}
// 85804 - Selfless Healer
class spell_pal_selfless_healer : AuraScript
{
bool CheckEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo)
{
Spell procSpell = eventInfo.GetProcSpell();
if (procSpell != null)
return procSpell.HasPowerTypeCost(PowerType.HolyPower);
return false;
}
void Register()
{
DoCheckEffectProc .Add(new CheckEffectProcHandler(CheckEffectProc, 0, AuraType.ProcTriggerSpell));
}
}
// 85256 - Templar's Verdict
class spell_pal_templar_s_verdict : SpellScript
{
bool Validate(SpellInfo spellEntry)
{
return ValidateSpellInfo(SpellIds.TemplarVerdictDamage);
}
void HandleHitTarget(uint effIndex)
{
GetCaster().CastSpell(GetHitUnit(), SpellIds.TemplarVerdictDamage, true);
}
void Register()
{
OnEffectHitTarget.Add(new EffectHandler(HandleHitTarget, 0, SpellEffectName.Dummy));
}
}
@@ -735,4 +825,26 @@ namespace Scripts.Spells.Paladin
OnEffectProc.Add(new EffectProcHandler(HandleProc, 0, AuraType.Dummy));
}
}
// 269569 - Zeal
class spell_pal_zeal : AuraScript
{
bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.ZealAura);
}
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo procInfo)
{
Unit target = GetTarget();
target.CastCustomSpell(SpellIds.ZealAura, SpellValueMod.AuraStack, aurEff.GetAmount(), target, true);
PreventDefaultAction();
}
void Register()
{
OnEffectProc.Add(new EffectProcHandler(HandleEffectProc, 0, AuraType.ProcTriggerSpell));
}
}
}
@@ -0,0 +1,49 @@
-- Spell Scripts
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
('spell_pal_judgement',
'spell_pal_zeal',
'spell_pal_selfless_healer',
'spell_pal_crusader_might',
'spell_pal_righteous_protector',
'spell_pal_moment_of_glory');
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(20271, 'spell_pal_judgement'), -- Judgement Ret (20271)
(275779, 'spell_pal_judgement'), -- Judgement Prot (275779)
(269569, 'spell_pal_zeal'), -- Zeal (269569)
(85804, 'spell_pal_selfless_healer'), -- Selfless Healer (85804)
(196926, 'spell_pal_crusader_might'), -- Cruader's Might (196926)
(204074, 'spell_pal_righteous_protector'), -- Righteous Protector (204074)
(327193, 'spell_pal_moment_of_glory'), -- Moment of Glory (327193)
(267610, 'spell_pal_righteous_verdict'); -- Righteous Verdict (267610)
-- Spell Procs --
DELETE FROM `spell_proc` WHERE `SpellId` IN
(269569, -- Zeal (269569)
269571, -- Zeal (269571)
326732, -- Empyrean Power (326732)
326733, -- Empyrean Power (326733)
85804, -- Selfless Healer (85804)
114250, -- Selfless Healer (114250)
280373, -- Redoubt (280373)
327193, -- Moment of Glory (327193)
183778, -- Judgment of Light (183778)
196926, -- Cruader's Might (196926)
267610 -- Righteous Verdict (267610)
);
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
(269569,0,10,0x00800000,0x0,0x0,0x0,0x10,1,2,0x403,0,0,0,0,0,0), -- Zeal (269569), Proc on judgement trigger zeal effect
(269571,1,0,0x0,0x0,0x0,0x0,0x4,1,1,0x403,0x10,14,0,0,0,0), -- Zeal (269571), Proc on auto attack to consume zeal effect
(326732,0,10,0x0,0x00008000,0x0,0x0,0x10,1,2,0x403,0,0,0,15,0,0), -- Empyrean Power (326732), Proc to trigger only on crusader strike
(326733,0,10,0x0,0x00020000,0x0,0x0,0x10,1,2,0x403,0x8,0,0,0,0,0), -- Empyrean Power (326733), Proc to consume Empryean Power (Divine Storm 53385)
(85804,0,10,0x0,0x0,0x0,0x0,0x15510,7,1,0x403,0x4,0,0,0,0,0), -- Selfless Healer (85804), Proc on power spending abilitis
(114250,0,10,0x40000000,0x0,0x0,0x0,0x4000,2,2,0x403,0,0,0,0,0,1), -- Selfless Healer (114250), Proc to consume on Flash of Light (19750)
(280373,0,10,0x0,0x00100000,0x0,0x0,0x10,1,1,0,0,0,0,0,0,0), -- Redoubt (280373), proc to trigge from Shield of the Righteous (53600)
(327193,0,10,0x00004000,0x0,0x0,0x0,0x10000,1,1,0x403,0,0,0,0,0,0), -- Moment of Glory (327193), proc to consume on Avenger's Shield (31935)
(183778,0,10,0x00800000,0x0,0x0,0x0,0x10,1,2,0x403,0,0,0,0,0,0), -- Judgment of Light (183778), proc to trigger from Judgement
(196926,0,10,0x0,0x00008000,0x0,0x0,0x10,1,2,0x403,0,0,0,0,0,0), -- Cruader's Might (196926), proc to trigger from Crusader Strike
(267610,0,10,0x0,0x00001000,0x0,0x0,0x10,1,2,0x403,0,0,0,0,0,0); -- Righteous Verdict (267610), proc to trigger from Templar's Verdict (224266)
-- Spell Areatriggers --
DELETE FROM `spell_areatrigger` WHERE (`AreaTriggerId`=9228);
INSERT INTO `spell_areatrigger` (`SpellMiscId`, `AreaTriggerId`, `MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`, `AnimId`, `AnimKitId`, `DecalPropertiesId`, `TimeToTarget`, `TimeToTargetScale`, `VerifiedBuild`) VALUES
(4488, 9228, 0, 0, 0, 0, 0, 0, 0, 0, 12000, 37474); -- for Consecration (26573)