diff options
author | Mematoru23 <127750549+Mematoru23@users.noreply.github.com> | 2024-02-10 19:00:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-10 18:00:46 +0100 |
commit | 0abdd8ce3d426d7a1c9ecec5380114a02d150da6 (patch) | |
tree | 6d1090cd4cb4318e13d625f6653efa24fca05c16 /src | |
parent | 6543d23a1a70768e9dce89b33ae7bf5fe6cdcc1e (diff) |
Scripts/Spells: Implemented Priest talent Divine Aegis/ Fixed PW:S Crit (#29683)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 70 |
1 files changed, 64 insertions, 6 deletions
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 45395883e79..39082e021ee 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -67,6 +67,8 @@ enum PriestSpells SPELL_PRIEST_DARK_REPRIMAND_DAMAGE = 373130, SPELL_PRIEST_DARK_REPRIMAND_HEALING = 400187, SPELL_PRIEST_DAZZLING_LIGHT = 196810, + SPELL_PRIEST_DIVINE_AEGIS = 47515, + SPELL_PRIEST_DIVINE_AEGIS_ABSORB = 47753, SPELL_PRIEST_DIVINE_BLESSING = 40440, SPELL_PRIEST_DIVINE_HYMN_HEAL = 64844, SPELL_PRIEST_DIVINE_IMAGE_SUMMON = 392990, @@ -1995,11 +1997,12 @@ class spell_pri_power_word_shield : public AuraScript }) && ValidateSpellEffect({ { SPELL_PRIEST_MASTERY_GRACE, EFFECT_0 }, { SPELL_PRIEST_RAPTURE, EFFECT_1 }, - { SPELL_PRIEST_BENEVOLENCE, EFFECT_0 } + { SPELL_PRIEST_BENEVOLENCE, EFFECT_0 }, + { SPELL_PRIEST_DIVINE_AEGIS, EFFECT_1 } }); } - void CalculateAmount(AuraEffect const* /*auraEffect*/, int32& amount, bool& canBeRecalculated) const + void CalculateAmount(AuraEffect const* auraEffect, int32& amount, bool& canBeRecalculated) const { canBeRecalculated = false; @@ -2016,14 +2019,33 @@ class spell_pri_power_word_shield : public AuraScript if (GetUnitOwner()->HasAura(SPELL_PRIEST_ATONEMENT_EFFECT) || GetUnitOwner()->HasAura(SPELL_PRIEST_TRINITY_EFFECT)) AddPct(modifiedAmount, masteryGraceEffect->GetAmount()); - if (player->GetPrimarySpecialization() != ChrSpecialization::PriestHoly) + switch (player->GetPrimarySpecialization()) { - modifiedAmount *= 1.25f; - if (caster->HasAura(SPELL_PVP_RULES_ENABLED_HARDCODED)) - modifiedAmount *= 0.8f; + case ChrSpecialization::PriestDiscipline: + modifiedAmount *= 1.37f; + break; + case ChrSpecialization::PriestShadow: + modifiedAmount *= 1.25f; + if (caster->HasAura(SPELL_PVP_RULES_ENABLED_HARDCODED)) + modifiedAmount *= 0.8f; + break; + default: + break; } } + float critChanceDone = caster->SpellCritChanceDone(nullptr, auraEffect, GetSpellInfo()->GetSchoolMask(), GetSpellInfo()->GetAttackType()); + float critChanceTaken = GetUnitOwner()->SpellCritChanceTaken(caster, nullptr, auraEffect, GetSpellInfo()->GetSchoolMask(), critChanceDone, GetSpellInfo()->GetAttackType()); + + if (roll_chance_f(critChanceTaken)) + { + modifiedAmount *= 2; + + // Divine Aegis + if (AuraEffect const* divineEff = caster->GetAuraEffect(SPELL_PRIEST_DIVINE_AEGIS, EFFECT_1)) + AddPct(modifiedAmount, divineEff->GetAmount()); + } + // Rapture talent (TBD: move into DoEffectCalcDamageAndHealing hook). if (AuraEffect const* raptureEffect = caster->GetAuraEffect(SPELL_PRIEST_RAPTURE, EFFECT_1)) AddPct(modifiedAmount, raptureEffect->GetAmount()); @@ -2065,6 +2087,41 @@ class spell_pri_power_word_shield : public AuraScript } }; +// 47515 - Divine Aegis +class spell_pri_divine_aegis : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellEffect({ { SPELL_PRIEST_DIVINE_AEGIS_ABSORB, EFFECT_0 } }); + } + + bool CheckProc(ProcEventInfo const& eventInfo) const + { + return eventInfo.GetHealInfo() != nullptr; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& eventInfo) const + { + Unit* caster = eventInfo.GetActor(); + if (!caster) + return; + + int32 aegisAmount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount()); + if (AuraEffect const* existingAegis = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PRIEST_DIVINE_AEGIS_ABSORB, EFFECT_0, caster->GetGUID())) + aegisAmount += existingAegis->GetAmount(); + + CastSpellExtraArgs args(aurEff); + args.SetTriggerFlags(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, aegisAmount); + caster->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_DIVINE_AEGIS_ABSORB, args); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_pri_divine_aegis::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + // 129250 - Power Word: Solace class spell_pri_power_word_solace : public SpellScript { @@ -3008,6 +3065,7 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_blaze_of_light); RegisterSpellScript(spell_pri_circle_of_healing); RegisterSpellScript(spell_pri_dark_indulgence); + RegisterSpellScript(spell_pri_divine_aegis); RegisterSpellScript(spell_pri_divine_image); RegisterSpellScript(spell_pri_divine_image_spell_triggered); RegisterSpellScript(spell_pri_divine_image_stack_timer); |