diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 1862 | 
1 files changed, 769 insertions, 1093 deletions
| diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 7566035e923..803ecee8c5c 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -142,577 +142,434 @@ class RaidCheck  };  // 26169 - Oracle Healing Bonus -class spell_pri_aq_3p_bonus : public SpellScriptLoader +class spell_pri_aq_3p_bonus : public AuraScript  { -    public: -        spell_pri_aq_3p_bonus() : SpellScriptLoader("spell_pri_aq_3p_bonus") { } +    PrepareAuraScript(spell_pri_aq_3p_bonus); -        class spell_pri_aq_3p_bonus_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_aq_3p_bonus_AuraScript); +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_ORACULAR_HEAL }); +    } -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_ORACULAR_HEAL }); -            } +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        Unit* caster = eventInfo.GetActor(); +        if (caster == eventInfo.GetProcTarget()) +            return; -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                Unit* caster = eventInfo.GetActor(); -                if (caster == eventInfo.GetProcTarget()) -                    return; - -                HealInfo* healInfo = eventInfo.GetHealInfo(); -                if (!healInfo || !healInfo->GetHeal()) -                    return; - -                CastSpellExtraArgs args(aurEff); -                args.AddSpellBP0(CalculatePct(healInfo->GetHeal(), 10)); -                caster->CastSpell(caster, SPELL_PRIEST_ORACULAR_HEAL, args); -            } +        HealInfo* healInfo = eventInfo.GetHealInfo(); +        if (!healInfo || !healInfo->GetHeal()) +            return; -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_aq_3p_bonus_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +        CastSpellExtraArgs args(aurEff); +        args.AddSpellBP0(CalculatePct(healInfo->GetHeal(), 10)); +        caster->CastSpell(caster, SPELL_PRIEST_ORACULAR_HEAL, args); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_aq_3p_bonus_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_aq_3p_bonus::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // -27811 - Blessed Recovery -class spell_pri_blessed_recovery : public SpellScriptLoader +class spell_pri_blessed_recovery : public AuraScript  { -public: -    spell_pri_blessed_recovery() : SpellScriptLoader("spell_pri_blessed_recovery") { } +    PrepareAuraScript(spell_pri_blessed_recovery); -    class spell_pri_blessed_recovery_AuraScript : public AuraScript +    bool Validate(SpellInfo const* /*spellInfo*/) override      { -        PrepareAuraScript(spell_pri_blessed_recovery_AuraScript); - -        bool Validate(SpellInfo const* /*spellInfo*/) override -        { -            return ValidateSpellInfo({ SPELL_PRIEST_BLESSED_RECOVERY_R1 }); -        } +        return ValidateSpellInfo({ SPELL_PRIEST_BLESSED_RECOVERY_R1 }); +    } -        void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -        { -            PreventDefaultAction(); -            DamageInfo* dmgInfo = eventInfo.GetDamageInfo(); -            if (!dmgInfo || !dmgInfo->GetDamage()) -                return; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        DamageInfo* dmgInfo = eventInfo.GetDamageInfo(); +        if (!dmgInfo || !dmgInfo->GetDamage()) +            return; -            Unit* target = eventInfo.GetActionTarget(); -            uint32 triggerSpell = sSpellMgr->GetSpellWithRank(SPELL_PRIEST_BLESSED_RECOVERY_R1, aurEff->GetSpellInfo()->GetRank()); -            SpellInfo const* triggerInfo = sSpellMgr->AssertSpellInfo(triggerSpell); +        Unit* target = eventInfo.GetActionTarget(); +        uint32 triggerSpell = sSpellMgr->GetSpellWithRank(SPELL_PRIEST_BLESSED_RECOVERY_R1, aurEff->GetSpellInfo()->GetRank()); +        SpellInfo const* triggerInfo = sSpellMgr->AssertSpellInfo(triggerSpell); -            int32 bp = CalculatePct(static_cast<int32>(dmgInfo->GetDamage()), aurEff->GetAmount()); +        int32 bp = CalculatePct(static_cast<int32>(dmgInfo->GetDamage()), aurEff->GetAmount()); -            ASSERT(triggerInfo->GetMaxTicks() > 0); -            bp /= triggerInfo->GetMaxTicks(); +        ASSERT(triggerInfo->GetMaxTicks() > 0); +        bp /= triggerInfo->GetMaxTicks(); -            CastSpellExtraArgs args(aurEff); -            args.AddSpellBP0(bp); -            target->CastSpell(target, triggerSpell, args); -        } - -        void Register() override -        { -            OnEffectProc += AuraEffectProcFn(spell_pri_blessed_recovery_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); -        } -    }; +        CastSpellExtraArgs args(aurEff); +        args.AddSpellBP0(bp); +        target->CastSpell(target, triggerSpell, args); +    } -    AuraScript* GetAuraScript() const override +    void Register() override      { -        return new spell_pri_blessed_recovery_AuraScript(); +        OnEffectProc += AuraEffectProcFn(spell_pri_blessed_recovery::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);      }  };  // -64127 - Body and Soul -class spell_pri_body_and_soul : public SpellScriptLoader +class spell_pri_body_and_soul : public AuraScript  { -    public: -        spell_pri_body_and_soul() : SpellScriptLoader("spell_pri_body_and_soul") { } +    PrepareAuraScript(spell_pri_body_and_soul); -        class spell_pri_body_and_soul_AuraScript : public AuraScript +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo(          { -            PrepareAuraScript(spell_pri_body_and_soul_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo( -                { -                    SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER, -                    SPELL_PRIEST_ABOLISH_DISEASE -                }); -            } - -            void HandleProcTriggerSpell(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) -            { -                // Proc only on Power Word: Shield -                SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); -                if (!spellInfo || !(spellInfo->SpellFamilyFlags[0] & 0x00000001)) -                { -                    PreventDefaultAction(); -                    return; -                } -            } +            SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER, +            SPELL_PRIEST_ABOLISH_DISEASE +        }); +    } -            void HandleProcDummy(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); +    void HandleProcTriggerSpell(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) +    { +        // Proc only on Power Word: Shield +        SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); +        if (!spellInfo || !(spellInfo->SpellFamilyFlags[0] & 0x00000001)) +        { +            PreventDefaultAction(); +            return; +        } +    } -                // Proc only on self casted abolish disease -                SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); -                if (!spellInfo) -                    return; +    void HandleProcDummy(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); -                Unit* caster = eventInfo.GetActor(); -                if (spellInfo->Id != SPELL_PRIEST_ABOLISH_DISEASE || caster != eventInfo.GetProcTarget()) -                    return; +        // Proc only on self casted abolish disease +        SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); +        if (!spellInfo) +            return; -                if (roll_chance_i(aurEff->GetAmount())) -                    caster->CastSpell(caster, SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER, aurEff); -            } +        Unit* caster = eventInfo.GetActor(); +        if (spellInfo->Id != SPELL_PRIEST_ABOLISH_DISEASE || caster != eventInfo.GetProcTarget()) +            return; -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_body_and_soul_AuraScript::HandleProcTriggerSpell, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); -                OnEffectProc += AuraEffectProcFn(spell_pri_body_and_soul_AuraScript::HandleProcDummy, EFFECT_1, SPELL_AURA_DUMMY); -            } -        }; +        if (roll_chance_i(aurEff->GetAmount())) +            caster->CastSpell(caster, SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER, aurEff); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_body_and_soul_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_body_and_soul::HandleProcTriggerSpell, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); +        OnEffectProc += AuraEffectProcFn(spell_pri_body_and_soul::HandleProcDummy, EFFECT_1, SPELL_AURA_DUMMY); +    }  };  // -34861 - Circle of Healing -class spell_pri_circle_of_healing : public SpellScriptLoader +class spell_pri_circle_of_healing : public SpellScript  { -    public: -        spell_pri_circle_of_healing() : SpellScriptLoader("spell_pri_circle_of_healing") { } +    PrepareSpellScript(spell_pri_circle_of_healing); -        class spell_pri_circle_of_healing_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_circle_of_healing_SpellScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING }); -            } - -            void FilterTargets(std::list<WorldObject*>& targets) -            { -                targets.remove_if(RaidCheck(GetCaster())); - -                uint32 const maxTargets = GetCaster()->HasAura(SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING) ? 6 : 5; // Glyph of Circle of Healing +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING }); +    } -                if (targets.size() > maxTargets) -                { -                    targets.sort(Trinity::HealthPctOrderPred()); -                    targets.resize(maxTargets); -                } -            } +    void FilterTargets(std::list<WorldObject*>& targets) +    { +        targets.remove_if(RaidCheck(GetCaster())); -            void Register() override -            { -                OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_circle_of_healing_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); -            } -        }; +        uint32 const maxTargets = GetCaster()->HasAura(SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING) ? 6 : 5; // Glyph of Circle of Healing -        SpellScript* GetSpellScript() const override +        if (targets.size() > maxTargets)          { -            return new spell_pri_circle_of_healing_SpellScript(); +            targets.sort(Trinity::HealthPctOrderPred()); +            targets.resize(maxTargets);          } +    } + +    void Register() override +    { +        OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_circle_of_healing::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); +    }  };  // -47509 - Divine Aegis -class spell_pri_divine_aegis : public SpellScriptLoader +class spell_pri_divine_aegis : public AuraScript  { -    public: -        spell_pri_divine_aegis() : SpellScriptLoader("spell_pri_divine_aegis") { } - -        class spell_pri_divine_aegis_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_divine_aegis_AuraScript); +    PrepareAuraScript(spell_pri_divine_aegis); -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_DIVINE_AEGIS }); -            } - -            bool CheckProc(ProcEventInfo& eventInfo) -            { -                return eventInfo.GetProcTarget() != nullptr; -            } +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_DIVINE_AEGIS }); +    } -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); +    bool CheckProc(ProcEventInfo& eventInfo) +    { +        return eventInfo.GetProcTarget() != nullptr; +    } -                HealInfo* healInfo = eventInfo.GetHealInfo(); -                if (!healInfo || !healInfo->GetHeal()) -                    return; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); -                int32 absorb = CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()); +        HealInfo* healInfo = eventInfo.GetHealInfo(); +        if (!healInfo || !healInfo->GetHeal()) +            return; -                // Multiple effects stack, so let's try to find this aura. -                if (AuraEffect const* aegis = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PRIEST_DIVINE_AEGIS, EFFECT_0)) -                    absorb += aegis->GetAmount(); +        int32 absorb = CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()); -                absorb = std::min(absorb, eventInfo.GetProcTarget()->GetLevel() * 125); +        // Multiple effects stack, so let's try to find this aura. +        if (AuraEffect const* aegis = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PRIEST_DIVINE_AEGIS, EFFECT_0)) +            absorb += aegis->GetAmount(); -                CastSpellExtraArgs args(aurEff); -                args.AddSpellBP0(absorb); -                GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_DIVINE_AEGIS, args); -            } +        absorb = std::min(absorb, eventInfo.GetProcTarget()->GetLevel() * 125); -            void Register() override -            { -                DoCheckProc += AuraCheckProcFn(spell_pri_divine_aegis_AuraScript::CheckProc); -                OnEffectProc += AuraEffectProcFn(spell_pri_divine_aegis_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +        CastSpellExtraArgs args(aurEff); +        args.AddSpellBP0(absorb); +        GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_DIVINE_AEGIS, args); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_divine_aegis_AuraScript(); -        } +    void Register() override +    { +        DoCheckProc += AuraCheckProcFn(spell_pri_divine_aegis::CheckProc); +        OnEffectProc += AuraEffectProcFn(spell_pri_divine_aegis::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // 64844 - Divine Hymn -class spell_pri_divine_hymn : public SpellScriptLoader +class spell_pri_divine_hymn : public SpellScript  { -    public: -        spell_pri_divine_hymn() : SpellScriptLoader("spell_pri_divine_hymn") { } - -        class spell_pri_divine_hymn_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_divine_hymn_SpellScript); - -            void FilterTargets(std::list<WorldObject*>& targets) -            { -                targets.remove_if(RaidCheck(GetCaster())); - -                uint32 const maxTargets = 3; +    PrepareSpellScript(spell_pri_divine_hymn); -                if (targets.size() > maxTargets) -                { -                    targets.sort(Trinity::HealthPctOrderPred()); -                    targets.resize(maxTargets); -                } -            } +    void FilterTargets(std::list<WorldObject*>& targets) +    { +        targets.remove_if(RaidCheck(GetCaster())); -            void Register() override -            { -                OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY); -            } -        }; +        uint32 const maxTargets = 3; -        SpellScript* GetSpellScript() const override +        if (targets.size() > maxTargets)          { -            return new spell_pri_divine_hymn_SpellScript(); +            targets.sort(Trinity::HealthPctOrderPred()); +            targets.resize(maxTargets);          } +    } + +    void Register() override +    { +        OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY); +    }  };  // 55677 - Glyph of Dispel Magic -class spell_pri_glyph_of_dispel_magic : public SpellScriptLoader +class spell_pri_glyph_of_dispel_magic : public AuraScript  { -    public: -        spell_pri_glyph_of_dispel_magic() : SpellScriptLoader("spell_pri_glyph_of_dispel_magic") { } - -        class spell_pri_glyph_of_dispel_magic_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_glyph_of_dispel_magic_AuraScript); +    PrepareAuraScript(spell_pri_glyph_of_dispel_magic); -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL }); -            } - -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                // Dispel Magic shares spellfamilyflag with abolish disease -                SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); -                if (!spellInfo || spellInfo->SpellIconID != 74) -                    return; +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL }); +    } -                Unit* target = eventInfo.GetProcTarget(); +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        // Dispel Magic shares spellfamilyflag with abolish disease +        SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); +        if (!spellInfo || spellInfo->SpellIconID != 74) +            return; -                CastSpellExtraArgs args(aurEff); -                args.AddSpellBP0(target->CountPctFromMaxHealth(aurEff->GetAmount())); -                eventInfo.GetActor()->CastSpell(target, SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL, args); -            } +        Unit* target = eventInfo.GetProcTarget(); -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_dispel_magic_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +        CastSpellExtraArgs args(aurEff); +        args.AddSpellBP0(target->CountPctFromMaxHealth(aurEff->GetAmount())); +        eventInfo.GetActor()->CastSpell(target, SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL, args); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_glyph_of_dispel_magic_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_dispel_magic::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // 55680 - Glyph of Prayer of Healing -class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader +class spell_pri_glyph_of_prayer_of_healing : public AuraScript  { -    public: -        spell_pri_glyph_of_prayer_of_healing() : SpellScriptLoader("spell_pri_glyph_of_prayer_of_healing") { } - -        class spell_pri_glyph_of_prayer_of_healing_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_glyph_of_prayer_of_healing_AuraScript); +    PrepareAuraScript(spell_pri_glyph_of_prayer_of_healing); -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL }); -            } - -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL }); +    } -                HealInfo* healInfo = eventInfo.GetHealInfo(); -                if (!healInfo || !healInfo->GetHeal()) -                    return; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); -                SpellInfo const* triggeredSpellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL); +        HealInfo* healInfo = eventInfo.GetHealInfo(); +        if (!healInfo || !healInfo->GetHeal()) +            return; -                ASSERT(triggeredSpellInfo->GetMaxTicks() > 0); -                CastSpellExtraArgs args(aurEff); -                args.AddSpellBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks()); -                GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, args); -            } +        SpellInfo const* triggeredSpellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL); -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_prayer_of_healing_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +        ASSERT(triggeredSpellInfo->GetMaxTicks() > 0); +        CastSpellExtraArgs args(aurEff); +        args.AddSpellBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks()); +        GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, args); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_glyph_of_prayer_of_healing_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_prayer_of_healing::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // 47788 - Guardian Spirit -class spell_pri_guardian_spirit : public SpellScriptLoader +class spell_pri_guardian_spirit : public AuraScript  { -    public: -        spell_pri_guardian_spirit() : SpellScriptLoader("spell_pri_guardian_spirit") { } +    PrepareAuraScript(spell_pri_guardian_spirit); -        class spell_pri_guardian_spirit_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_guardian_spirit_AuraScript); +    uint32 healPct = 0; -            uint32 healPct = 0; - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL }); -            } +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL }); +    } -            bool Load() override -            { -                healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); -                return true; -            } +    bool Load() override +    { +        healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); +        return true; +    } -            void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) -            { -                // Set absorbtion amount to unlimited -                amount = -1; -            } +    void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) +    { +        // Set absorbtion amount to unlimited +        amount = -1; +    } -            void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) -            { -                Unit* target = GetTarget(); -                if (dmgInfo.GetDamage() < target->GetHealth()) -                    return; - -                int32 healAmount = int32(target->CountPctFromMaxHealth(healPct)); -                // remove the aura now, we don't want 40% healing bonus -                Remove(AURA_REMOVE_BY_ENEMY_SPELL); -                CastSpellExtraArgs args(TRIGGERED_FULL_MASK); -                args.AddSpellBP0(healAmount); -                target->CastSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, args); -                absorbAmount = dmgInfo.GetDamage(); -            } +    void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) +    { +        Unit* target = GetTarget(); +        if (dmgInfo.GetDamage() < target->GetHealth()) +            return; -            void Register() override -            { -                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_guardian_spirit_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB); -                OnEffectAbsorb += AuraEffectAbsorbFn(spell_pri_guardian_spirit_AuraScript::Absorb, EFFECT_1); -            } -        }; +        int32 healAmount = int32(target->CountPctFromMaxHealth(healPct)); +        // remove the aura now, we don't want 40% healing bonus +        Remove(AURA_REMOVE_BY_ENEMY_SPELL); +        CastSpellExtraArgs args(TRIGGERED_FULL_MASK); +        args.AddSpellBP0(healAmount); +        target->CastSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, args); +        absorbAmount = dmgInfo.GetDamage(); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_guardian_spirit_AuraScript(); -        } +    void Register() override +    { +        DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_guardian_spirit::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB); +        OnEffectAbsorb += AuraEffectAbsorbFn(spell_pri_guardian_spirit::Absorb, EFFECT_1); +    }  };  // 64904 - Hymn of Hope -class spell_pri_hymn_of_hope : public SpellScriptLoader +class spell_pri_hymn_of_hope : public SpellScript  { -    public: -        spell_pri_hymn_of_hope() : SpellScriptLoader("spell_pri_hymn_of_hope") { } - -        class spell_pri_hymn_of_hope_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_hymn_of_hope_SpellScript); +    PrepareSpellScript(spell_pri_hymn_of_hope); -            void FilterTargets(std::list<WorldObject*>& targets) -            { -                targets.remove_if(PowerCheck(POWER_MANA)); -                targets.remove_if(RaidCheck(GetCaster())); - -                uint32 const maxTargets = 3; - -                if (targets.size() > maxTargets) -                { -                    targets.sort(Trinity::PowerPctOrderPred(POWER_MANA)); -                    targets.resize(maxTargets); -                } -            } +    void FilterTargets(std::list<WorldObject*>& targets) +    { +        targets.remove_if(PowerCheck(POWER_MANA)); +        targets.remove_if(RaidCheck(GetCaster())); -            void Register() override -            { -                OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY); -            } -        }; +        uint32 const maxTargets = 3; -        SpellScript* GetSpellScript() const override +        if (targets.size() > maxTargets)          { -            return new spell_pri_hymn_of_hope_SpellScript(); +            targets.sort(Trinity::PowerPctOrderPred(POWER_MANA)); +            targets.resize(maxTargets);          } +    } + +    void Register() override +    { +        OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY); +    }  };  // -47569 - Improved Shadowform -class spell_pri_imp_shadowform : public SpellScriptLoader +class spell_pri_imp_shadowform : public AuraScript  { -    public: -        spell_pri_imp_shadowform() : SpellScriptLoader("spell_pri_imp_shadowform") { } - -        class spell_pri_imp_shadowform_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_imp_shadowform_AuraScript); +    PrepareAuraScript(spell_pri_imp_shadowform); -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                if (roll_chance_i(aurEff->GetAmount())) -                    eventInfo.GetActor()->RemoveMovementImpairingAuras(true); -            } - -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_imp_shadowform_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        if (roll_chance_i(aurEff->GetAmount())) +            eventInfo.GetActor()->RemoveMovementImpairingAuras(true); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_imp_shadowform_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_imp_shadowform::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // -15337 - Improved Spirit Tap -class spell_pri_improved_spirit_tap : public SpellScriptLoader +class spell_pri_improved_spirit_tap : public AuraScript  { -    public: -        spell_pri_improved_spirit_tap() : SpellScriptLoader("spell_pri_improved_spirit_tap") { } +    PrepareAuraScript(spell_pri_improved_spirit_tap); -        class spell_pri_improved_spirit_tap_AuraScript : public AuraScript +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo(          { -            PrepareAuraScript(spell_pri_improved_spirit_tap_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo( -                { -                    SPELL_PRIEST_SHADOW_WORD_DEATH_R1, -                    SPELL_PRIEST_MIND_BLAST_R1 -                }); -            } - -            bool CheckProc(ProcEventInfo& eventInfo) -            { -                if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo()) -                { -                    if (spellInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_PRIEST_SHADOW_WORD_DEATH_R1)) || -                        spellInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_PRIEST_MIND_BLAST_R1))) -                        return true; -                    else if (spellInfo->Id == SPELL_PRIEST_MIND_FLAY_DAMAGE) -                        return roll_chance_i(50); -                } - -                return false; -            } - -            void Register() override -            { -                DoCheckProc += AuraCheckProcFn(spell_pri_improved_spirit_tap_AuraScript::CheckProc); -            } -        }; +            SPELL_PRIEST_SHADOW_WORD_DEATH_R1, +            SPELL_PRIEST_MIND_BLAST_R1 +        }); +    } -        AuraScript* GetAuraScript() const override +    bool CheckProc(ProcEventInfo& eventInfo) +    { +        if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo())          { -            return new spell_pri_improved_spirit_tap_AuraScript(); +            if (spellInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_PRIEST_SHADOW_WORD_DEATH_R1)) || +                spellInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_PRIEST_MIND_BLAST_R1))) +                return true; +            else if (spellInfo->Id == SPELL_PRIEST_MIND_FLAY_DAMAGE) +                return roll_chance_i(50);          } + +        return false; +    } + +    void Register() override +    { +        DoCheckProc += AuraCheckProcFn(spell_pri_improved_spirit_tap::CheckProc); +    }  };  // 40438 - Priest Tier 6 Trinket -class spell_pri_item_t6_trinket : public SpellScriptLoader +class spell_pri_item_t6_trinket : public AuraScript  { -    public: -        spell_pri_item_t6_trinket() : SpellScriptLoader("spell_pri_item_t6_trinket") { } +    PrepareAuraScript(spell_pri_item_t6_trinket); -        class spell_pri_item_t6_trinket_AuraScript : public AuraScript +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo(          { -            PrepareAuraScript(spell_pri_item_t6_trinket_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo( -                { -                    SPELL_PRIEST_DIVINE_BLESSING, -                    SPELL_PRIEST_DIVINE_WRATH -                }); -            } - -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                Unit* caster = eventInfo.GetActor(); -                if (eventInfo.GetSpellTypeMask() & PROC_SPELL_TYPE_HEAL) -                    caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_BLESSING, aurEff); +            SPELL_PRIEST_DIVINE_BLESSING, +            SPELL_PRIEST_DIVINE_WRATH +        }); +    } -                if (eventInfo.GetSpellTypeMask() & PROC_SPELL_TYPE_DAMAGE) -                    caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_WRATH, aurEff); -            } +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        Unit* caster = eventInfo.GetActor(); +        if (eventInfo.GetSpellTypeMask() & PROC_SPELL_TYPE_HEAL) +            caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_BLESSING, aurEff); -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_item_t6_trinket_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +        if (eventInfo.GetSpellTypeMask() & PROC_SPELL_TYPE_DAMAGE) +            caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_WRATH, aurEff); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_item_t6_trinket_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_item_t6_trinket::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // 60123 - Lightwell @@ -785,790 +642,609 @@ class spell_pri_lightwell : public SpellScript  };  // -7001 - Lightwell Renew -class spell_pri_lightwell_renew : public SpellScriptLoader +class spell_pri_lightwell_renew : public AuraScript  { -    public: -        spell_pri_lightwell_renew() : SpellScriptLoader("spell_pri_lightwell_renew") { } +    PrepareAuraScript(spell_pri_lightwell_renew); -        class spell_pri_lightwell_renew_AuraScript : public AuraScript +    void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) +    { +        if (Unit* caster = GetCaster())          { -            PrepareAuraScript(spell_pri_lightwell_renew_AuraScript); - -            void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) -            { -                if (Unit* caster = GetCaster()) -                { -                    // Bonus from Glyph of Lightwell -                    if (AuraEffect* modHealing = caster->GetAuraEffect(SPELL_PRIEST_GLYPH_OF_LIGHTWELL, EFFECT_0)) -                        AddPct(amount, modHealing->GetAmount()); -                } -            } - -            void InitializeAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) -            { -                // Attacks done to you equal to 30% of your total health will cancel the effect -                _remainingAmount = GetTarget()->CountPctFromMaxHealth(30); -            } +            // Bonus from Glyph of Lightwell +            if (AuraEffect* modHealing = caster->GetAuraEffect(SPELL_PRIEST_GLYPH_OF_LIGHTWELL, EFFECT_0)) +                AddPct(amount, modHealing->GetAmount()); +        } +    } -            void CheckDropCharge(ProcEventInfo& eventInfo) -            { -                DamageInfo* damageInfo = eventInfo.GetDamageInfo(); -                if (!damageInfo) -                    return; +    void InitializeAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) +    { +        // Attacks done to you equal to 30% of your total health will cancel the effect +        _remainingAmount = GetTarget()->CountPctFromMaxHealth(30); +    } -                uint32 damage = damageInfo->GetDamage(); -                if (_remainingAmount <= damage) -                    return; +    void CheckDropCharge(ProcEventInfo& eventInfo) +    { +        DamageInfo* damageInfo = eventInfo.GetDamageInfo(); +        if (!damageInfo) +            return; -                _remainingAmount -= damage; -                // prevent drop charge -                PreventDefaultAction(); -            } +        uint32 damage = damageInfo->GetDamage(); +        if (_remainingAmount <= damage) +            return; -            void Register() override -            { -                DoPrepareProc += AuraProcFn(spell_pri_lightwell_renew_AuraScript::CheckDropCharge); -                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_lightwell_renew_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); +        _remainingAmount -= damage; +        // prevent drop charge +        PreventDefaultAction(); +    } -                AfterEffectApply += AuraEffectApplyFn(spell_pri_lightwell_renew_AuraScript::InitializeAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); -            } +    void Register() override +    { +        DoPrepareProc += AuraProcFn(spell_pri_lightwell_renew::CheckDropCharge); +        DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_lightwell_renew::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); -            uint32 _remainingAmount = 0; -        }; +        AfterEffectApply += AuraEffectApplyFn(spell_pri_lightwell_renew::InitializeAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_lightwell_renew_AuraScript(); -        } +    uint32 _remainingAmount = 0;  };  // 28305 - Mana Leech (Passive) (Priest Pet Aura) -class spell_pri_mana_leech : public SpellScriptLoader +class spell_pri_mana_leech : public AuraScript  { -    public: -        spell_pri_mana_leech() : SpellScriptLoader("spell_pri_mana_leech") { } +    PrepareAuraScript(spell_pri_mana_leech); -        class spell_pri_mana_leech_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_mana_leech_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_MANA_LEECH_PROC }); -            } - -            bool CheckProc(ProcEventInfo& /*eventInfo*/) -            { -                _procTarget = GetTarget()->GetOwner(); -                return _procTarget != nullptr; -            } +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_MANA_LEECH_PROC }); +    } -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) -            { -                PreventDefaultAction(); -                GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, aurEff); -            } +    bool CheckProc(ProcEventInfo& /*eventInfo*/) +    { +        _procTarget = GetTarget()->GetOwner(); +        return _procTarget != nullptr; +    } -            void Register() override -            { -                DoCheckProc += AuraCheckProcFn(spell_pri_mana_leech_AuraScript::CheckProc); -                OnEffectProc += AuraEffectProcFn(spell_pri_mana_leech_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) +    { +        PreventDefaultAction(); +        GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, aurEff); +    } -            Unit* _procTarget = nullptr; -        }; +    void Register() override +    { +        DoCheckProc += AuraCheckProcFn(spell_pri_mana_leech::CheckProc); +        OnEffectProc += AuraEffectProcFn(spell_pri_mana_leech::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_mana_leech_AuraScript(); -        } +    Unit* _procTarget = nullptr;  };  // -49821 - Mind Sear -class spell_pri_mind_sear : public SpellScriptLoader +class spell_pri_mind_sear : public SpellScript  { -    public: -        spell_pri_mind_sear() : SpellScriptLoader("spell_pri_mind_sear") { } - -        class spell_pri_mind_sear_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_mind_sear_SpellScript); +    PrepareSpellScript(spell_pri_mind_sear); -            void FilterTargets(std::list<WorldObject*>& unitList) -            { -                unitList.remove_if(Trinity::ObjectGUIDCheck(GetCaster()->GetChannelObjectGuid())); -            } - -            void Register() override -            { -                OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_mind_sear_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); -            } -        }; +    void FilterTargets(std::list<WorldObject*>& unitList) +    { +        unitList.remove_if(Trinity::ObjectGUIDCheck(GetCaster()->GetChannelObjectGuid())); +    } -        SpellScript* GetSpellScript() const override -        { -            return new spell_pri_mind_sear_SpellScript(); -        } +    void Register() override +    { +        OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_mind_sear::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); +    }  };  // -47580 - Pain and Suffering (dummy aura) -class spell_pri_pain_and_suffering_dummy : public SpellScriptLoader +class spell_pri_pain_and_suffering_dummy : public AuraScript  { -    public: -        spell_pri_pain_and_suffering_dummy() : SpellScriptLoader("spell_pri_pain_and_suffering_dummy") { } - -        class spell_pri_pain_and_suffering_dummy_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_pain_and_suffering_dummy_AuraScript); +    PrepareAuraScript(spell_pri_pain_and_suffering_dummy); -            bool CheckDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) -            { -                return false; -            } - -            void Register() override -            { -                DoCheckEffectProc += AuraCheckEffectProcFn(spell_pri_pain_and_suffering_dummy_AuraScript::CheckDummy, EFFECT_1, SPELL_AURA_DUMMY); -            } -        }; +    bool CheckDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) +    { +        return false; +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_pain_and_suffering_dummy_AuraScript; -        } +    void Register() override +    { +        DoCheckEffectProc += AuraCheckEffectProcFn(spell_pri_pain_and_suffering_dummy::CheckDummy, EFFECT_1, SPELL_AURA_DUMMY); +    }  };  // 47948 - Pain and Suffering (Proc) -class spell_pri_pain_and_suffering_proc : public SpellScriptLoader +class spell_pri_pain_and_suffering_proc : public SpellScript  { -    public: -        spell_pri_pain_and_suffering_proc() : SpellScriptLoader("spell_pri_pain_and_suffering_proc") { } +    PrepareSpellScript(spell_pri_pain_and_suffering_proc); -        class spell_pri_pain_and_suffering_proc_SpellScript : public SpellScript +    void HandleEffectScriptEffect(SpellEffIndex /*effIndex*/) +    { +        Unit* caster = GetCaster(); +        // Refresh Shadow Word: Pain on target +        if (Unit* target = GetHitUnit())          { -            PrepareSpellScript(spell_pri_pain_and_suffering_proc_SpellScript); - -            void HandleEffectScriptEffect(SpellEffIndex /*effIndex*/) -            { -                Unit* caster = GetCaster(); -                // Refresh Shadow Word: Pain on target -                if (Unit* target = GetHitUnit()) -                { -                    if (AuraEffect* aur = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0, 0, caster->GetGUID())) -                    { -                        aur->ChangeAmount(aur->CalculateAmount(aur->GetCaster()), false); -                        aur->CalculatePeriodic(caster, false, false); -                        aur->GetBase()->RefreshDuration(); -                    } -                } -            } - -            void Register() override +            if (AuraEffect* aur = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0, 0, caster->GetGUID()))              { -                OnEffectHitTarget += SpellEffectFn(spell_pri_pain_and_suffering_proc_SpellScript::HandleEffectScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); +                aur->ChangeAmount(aur->CalculateAmount(aur->GetCaster()), false); +                aur->CalculatePeriodic(caster, false, false); +                aur->GetBase()->RefreshDuration();              } -        }; - -        SpellScript* GetSpellScript() const override -        { -            return new spell_pri_pain_and_suffering_proc_SpellScript;          } +    } + +    void Register() override +    { +        OnEffectHitTarget += SpellEffectFn(spell_pri_pain_and_suffering_proc::HandleEffectScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); +    }  };  // -47540 - Penance -class spell_pri_penance : public SpellScriptLoader +class spell_pri_penance : public SpellScript  { -    public: -        spell_pri_penance() : SpellScriptLoader("spell_pri_penance") { } - -        class spell_pri_penance_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_penance_SpellScript); +    PrepareSpellScript(spell_pri_penance); -            bool Load() override -            { -                return GetCaster()->GetTypeId() == TYPEID_PLAYER; -            } - -            bool Validate(SpellInfo const* spellInfo) override -            { -                SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_PENANCE_R1); -                if (!firstRankSpellInfo) -                    return false; +    bool Load() override +    { +        return GetCaster()->GetTypeId() == TYPEID_PLAYER; +    } -                // can't use other spell than this penance due to spell_ranks dependency -                if (!spellInfo->IsRankOf(firstRankSpellInfo)) -                    return false; +    bool Validate(SpellInfo const* spellInfo) override +    { +        SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_PENANCE_R1); +        if (!firstRankSpellInfo) +            return false; -                uint8 rank = spellInfo->GetRank(); -                if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank, true)) -                    return false; -                if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank, true)) -                    return false; +        // can't use other spell than this penance due to spell_ranks dependency +        if (!spellInfo->IsRankOf(firstRankSpellInfo)) +            return false; -                return true; -            } +        uint8 rank = spellInfo->GetRank(); +        if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank, true)) +            return false; +        if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank, true)) +            return false; -            void HandleDummy(SpellEffIndex /*effIndex*/) -            { -                Unit* caster = GetCaster(); -                if (Unit* unitTarget = GetHitUnit()) -                { -                    if (!unitTarget->IsAlive()) -                        return; +        return true; +    } -                    uint8 rank = GetSpellInfo()->GetRank(); +    void HandleDummy(SpellEffIndex /*effIndex*/) +    { +        Unit* caster = GetCaster(); +        if (Unit* unitTarget = GetHitUnit()) +        { +            if (!unitTarget->IsAlive()) +                return; -                    if (caster->IsFriendlyTo(unitTarget)) -                        caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank), TRIGGERED_DISALLOW_PROC_EVENTS); -                    else -                        caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank), TRIGGERED_DISALLOW_PROC_EVENTS); -                } -            } +            uint8 rank = GetSpellInfo()->GetRank(); -            SpellCastResult CheckCast() -            { -                Player* caster = GetCaster()->ToPlayer(); -                if (Unit* target = GetExplTargetUnit()) -                    if (!caster->IsFriendlyTo(target)) -                    { -                        if (!caster->IsValidAttackTarget(target)) -                            return SPELL_FAILED_BAD_TARGETS; -                        if (!caster->isInFront(target)) -                            return SPELL_FAILED_UNIT_NOT_INFRONT; -                    } -                return SPELL_CAST_OK; -            } +            if (caster->IsFriendlyTo(unitTarget)) +                caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank), TRIGGERED_DISALLOW_PROC_EVENTS); +            else +                caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank), TRIGGERED_DISALLOW_PROC_EVENTS); +        } +    } -            void Register() override +    SpellCastResult CheckCast() +    { +        Player* caster = GetCaster()->ToPlayer(); +        if (Unit* target = GetExplTargetUnit()) +            if (!caster->IsFriendlyTo(target))              { -                OnEffectHitTarget += SpellEffectFn(spell_pri_penance_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); -                OnCheckCast += SpellCheckCastFn(spell_pri_penance_SpellScript::CheckCast); +                if (!caster->IsValidAttackTarget(target)) +                    return SPELL_FAILED_BAD_TARGETS; +                if (!caster->isInFront(target)) +                    return SPELL_FAILED_UNIT_NOT_INFRONT;              } -        }; +        return SPELL_CAST_OK; +    } -        SpellScript* GetSpellScript() const override -        { -            return new spell_pri_penance_SpellScript; -        } +    void Register() override +    { +        OnEffectHitTarget += SpellEffectFn(spell_pri_penance::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +        OnCheckCast += SpellCheckCastFn(spell_pri_penance::CheckCast); +    }  };  // -17 - Power Word: Shield -class spell_pri_power_word_shield : public SpellScriptLoader +class spell_pri_power_word_shield : public SpellScript  { -    public: -        spell_pri_power_word_shield() : SpellScriptLoader("spell_pri_power_word_shield") { } +    PrepareSpellScript(spell_pri_power_word_shield); -        class spell_pri_power_word_shield_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_power_word_shield_SpellScript); +    bool Validate(SpellInfo const* spellInfo) override +    { +        return ValidateSpellInfo({ spellInfo->ExcludeTargetAuraSpell }); +    } -            bool Validate(SpellInfo const* spellInfo) override -            { -                return ValidateSpellInfo({ spellInfo->ExcludeTargetAuraSpell }); -            } +    void WeakenSoul() +    { +        if (Unit* target = GetHitUnit()) +            GetCaster()->CastSpell(target, GetSpellInfo()->ExcludeTargetAuraSpell, true); +    } -            void WeakenSoul() -            { -                if (Unit* target = GetHitUnit()) -                    GetCaster()->CastSpell(target, GetSpellInfo()->ExcludeTargetAuraSpell, true); -            } +    void Register() override +    { +        AfterHit += SpellHitFn(spell_pri_power_word_shield::WeakenSoul); +    } +}; -            void Register() override -            { -                AfterHit += SpellHitFn(spell_pri_power_word_shield_SpellScript::WeakenSoul); -            } -        }; +class spell_pri_power_word_shield_aura : public AuraScript +{ +    PrepareAuraScript(spell_pri_power_word_shield_aura); -        SpellScript* GetSpellScript() const override +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo(          { -            return new spell_pri_power_word_shield_SpellScript(); -        } +            SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, +            SPELL_PRIEST_REFLECTIVE_SHIELD_R1 +        }); +    } -        class spell_pri_power_word_shield_AuraScript : public AuraScript +    void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) +    { +        canBeRecalculated = false; +        if (Unit* caster = GetCaster())          { -            PrepareAuraScript(spell_pri_power_word_shield_AuraScript); +            // +80.68% from sp bonus +            float bonus = 0.8068f; -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo( -                { -                    SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, -                    SPELL_PRIEST_REFLECTIVE_SHIELD_R1 -                }); -            } +            // Borrowed Time +            if (AuraEffect const* borrowedTime = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_BORROWED_TIME, EFFECT_1)) +                bonus += CalculatePct(1.0f, borrowedTime->GetAmount()); -            void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) -            { -                canBeRecalculated = false; -                if (Unit* caster = GetCaster()) -                { -                    // +80.68% from sp bonus -                    float bonus = 0.8068f; - -                    // Borrowed Time -                    if (AuraEffect const* borrowedTime = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_BORROWED_TIME, EFFECT_1)) -                        bonus += CalculatePct(1.0f, borrowedTime->GetAmount()); - -                    bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); - -                    // Improved PW: Shield: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) -                    // Improved PW: Shield is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage -                    bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus); -                    bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); - -                    amount += int32(bonus); - -                    // Twin Disciplines -                    if (AuraEffect const* twinDisciplines = caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_PRIEST, 0x400000, 0, 0, GetCasterGUID())) -                        AddPct(amount, twinDisciplines->GetAmount()); - -                    // Focused Power -                    if (AuraEffect const* focusedPower = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_PRIEST, PRIEST_ICON_ID_FOCUSED_POWER, EFFECT_2)) -                        AddPct(amount, focusedPower->GetAmount()); - -                    // Arena - Dampening -                    if (AuraEffect const* auraEffArenaDampening = caster->GetAuraEffect(SPELL_GENERIC_ARENA_DAMPENING, EFFECT_0)) -                        AddPct(amount, auraEffArenaDampening->GetAmount()); -                    // Battleground - Dampening -                    else if (AuraEffect const* auraEffBattlegroudDampening = caster->GetAuraEffect(SPELL_GENERIC_BATTLEGROUND_DAMPENING, EFFECT_0)) -                        AddPct(amount, auraEffBattlegroudDampening->GetAmount()); - -                    // ICC buff -                    if (AuraEffect const* auraStrengthOfWrynn = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, SPELL_ICON_ID_STRENGTH_OF_WRYNN, EFFECT_2)) -                        AddPct(amount, auraStrengthOfWrynn->GetAmount()); -                    else if (AuraEffect const* auraHellscreamsWarsong = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, SPELL_ICON_ID_HELLSCREAM_WARSONG, EFFECT_2)) -                        AddPct(amount, auraHellscreamsWarsong->GetAmount()); -                } -            } +            bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); -            void ReflectDamage(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount) -            { -                Unit* target = GetTarget(); -                if (dmgInfo.GetAttacker() == target) -                    return; +            // Improved PW: Shield: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) +            // Improved PW: Shield is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage +            bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus); +            bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); -                // Don't try to reflect the reflect spell -                if (dmgInfo.GetSpellInfo() && dmgInfo.GetSpellInfo()->Id == SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED) -                    return; +            amount += int32(bonus); -                if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0)) -                { -                    CastSpellExtraArgs args(aurEff); -                    args.AddSpellBP0(CalculatePct(absorbAmount, talentAurEff->GetAmount())); -                    target->CastSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, args); -                } -            } +            // Twin Disciplines +            if (AuraEffect const* twinDisciplines = caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_PRIEST, 0x400000, 0, 0, GetCasterGUID())) +                AddPct(amount, twinDisciplines->GetAmount()); -            void Register() override -            { -                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_power_word_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); -                AfterEffectAbsorb += AuraEffectAbsorbFn(spell_pri_power_word_shield_AuraScript::ReflectDamage, EFFECT_0); -            } -        }; +            // Focused Power +            if (AuraEffect const* focusedPower = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_PRIEST, PRIEST_ICON_ID_FOCUSED_POWER, EFFECT_2)) +                AddPct(amount, focusedPower->GetAmount()); -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_power_word_shield_AuraScript(); -        } -}; +            // Arena - Dampening +            if (AuraEffect const* auraEffArenaDampening = caster->GetAuraEffect(SPELL_GENERIC_ARENA_DAMPENING, EFFECT_0)) +                AddPct(amount, auraEffArenaDampening->GetAmount()); +            // Battleground - Dampening +            else if (AuraEffect const* auraEffBattlegroudDampening = caster->GetAuraEffect(SPELL_GENERIC_BATTLEGROUND_DAMPENING, EFFECT_0)) +                AddPct(amount, auraEffBattlegroudDampening->GetAmount()); -// 33110 - Prayer of Mending Heal -class spell_pri_prayer_of_mending_heal : public SpellScriptLoader -{ -    public: -        spell_pri_prayer_of_mending_heal() : SpellScriptLoader("spell_pri_prayer_of_mending_heal") { } - -        class spell_pri_prayer_of_mending_heal_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_prayer_of_mending_heal_SpellScript); +            // ICC buff +            if (AuraEffect const* auraStrengthOfWrynn = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, SPELL_ICON_ID_STRENGTH_OF_WRYNN, EFFECT_2)) +                AddPct(amount, auraStrengthOfWrynn->GetAmount()); +            else if (AuraEffect const* auraHellscreamsWarsong = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, SPELL_ICON_ID_HELLSCREAM_WARSONG, EFFECT_2)) +                AddPct(amount, auraHellscreamsWarsong->GetAmount()); +        } +    } -            void HandleHeal(SpellEffIndex /*effIndex*/) -            { -                if (Unit* caster = GetOriginalCaster()) -                { -                    if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_PRIEST_T9_HEALING_2P, EFFECT_0)) -                    { -                        int32 heal = GetHitHeal(); -                        AddPct(heal, aurEff->GetAmount()); -                        SetHitHeal(heal); -                    } -                } -            } +    void ReflectDamage(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount) +    { +        Unit* target = GetTarget(); +        if (dmgInfo.GetAttacker() == target) +            return; -            void Register() override -            { -                OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); -            } -        }; +        // Don't try to reflect the reflect spell +        if (dmgInfo.GetSpellInfo() && dmgInfo.GetSpellInfo()->Id == SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED) +            return; -        SpellScript* GetSpellScript() const override +        if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0))          { -            return new spell_pri_prayer_of_mending_heal_SpellScript(); +            CastSpellExtraArgs args(aurEff); +            args.AddSpellBP0(CalculatePct(absorbAmount, talentAurEff->GetAmount())); +            target->CastSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, args);          } +    } + +    void Register() override +    { +        DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_power_word_shield_aura::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); +        AfterEffectAbsorb += AuraEffectAbsorbFn(spell_pri_power_word_shield_aura::ReflectDamage, EFFECT_0); +    }  }; -// -139 - Renew -class spell_pri_renew : public SpellScriptLoader +// 33110 - Prayer of Mending Heal +class spell_pri_prayer_of_mending_heal : public SpellScript  { -    public: -        spell_pri_renew() : SpellScriptLoader("spell_pri_renew") { } +    PrepareSpellScript(spell_pri_prayer_of_mending_heal); -        class spell_pri_renew_AuraScript : public AuraScript +    void HandleHeal(SpellEffIndex /*effIndex*/) +    { +        if (Unit* caster = GetOriginalCaster())          { -            PrepareAuraScript(spell_pri_renew_AuraScript); - -            bool Load() override +            if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_PRIEST_T9_HEALING_2P, EFFECT_0))              { -                return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; +                int32 heal = GetHitHeal(); +                AddPct(heal, aurEff->GetAmount()); +                SetHitHeal(heal);              } +        } +    } -            void HandleApplyEffect(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) -            { -                Unit* caster = GetCaster(); -                if (!caster) -                    return; +    void Register() override +    { +        OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); +    } +}; -                // Empowered Renew -                if (AuraEffect const* empoweredRenewAurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT, EFFECT_1)) -                { -                    int32 heal = aurEff->GetAmount(); -                    heal *= aurEff->GetTotalTicks(); +// -139 - Renew +class spell_pri_renew : public AuraScript +{ +    PrepareAuraScript(spell_pri_renew); -                    CastSpellExtraArgs args(aurEff); -                    args.AddSpellBP0(CalculatePct(heal, empoweredRenewAurEff->GetAmount())); -                    caster->CastSpell(GetTarget(), SPELL_PRIEST_EMPOWERED_RENEW, args); -                } -            } +    bool Load() override +    { +        return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; +    } -            void Register() override -            { -                OnEffectApply += AuraEffectApplyFn(spell_pri_renew_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); -            } -        }; +    void HandleApplyEffect(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) +    { +        Unit* caster = GetCaster(); +        if (!caster) +            return; -        AuraScript* GetAuraScript() const override +        // Empowered Renew +        if (AuraEffect const* empoweredRenewAurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT, EFFECT_1))          { -            return new spell_pri_renew_AuraScript(); +            int32 heal = aurEff->GetAmount(); +            heal *= aurEff->GetTotalTicks(); + +            CastSpellExtraArgs args(aurEff); +            args.AddSpellBP0(CalculatePct(heal, empoweredRenewAurEff->GetAmount())); +            caster->CastSpell(GetTarget(), SPELL_PRIEST_EMPOWERED_RENEW, args);          } +    } + +    void Register() override +    { +        OnEffectApply += AuraEffectApplyFn(spell_pri_renew::HandleApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); +    }  };  // 57989 - Shadowfiend Death -class spell_pri_shadowfiend_death : public SpellScriptLoader +class spell_pri_shadowfiend_death : public AuraScript  { -    public: -        spell_pri_shadowfiend_death() : SpellScriptLoader("spell_pri_shadowfiend_death") { } +    PrepareAuraScript(spell_pri_shadowfiend_death); -        class spell_pri_shadowfiend_death_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_shadowfiend_death_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA }); -            } - -            bool CheckProc(ProcEventInfo& eventInfo) -            { -                DamageInfo* damageInfo = eventInfo.GetDamageInfo(); -                if (!damageInfo || !damageInfo->GetDamage()) -                    return false; +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA }); +    } -                Unit* shadowfiend = eventInfo.GetActionTarget(); -                if (!shadowfiend->GetOwner()) -                    return false; +    bool CheckProc(ProcEventInfo& eventInfo) +    { +        DamageInfo* damageInfo = eventInfo.GetDamageInfo(); +        if (!damageInfo || !damageInfo->GetDamage()) +            return false; -                return shadowfiend->HealthBelowPctDamaged(1, damageInfo->GetDamage()); -            } +        Unit* shadowfiend = eventInfo.GetActionTarget(); +        if (!shadowfiend->GetOwner()) +            return false; -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                Unit* caster = eventInfo.GetActionTarget()->GetOwner(); -                caster->CastSpell(caster, SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA, aurEff); -            } +        return shadowfiend->HealthBelowPctDamaged(1, damageInfo->GetDamage()); +    } -            void Register() override -            { -                DoCheckProc += AuraCheckProcFn(spell_pri_shadowfiend_death_AuraScript::CheckProc); -                OnEffectProc += AuraEffectProcFn(spell_pri_shadowfiend_death_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        Unit* caster = eventInfo.GetActionTarget()->GetOwner(); +        caster->CastSpell(caster, SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA, aurEff); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_shadowfiend_death_AuraScript(); -        } +    void Register() override +    { +        DoCheckProc += AuraCheckProcFn(spell_pri_shadowfiend_death::CheckProc); +        OnEffectProc += AuraEffectProcFn(spell_pri_shadowfiend_death::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // -32379 - Shadow Word Death -class spell_pri_shadow_word_death : public SpellScriptLoader +class spell_pri_shadow_word_death : public SpellScript  { -    public: -        spell_pri_shadow_word_death() : SpellScriptLoader("spell_pri_shadow_word_death") { } - -        class spell_pri_shadow_word_death_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pri_shadow_word_death_SpellScript); +    PrepareSpellScript(spell_pri_shadow_word_death); -            void HandleDamage() -            { -                int32 damage = GetHitDamage(); +    void HandleDamage() +    { +        int32 damage = GetHitDamage(); -                // Pain and Suffering reduces damage -                if (AuraEffect* aurEff = GetCaster()->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_PAIN_AND_SUFFERING, EFFECT_1)) -                    AddPct(damage, aurEff->GetAmount()); +        // Pain and Suffering reduces damage +        if (AuraEffect* aurEff = GetCaster()->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_PAIN_AND_SUFFERING, EFFECT_1)) +            AddPct(damage, aurEff->GetAmount()); -                CastSpellExtraArgs args(TRIGGERED_FULL_MASK); -                args.AddSpellBP0(damage); -                GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, args); -            } - -            void Register() override -            { -                OnHit += SpellHitFn(spell_pri_shadow_word_death_SpellScript::HandleDamage); -            } -        }; +        CastSpellExtraArgs args(TRIGGERED_FULL_MASK); +        args.AddSpellBP0(damage); +        GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, args); +    } -        SpellScript* GetSpellScript() const override -        { -            return new spell_pri_shadow_word_death_SpellScript(); -        } +    void Register() override +    { +        OnHit += SpellHitFn(spell_pri_shadow_word_death::HandleDamage); +    }  };  // 15286 - Vampiric Embrace -class spell_pri_vampiric_embrace : public SpellScriptLoader +class spell_pri_vampiric_embrace : public AuraScript  { -    public: -        spell_pri_vampiric_embrace() : SpellScriptLoader("spell_pri_vampiric_embrace") { } +    PrepareAuraScript(spell_pri_vampiric_embrace); -        class spell_pri_vampiric_embrace_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_vampiric_embrace_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL }); -            } +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL }); +    } -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                DamageInfo* damageInfo = eventInfo.GetDamageInfo(); -                if (!damageInfo || !damageInfo->GetDamage()) -                    return; - -                int32 selfHeal = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); -                int32 partyHeal = selfHeal / 5; -                CastSpellExtraArgs args(aurEff); -                args.AddSpellBP0(partyHeal); -                args.AddSpellMod(SPELLVALUE_BASE_POINT1, selfHeal); -                eventInfo.GetActor()->CastSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, args); -            } +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        DamageInfo* damageInfo = eventInfo.GetDamageInfo(); +        if (!damageInfo || !damageInfo->GetDamage()) +            return; -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_vampiric_embrace_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +        int32 selfHeal = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); +        int32 partyHeal = selfHeal / 5; +        CastSpellExtraArgs args(aurEff); +        args.AddSpellBP0(partyHeal); +        args.AddSpellMod(SPELLVALUE_BASE_POINT1, selfHeal); +        eventInfo.GetActor()->CastSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, args); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_vampiric_embrace_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_vampiric_embrace::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // -34914 - Vampiric Touch -class spell_pri_vampiric_touch : public SpellScriptLoader +class spell_pri_vampiric_touch : public AuraScript  { -    public: -        spell_pri_vampiric_touch() : SpellScriptLoader("spell_pri_vampiric_touch") { } +    PrepareAuraScript(spell_pri_vampiric_touch); -        class spell_pri_vampiric_touch_AuraScript : public AuraScript +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo(          { -            PrepareAuraScript(spell_pri_vampiric_touch_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo( -                { -                    SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, -                    SPELL_REPLENISHMENT -                }); -            } +            SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, +            SPELL_REPLENISHMENT +        }); +    } -            bool CheckDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) -            { -                return false; -            } +    bool CheckDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) +    { +        return false; +    } -            void HandleDispel(DispelInfo* /*dispelInfo*/) +    void HandleDispel(DispelInfo* /*dispelInfo*/) +    { +        if (Unit* caster = GetCaster()) +        { +            if (Unit* target = GetUnitOwner())              { -                if (Unit* caster = GetCaster()) +                if (AuraEffect const* aurEff = GetEffect(EFFECT_1))                  { -                    if (Unit* target = GetUnitOwner()) -                    { -                        if (AuraEffect const* aurEff = GetEffect(EFFECT_1)) -                        { -                            // backfire damage -                            int32 bp = aurEff->GetAmount(); -                            bp = target->SpellDamageBonusTaken(caster, aurEff->GetSpellInfo(), bp, DOT); -                            bp *= 8; - -                            CastSpellExtraArgs args(aurEff); -                            args.AddSpellBP0(bp); -                            caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, args); -                        } -                    } -                } -            } +                    // backfire damage +                    int32 bp = aurEff->GetAmount(); +                    bp = target->SpellDamageBonusTaken(caster, aurEff->GetSpellInfo(), bp, DOT); +                    bp *= 8; -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                eventInfo.GetActor()->CastSpell(nullptr, SPELL_REPLENISHMENT, aurEff); +                    CastSpellExtraArgs args(aurEff); +                    args.AddSpellBP0(bp); +                    caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, args); +                }              } +        } +    } -            void Register() override -            { -                DoCheckEffectProc += AuraCheckEffectProcFn(spell_pri_vampiric_touch_AuraScript::CheckDummy, EFFECT_0, SPELL_AURA_DUMMY); +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        eventInfo.GetActor()->CastSpell(nullptr, SPELL_REPLENISHMENT, aurEff); +    } -                AfterDispel += AuraDispelFn(spell_pri_vampiric_touch_AuraScript::HandleDispel); -                OnEffectProc += AuraEffectProcFn(spell_pri_vampiric_touch_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_DUMMY); -            } -        }; +    void Register() override +    { +        DoCheckEffectProc += AuraCheckEffectProcFn(spell_pri_vampiric_touch::CheckDummy, EFFECT_0, SPELL_AURA_DUMMY); -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_vampiric_touch_AuraScript(); -        } +        AfterDispel += AuraDispelFn(spell_pri_vampiric_touch::HandleDispel); +        OnEffectProc += AuraEffectProcFn(spell_pri_vampiric_touch::HandleProc, EFFECT_2, SPELL_AURA_DUMMY); +    }  };  // 28809 - Greater Heal -class spell_pri_t3_4p_bonus : public SpellScriptLoader +class spell_pri_t3_4p_bonus : public AuraScript  { -    public: -        spell_pri_t3_4p_bonus() : SpellScriptLoader("spell_pri_t3_4p_bonus") { } - -        class spell_pri_t3_4p_bonus_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_t3_4p_bonus_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_ARMOR_OF_FAITH }); -            } +    PrepareAuraScript(spell_pri_t3_4p_bonus); -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); -                eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_ARMOR_OF_FAITH, aurEff); -            } +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_ARMOR_OF_FAITH }); +    } -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_t3_4p_bonus_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); +        eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_ARMOR_OF_FAITH, aurEff); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_t3_4p_bonus_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_t3_4p_bonus::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // 37594 - Greater Heal Refund -class spell_pri_t5_heal_2p_bonus : public SpellScriptLoader +class spell_pri_t5_heal_2p_bonus : public AuraScript  { -    public: -        spell_pri_t5_heal_2p_bonus() : SpellScriptLoader("spell_pri_t5_heal_2p_bonus") { } - -        class spell_pri_t5_heal_2p_bonus_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_t5_heal_2p_bonus_AuraScript); +    PrepareAuraScript(spell_pri_t5_heal_2p_bonus); -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_ITEM_EFFICIENCY }); -            } - -            bool CheckProc(ProcEventInfo& eventInfo) -            { -                if (HealInfo* healInfo = eventInfo.GetHealInfo()) -                    if (Unit* healTarget = healInfo->GetTarget()) -                        if (healInfo->GetEffectiveHeal()) -                            if (healTarget->GetHealth() >= healTarget->GetMaxHealth()) -                                return true; +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_ITEM_EFFICIENCY }); +    } -                return false; -            } +    bool CheckProc(ProcEventInfo& eventInfo) +    { +        if (HealInfo* healInfo = eventInfo.GetHealInfo()) +            if (Unit* healTarget = healInfo->GetTarget()) +                if (healInfo->GetEffectiveHeal()) +                    if (healTarget->GetHealth() >= healTarget->GetMaxHealth()) +                        return true; -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) -            { -                PreventDefaultAction(); -                GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, aurEff); -            } +        return false; +    } -            void Register() override -            { -                DoCheckProc += AuraCheckProcFn(spell_pri_t5_heal_2p_bonus_AuraScript::CheckProc); -                OnEffectProc += AuraEffectProcFn(spell_pri_t5_heal_2p_bonus_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); -            } -        }; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) +    { +        PreventDefaultAction(); +        GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, aurEff); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_t5_heal_2p_bonus_AuraScript(); -        } +    void Register() override +    { +        DoCheckProc += AuraCheckProcFn(spell_pri_t5_heal_2p_bonus::CheckProc); +        OnEffectProc += AuraEffectProcFn(spell_pri_t5_heal_2p_bonus::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); +    }  };  // 70770 - Item - Priest T10 Healer 2P Bonus -class spell_pri_t10_heal_2p_bonus : public SpellScriptLoader +class spell_pri_t10_heal_2p_bonus : public AuraScript  { -    public: -        spell_pri_t10_heal_2p_bonus() : SpellScriptLoader("spell_pri_t10_heal_2p_bonus") { } +    PrepareAuraScript(spell_pri_t10_heal_2p_bonus); -        class spell_pri_t10_heal_2p_bonus_AuraScript : public AuraScript -        { -            PrepareAuraScript(spell_pri_t10_heal_2p_bonus_AuraScript); - -            bool Validate(SpellInfo const* /*spellInfo*/) override -            { -                return ValidateSpellInfo({ SPELL_PRIEST_BLESSED_HEALING }); -            } - -            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) -            { -                PreventDefaultAction(); +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo({ SPELL_PRIEST_BLESSED_HEALING }); +    } -                HealInfo* healInfo = eventInfo.GetHealInfo(); -                if (!healInfo || !healInfo->GetHeal()) -                    return; +    void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) +    { +        PreventDefaultAction(); -                SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_BLESSED_HEALING); -                int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), aurEff->GetAmount()); +        HealInfo* healInfo = eventInfo.GetHealInfo(); +        if (!healInfo || !healInfo->GetHeal()) +            return; -                ASSERT(spellInfo->GetMaxTicks() > 0); -                amount /= spellInfo->GetMaxTicks(); +        SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_BLESSED_HEALING); +        int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), aurEff->GetAmount()); -                Unit* caster = eventInfo.GetActor(); -                Unit* target = eventInfo.GetProcTarget(); +        ASSERT(spellInfo->GetMaxTicks() > 0); +        amount /= spellInfo->GetMaxTicks(); -                CastSpellExtraArgs args(aurEff); -                args.AddSpellBP0(amount); -                caster->CastSpell(target, SPELL_PRIEST_BLESSED_HEALING, args); -            } +        Unit* caster = eventInfo.GetActor(); +        Unit* target = eventInfo.GetProcTarget(); -            void Register() override -            { -                OnEffectProc += AuraEffectProcFn(spell_pri_t10_heal_2p_bonus_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); -            } -        }; +        CastSpellExtraArgs args(aurEff); +        args.AddSpellBP0(amount); +        caster->CastSpell(target, SPELL_PRIEST_BLESSED_HEALING, args); +    } -        AuraScript* GetAuraScript() const override -        { -            return new spell_pri_t10_heal_2p_bonus_AuraScript(); -        } +    void Register() override +    { +        OnEffectProc += AuraEffectProcFn(spell_pri_t10_heal_2p_bonus::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +    }  };  // 10060 - Power Infusion @@ -1593,35 +1269,35 @@ class spell_pri_power_infusion : public SpellScript  void AddSC_priest_spell_scripts()  { -    new spell_pri_aq_3p_bonus(); -    new spell_pri_blessed_recovery(); -    new spell_pri_body_and_soul(); -    new spell_pri_circle_of_healing(); -    new spell_pri_divine_aegis(); -    new spell_pri_divine_hymn(); -    new spell_pri_glyph_of_dispel_magic(); -    new spell_pri_glyph_of_prayer_of_healing(); -    new spell_pri_guardian_spirit(); -    new spell_pri_hymn_of_hope(); -    new spell_pri_imp_shadowform(); -    new spell_pri_improved_spirit_tap(); -    new spell_pri_item_t6_trinket(); +    RegisterSpellScript(spell_pri_aq_3p_bonus); +    RegisterSpellScript(spell_pri_blessed_recovery); +    RegisterSpellScript(spell_pri_body_and_soul); +    RegisterSpellScript(spell_pri_circle_of_healing); +    RegisterSpellScript(spell_pri_divine_aegis); +    RegisterSpellScript(spell_pri_divine_hymn); +    RegisterSpellScript(spell_pri_glyph_of_dispel_magic); +    RegisterSpellScript(spell_pri_glyph_of_prayer_of_healing); +    RegisterSpellScript(spell_pri_guardian_spirit); +    RegisterSpellScript(spell_pri_hymn_of_hope); +    RegisterSpellScript(spell_pri_imp_shadowform); +    RegisterSpellScript(spell_pri_improved_spirit_tap); +    RegisterSpellScript(spell_pri_item_t6_trinket);      RegisterSpellScript(spell_pri_lightwell); -    new spell_pri_lightwell_renew(); -    new spell_pri_mana_leech(); -    new spell_pri_mind_sear(); -    new spell_pri_pain_and_suffering_dummy(); -    new spell_pri_pain_and_suffering_proc(); -    new spell_pri_penance(); -    new spell_pri_power_word_shield(); -    new spell_pri_prayer_of_mending_heal(); -    new spell_pri_renew(); -    new spell_pri_shadowfiend_death(); -    new spell_pri_shadow_word_death(); -    new spell_pri_vampiric_embrace(); -    new spell_pri_vampiric_touch(); -    new spell_pri_t3_4p_bonus(); -    new spell_pri_t5_heal_2p_bonus(); -    new spell_pri_t10_heal_2p_bonus(); +    RegisterSpellScript(spell_pri_lightwell_renew); +    RegisterSpellScript(spell_pri_mana_leech); +    RegisterSpellScript(spell_pri_mind_sear); +    RegisterSpellScript(spell_pri_pain_and_suffering_dummy); +    RegisterSpellScript(spell_pri_pain_and_suffering_proc); +    RegisterSpellScript(spell_pri_penance); +    RegisterSpellAndAuraScriptPair(spell_pri_power_word_shield, spell_pri_power_word_shield_aura); +    RegisterSpellScript(spell_pri_prayer_of_mending_heal); +    RegisterSpellScript(spell_pri_renew); +    RegisterSpellScript(spell_pri_shadowfiend_death); +    RegisterSpellScript(spell_pri_shadow_word_death); +    RegisterSpellScript(spell_pri_vampiric_embrace); +    RegisterSpellScript(spell_pri_vampiric_touch); +    RegisterSpellScript(spell_pri_t3_4p_bonus); +    RegisterSpellScript(spell_pri_t5_heal_2p_bonus); +    RegisterSpellScript(spell_pri_t10_heal_2p_bonus);      RegisterSpellScript(spell_pri_power_infusion);  } | 
