diff options
-rw-r--r-- | sql/updates/world/master/2023_07_22_02_world.sql | 7 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 36 |
2 files changed, 43 insertions, 0 deletions
diff --git a/sql/updates/world/master/2023_07_22_02_world.sql b/sql/updates/world/master/2023_07_22_02_world.sql new file mode 100644 index 00000000000..278e0fd41bc --- /dev/null +++ b/sql/updates/world/master/2023_07_22_02_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_custom_attr` WHERE `entry`=184689; +INSERT INTO `spell_custom_attr` (`entry`,`attributes`) VALUES +(184689,0x8); -- SPELL_ATTR0_CU_SHARE_DAMAGE + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pal_shield_of_vengeance'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(184662,'spell_pal_shield_of_vengeance'); diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index e0bedb8ca7b..56eef5f4931 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -99,6 +99,7 @@ enum PaladinSpells SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT = 31790, SPELL_PALADIN_RIGHTEOUS_VERDICT_AURA = 267611, SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS = 25742, + SPELL_PALADIN_SHIELD_OF_VENGEANCE_DAMAGE = 184689, SPELL_PALADIN_TEMPLAR_VERDICT_DAMAGE = 224266, SPELL_PALADIN_T30_2P_HEARTFIRE_DAMAGE = 408399, SPELL_PALADIN_T30_2P_HEARTFIRE_HEAL = 408400, @@ -1427,6 +1428,40 @@ class spell_pal_selfless_healer : public AuraScript } }; +// 184662 - Shield of Vengeance +class spell_pal_shield_of_vengeance : public AuraScript +{ + PrepareAuraScript(spell_pal_shield_of_vengeance); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ SPELL_PALADIN_SHIELD_OF_VENGEANCE_DAMAGE }) && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + amount = CalculatePct(GetUnitOwner()->GetMaxHealth(), GetEffectInfo(EFFECT_1).CalcValue()); + if (Player const* player = GetUnitOwner()->ToPlayer()) + AddPct(amount, player->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) + player->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY)); + + _initialAmount = amount; + } + + void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_SHIELD_OF_VENGEANCE_DAMAGE, + CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, _initialAmount - aurEff->GetAmount())); + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_shield_of_vengeance::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + OnEffectRemove += AuraEffectApplyFn(spell_pal_shield_of_vengeance::HandleRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL); + } + + int32 _initialAmount = 0; +}; + // 85256 - Templar's Verdict class spell_pal_templar_s_verdict : public SpellScript { @@ -1663,6 +1698,7 @@ void AddSC_paladin_spell_scripts() RegisterSpellScript(spell_pal_righteous_protector); RegisterSpellScript(spell_pal_righteous_verdict); RegisterSpellScript(spell_pal_selfless_healer); + RegisterSpellScript(spell_pal_shield_of_vengeance); RegisterSpellScript(spell_pal_templar_s_verdict); RegisterSpellScript(spell_pal_t3_6p_bonus); RegisterSpellScript(spell_pal_t8_2p_bonus); |