Skip to content

Commit e07137a

Browse files
authored
Scripts/Spells: Implement rogue talent Leeching Poison (TrinityCore#30383)
1 parent f0c2eb6 commit e07137a

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
DELETE FROM `spell_script_names` WHERE `spell_id` IN (315584, 8679, 2823, 381664) AND `ScriptName`='spell_rog_leeching_poison';
2+
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
3+
(315584, 'spell_rog_leeching_poison'),
4+
(8679, 'spell_rog_leeching_poison'),
5+
(2823, 'spell_rog_leeching_poison'),
6+
(381664, 'spell_rog_leeching_poison');

src/server/scripts/Spells/spell_rogue.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ enum RogueSpells
7070
SPELL_ROGUE_KILLING_SPREE_TELEPORT = 57840,
7171
SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG = 57841,
7272
SPELL_ROGUE_KILLING_SPREE_DMG_BUFF = 61851,
73+
SPELL_ROGUE_LEECHING_POISON_TALENT = 280716,
74+
SPELL_ROGUE_LEECHING_POISON_AURA = 108211,
7375
SPELL_ROGUE_MARKED_FOR_DEATH = 137619,
7476
SPELL_ROGUE_MAIN_GAUCHE = 86392,
7577
SPELL_ROGUE_NIGHT_TERRORS = 277953,
@@ -142,6 +144,20 @@ bool IsFinishingMove(Spell const* spell)
142144
return GetFinishingMoveCPCost(spell).has_value();
143145
}
144146

147+
static constexpr bool IsLethalPoison(uint32 spellId)
148+
{
149+
switch (spellId)
150+
{
151+
case SPELL_ROGUE_DEADLY_POISON:
152+
case SPELL_ROGUE_WOUND_POISON:
153+
case SPELL_ROGUE_INSTANT_POISON:
154+
case SPELL_ROGUE_AMPLIFYING_POISON:
155+
return true;
156+
default:
157+
return false;
158+
}
159+
}
160+
145161
// 455143 - Acrobatic Strikes
146162
class spell_rog_acrobatic_strikes : public AuraScript
147163
{
@@ -719,6 +735,48 @@ class spell_rog_kingsbane : public AuraScript
719735
}
720736
};
721737

738+
// 2823 - Deadly Poison
739+
// 8679 - Wound Poison
740+
// 315584 - Instant Poison
741+
// 381664 - Amplifying Poison
742+
class spell_rog_leeching_poison : public AuraScript
743+
{
744+
bool Validate(SpellInfo const* /*spellInfo*/) override
745+
{
746+
return ValidateSpellInfo({ SPELL_ROGUE_LEECHING_POISON_TALENT, SPELL_ROGUE_LEECHING_POISON_AURA });
747+
}
748+
749+
bool Load() override
750+
{
751+
return GetCaster()->HasAura(SPELL_ROGUE_LEECHING_POISON_TALENT);
752+
}
753+
754+
void HandleOnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
755+
{
756+
GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_LEECHING_POISON_AURA, CastSpellExtraArgsInit{
757+
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
758+
.TriggeringAura = aurEff
759+
});
760+
}
761+
762+
void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
763+
{
764+
bool hasLethalPoisonActive = GetTarget()->HasAura([](Aura const* aura) -> bool
765+
{
766+
return IsLethalPoison(aura->GetId());
767+
});
768+
769+
if (!hasLethalPoisonActive)
770+
GetTarget()->RemoveAurasDueToSpell(SPELL_ROGUE_LEECHING_POISON_AURA);
771+
}
772+
773+
void Register() override
774+
{
775+
AfterEffectApply += AuraEffectApplyFn(spell_rog_leeching_poison::HandleOnApply, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
776+
AfterEffectRemove += AuraEffectRemoveFn(spell_rog_leeching_poison::HandleOnRemove, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
777+
}
778+
};
779+
722780
// 76806 - Mastery: Main Gauche
723781
class spell_rog_mastery_main_gauche : public AuraScript
724782
{
@@ -1525,6 +1583,7 @@ void AddSC_rogue_spell_scripts()
15251583
RegisterSpellScript(spell_rog_improved_shiv);
15261584
RegisterSpellAndAuraScriptPair(spell_rog_killing_spree, spell_rog_killing_spree_aura);
15271585
RegisterSpellScript(spell_rog_kingsbane);
1586+
RegisterSpellScript(spell_rog_leeching_poison);
15281587
RegisterSpellScript(spell_rog_mastery_main_gauche);
15291588
RegisterSpellScript(spell_rog_night_terrors);
15301589
RegisterSpellScript(spell_rog_pickpocket);

0 commit comments

Comments
 (0)