aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp242
1 files changed, 144 insertions, 98 deletions
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);
}