From fa9ffc912187ee5f104ba8f2b04e89fc1f0f5fd4 Mon Sep 17 00:00:00 2001 From: Teleqraph Date: Thu, 10 Aug 2023 22:49:19 +0200 Subject: [PATCH] Scripts/Spells: Implement Epiphany and update Prayer of Mending's related talents (#29169) --- .../world/master/2023_08_10_01_world.sql | 15 + src/server/scripts/Spells/spell_priest.cpp | 334 +++++++++++++----- 2 files changed, 261 insertions(+), 88 deletions(-) create mode 100644 sql/updates/world/master/2023_08_10_01_world.sql diff --git a/sql/updates/world/master/2023_08_10_01_world.sql b/sql/updates/world/master/2023_08_10_01_world.sql new file mode 100644 index 00000000000..7e0f6e5e7c1 --- /dev/null +++ b/sql/updates/world/master/2023_08_10_01_world.sql @@ -0,0 +1,15 @@ +DELETE FROM `spell_proc` WHERE `SpellId` IN (414553, 409479); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(414553,0x00,6,0x10200400,0x00000000,0x00000020,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Epiphany +(409479,0x00,6,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0,0,0,1); -- Inspired Word + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_prayer_of_mending_heal', 'spell_pri_benediction', 'spell_pri_divine_service', 'spell_pri_focused_mending', +'spell_pri_epiphany', 'spell_pri_holy_10_1_class_set_2pc_chooser', 'spell_pri_holy_10_1_class_set_4pc', 'spell_pri_holy_10_1_class_set_4pc_aura'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(33110, 'spell_pri_benediction'), -- Benediction +(33110, 'spell_pri_divine_service'), -- Divine Service +(33110, 'spell_pri_focused_mending'), -- Focused Mending +(414553, 'spell_pri_epiphany'), -- Epiphany +(411097, 'spell_pri_holy_10_1_class_set_2pc_chooser'), -- Priest Holy 10.1 Class Set 2pc (Chooser) +(155793, 'spell_pri_holy_10_1_class_set_4pc'), -- Priest Holy 10.1 Class Set 4pc +(41635, 'spell_pri_holy_10_1_class_set_4pc_aura'); -- Priest Holy 10.1 Class Set 4pc diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 7cb20ed60cd..a9255e03caa 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -75,6 +75,8 @@ enum PriestSpells SPELL_PRIEST_DIVINE_STAR_SHADOW_HEAL = 390981, SPELL_PRIEST_DIVINE_WRATH = 40441, SPELL_PRIEST_EMPOWERED_RENEW_HEAL = 391359, + SPELL_PRIEST_EPIPHANY = 414553, + SPELL_PRIEST_EPIPHANY_HIGHLIGHT = 414556, SPELL_PRIEST_FLASH_HEAL = 2061, SPELL_PRIEST_GREATER_HEAL = 289666, SPELL_PRIEST_FOCUSED_MENDING = 372354, @@ -95,6 +97,8 @@ enum PriestSpells SPELL_PRIEST_HOLY_WORD_SANCTIFY = 34861, SPELL_PRIEST_HOLY_WORD_SERENITY = 2050, SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER = 411097, + SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P = 405556, + SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT = 409479, SPELL_PRIEST_ITEM_EFFICIENCY = 37595, SPELL_PRIEST_LEAP_OF_FAITH_EFFECT = 92832, SPELL_PRIEST_LEVITATE_EFFECT = 111759, @@ -117,6 +121,10 @@ enum PriestSpells SPELL_PRIEST_POWER_WORD_SHIELD = 17, SPELL_PRIEST_POWER_WORD_SOLACE_ENERGIZE = 129253, SPELL_PRIEST_PRAYER_OF_HEALING = 596, + SPELL_PRIEST_PRAYER_OF_MENDING = 33076, + SPELL_PRIEST_PRAYER_OF_MENDING_AURA = 41635, + SPELL_PRIEST_PRAYER_OF_MENDING_HEAL = 33110, + SPELL_PRIEST_PRAYER_OF_MENDING_JUMP = 155793, SPELL_PRIEST_PURGE_THE_WICKED = 204197, SPELL_PRIEST_PURGE_THE_WICKED_DUMMY = 204215, SPELL_PRIEST_PURGE_THE_WICKED_PERIODIC = 204213, @@ -146,14 +154,15 @@ enum PriestSpells SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085, SPELL_PRIEST_VOID_SHIELD = 199144, SPELL_PRIEST_VOID_SHIELD_EFFECT = 199145, - SPELL_PRIEST_PRAYER_OF_MENDING = 33076, - SPELL_PRIEST_PRAYER_OF_MENDING_AURA = 41635, - SPELL_PRIEST_PRAYER_OF_MENDING_HEAL = 33110, - SPELL_PRIEST_PRAYER_OF_MENDING_JUMP = 155793, SPELL_PRIEST_WEAKENED_SOUL = 6788 }; -enum PriestPets +enum PriestSpellVisuals +{ + SPELL_VISUAL_PRIEST_PRAYER_OF_MENDING = 38945 +}; + +enum PriestSummons { NPC_PRIEST_DIVINE_IMAGE = 198236 }; @@ -425,6 +434,28 @@ class spell_pri_atonement_triggered : public AuraScript } }; +// 33110 - Prayer of Mending (Heal) +class spell_pri_benediction : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_RENEW }) + && ValidateSpellEffect({ { SPELL_PRIEST_BENEDICTION, EFFECT_0 } }); + } + + void HandleEffectHitTarget(SpellEffIndex /*effIndex*/) const + { + if (AuraEffect const* benediction = GetCaster()->GetAuraEffect(SPELL_PRIEST_BENEDICTION, EFFECT_0)) + if (roll_chance_i(benediction->GetAmount())) + GetCaster()->CastSpell(GetHitUnit(), SPELL_PRIEST_RENEW, TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_pri_benediction::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_HEAL); + } +}; + // 204883 - Circle of Healing class spell_pri_circle_of_healing : public SpellScript { @@ -580,7 +611,7 @@ class spell_pri_divine_image : public AuraScript .SetTriggeringSpell(eventInfo.GetProcSpell()) .SetTriggerFlags(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DISALLOW_PROC_EVENTS | TRIGGERED_DONT_REPORT_CAST_ERROR)); - // cause immediate proc + // Note: Divine Image triggers a cast immediately based on the Holy Word cast. DivineImageHelpers::Trigger(aurEff, eventInfo); } @@ -671,6 +702,28 @@ class spell_pri_divine_image_stack_timer : public AuraScript } }; +// 33110 - Prayer of Mending (Heal) +class spell_pri_divine_service : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING_AURA }) + && ValidateSpellEffect({ { SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0 } }); + } + + void CalculateHealingBonus(Unit const* victim, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const + { + if (AuraEffect const* divineServiceEffect = GetCaster()->GetAuraEffect(SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0)) + if (Aura const* prayerOfMending = victim->GetAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, GetCaster()->GetGUID())) + AddPct(pctMod, int32(divineServiceEffect->GetAmount() * prayerOfMending->GetStackAmount())); + } + + void Register() override + { + CalcHealing += SpellCalcHealingFn(spell_pri_divine_service::CalculateHealingBonus); + } +}; + // 122121 - Divine Star (Shadow) class spell_pri_divine_star_shadow : public SpellScript { @@ -836,6 +889,60 @@ class spell_pri_empowered_renew : public AuraScript } }; +// 414553 - Epiphany +class spell_pri_epiphany : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING, SPELL_PRIEST_EPIPHANY_HIGHLIGHT }); + } + + static bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + return roll_chance_i(aurEff->GetAmount()); + } + + void HandleOnProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) const + { + Unit* target = GetTarget(); + + target->GetSpellHistory()->ResetCooldown(SPELL_PRIEST_PRAYER_OF_MENDING, true); + + target->CastSpell(target, SPELL_PRIEST_EPIPHANY_HIGHLIGHT, aurEff); + } + + void Register() override + { + DoCheckEffectProc += AuraCheckEffectProcFn(spell_pri_epiphany::CheckProc, EFFECT_0, SPELL_AURA_DUMMY); + OnEffectProc += AuraEffectProcFn(spell_pri_epiphany::HandleOnProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + +// 33110 - Prayer of Mending (Heal) +class spell_pri_focused_mending : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellEffect({ { SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0 } }); + } + + void CalculateHealingBonus(Unit* /*victim*/, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const + { + if (AuraEffect const* focusedMendingEffect = GetCaster()->GetAuraEffect(SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0)) + { + bool const* isEmpoweredByFocusedMending = std::any_cast(&GetSpell()->m_customArg); + + if (isEmpoweredByFocusedMending && *isEmpoweredByFocusedMending) + AddPct(pctMod, focusedMendingEffect->GetAmount()); + } + } + + void Register() override + { + CalcHealing += SpellCalcHealingFn(spell_pri_focused_mending::CalculateHealingBonus); + } +}; + // 47788 - Guardian Spirit class spell_pri_guardian_spirit : public AuraScript { @@ -1512,41 +1619,60 @@ public: return true; } - void CastPrayerOfMendingAura(Unit* caster, Unit* target, uint8 stack, bool firstCast) + void CastPrayerOfMendingAura(Unit* caster, Unit* target, Unit* visualSender, uint8 stack, bool firstCast) const { - uint32 basePoints = caster->SpellHealingBonusDone(target, _spellInfoHeal, _healEffectDummy->CalcValue(caster), HEAL, *_healEffectDummy); CastSpellExtraArgs args; args.TriggerFlags = TRIGGERED_FULL_MASK; args.AddSpellMod(SPELLVALUE_AURA_STACK, stack); + + // Note: this line's purpose is to show the correct amount in Points field in SMSG_AURA_UPDATE. + uint32 basePoints = caster->SpellHealingBonusDone(target, _spellInfoHeal, _healEffectDummy->CalcValue(caster), HEAL, *_healEffectDummy); args.AddSpellMod(SPELLVALUE_BASE_POINT0, basePoints); + + // Note: Focused Mending talent. args.SetCustomArg(firstCast); + caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_AURA, args); + + // Note: the visualSender is the priest if it is first cast or the aura holder when the aura triggers. + visualSender->SendPlaySpellVisual(target, SPELL_VISUAL_PRIEST_PRAYER_OF_MENDING, 0, 0, 40.0f); } protected: - SpellInfo const* _spellInfoHeal; - SpellEffectInfo const* _healEffectDummy; + SpellInfo const* _spellInfoHeal = nullptr; + SpellEffectInfo const* _healEffectDummy = nullptr; }; // 33076 - Prayer of Mending (Dummy) -// 411097 - Priest Holy 10.1 Class Set 2pc (Chooser) class spell_pri_prayer_of_mending_dummy : public spell_pri_prayer_of_mending_SpellScriptBase { - void FilterTargets(std::list& targets) + bool Validate(SpellInfo const* /*spellInfo*/) override { - Trinity::SelectRandomInjuredTargets(targets, 1, true); + return ValidateSpellInfo + ({ + SPELL_PRIEST_PRAYER_OF_MENDING_AURA, + SPELL_PRIEST_EPIPHANY, + SPELL_PRIEST_EPIPHANY_HIGHLIGHT + }); } - void HandleEffectDummy(SpellEffIndex /*effIndex*/) + void HandleEffectDummy(SpellEffIndex /*effIndex*/) const { - // Note: we need to increase BasePoints by 1 since it's 4 as default. - CastPrayerOfMendingAura(GetCaster(), GetHitUnit(), GetEffectValue() + 1, true); + Unit* caster = GetCaster(); + Unit* target = GetHitUnit(); + + // Note: we need to increase BasePoints by 1 since it's 4 as default. Also HACKFIX, we shouldn't reduce it by 1 if the target has the aura already. + uint8 stackAmount = target->HasAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, caster->GetGUID()) ? GetEffectValue() : GetEffectValue() + 1; + + CastPrayerOfMendingAura(caster, target, caster, stackAmount, true); + + // Note: Epiphany talent. + if (caster->HasAura(SPELL_PRIEST_EPIPHANY)) + caster->RemoveAurasDueToSpell(SPELL_PRIEST_EPIPHANY_HIGHLIGHT); } void Register() override { - if (m_scriptSpellId == SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER) - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_prayer_of_mending_dummy::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY); OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_dummy::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; @@ -1556,15 +1682,11 @@ class spell_pri_prayer_of_mending_aura : public AuraScript { bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo - ({ - SPELL_PRIEST_PRAYER_OF_MENDING_HEAL, - SPELL_PRIEST_PRAYER_OF_MENDING_JUMP, - SPELL_PRIEST_SAY_YOUR_PRAYERS - }) && ValidateSpellEffect({ { SPELL_PRIEST_SAY_YOUR_PRAYERS, EFFECT_0 } }); + return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING_HEAL, SPELL_PRIEST_PRAYER_OF_MENDING_JUMP }) + && ValidateSpellEffect({ { SPELL_PRIEST_SAY_YOUR_PRAYERS, EFFECT_0 } }); } - void HandleHeal(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) + void HandleHeal(AuraEffect const* aurEff, ProcEventInfo const& /*eventInfo*/) { // Note: caster is the priest who cast the spell and target is current holder of the aura. Unit* target = GetTarget(); @@ -1613,7 +1735,7 @@ private: class spell_pri_prayer_of_mending : public SpellScript { - void HandleEffectDummy(SpellEffIndex /*effIndex*/) + void HandleEffectDummy(SpellEffIndex /*effIndex*/) const { Aura* aura = GetHitAura(); if (!aura) @@ -1636,19 +1758,16 @@ class spell_pri_prayer_of_mending : public SpellScript // 155793 - Prayer of Mending (Jump) class spell_pri_prayer_of_mending_jump : public spell_pri_prayer_of_mending_SpellScriptBase { - void FilterTargets(std::list& targets) + static void FilterTargets(std::list& targets) { // Note: priority list is a) players b) non-player units. Also, this spell became smartheal in WoD. Trinity::SelectRandomInjuredTargets(targets, 1, true); } - void HandleJump(SpellEffIndex /*effIndex*/) + void HandleJump(SpellEffIndex /*effIndex*/) const { - Unit* origCaster = GetOriginalCaster(); - Unit* target = GetHitUnit(); - - if (origCaster) - CastPrayerOfMendingAura(origCaster, target, GetEffectValue(), false); + if (Unit* origCaster = GetOriginalCaster()) + CastPrayerOfMendingAura(origCaster, GetHitUnit(), GetCaster(), GetEffectValue(), false); } void Register() override @@ -1658,68 +1777,27 @@ class spell_pri_prayer_of_mending_jump : public spell_pri_prayer_of_mending_Spel } }; -// 33110 - Prayer of Mending (Heal) -class spell_pri_prayer_of_mending_heal : public spell_pri_prayer_of_mending_SpellScriptBase -{ - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo - ({ - SPELL_PRIEST_RENEW, - SPELL_PRIEST_PRAYER_OF_MENDING_AURA - }) && ValidateSpellEffect( - { - { SPELL_PRIEST_BENEDICTION, EFFECT_0 }, - { SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0 }, - { SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0 } - }); - } - - void HandleEffectHitTarget(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - Unit* target = GetHitUnit(); - - if (AuraEffect const* benediction = caster->GetAuraEffect(SPELL_PRIEST_BENEDICTION, EFFECT_0)) - if (roll_chance_i(benediction->GetAmount())) - caster->CastSpell(target, SPELL_PRIEST_RENEW, TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS); - - float healBonus = 1.0f; - - if (AuraEffect const* focusedMending = caster->GetAuraEffect(SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0)) - { - bool const* isEmpoweredByFocusedMending = std::any_cast(&GetSpell()->m_customArg); - - if (isEmpoweredByFocusedMending && *isEmpoweredByFocusedMending) - AddPct(healBonus, focusedMending->GetAmount()); - } - - if (AuraEffect const* divineService = caster->GetAuraEffect(SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0)) - if (Aura* prayerOfMending = target->GetAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, caster->GetGUID())) - AddPct(healBonus, int32(divineService->GetAmount() * prayerOfMending->GetStackAmount())); - - SetHitHeal(GetHitHeal() * healBonus); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_HEAL); - } -}; - // 405554 - Priest Holy 10.1 Class Set 2pc class spell_pri_holy_10_1_class_set_2pc : public AuraScript { - bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER }) + && ValidateSpellEffect({ { SPELL_PRIEST_PRAYER_OF_MENDING, EFFECT_0 } }); + } + + static bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { return roll_chance_i(aurEff->GetAmount()); } - void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& eventInfo) const { - GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER, - CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD) - .SetTriggeringSpell(eventInfo.GetProcSpell())); + CastSpellExtraArgs args(aurEff); + args.SetTriggeringSpell(eventInfo.GetProcSpell()); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, sSpellMgr->AssertSpellInfo(SPELL_PRIEST_PRAYER_OF_MENDING, GetCastDifficulty())->GetEffect(EFFECT_0).CalcValue(GetCaster())); + + GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER, args); } void Register() override @@ -1729,6 +1807,80 @@ class spell_pri_holy_10_1_class_set_2pc : public AuraScript } }; +// 411097 - Priest Holy 10.1 Class Set 2pc (Chooser) +class spell_pri_holy_10_1_class_set_2pc_chooser : public spell_pri_prayer_of_mending_SpellScriptBase +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING_AURA }); + } + + static void FilterTargets(std::list& targets) + { + Trinity::SelectRandomInjuredTargets(targets, 1, true); + } + + void HandleEffectDummy(SpellEffIndex /*effIndex*/) const + { + Unit* caster = GetCaster(); + Unit* target = GetHitUnit(); + + // Note: we need to increase BasePoints by 1 since it's 4 as default. Also HACKFIX, we shouldn't reduce it by 1 if the target has the aura already. + uint8 stackAmount = target->HasAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, caster->GetGUID()) ? GetEffectValue() : GetEffectValue() + 1; + + CastPrayerOfMendingAura(caster, target, caster, stackAmount, true); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_holy_10_1_class_set_2pc_chooser::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY); + OnEffectHitTarget += SpellEffectFn(spell_pri_holy_10_1_class_set_2pc_chooser::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 155793 - Prayer of Mending (Jump) +class spell_pri_holy_10_1_class_set_4pc : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P, SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT }); + } + + void HandleEffectDummy(SpellEffIndex /*effIndex*/) const + { + if (GetOriginalCaster()->HasAura(SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P)) + GetOriginalCaster()->CastSpell(GetOriginalCaster(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT, TRIGGERED_IGNORE_GCD); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_pri_holy_10_1_class_set_4pc::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 41635 - Prayer of Mending (Aura) +class spell_pri_holy_10_1_class_set_4pc_aura : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P, SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT }); + } + + void HandleOnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) + return; + + if (GetCaster()->HasAura(SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P)) + GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT, CastSpellExtraArgs(TRIGGERED_IGNORE_GCD).SetTriggeringAura(aurEff)); + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_pri_holy_10_1_class_set_4pc_aura::HandleOnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + // 204197 - Purge the Wicked // Called by Penance - 47540, Dark Reprimand - 400169 class spell_pri_purge_the_wicked : public SpellScript @@ -2261,14 +2413,18 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_aq_3p_bonus); RegisterSpellScript(spell_pri_atonement); RegisterSpellScript(spell_pri_atonement_triggered); + RegisterSpellScript(spell_pri_benediction); RegisterSpellScript(spell_pri_circle_of_healing); RegisterSpellScript(spell_pri_divine_hymn); RegisterSpellScript(spell_pri_divine_image); RegisterSpellScript(spell_pri_divine_image_spell_triggered); RegisterSpellScript(spell_pri_divine_image_stack_timer); + RegisterSpellScript(spell_pri_divine_service); RegisterSpellScript(spell_pri_divine_star_shadow); RegisterAreaTriggerAI(areatrigger_pri_divine_star); RegisterSpellScript(spell_pri_empowered_renew); + RegisterSpellScript(spell_pri_epiphany); + RegisterSpellScript(spell_pri_focused_mending); RegisterSpellScript(spell_pri_guardian_spirit); RegisterSpellScript(spell_pri_halo_shadow); RegisterAreaTriggerAI(areatrigger_pri_halo); @@ -2290,8 +2446,10 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_prayer_of_mending_dummy); RegisterSpellAndAuraScriptPair(spell_pri_prayer_of_mending, spell_pri_prayer_of_mending_aura); RegisterSpellScript(spell_pri_prayer_of_mending_jump); - RegisterSpellScript(spell_pri_prayer_of_mending_heal); RegisterSpellScript(spell_pri_holy_10_1_class_set_2pc); + RegisterSpellScript(spell_pri_holy_10_1_class_set_2pc_chooser); + RegisterSpellScript(spell_pri_holy_10_1_class_set_4pc); + RegisterSpellScript(spell_pri_holy_10_1_class_set_4pc_aura); RegisterSpellScript(spell_pri_purge_the_wicked); RegisterSpellScript(spell_pri_purge_the_wicked_dummy); RegisterSpellScript(spell_pri_rapture);