diff options
-rw-r--r-- | sql/updates/world/master/2023_07_13_01_world.sql | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 29 |
2 files changed, 32 insertions, 0 deletions
diff --git a/sql/updates/world/master/2023_07_13_01_world.sql b/sql/updates/world/master/2023_07_13_01_world.sql new file mode 100644 index 00000000000..4712ecaebd7 --- /dev/null +++ b/sql/updates/world/master/2023_07_13_01_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=108416; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(108416, 'spell_warl_dark_pact'); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 45722e38267..63178261bf3 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -187,6 +187,34 @@ class spell_warl_create_healthstone : public SpellScript } }; +// 108416 - Dark Pact +class spell_warl_dark_pact : public AuraScript +{ + PrepareAuraScript(spell_warl_dark_pact); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 }, { spellInfo->Id, EFFECT_2 } }); + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + float extraAmount = caster->SpellBaseDamageBonusDone(GetSpellInfo()->GetSchoolMask()) * 2.5f; + int32 absorb = caster->CountPctFromCurHealth(GetEffectInfo(EFFECT_1).CalcValue(caster)); + caster->SetHealth(caster->GetHealth() - absorb); + amount = CalculatePct(absorb, GetEffectInfo(EFFECT_2).CalcValue(caster)) + extraAmount; + } + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_dark_pact::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + } +}; + // 48018 - Demonic Circle: Summon class spell_warl_demonic_circle_summon : public AuraScript { @@ -998,6 +1026,7 @@ void AddSC_warlock_spell_scripts() RegisterSpellScript(spell_warl_chaos_bolt); RegisterSpellScript(spell_warl_chaotic_energies); RegisterSpellScript(spell_warl_create_healthstone); + RegisterSpellScript(spell_warl_dark_pact); RegisterSpellScript(spell_warl_demonic_circle_summon); RegisterSpellScript(spell_warl_demonic_circle_teleport); RegisterSpellScript(spell_warl_devour_magic); |