diff --git a/data/sql/updates/pending_db_world/seals.sql b/data/sql/updates/pending_db_world/seals.sql new file mode 100644 index 000000000..fa75b7356 --- /dev/null +++ b/data/sql/updates/pending_db_world/seals.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (42463, 53739); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES -- Same script name, don't wanna duplicate the spell script +(42463, 'spell_pal_seal_of_vengeance'), +(53739, 'spell_pal_seal_of_vengeance'); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7e346a5e3..d384219a0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -7833,19 +7833,17 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = 31803; - // On target with 5 stacks of Holy Vengeance direct damage is done if (Aura* aur = victim->GetAura(triggered_spell_id, GetGUID())) { if (aur->GetStackAmount() == 5) { if (stacker) aur->RefreshDuration(); - - CastSpell(victim, 42463, true, castItem, triggeredByAura); - return true; } } + CastSpell(victim, 42463, true, castItem, triggeredByAura); // Seal of Vengeance + if (!stacker) return false; break; @@ -7866,19 +7864,17 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = 53742; - // On target with 5 stacks of Blood Corruption direct damage is done if (Aura* aur = victim->GetAura(triggered_spell_id, GetGUID())) { if (aur->GetStackAmount() == 5) { if (stacker) aur->RefreshDuration(); - - CastSpell(victim, 53739, true, castItem, triggeredByAura); - return true; } } + CastSpell(victim, 53739, true, castItem, triggeredByAura); // Seal of Corruption + if (!stacker) return false; break; diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 4793489fe..7dcdeb919 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -90,7 +90,12 @@ enum PaladinSpells // Crystalforge Raiment - Tier 5 Holy 2 Set SPELL_IMPROVED_JUDGEMENT = 37188, - SPELL_IMPROVED_JUDGEMENT_ENERGIZE = 43838 + SPELL_IMPROVED_JUDGEMENT_ENERGIZE = 43838, + + SPELL_PALADIN_HOLY_VENGEANCE = 31803, + SPELL_PALADIN_BLOOD_CORRUPTION = 53742, + SPELL_PALADIN_SEAL_OF_VENGEANCE_EFFECT = 42463, + SPELL_PALADIN_SEAL_OF_CORRUPTION_EFFECT = 53739 }; enum PaladinSpellIcons @@ -1105,6 +1110,45 @@ class spell_pal_seal_of_righteousness : public AuraScript } }; +// 42463 - Seal of Vengeance +// 53739 - Seal of Corruption +class spell_pal_seal_of_vengeance : public SpellScript +{ + PrepareSpellScript(spell_pal_seal_of_vengeance); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PALADIN_SEAL_OF_VENGEANCE_EFFECT, SPELL_PALADIN_SEAL_OF_CORRUPTION_EFFECT }); + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + Unit* target = GetExplTargetUnit(); + uint32 spellId = GetSpell()->GetSpellInfo()->Id; + uint32 auraId = (spellId == SPELL_PALADIN_SEAL_OF_VENGEANCE_EFFECT) + ? SPELL_PALADIN_HOLY_VENGEANCE + : SPELL_PALADIN_BLOOD_CORRUPTION; + int32 damage = GetHitDamage(); + uint8 stacks = 0; + + if (target) + { + Aura* aura = target->GetAura(auraId, GetCaster()->GetGUID()); + if (aura) + stacks = aura->GetStackAmount(); + + damage = ((damage * stacks) / 5); + + SetHitDamage(damage); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_pal_seal_of_vengeance::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE); + } +}; + void AddSC_paladin_spell_scripts() { RegisterSpellAndAuraScriptPair(spell_pal_seal_of_command, spell_pal_seal_of_command_aura); @@ -1132,5 +1176,6 @@ void AddSC_paladin_spell_scripts() RegisterSpellScript(spell_pal_lay_on_hands); RegisterSpellScript(spell_pal_righteous_defense); RegisterSpellScript(spell_pal_seal_of_righteousness); + RegisterSpellScript(spell_pal_seal_of_vengeance); }