Scripts/Spells: Implement rogue talent Leeching Poison (#30383)

This commit is contained in:
Aqua Deus
2026-02-05 00:33:31 +01:00
committed by GitHub
parent f0c2eb652d
commit e07137ab23
2 changed files with 65 additions and 0 deletions

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

View File

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