Scripts/Spells: Update Vampiric touch script implementing the talent Misery and the dispel fleeing (#29743)

This commit is contained in:
Aqua Deus
2024-02-24 16:35:42 +01:00
committed by GitHub
parent dd15d763cc
commit cf026aa627

View File

@@ -129,6 +129,7 @@ enum PriestSpells
SPELL_PRIEST_MINDGAMES = 375901,
SPELL_PRIEST_MINDGAMES_VENTHYR = 323673,
SPELL_PRIEST_MIND_BOMB_STUN = 226943,
SPELL_PRIEST_MISERY = 238558,
SPELL_PRIEST_ORACULAR_HEAL = 26170,
SPELL_PRIEST_PAIN_TRANSFORMATION = 372991,
SPELL_PRIEST_PAIN_TRANSFORMATION_HEAL = 372994,
@@ -171,6 +172,7 @@ enum PriestSpells
SPELL_PRIEST_SHADOW_WORD_PAIN = 589,
SPELL_PRIEST_SHIELD_DISCIPLINE = 197045,
SPELL_PRIEST_SHIELD_DISCIPLINE_EFFECT = 47755,
SPELL_PRIEST_SIN_AND_PUNISHMENT = 87204,
SPELL_PRIEST_SINS_OF_THE_MANY = 280398,
SPELL_PRIEST_SMITE = 585,
SPELL_PRIEST_SPIRIT_OF_REDEMPTION = 27827,
@@ -187,7 +189,6 @@ enum PriestSpells
SPELL_PRIEST_ULTIMATE_PENITENCE_DAMAGE = 421543,
SPELL_PRIEST_ULTIMATE_PENITENCE_HEAL = 421544,
SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL = 15290,
SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085,
SPELL_PRIEST_VOID_SHIELD = 199144,
SPELL_PRIEST_VOID_SHIELD_EFFECT = 199145,
SPELL_PRIEST_WEAKENED_SOUL = 6788,
@@ -207,11 +208,6 @@ enum PriestSummons
NPC_PRIEST_SHADOWFIEND = 19668
};
enum MiscSpells
{
SPELL_GEN_REPLENISHMENT = 57669
};
class RaidCheck
{
public:
@@ -3158,46 +3154,26 @@ class spell_pri_vampiric_touch : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, SPELL_GEN_REPLENISHMENT });
return ValidateSpellInfo({ SPELL_PRIEST_SIN_AND_PUNISHMENT, SPELL_PRIEST_SHADOW_WORD_PAIN });
}
void HandleDispel(DispelInfo* /*dispelInfo*/)
void HandleDispel(DispelInfo* dispelInfo)
{
if (Unit* caster = GetCaster())
{
if (Unit* target = GetUnitOwner())
{
if (AuraEffect const* aurEff = GetEffect(EFFECT_1))
{
// backfire damage
int32 bp = aurEff->GetAmount();
bp = target->SpellDamageBonusTaken(caster, aurEff->GetSpellInfo(), bp, DOT);
bp *= 8;
CastSpellExtraArgs args(aurEff);
args.AddSpellBP0(bp);
caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, args);
}
}
}
caster->CastSpell(dispelInfo->GetDispeller(), SPELL_PRIEST_SIN_AND_PUNISHMENT, true);
}
bool CheckProc(ProcEventInfo& eventInfo)
void HandleApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
return eventInfo.GetProcTarget() == GetCaster();
}
void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_GEN_REPLENISHMENT, aurEff);
if (Unit* caster = GetCaster())
if (caster->HasAura(SPELL_PRIEST_MISERY))
caster->CastSpell(GetTarget(), SPELL_PRIEST_SHADOW_WORD_PAIN, true);
}
void Register() override
{
AfterDispel += AuraDispelFn(spell_pri_vampiric_touch::HandleDispel);
DoCheckProc += AuraCheckProcFn(spell_pri_vampiric_touch::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_pri_vampiric_touch::HandleEffectProc, EFFECT_2, SPELL_AURA_DUMMY);
OnEffectApply += AuraEffectApplyFn(spell_pri_vampiric_touch::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};