DB/Spells: Added proc requirements to a few auras that have SPELL_ATTR3_CAN_PROC_FROM_PROCS attribute

This commit is contained in:
Shauren
2023-04-01 16:24:14 +02:00
parent 1895f2230c
commit f6ab9fd92e
2 changed files with 194 additions and 110 deletions

View File

@@ -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');

View File

@@ -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 CheckForStun(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
{
return eventInfo.GetProcSpell() && eventInfo.GetProcSpell()->GetSpellInfo()->HasAura(SPELL_AURA_MOD_STUN);
}
void Register() override
{
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();
if (!target->HasAuraType(SPELL_AURA_MOD_STUN))
{
target->CastSpell(target, SPELL_ROGUE_TURN_THE_TABLES_BUFF, aurEff);
PreventDefaultAction();
Remove();
}
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_turn_the_tables_periodic_check::CheckForStun, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
// 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_HONOR_AMONG_THIEVES_ENERGIZE });
return ValidateSpellInfo({ SPELL_ROGUE_VANISH_AURA, SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA });
}
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
void OnLaunchTarget(SpellEffIndex effIndex)
{
PreventDefaultAction();
PreventHitDefaultEffect(effIndex);
Unit* target = GetTarget();
target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, aurEff);
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
{
OnEffectProc += AuraEffectProcFn(spell_rog_honor_among_thieves::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectLaunchTarget += SpellEffectFn(spell_rog_vanish::OnLaunchTarget, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL);
}
};
// 196819 - Eviscerate
class spell_rog_eviscerate : public SpellScript
// 11327 - Vanish
class spell_rog_vanish_aura : public AuraScript
{
PrepareSpellScript(spell_rog_eviscerate);
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();
return ValidateSpellInfo({ SPELL_ROGUE_STEALTH });
}
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 HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_STEALTH, TRIGGERED_FULL_MASK);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rog_eviscerate::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
// 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);
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);
}