aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMematoru23 <127750549+Mematoru23@users.noreply.github.com>2024-02-10 19:00:46 +0200
committerGitHub <noreply@github.com>2024-02-10 18:00:46 +0100
commit0abdd8ce3d426d7a1c9ecec5380114a02d150da6 (patch)
tree6d1090cd4cb4318e13d625f6653efa24fca05c16 /src
parent6543d23a1a70768e9dce89b33ae7bf5fe6cdcc1e (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.cpp70
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);