From 4657aef983c7b6cbc4f7f466a1b2b0016db30310 Mon Sep 17 00:00:00 2001 From: Cristian Vintila <127750549+cristianvnt@users.noreply.github.com> Date: Thu, 5 Feb 2026 00:08:52 +0200 Subject: [PATCH] Scripts/Spells: Implement druid talent Moonless Night (#31521) --- .../world/master/2026_02_04_02_world.sql | 7 ++++ src/server/scripts/Spells/spell_druid.cpp | 35 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 sql/updates/world/master/2026_02_04_02_world.sql diff --git a/sql/updates/world/master/2026_02_04_02_world.sql b/sql/updates/world/master/2026_02_04_02_world.sql new file mode 100644 index 0000000000..2e2e714a1b --- /dev/null +++ b/sql/updates/world/master/2026_02_04_02_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dru_moonless_night'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(400278, 'spell_dru_moonless_night'); + +DELETE FROM `spell_proc` WHERE `SpellId` IN (400278); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(400278,0x01,7,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x0,0x0,0x0,0,0,0,0); -- Moonless Night diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index d2b3fa19de..93742c6c8b 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -120,6 +120,8 @@ enum DruidSpells SPELL_DRUID_MATTED_FUR = 385786, SPELL_DRUID_MOONFIRE = 8921, SPELL_DRUID_MOONFIRE_DAMAGE = 164812, + SPELL_DRUID_MOONLESS_NIGHT = 400278, + SPELL_DRUID_MOONLESS_NIGHT_DAMAGE = 400360, SPELL_DRUID_NATURES_GRACE_TALENT = 450347, SPELL_DRUID_NEW_MOON = 274281, SPELL_DRUID_NEW_MOON_OVERRIDE = 274295, @@ -1471,6 +1473,38 @@ class spell_dru_moonfire : public SpellScript } }; +// 400278 - Moonless Night +class spell_dru_moonless_night : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_MOONFIRE_DAMAGE, SPELL_DRUID_MOONLESS_NIGHT_DAMAGE }); + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return !eventInfo.GetSpellInfo()->HasAttribute(SPELL_ATTR5_TREAT_AS_AREA_EFFECT) && eventInfo.GetActionTarget()->HasAura(SPELL_DRUID_MOONFIRE_DAMAGE); + } + + void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + Unit* caster = eventInfo.GetActor(); + Unit* target = eventInfo.GetActionTarget(); + int32 damage = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()); + + caster->CastSpell(target, SPELL_DRUID_MOONLESS_NIGHT_DAMAGE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .SpellValueOverrides = { { SPELLVALUE_BASE_POINT0, damage } } + }); + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_dru_moonless_night::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_dru_moonless_night::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + // 450347 - Nature's Grace class spell_dru_natures_grace : public AuraScript { @@ -2870,6 +2904,7 @@ void AddSC_druid_spell_scripts() RegisterSpellScript(spell_dru_mangle); RegisterSpellScript(spell_dru_matted_fur_absorb); RegisterSpellScript(spell_dru_moonfire); + RegisterSpellScript(spell_dru_moonless_night); RegisterSpellScript(spell_dru_natures_grace); RegisterSpellScript(spell_dru_natures_grace_eclipse); RegisterSpellScriptWithArgs(spell_dru_new_moon, "spell_dru_full_moon", Optional(), Optional(SPELL_DRUID_HALF_MOON_OVERRIDE));