From ab482d2d4f9b61253c75001af5ed7a7ba58398c3 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 23 May 2021 14:27:34 +0200 Subject: [PATCH] Core/Spells: fixed Pandemic talent --- .../world/4.3.4/2021_05_23_02_world.sql | 11 ++++ src/server/scripts/Spells/spell_warlock.cpp | 56 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 sql/updates/world/4.3.4/2021_05_23_02_world.sql diff --git a/sql/updates/world/4.3.4/2021_05_23_02_world.sql b/sql/updates/world/4.3.4/2021_05_23_02_world.sql new file mode 100644 index 0000000000..92872c26a5 --- /dev/null +++ b/sql/updates/world/4.3.4/2021_05_23_02_world.sql @@ -0,0 +1,11 @@ +DELETE FROM `spell_proc` WHERE `SpellId`= -85099; +INSERT INTO `spell_proc` (`SpellId`, `SpellFamilyName`, `SpellFamilyMask0`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `Chance`) VALUES +(-85099, 5, 0x4000, 0x40000, 0x1, 0x2, 100); + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN +('spell_warl_pandemic', +'spell_warl_pandemic_script'); + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(-85099, 'spell_warl_pandemic'), +(92931 , 'spell_warl_pandemic_script'); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index a20e1ecd4a..f03ae02909 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -84,6 +84,7 @@ enum WarlockSpells SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2 = 32553, SPELL_WARLOCK_NETHER_WARD = 91711, SPELL_WARLOCK_NETHER_TALENT = 91713, + SPELL_WARLOCK_PANDEMIC_SCRIPT_EFFECT = 92931, SPELL_WARLOCK_RAIN_OF_FIRE = 42223, SPELL_WARLOCK_SHADOW_TRANCE = 17941, SPELL_WARLOCK_SEARING_PAIN = 5676, @@ -1586,6 +1587,59 @@ private: uint32 _debuffSpellId = 0; }; +// -85099 - Pandemic +class spell_warl_pandemic : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARLOCK_PANDEMIC_SCRIPT_EFFECT }); + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + if (!eventInfo.GetProcTarget()) + return false; + + return roll_chance_i(GetSpellInfo()->Effects[EFFECT_0].CalcValue()); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_PANDEMIC_SCRIPT_EFFECT, aurEff); + } + + void Register() override + { + DoCheckProc.Register(&spell_warl_pandemic::CheckProc); + OnEffectProc.Register(&spell_warl_pandemic::HandleProc, EFFECT_1, SPELL_AURA_ADD_FLAT_MODIFIER); + } +}; + +// 92931 - Pandemic +class spell_warl_pandemic_script : public SpellScript +{ + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + Unit* target = GetHitUnit(); + if (AuraEffect* aurEff = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x0, 0x100, 0x0, caster->GetGUID())) + { + aurEff->RecalculateAmount(caster); + aurEff->CalculatePeriodic(caster, false, false); + aurEff->GetBase()->RefreshDuration(true); + } + } + + void Register() override + { + OnEffectHitTarget.Register(&spell_warl_pandemic_script::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_warlock_spell_scripts() { RegisterSpellScript(spell_warl_aftermath); @@ -1615,6 +1669,8 @@ void AddSC_warlock_spell_scripts() RegisterSpellScript(spell_warl_jinx); RegisterSpellScript(spell_warl_life_tap); RegisterSpellScript(spell_warl_nether_ward_overrride); + RegisterSpellScript(spell_warl_pandemic); + RegisterSpellScript(spell_warl_pandemic_script); RegisterSpellScript(spell_warl_seduction); RegisterSpellScript(spell_warl_seed_of_corruption); RegisterSpellScript(spell_warl_seed_of_corruption_aoe);