diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-04-01 16:24:14 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-04-01 16:24:14 +0200 |
commit | f6ab9fd92e2a2db6656cdf6700e8f8af60b084b4 (patch) | |
tree | 1a41b70fa01aab216c64e2458a9e12e3fa8a8b47 | |
parent | 1895f2230c2cc1ad517cbe9e49987200740948f4 (diff) |
DB/Spells: Added proc requirements to a few auras that have SPELL_ATTR3_CAN_PROC_FROM_PROCS attribute
-rw-r--r-- | sql/updates/world/master/2023_04_01_00_world.sql | 38 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 242 |
2 files changed, 182 insertions, 98 deletions
diff --git a/sql/updates/world/master/2023_04_01_00_world.sql b/sql/updates/world/master/2023_04_01_00_world.sql new file mode 100644 index 00000000000..df9724c712f --- /dev/null +++ b/sql/updates/world/master/2023_04_01_00_world.sql @@ -0,0 +1,38 @@ +DELETE FROM `spell_proc` WHERE `SpellId` IN (145738,146197,152520,157299,157319,165308,165432,165547,165641,165691,166012,166020,170877,170883,182303,185789,185872,187213,188369,191339,192623,192759,194607,195008,195330,196675,197147,198063,199527,199806,199887); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(145738,0x00,9,0x00080000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Item - Hunter T16 BM 4P Pet Driver +(146197,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Essence of Yu'lon +(152520,0x04,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0,0,0,0), -- Black Powder +(157299,0x00,11,0x00000003,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0,0,0,0), -- Storm Elemental +(157319,0x00,11,0x00000003,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0,0,0,0), -- Storm Elemental +(165308,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x0,0x0,0x0,0,0,0,0), -- Gushing Wound +(165432,0x00,7,0x00000000,0x00000000,0x00000040,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Druid T17 Feral 4P Bonus +(165547,0x00,15,0x00200000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Death Knight T17 Frost 2P Bonus +(165641,0x00,4,0x00000000,0x00010000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Warrior WoD PvP Protection 2P Bonus +(165691,0x00,53,0x00000080,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Monk WoD PvP Brewmaster 2P Bonus +(166012,0x00,9,0x00000000,0x00000080,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Item - Hunter WoD PvP Survival 4P Bonus +(166020,0x00,15,0x02000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Death Knight WoD PvP 2P Bonus +(170877,0x00,8,0x08000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Rogue WoD PvP Subtlety 4P Bonus +(170883,0x00,8,0x00000800,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Rogue WoD PvP Assassination 4P Bonus +(182303,0x00,8,0x00000800,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Rogue WoD PvP Combat 4P Bonus +(185789,0x00,9,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x402,0x0,0x0,0,0,0,0), -- Wild Call +(185872,0x00,11,0x00000000,0x00000000,0x04000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Item - Shaman T18 Enhancement 4P Bonus +(187213,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x1000,0x0,0x0,0,0,0,0), -- Impatient Mind +(188369,0x00,11,0x00000001,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Tempest +(191339,0x00,9,0x00000000,0x00200000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Rapid Killing +(192623,0x00,11,0x00000000,0x00000000,0x00008000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Ra-den's Fury +(192759,0x00,8,0x00010000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Kingsbane (Artifact) +(194607,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x402,0x0,0x0,0,0,0,0), -- Reflection of Torment +(195008,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Essence of Life +(195330,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Defender of the Weak (PvP Talent) +(196675,0x00,5,0x00000000,0x00000000,0x00000000,0x40000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Planeswalker +(197147,0x00,15,0x00000000,0x00000000,0x00000200,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Festering Wound +(198063,0x00,3,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x1000,0x0,0x0,0,0,0,0), -- Burning Determination (PvP Talent) +(199527,0x00,9,0x00020000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- True Aim +(199806,0x00,53,0x00000000,0x00000000,0x00008000,0x00000002,0x0,0x0,0x2,0x1,0x403,0x0,0x0,0,0,0,0), -- Shaohao's Mists of Wisdom +(199887,0x00,53,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0); -- The Mists of Sheilun + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_rog_turn_the_tables','spell_rog_turn_the_tables_periodic_check'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(198020,'spell_rog_turn_the_tables'), +(198023,'spell_rog_turn_the_tables_periodic_check'); diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 826101f6989..69be47e8777 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -68,6 +68,7 @@ enum RogueSpells SPELL_ROGUE_SYMBOLS_OF_DEATH_CRIT_AURA = 227151, SPELL_ROGUE_SYMBOLS_OF_DEATH_RANK2 = 328077, SPELL_ROGUE_TRUE_BEARING = 193359, + SPELL_ROGUE_TURN_THE_TABLES_BUFF = 198027, SPELL_ROGUE_VANISH = 1856, SPELL_ROGUE_VANISH_AURA = 11327, SPELL_ROGUE_TRICKS_OF_THE_TRADE = 57934, @@ -250,6 +251,58 @@ class spell_rog_deadly_poison : public SpellScript uint8 _stackAmount = 0; }; +// 32645 - Envenom +class spell_rog_envenom : public SpellScript +{ + PrepareSpellScript(spell_rog_envenom); + + void CalculateDamage(SpellEffIndex /*effIndex*/) + { + int32 damagePerCombo = GetHitDamage(); + if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) + damagePerCombo += t5->GetAmount(); + + int32 finalDamage = damagePerCombo; + std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); + auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); + if (c != costs.end()) + finalDamage *= c->Amount; + + SetHitDamage(finalDamage); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_rog_envenom::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + +// 196819 - Eviscerate +class spell_rog_eviscerate : public SpellScript +{ + PrepareSpellScript(spell_rog_eviscerate); + + void CalculateDamage(SpellEffIndex /*effIndex*/) + { + int32 damagePerCombo = GetHitDamage(); + if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) + damagePerCombo += t5->GetAmount(); + + int32 finalDamage = damagePerCombo; + std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); + auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); + if (c != costs.end()) + finalDamage *= c->Amount; + + SetHitDamage(finalDamage); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_rog_eviscerate::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + // 193358 - Grand Melee class spell_rog_grand_melee : public AuraScript { @@ -292,6 +345,31 @@ class spell_rog_grand_melee : public AuraScript } }; +// 198031 - Honor Among Thieves +/// 7.1.5 +class spell_rog_honor_among_thieves : public AuraScript +{ + PrepareAuraScript(spell_rog_honor_among_thieves); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE }); + } + + void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, aurEff); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_rog_honor_among_thieves::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + // 51690 - Killing Spree class spell_rog_killing_spree_aura : public AuraScript { @@ -762,60 +840,6 @@ class spell_rog_symbols_of_death : public SpellScript } }; -// 1856 - Vanish - SPELL_ROGUE_VANISH -class spell_rog_vanish : public SpellScript -{ - PrepareSpellScript(spell_rog_vanish); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_ROGUE_VANISH_AURA, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA }); - } - - void OnLaunchTarget(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - - Unit* target = GetHitUnit(); - - target->RemoveAurasByType(SPELL_AURA_MOD_STALKED); - if (target->GetTypeId() != TYPEID_PLAYER) - return; - - if (target->HasAura(SPELL_ROGUE_VANISH_AURA)) - return; - - target->CastSpell(target, SPELL_ROGUE_VANISH_AURA, TRIGGERED_FULL_MASK); - target->CastSpell(target, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA, TRIGGERED_FULL_MASK); - } - - void Register() override - { - OnEffectLaunchTarget += SpellEffectFn(spell_rog_vanish::OnLaunchTarget, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL); - } -}; - -// 11327 - Vanish -class spell_rog_vanish_aura : public AuraScript -{ - PrepareAuraScript(spell_rog_vanish_aura); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_ROGUE_STEALTH }); - } - - void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_STEALTH, TRIGGERED_FULL_MASK); - } - - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_rog_vanish_aura::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } -}; - // 57934 - Tricks of the Trade class spell_rog_tricks_of_the_trade_aura : public AuraScript { @@ -892,80 +916,100 @@ class spell_rog_tricks_of_the_trade_proc : public AuraScript } }; -// 198031 - Honor Among Thieves -/// 7.1.5 -class spell_rog_honor_among_thieves : public AuraScript +// 198020 - Turn the Tables (PvP Talent) +class spell_rog_turn_the_tables : public AuraScript { - PrepareAuraScript(spell_rog_honor_among_thieves); + PrepareAuraScript(spell_rog_turn_the_tables); - bool Validate(SpellInfo const* /*spellInfo*/) override + bool CheckForStun(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) { - return ValidateSpellInfo({ SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE }); + return eventInfo.GetProcSpell() && eventInfo.GetProcSpell()->GetSpellInfo()->HasAura(SPELL_AURA_MOD_STUN); } - void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) + void Register() override { - PreventDefaultAction(); + DoCheckEffectProc += AuraCheckEffectProcFn(spell_rog_turn_the_tables::CheckForStun, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } +}; + +// 198023 - Turn the Tables (periodic) +class spell_rog_turn_the_tables_periodic_check : public AuraScript +{ + PrepareAuraScript(spell_rog_turn_the_tables_periodic_check); + + bool Validate(SpellInfo const*) override + { + return ValidateSpellInfo({ SPELL_ROGUE_TURN_THE_TABLES_BUFF }); + } + void CheckForStun(AuraEffect const* aurEff) + { Unit* target = GetTarget(); - target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, aurEff); + if (!target->HasAuraType(SPELL_AURA_MOD_STUN)) + { + target->CastSpell(target, SPELL_ROGUE_TURN_THE_TABLES_BUFF, aurEff); + PreventDefaultAction(); + Remove(); + } } void Register() override { - OnEffectProc += AuraEffectProcFn(spell_rog_honor_among_thieves::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_turn_the_tables_periodic_check::CheckForStun, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; -// 196819 - Eviscerate -class spell_rog_eviscerate : public SpellScript +// 1856 - Vanish - SPELL_ROGUE_VANISH +class spell_rog_vanish : public SpellScript { - PrepareSpellScript(spell_rog_eviscerate); + PrepareSpellScript(spell_rog_vanish); - void CalculateDamage(SpellEffIndex /*effIndex*/) + bool Validate(SpellInfo const* /*spellInfo*/) override { - int32 damagePerCombo = GetHitDamage(); - if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) - damagePerCombo += t5->GetAmount(); + return ValidateSpellInfo({ SPELL_ROGUE_VANISH_AURA, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA }); + } - int32 finalDamage = damagePerCombo; - std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); - auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); - if (c != costs.end()) - finalDamage *= c->Amount; + void OnLaunchTarget(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); - SetHitDamage(finalDamage); + Unit* target = GetHitUnit(); + + target->RemoveAurasByType(SPELL_AURA_MOD_STALKED); + if (target->GetTypeId() != TYPEID_PLAYER) + return; + + if (target->HasAura(SPELL_ROGUE_VANISH_AURA)) + return; + + target->CastSpell(target, SPELL_ROGUE_VANISH_AURA, TRIGGERED_FULL_MASK); + target->CastSpell(target, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA, TRIGGERED_FULL_MASK); } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_rog_eviscerate::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + OnEffectLaunchTarget += SpellEffectFn(spell_rog_vanish::OnLaunchTarget, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL); } }; -// 32645 - Envenom -class spell_rog_envenom : public SpellScript +// 11327 - Vanish +class spell_rog_vanish_aura : public AuraScript { - PrepareSpellScript(spell_rog_envenom); + PrepareAuraScript(spell_rog_vanish_aura); - void CalculateDamage(SpellEffIndex /*effIndex*/) + bool Validate(SpellInfo const* /*spellInfo*/) override { - int32 damagePerCombo = GetHitDamage(); - if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) - damagePerCombo += t5->GetAmount(); - - int32 finalDamage = damagePerCombo; - std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); - auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); - if (c != costs.end()) - finalDamage *= c->Amount; + return ValidateSpellInfo({ SPELL_ROGUE_STEALTH }); + } - SetHitDamage(finalDamage); + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_STEALTH, TRIGGERED_FULL_MASK); } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_rog_envenom::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_vanish_aura::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; @@ -991,7 +1035,10 @@ void AddSC_rogue_spell_scripts() RegisterSpellScript(spell_rog_backstab); RegisterSpellScript(spell_rog_blade_flurry); RegisterSpellScript(spell_rog_deadly_poison); + RegisterSpellScript(spell_rog_envenom); + RegisterSpellScript(spell_rog_eviscerate); RegisterSpellScript(spell_rog_grand_melee); + RegisterSpellScript(spell_rog_honor_among_thieves); RegisterSpellAndAuraScriptPair(spell_rog_killing_spree, spell_rog_killing_spree_aura); RegisterSpellScript(spell_rog_mastery_main_gauche); RegisterSpellScript(spell_rog_pickpocket); @@ -1003,12 +1050,11 @@ void AddSC_rogue_spell_scripts() RegisterSpellScript(spell_rog_sinister_strike); RegisterSpellScript(spell_rog_stealth); RegisterSpellScript(spell_rog_symbols_of_death); - RegisterSpellScript(spell_rog_vanish); - RegisterSpellScript(spell_rog_vanish_aura); RegisterSpellAndAuraScriptPair(spell_rog_tricks_of_the_trade, spell_rog_tricks_of_the_trade_aura); RegisterSpellScript(spell_rog_tricks_of_the_trade_proc); - RegisterSpellScript(spell_rog_honor_among_thieves); - RegisterSpellScript(spell_rog_eviscerate); - RegisterSpellScript(spell_rog_envenom); + RegisterSpellScript(spell_rog_turn_the_tables); + RegisterSpellScript(spell_rog_turn_the_tables_periodic_check); + RegisterSpellScript(spell_rog_vanish); + RegisterSpellScript(spell_rog_vanish_aura); RegisterSpellScript(spell_rog_venomous_wounds); } |