diff options
Diffstat (limited to 'src')
-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); } |