diff options
-rw-r--r-- | sql/updates/world/master/2025_02_17_03_world.sql | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 74 |
2 files changed, 23 insertions, 54 deletions
diff --git a/sql/updates/world/master/2025_02_17_03_world.sql b/sql/updates/world/master/2025_02_17_03_world.sql new file mode 100644 index 00000000000..f86192a9f7f --- /dev/null +++ b/sql/updates/world/master/2025_02_17_03_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_linked_spell` WHERE ABS(`spell_trigger`) = 25771; +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +(25771, 61988, 2, 'Forbearance - link duration of serverside Divine Shield Exclude Aura '); diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 0463245536f..1a18919faef 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -351,32 +351,20 @@ class spell_pal_blessing_of_protection : public SpellScript return ValidateSpellInfo( { SPELL_PALADIN_FORBEARANCE, - // uncomment when we have serverside only spells - //SPELL_PALADIN_IMMUNE_SHIELD_MARKER + SPELL_PALADIN_IMMUNE_SHIELD_MARKER }) && spellInfo->ExcludeTargetAuraSpell == SPELL_PALADIN_IMMUNE_SHIELD_MARKER; } - SpellCastResult CheckForbearance() - { - Unit* target = GetExplTargetUnit(); - if (!target || target->HasAura(SPELL_PALADIN_FORBEARANCE)) - return SPELL_FAILED_TARGET_AURASTATE; - - return SPELL_CAST_OK; - } - - void TriggerForbearance() + void TriggerForbearance() const { - if (Unit* target = GetHitUnit()) - { - GetCaster()->CastSpell(target, SPELL_PALADIN_FORBEARANCE, true); - GetCaster()->CastSpell(target, SPELL_PALADIN_IMMUNE_SHIELD_MARKER, true); - } + GetCaster()->CastSpell(GetHitUnit(), SPELL_PALADIN_FORBEARANCE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); } void Register() override { - OnCheckCast += SpellCheckCastFn(spell_pal_blessing_of_protection::CheckForbearance); AfterHit += SpellHitFn(spell_pal_blessing_of_protection::TriggerForbearance); } }; @@ -544,37 +532,28 @@ class spell_pal_divine_shield : public SpellScript SPELL_PALADIN_FINAL_STAND, SPELL_PALADIN_FINAL_STAND_EFFECT, SPELL_PALADIN_FORBEARANCE, - // uncomment when we have serverside only spells - //SPELL_PALADIN_IMMUNE_SHIELD_MARKER + SPELL_PALADIN_IMMUNE_SHIELD_MARKER }) && spellInfo->ExcludeCasterAuraSpell == SPELL_PALADIN_IMMUNE_SHIELD_MARKER; } - SpellCastResult CheckForbearance() - { - if (GetCaster()->HasAura(SPELL_PALADIN_FORBEARANCE)) - return SPELL_FAILED_TARGET_AURASTATE; - - return SPELL_CAST_OK; - } - void HandleFinalStand() { if (GetCaster()->HasAura(SPELL_PALADIN_FINAL_STAND)) GetCaster()->CastSpell(nullptr, SPELL_PALADIN_FINAL_STAND_EFFECT, true); } - void TriggerForbearance() + void TriggerForbearance() const { - Unit* caster = GetCaster(); - caster->CastSpell(caster, SPELL_PALADIN_FORBEARANCE, true); - caster->CastSpell(caster, SPELL_PALADIN_IMMUNE_SHIELD_MARKER, true); + GetCaster()->CastSpell(GetHitUnit(), SPELL_PALADIN_FORBEARANCE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); } void Register() override { - OnCheckCast += SpellCheckCastFn(spell_pal_divine_shield::CheckForbearance); AfterCast += SpellCastFn(spell_pal_divine_shield::HandleFinalStand); - AfterCast += SpellCastFn(spell_pal_divine_shield::TriggerForbearance); + AfterHit += SpellHitFn(spell_pal_divine_shield::TriggerForbearance); } }; @@ -1264,35 +1243,22 @@ class spell_pal_item_t6_trinket : public AuraScript // 471195 - Lay on Hands (from 387791 - Empyreal Ward) class spell_pal_lay_on_hands : public SpellScript { - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_PALADIN_FORBEARANCE, SPELL_PALADIN_IMMUNE_SHIELD_MARKER }); - } - - SpellCastResult CheckForbearance() const + bool Validate(SpellInfo const* spellInfo) override { - Unit* target = GetExplTargetUnit(); - if (!target || target->HasAura(SPELL_PALADIN_FORBEARANCE)) - return SPELL_FAILED_TARGET_AURASTATE; - - return SPELL_CAST_OK; + return ValidateSpellInfo({ SPELL_PALADIN_FORBEARANCE }) + && spellInfo->ExcludeTargetAuraSpell == SPELL_PALADIN_IMMUNE_SHIELD_MARKER; } void TriggerForbearance() const { - if (Unit* target = GetHitUnit()) - { - CastSpellExtraArgs args(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); - args.SetTriggeringSpell(GetSpell()); - - GetCaster()->CastSpell(target, SPELL_PALADIN_FORBEARANCE, args); - GetCaster()->CastSpell(target, SPELL_PALADIN_IMMUNE_SHIELD_MARKER, args); - } + GetCaster()->CastSpell(GetHitUnit(), SPELL_PALADIN_FORBEARANCE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); } void Register() override { - OnCheckCast += SpellCheckCastFn(spell_pal_lay_on_hands::CheckForbearance); AfterHit += SpellHitFn(spell_pal_lay_on_hands::TriggerForbearance); } }; |