aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMematoru23 <127750549+Mematoru23@users.noreply.github.com>2024-02-10 23:13:09 +0200
committerGitHub <noreply@github.com>2024-02-10 22:13:09 +0100
commit69f2f8cd8cf2d5946bafb294e9b60841271fa875 (patch)
tree46c1878731af81ea38cbfea1fe2417a25b1f23aa /src
parent0abdd8ce3d426d7a1c9ecec5380114a02d150da6 (diff)
Scripts/Spells: Implemented Priest talent Crystalline Reflection (#29677)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellMgr.cpp3
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp55
2 files changed, 57 insertions, 1 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 2d4fc015a91..621a13e8124 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3487,7 +3487,8 @@ void SpellMgr::LoadSpellInfoCorrections()
71607, // Item - Bauble of True Blood 10m
71646, // Item - Bauble of True Blood 25m
71610, // Item - Althor's Abacus trigger 10m
- 71641 // Item - Althor's Abacus trigger 25m
+ 71641, // Item - Althor's Abacus trigger 25m
+ 373462 // Crystalline Reflection HEAL
}, [](SpellInfo* spellInfo)
{
// We need more spells to find a general way (if there is any)
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 39082e021ee..1659b3a5fc7 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -60,6 +60,9 @@ enum PriestSpells
SPELL_PRIEST_BODY_AND_SOUL = 64129,
SPELL_PRIEST_BODY_AND_SOUL_SPEED = 65081,
SPELL_PRIEST_CIRCLE_OF_HEALING = 204883,
+ SPELL_PRIEST_CRYSTALLINE_REFLECTION = 373457,
+ SPELL_PRIEST_CRYSTALLINE_REFLECTION_HEAL = 373462,
+ SPELL_PRIEST_CRYSTALLINE_REFLECTION_REFLECT = 373464,
SPELL_PRIEST_DARK_INDULGENCE = 372972,
SPELL_PRIEST_DARK_REPRIMAND = 400169,
SPELL_PRIEST_DARK_REPRIMAND_CHANNEL_DAMAGE = 373129,
@@ -688,6 +691,57 @@ class spell_pri_circle_of_healing : public SpellScript
}
};
+// 17 - Power Word: Shield
+class spell_pri_crystalline_reflection : public AuraScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo
+ ({
+ SPELL_PRIEST_CRYSTALLINE_REFLECTION,
+ SPELL_PRIEST_CRYSTALLINE_REFLECTION_HEAL,
+ SPELL_PRIEST_CRYSTALLINE_REFLECTION_REFLECT,
+ }) && ValidateSpellEffect({ { SPELL_PRIEST_CRYSTALLINE_REFLECTION, EFFECT_0 } });
+ }
+
+ void HandleOnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
+ {
+ Unit* caster = GetCaster();
+ if (!caster)
+ return;
+
+ // Crystalline Reflection Heal
+ if (caster->HasAura(SPELL_PRIEST_CRYSTALLINE_REFLECTION))
+ caster->CastSpell(GetTarget(), SPELL_PRIEST_CRYSTALLINE_REFLECTION_HEAL, CastSpellExtraArgs(aurEff)
+ .SetTriggerFlags(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR));
+ }
+
+ void HandleAfterAbsorb(AuraEffect const* /*aurEff*/, DamageInfo const& dmgInfo, uint32 const& absorbAmount) const
+ {
+ Unit* caster = GetCaster();
+ if (!caster)
+ return;
+
+ AuraEffect const* auraEff = caster->GetAuraEffect(SPELL_PRIEST_CRYSTALLINE_REFLECTION, EFFECT_0);
+ if (!auraEff)
+ return;
+
+ Unit* attacker = dmgInfo.GetAttacker();
+ if (!attacker)
+ return;
+
+ CastSpellExtraArgs args(TRIGGERED_DONT_REPORT_CAST_ERROR);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(absorbAmount, auraEff->GetAmount()));
+ caster->CastSpell(attacker, SPELL_PRIEST_CRYSTALLINE_REFLECTION_REFLECT, args);
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_pri_crystalline_reflection::HandleOnApply, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ AfterEffectAbsorb += AuraEffectAbsorbFn(spell_pri_crystalline_reflection::HandleAfterAbsorb, EFFECT_0);
+ }
+};
+
// 8092 - Mind Blast
class spell_pri_dark_indulgence : public SpellScript
{
@@ -3064,6 +3118,7 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_benediction);
RegisterSpellScript(spell_pri_blaze_of_light);
RegisterSpellScript(spell_pri_circle_of_healing);
+ RegisterSpellScript(spell_pri_crystalline_reflection);
RegisterSpellScript(spell_pri_dark_indulgence);
RegisterSpellScript(spell_pri_divine_aegis);
RegisterSpellScript(spell_pri_divine_image);