mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Scripts/Spells: Implement rogue talent Leeching Poison (#30383)
This commit is contained in:
6
sql/updates/world/master/2026_02_05_00_world.sql
Normal file
6
sql/updates/world/master/2026_02_05_00_world.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` IN (315584, 8679, 2823, 381664) AND `ScriptName`='spell_rog_leeching_poison';
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(315584, 'spell_rog_leeching_poison'),
|
||||
(8679, 'spell_rog_leeching_poison'),
|
||||
(2823, 'spell_rog_leeching_poison'),
|
||||
(381664, 'spell_rog_leeching_poison');
|
||||
@@ -70,6 +70,8 @@ enum RogueSpells
|
||||
SPELL_ROGUE_KILLING_SPREE_TELEPORT = 57840,
|
||||
SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG = 57841,
|
||||
SPELL_ROGUE_KILLING_SPREE_DMG_BUFF = 61851,
|
||||
SPELL_ROGUE_LEECHING_POISON_TALENT = 280716,
|
||||
SPELL_ROGUE_LEECHING_POISON_AURA = 108211,
|
||||
SPELL_ROGUE_MARKED_FOR_DEATH = 137619,
|
||||
SPELL_ROGUE_MAIN_GAUCHE = 86392,
|
||||
SPELL_ROGUE_NIGHT_TERRORS = 277953,
|
||||
@@ -142,6 +144,20 @@ bool IsFinishingMove(Spell const* spell)
|
||||
return GetFinishingMoveCPCost(spell).has_value();
|
||||
}
|
||||
|
||||
static constexpr bool IsLethalPoison(uint32 spellId)
|
||||
{
|
||||
switch (spellId)
|
||||
{
|
||||
case SPELL_ROGUE_DEADLY_POISON:
|
||||
case SPELL_ROGUE_WOUND_POISON:
|
||||
case SPELL_ROGUE_INSTANT_POISON:
|
||||
case SPELL_ROGUE_AMPLIFYING_POISON:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 455143 - Acrobatic Strikes
|
||||
class spell_rog_acrobatic_strikes : public AuraScript
|
||||
{
|
||||
@@ -719,6 +735,48 @@ class spell_rog_kingsbane : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 2823 - Deadly Poison
|
||||
// 8679 - Wound Poison
|
||||
// 315584 - Instant Poison
|
||||
// 381664 - Amplifying Poison
|
||||
class spell_rog_leeching_poison : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_ROGUE_LEECHING_POISON_TALENT, SPELL_ROGUE_LEECHING_POISON_AURA });
|
||||
}
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
return GetCaster()->HasAura(SPELL_ROGUE_LEECHING_POISON_TALENT);
|
||||
}
|
||||
|
||||
void HandleOnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_LEECHING_POISON_AURA, CastSpellExtraArgsInit{
|
||||
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
|
||||
.TriggeringAura = aurEff
|
||||
});
|
||||
}
|
||||
|
||||
void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
bool hasLethalPoisonActive = GetTarget()->HasAura([](Aura const* aura) -> bool
|
||||
{
|
||||
return IsLethalPoison(aura->GetId());
|
||||
});
|
||||
|
||||
if (!hasLethalPoisonActive)
|
||||
GetTarget()->RemoveAurasDueToSpell(SPELL_ROGUE_LEECHING_POISON_AURA);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_rog_leeching_poison::HandleOnApply, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_rog_leeching_poison::HandleOnRemove, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 76806 - Mastery: Main Gauche
|
||||
class spell_rog_mastery_main_gauche : public AuraScript
|
||||
{
|
||||
@@ -1525,6 +1583,7 @@ void AddSC_rogue_spell_scripts()
|
||||
RegisterSpellScript(spell_rog_improved_shiv);
|
||||
RegisterSpellAndAuraScriptPair(spell_rog_killing_spree, spell_rog_killing_spree_aura);
|
||||
RegisterSpellScript(spell_rog_kingsbane);
|
||||
RegisterSpellScript(spell_rog_leeching_poison);
|
||||
RegisterSpellScript(spell_rog_mastery_main_gauche);
|
||||
RegisterSpellScript(spell_rog_night_terrors);
|
||||
RegisterSpellScript(spell_rog_pickpocket);
|
||||
|
||||
Reference in New Issue
Block a user