aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2023_04_01_00_world.sql38
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp242
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);
}