diff options
author | Aqua Deus <95978183+aquadeus@users.noreply.github.com> | 2024-11-24 16:14:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-24 16:14:31 +0100 |
commit | bd54059dbba695d14521d8970a4b648170804612 (patch) | |
tree | 2177f9f10fba0d34d318c3bbda3f69751f517df9 | |
parent | 3f90e4853e71548eb90da709243c0de0a0443428 (diff) |
Scripts/Spells: Fix Rogue Stealth with cleanup for dropped spells and move some linked spells to their own separate scripts (#30378)
-rw-r--r-- | sql/updates/world/master/2024_11_24_00_world.sql | 10 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 144 |
2 files changed, 113 insertions, 41 deletions
diff --git a/sql/updates/world/master/2024_11_24_00_world.sql b/sql/updates/world/master/2024_11_24_00_world.sql new file mode 100644 index 00000000000..34cec28b8d8 --- /dev/null +++ b/sql/updates/world/master/2024_11_24_00_world.sql @@ -0,0 +1,10 @@ +DELETE FROM `spell_proc` WHERE `SpellId` IN (343173); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(343173,0x00,8,0x2000040C,0x00000000,0x00000808,0x80002100,0x0,0x0,0x1,0x2,0x0,0x0,0x0,0,0,0,0); -- Premeditation + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_rog_premeditation', 'spell_rog_shadow_focus', 'spell_rog_premeditation_proc'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(1784, 'spell_rog_premeditation'), +(343173, 'spell_rog_premeditation_proc'), +(1784, 'spell_rog_shadow_focus'), +(185313, 'spell_rog_shadow_focus'); diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 4773b7a584b..a64ccf2a7af 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -58,7 +58,6 @@ enum RogueSpells SPELL_ROGUE_CRIPPLING_POISON_DEBUFF = 3409, SPELL_ROGUE_DEADLY_POISON = 2823, SPELL_ROGUE_DEADLY_POISON_DEBUFF = 2818, - SPELL_ROGUE_DEATH_FROM_ABOVE = 152150, SPELL_ROGUE_GRAND_MELEE = 193358, SPELL_ROGUE_GRAPPLING_HOOK = 195457, SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH = 392401, @@ -72,13 +71,12 @@ enum RogueSpells SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG = 57841, SPELL_ROGUE_KILLING_SPREE_DMG_BUFF = 61851, SPELL_ROGUE_MARKED_FOR_DEATH = 137619, - SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT = 31665, - SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE = 31223, SPELL_ROGUE_MAIN_GAUCHE = 86392, SPELL_ROGUE_NUMBING_POISON = 5761, SPELL_ROGUE_NUMBING_POISON_DEBUFF = 5760, SPELL_ROGUE_PREMEDITATION_PASSIVE = 343160, SPELL_ROGUE_PREMEDITATION_AURA = 343173, + SPELL_ROGUE_PREMEDITATION_ENERGIZE = 343170, SPELL_ROGUE_PREY_ON_THE_WEAK_TALENT = 131511, SPELL_ROGUE_PREY_ON_THE_WEAK = 255909, SPELL_ROGUE_RUTHLESS_PRECISION = 193357, @@ -790,6 +788,55 @@ class spell_rog_poisoned_knife : public SpellScript } }; +// Called by 1784 - Stealth +class spell_rog_premeditation : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_PREMEDITATION_PASSIVE, SPELL_ROGUE_PREMEDITATION_AURA }); + } + + bool Load() override + { + return GetCaster()->HasAura(SPELL_ROGUE_PREMEDITATION_PASSIVE); + } + + void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_ROGUE_PREMEDITATION_AURA, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringAura = aurEff + }); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_rog_premeditation::HandleEffectApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 343173 - Premeditation (proc) +class spell_rog_premeditation_proc : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_PREMEDITATION_ENERGIZE }); + } + + void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_ROGUE_PREMEDITATION_ENERGIZE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringAura = aurEff + }); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_rog_premeditation_proc::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + // 131511 - Prey on the Weak // Called by Cheap Shot - 1833 and Kidney Shot - 408 class spell_rog_prey_on_the_weak : public AuraScript @@ -816,7 +863,7 @@ class spell_rog_prey_on_the_weak : public AuraScript class spell_rog_restless_blades : public AuraScript { static uint32 constexpr Spells[] = { SPELL_ROGUE_ADRENALINE_RUSH, SPELL_ROGUE_BETWEEN_THE_EYES, SPELL_ROGUE_SPRINT, - SPELL_ROGUE_GRAPPLING_HOOK, SPELL_ROGUE_VANISH, SPELL_ROGUE_KILLING_SPREE, SPELL_ROGUE_MARKED_FOR_DEATH, SPELL_ROGUE_DEATH_FROM_ABOVE }; + SPELL_ROGUE_GRAPPLING_HOOK, SPELL_ROGUE_VANISH, SPELL_ROGUE_KILLING_SPREE, SPELL_ROGUE_MARKED_FOR_DEATH }; bool Validate(SpellInfo const* /*spellInfo*/) override { @@ -997,6 +1044,39 @@ private: bool _hasPremeditationAura = false; }; +// Called by 1784 - Stealth and 185313 - Shadow Dance +class spell_rog_shadow_focus : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_SHADOW_FOCUS, SPELL_ROGUE_SHADOW_FOCUS_EFFECT }); + } + + bool Load() override + { + return GetCaster()->HasAura(SPELL_ROGUE_SHADOW_FOCUS); + } + + void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_SHADOW_FOCUS_EFFECT, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringAura = aurEff + }); + } + + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_ROGUE_SHADOW_FOCUS_EFFECT); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_rog_shadow_focus::HandleEffectApply, EFFECT_1, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_shadow_focus::HandleEffectRemove, EFFECT_1, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); + } +}; + // 193315 - Sinister Strike class spell_rog_sinister_strike : public SpellScript { @@ -1060,63 +1140,42 @@ class spell_rog_stealth : public AuraScript { return ValidateSpellInfo( { - SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE, - SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT, SPELL_ROGUE_SANCTUARY, - SPELL_ROGUE_SHADOW_FOCUS, - SPELL_ROGUE_SHADOW_FOCUS_EFFECT, SPELL_ROGUE_STEALTH_STEALTH_AURA, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA }); } - void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - // Master of Subtlety - if (target->HasAura(SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE)) - target->CastSpell(target, SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT, TRIGGERED_FULL_MASK); - - // Shadow Focus - if (target->HasAura(SPELL_ROGUE_SHADOW_FOCUS)) - target->CastSpell(target, SPELL_ROGUE_SHADOW_FOCUS_EFFECT, TRIGGERED_FULL_MASK); - - // Premeditation - if (target->HasAura(SPELL_ROGUE_PREMEDITATION_PASSIVE)) - target->CastSpell(target, SPELL_ROGUE_PREMEDITATION_AURA, true); - - target->CastSpell(target, SPELL_ROGUE_SANCTUARY, TRIGGERED_FULL_MASK); - target->CastSpell(target, SPELL_ROGUE_STEALTH_STEALTH_AURA, TRIGGERED_FULL_MASK); - target->CastSpell(target, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA, TRIGGERED_FULL_MASK); + target->CastSpell(target, SPELL_ROGUE_SANCTUARY, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringAura = aurEff + }); + target->CastSpell(target, SPELL_ROGUE_STEALTH_STEALTH_AURA, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringAura = aurEff + }); + target->CastSpell(target, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringAura = aurEff + }); } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - // Master of Subtlety - if (AuraEffect* masterOfSubtletyPassive = GetTarget()->GetAuraEffect(SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE, EFFECT_0)) - { - if (Aura* masterOfSubtletyAura = GetTarget()->GetAura(SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT)) - { - masterOfSubtletyAura->SetMaxDuration(masterOfSubtletyPassive->GetAmount()); - masterOfSubtletyAura->RefreshDuration(); - } - } - - // Premeditation - target->RemoveAura(SPELL_ROGUE_PREMEDITATION_AURA); - - target->RemoveAurasDueToSpell(SPELL_ROGUE_SHADOW_FOCUS_EFFECT); target->RemoveAurasDueToSpell(SPELL_ROGUE_STEALTH_STEALTH_AURA); target->RemoveAurasDueToSpell(SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA); } void Register() override { - AfterEffectApply += AuraEffectApplyFn(spell_rog_stealth::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectRemoveFn(spell_rog_stealth::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectApply += AuraEffectApplyFn(spell_rog_stealth::HandleEffectApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_stealth::HandleEffectRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; @@ -1299,7 +1358,7 @@ class spell_rog_vanish_aura : public AuraScript } }; -// 79134 - Venomous Wounds - SPELL_ROGUE_VENOMOUS_WOUNDS +// 79134 - Venomous Wounds class spell_rog_venomous_wounds : public AuraScript { void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) @@ -1336,12 +1395,15 @@ void AddSC_rogue_spell_scripts() RegisterSpellScript(spell_rog_mastery_main_gauche); RegisterSpellScript(spell_rog_pickpocket); RegisterSpellScript(spell_rog_poisoned_knife); + RegisterSpellScript(spell_rog_premeditation); + RegisterSpellScript(spell_rog_premeditation_proc); RegisterSpellScript(spell_rog_prey_on_the_weak); RegisterSpellScript(spell_rog_restless_blades); RegisterSpellScript(spell_rog_roll_the_bones); RegisterSpellScript(spell_rog_rupture); RegisterSpellScript(spell_rog_ruthlessness); RegisterSpellScript(spell_rog_shadowstrike); + RegisterSpellScript(spell_rog_shadow_focus); RegisterSpellScript(spell_rog_sinister_strike); RegisterSpellScript(spell_rog_soothing_darkness); RegisterSpellScript(spell_rog_stealth); |