From 18af46d35754172013ad7c15e6bb48f365dbe043 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Tue, 12 Dec 2023 18:29:05 -0300 Subject: [PATCH] fix(Core/SSC): Rancid Mushroom mechanic (#18008) * fix(Core/SSC): Rancid Mushroom mechanic * missing clear smart_scripts * build * build again --- .../rev_1702400889402948200.sql | 8 +++ .../SerpentShrine/instance_serpent_shrine.cpp | 49 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1702400889402948200.sql diff --git a/data/sql/updates/pending_db_world/rev_1702400889402948200.sql b/data/sql/updates/pending_db_world/rev_1702400889402948200.sql new file mode 100644 index 000000000..1307df508 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1702400889402948200.sql @@ -0,0 +1,8 @@ +-- +UPDATE `creature_template` SET `scale` = 0.5, `unit_flags` = `unit_flags`|2048|524288, `mechanic_immune_mask` = 1073741823, `AIName` = '', `ScriptName` = 'npc_rancid_mushroom' WHERE `entry` = 22250; + +DELETE FROM `spell_script_names` WHERE `spell_id` = 38652 AND `ScriptName` = 'spell_rancid_spore_cloud'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(38652, 'spell_rancid_spore_cloud'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 22250 AND `source_type` = 0; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index 203607e99..e0f85f0c7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -22,6 +22,7 @@ #include "SpellScriptLoader.h" #include "TemporarySummon.h" #include "serpent_shrine.h" +#include "ScriptedCreature.h" DoorData const doorData[] = { @@ -308,6 +309,52 @@ class spell_serpentshrine_cavern_coilfang_water : public AuraScript } }; +struct npc_rancid_mushroom : public ScriptedAI +{ + npc_rancid_mushroom(Creature* creature) : ScriptedAI(creature) { } + + enum Spells : uint32 + { + SPELL_GROW = 31698, + SPELL_SPORE_CLOUD = 38652 + }; + + void InitializeAI() override + { + scheduler.Schedule(1150ms, [this](TaskContext context) + { + DoCastSelf(SPELL_GROW); + context.Repeat(1200ms, 3400ms); + }) + .Schedule(22950ms, [this](TaskContext /*context*/) + { + DoCastSelf(SPELL_SPORE_CLOUD); + me->KillSelf(); + }); + } + + void UpdateAI(uint32 diff) override + { + scheduler.Update(diff); + } +}; + +class spell_rancid_spore_cloud : public AuraScript +{ + PrepareAuraScript(spell_rancid_spore_cloud); + + void HandlePeriodic(AuraEffect const* /*aurEff*/) + { + PreventDefaultAction(); + GetCaster()->CastSpell((Unit*)nullptr, GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_rancid_spore_cloud::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } +}; + void AddSC_instance_serpentshrine_cavern() { new instance_serpent_shrine(); @@ -315,5 +362,7 @@ void AddSC_instance_serpentshrine_cavern() RegisterSpellAndAuraScriptPair(spell_serpentshrine_cavern_serpentshrine_parasite_trigger, spell_serpentshrine_cavern_serpentshrine_parasite_trigger_aura); RegisterSpellScript(spell_serpentshrine_cavern_infection); RegisterSpellScript(spell_serpentshrine_cavern_coilfang_water); + RegisterSerpentShrineAI(npc_rancid_mushroom); + RegisterSpellScript(spell_rancid_spore_cloud); }