From 020b170b2bac1e4ef9a78ff85aae98076f6722bf Mon Sep 17 00:00:00 2001 From: Cristian Vintila <127750549+cristianvnt@users.noreply.github.com> Date: Fri, 6 Mar 2026 21:29:38 +0200 Subject: [PATCH] Scripts/Spells: Update druid talent Galactic Guardian (#31707) Co-authored-by: Shauren --- .../world/master/2026_03_06_02_world.sql | 9 +++ src/server/scripts/Spells/spell_druid.cpp | 76 ++++++++++++++++--- 2 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 sql/updates/world/master/2026_03_06_02_world.sql diff --git a/sql/updates/world/master/2026_03_06_02_world.sql b/sql/updates/world/master/2026_03_06_02_world.sql new file mode 100644 index 0000000000..6f73668f9b --- /dev/null +++ b/sql/updates/world/master/2026_03_06_02_world.sql @@ -0,0 +1,9 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dru_galactic_guardian_moonfire','spell_dru_lunar_wrath'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(164812,'spell_dru_galactic_guardian_moonfire'), +(1253600,'spell_dru_lunar_wrath'); + +DELETE FROM `spell_proc` WHERE `SpellId` IN (203964,1253600); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(203964,0x00,7,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x0,0x0,0x0,0,0,0,0), -- Galactic Guardian +(1253600,0x00,7,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x2,0x0,0x10,0x0,0,0,0,0); -- Lunar Wrath diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 7520116f5d..5e3e0b81fa 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -121,6 +121,7 @@ enum DruidSpells SPELL_DRUID_LUNAR_BEAM_HEAL = 204069, SPELL_DRUID_LUNAR_BEAM_DAMAGE = 414613, SPELL_DRUID_LUNAR_INSPIRATION_OVERRIDE = 155627, + SPELL_DRUID_LUNAR_WRATH = 1253600, SPELL_DRUID_MAIM_STUN = 203123, SPELL_DRUID_MANGLE = 33917, SPELL_DRUID_MANGLE_TALENT = 231064, @@ -137,6 +138,7 @@ enum DruidSpells SPELL_DRUID_PROWL = 5215, SPELL_DRUID_PULVERIZE = 80313, SPELL_DRUID_RAKE_STUN = 163505, + SPELL_DRUID_RED_MOON = 1252871, SPELL_DRUID_REGROWTH = 8936, SPELL_DRUID_REJUVENATION = 774, SPELL_DRUID_REJUVENATION_GERMINATION = 155777, @@ -1161,29 +1163,58 @@ class spell_dru_galactic_guardian : public AuraScript { bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_DRUID_GALACTIC_GUARDIAN_AURA }); + return ValidateSpellInfo({ SPELL_DRUID_GALACTIC_GUARDIAN_AURA, SPELL_DRUID_LUNAR_WRATH, SPELL_DRUID_RED_MOON }); } - void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + static bool CheckEffectProc(AuraScript const&, AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { - if (DamageInfo* damageInfo = eventInfo.GetDamageInfo()) - { - Unit* target = GetTarget(); + return roll_chance_i(aurEff->GetAmount()); + } - // free automatic moonfire on target - target->CastSpell(damageInfo->GetVictim(), SPELL_DRUID_MOONFIRE_DAMAGE, TRIGGERED_FULL_MASK | TRIGGERED_SUPPRESS_CASTER_ANIM); + static void HandleProc(AuraScript const&, AuraEffect const* /*aurEff*/, ProcEventInfo const& eventInfo) + { + Unit* caster = eventInfo.GetActor(); + Unit* target = eventInfo.GetActionTarget(); - // Cast aura - target->CastSpell(damageInfo->GetVictim(), SPELL_DRUID_GALACTIC_GUARDIAN_AURA, true); - } + // free automatic moonfire on target + caster->CastSpell(target, SPELL_DRUID_MOONFIRE_DAMAGE, TRIGGERED_FULL_MASK | TRIGGERED_SUPPRESS_CASTER_ANIM); + + // Cast aura + caster->CastSpell(target, caster->HasSpell(SPELL_DRUID_RED_MOON) ? SPELL_DRUID_LUNAR_WRATH : SPELL_DRUID_GALACTIC_GUARDIAN_AURA, true); } void Register() override { + DoCheckEffectProc += AuraCheckEffectProcFn(spell_dru_galactic_guardian::CheckEffectProc, EFFECT_0, SPELL_AURA_DUMMY); OnEffectProc += AuraEffectProcFn(spell_dru_galactic_guardian::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; +// 213708 - Galactic Guardian (attached to 164812 - Moonfire) +class spell_dru_galactic_guardian_moonfire : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellEffect({ { SPELL_DRUID_GALACTIC_GUARDIAN_AURA, EFFECT_2 } }); + } + + bool Load() override + { + return GetCaster()->HasAuraEffect(SPELL_DRUID_GALACTIC_GUARDIAN_AURA, EFFECT_2); + } + + void CalculateDamage(SpellEffectInfo const& /*effectInfo*/, Unit* /*victim*/, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const + { + if (AuraEffect const* galactic = GetCaster()->GetAuraEffect(SPELL_DRUID_GALACTIC_GUARDIAN_AURA, EFFECT_2)) + AddPct(pctMod, galactic->GetAmount()); + } + + void Register() override + { + CalcDamage += SpellCalcDamageFn(spell_dru_galactic_guardian_moonfire::CalculateDamage); + } +}; + // 774 - Rejuvenation class spell_dru_germination : public SpellScript { @@ -1540,6 +1571,29 @@ class spell_dru_lunar_inspiration : public AuraScript } }; +// 1253600 - Lunar Wrath +class spell_dru_lunar_wrath : public AuraScript +{ + static bool CheckProc(AuraScript const&, ProcEventInfo const& procEvent) + { + if (procEvent.GetProcSpell()->GetPowerTypeCostAmount(POWER_RAGE) <= 0) + return false; + + Unit* caster = procEvent.GetActor(); + Unit* result = nullptr; + Trinity::UnitAuraCheck check(true, SPELL_DRUID_RED_MOON, caster->GetGUID()); + Trinity::UnitSearcher searcher(caster, result, check); + Cell::VisitAllObjects(caster, searcher, 40.0f); + + return result != nullptr; + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_dru_lunar_wrath::CheckProc); + } +}; + // 392315 - Luxuriant Soil class spell_dru_luxuriant_soil : public AuraScript { @@ -3094,6 +3148,7 @@ void AddSC_druid_spell_scripts() RegisterSpellScript(spell_dru_flower_walk_heal); RegisterSpellScript(spell_dru_forms_trinket); RegisterSpellScript(spell_dru_galactic_guardian); + RegisterSpellScript(spell_dru_galactic_guardian_moonfire); RegisterSpellScript(spell_dru_germination); RegisterSpellScript(spell_dru_glyph_of_stars); RegisterSpellScript(spell_dru_gore); @@ -3107,6 +3162,7 @@ void AddSC_druid_spell_scripts() RegisterSpellScript(spell_dru_lifebloom); RegisterAreaTriggerAI(at_dru_lunar_beam); RegisterSpellScript(spell_dru_lunar_inspiration); + RegisterSpellScript(spell_dru_lunar_wrath); RegisterSpellScript(spell_dru_luxuriant_soil); RegisterSpellScript(spell_dru_maim); RegisterSpellScript(spell_dru_mangle);