From 142be82699ada144f7b25b32aead408f3b13ef4a Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Tue, 12 Dec 2023 11:51:18 -0300 Subject: [PATCH 01/12] fix(DB/SAI): Vashj'ir Honor Guard should cast Freightening Shout (#18007) --- data/sql/updates/pending_db_world/rev_1702391940911282400.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1702391940911282400.sql diff --git a/data/sql/updates/pending_db_world/rev_1702391940911282400.sql b/data/sql/updates/pending_db_world/rev_1702391940911282400.sql new file mode 100644 index 000000000..b9fef4c55 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1702391940911282400.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 21218) AND (`source_type` = 0) AND (`id` IN (2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21218, 0, 2, 0, 2, 0, 100, 0, 0, 40, 13000, 17000, 0, 11, 38945, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Vashj\'ir Honor Guard - Between 0-40% Health - Cast \'Frightening Shout\''); From ac0eba539e7f908671c642806f58f9f8aa0193b3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 12 Dec 2023 14:52:07 +0000 Subject: [PATCH 02/12] chore(DB): import pending files Referenced commit(s): 142be82699ada144f7b25b32aead408f3b13ef4a --- .../rev_1702391940911282400.sql => db_world/2023_12_12_13.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1702391940911282400.sql => db_world/2023_12_12_13.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1702391940911282400.sql b/data/sql/updates/db_world/2023_12_12_13.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1702391940911282400.sql rename to data/sql/updates/db_world/2023_12_12_13.sql index b9fef4c55..15ca2cb12 100644 --- a/data/sql/updates/pending_db_world/rev_1702391940911282400.sql +++ b/data/sql/updates/db_world/2023_12_12_13.sql @@ -1,3 +1,4 @@ +-- DB update 2023_12_12_12 -> 2023_12_12_13 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 21218) AND (`source_type` = 0) AND (`id` IN (2)); INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES From 50764bda05c51cbb162da065a1465b63ab84a699 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Tue, 12 Dec 2023 11:52:57 -0300 Subject: [PATCH 03/12] fix(DB/SSC): Fathom-Guard Caribdis should be able to be interrupted (#18006) --- data/sql/updates/pending_db_world/rev_1702390051865119400.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1702390051865119400.sql diff --git a/data/sql/updates/pending_db_world/rev_1702390051865119400.sql b/data/sql/updates/pending_db_world/rev_1702390051865119400.sql new file mode 100644 index 000000000..b00e04a6a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1702390051865119400.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`&~33554432 WHERE `entry` = 21964; From 2dfb7e828cd75d6fa1ea7490fb3d3389aec53c5c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 12 Dec 2023 14:52:59 +0000 Subject: [PATCH 04/12] chore(DB): import pending files Referenced commit(s): ac0eba539e7f908671c642806f58f9f8aa0193b3 --- .../rev_1702390051865119400.sql => db_world/2023_12_12_14.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1702390051865119400.sql => db_world/2023_12_12_14.sql} (72%) diff --git a/data/sql/updates/pending_db_world/rev_1702390051865119400.sql b/data/sql/updates/db_world/2023_12_12_14.sql similarity index 72% rename from data/sql/updates/pending_db_world/rev_1702390051865119400.sql rename to data/sql/updates/db_world/2023_12_12_14.sql index b00e04a6a..7c928ba71 100644 --- a/data/sql/updates/pending_db_world/rev_1702390051865119400.sql +++ b/data/sql/updates/db_world/2023_12_12_14.sql @@ -1,2 +1,3 @@ +-- DB update 2023_12_12_13 -> 2023_12_12_14 -- UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`&~33554432 WHERE `entry` = 21964; From 071fdd1218a9f16799f63571f22161418c7bd5ed Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Tue, 12 Dec 2023 11:56:04 -0300 Subject: [PATCH 05/12] fix(DB/SSC): Trash linked spawn (#18005) --- .../rev_1702386539450917700.sql | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1702386539450917700.sql diff --git a/data/sql/updates/pending_db_world/rev_1702386539450917700.sql b/data/sql/updates/pending_db_world/rev_1702386539450917700.sql new file mode 100644 index 000000000..8b3028675 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1702386539450917700.sql @@ -0,0 +1,214 @@ +-- +UPDATE `creature` SET `spawntimesecs` = 7200 WHERE `guid` IN +(153016, 153017, 153003, 153005, 153001, 153004, 153002, 153007, 153009, 153006, 153010, 153008, 153013, 153015, 153011, 153014, 153012, +153026, 153025, 153022, 153024, 153023, 153027, 153028, 153029, 153030, 153035, 153034, 153031, 153032, 153033, 153036, 153038, 153037, 153039, 153044, 153043, 153040, 153041, 153042, 153045, 153046, 153047, 153048, 153053, 153052, 153049, 153051, 153050, 153054, 153055, 153056, 153057, 153062, 153061, 153058, 153060, 153059, 153063, 153064, 153065, 153066, 153071, 153070, 153067, 153068, 153069, 153072, 153073, 153074, 153075, +153077, 153076, 153079, 153080, 153081, 153078, 153082, 153087, 153084, 153085, 153083, 153086, 153100, 153094, 153099, 153097, 153098, 153096, 153095, 153109, 153108, 153107, 153106, 153194, 153193, 153189, 153192, 153191, 153190, 153176, 153170, 153175, 153174, 153172, 153173, 153171, 153186, 153185, 153184, 153188, 153187, 153183, 153182, 153177, 153181, 153178, 153180, 153179, 153165, 153166, 153164, 153167, 153168, +153101, 153088, 153092, 153090, 153091, 153089, 153104, 153102, 153103, 153105, 153115, 153116, 153117, 153118, 153121, 153120, 153119, 153126, 153125, 153124, 153123, 153122, 153131, 153129, 153132, 153127, 153128, 153130, 153138, 153137, 153136, 153135, 153133, 153134, +153113, 153111, 153110, 153112, 153114, 153144, 153143, 153145, 153147, 153146, 153148, 153162, 153160, 153159, 153161, 153163, 153152, 153150, 153149, 153153, 153151); + +SET @HYDROSS := 153018; +DELETE FROM `linked_respawn` WHERE `linkedGuid` = @HYDROSS; +INSERT INTO `linked_respawn`(`guid`, `linkedGuid`, `linkType`) VALUES +(153016, @HYDROSS, 0), +(153017, @HYDROSS, 0), +(153003, @HYDROSS, 0), +(153005, @HYDROSS, 0), +(153001, @HYDROSS, 0), +(153004, @HYDROSS, 0), +(153002, @HYDROSS, 0), +(153007, @HYDROSS, 0), +(153009, @HYDROSS, 0), +(153006, @HYDROSS, 0), +(153010, @HYDROSS, 0), +(153008, @HYDROSS, 0), +(153013, @HYDROSS, 0), +(153015, @HYDROSS, 0), +(153011, @HYDROSS, 0), +(153014, @HYDROSS, 0), +(153012, @HYDROSS, 0); + +SET @STRANGE_POOL := 16818; +DELETE FROM `linked_respawn` WHERE `linkedGuid` = @STRANGE_POOL; +INSERT INTO `linked_respawn`(`guid`, `linkedGuid`, `linkType`) VALUES +(153026, @STRANGE_POOL, 1), +(153025, @STRANGE_POOL, 1), +(153022, @STRANGE_POOL, 1), +(153024, @STRANGE_POOL, 1), +(153023, @STRANGE_POOL, 1), +(153027, @STRANGE_POOL, 1), +(153028, @STRANGE_POOL, 1), +(153029, @STRANGE_POOL, 1), +(153030, @STRANGE_POOL, 1), +(153035, @STRANGE_POOL, 1), +(153034, @STRANGE_POOL, 1), +(153031, @STRANGE_POOL, 1), +(153032, @STRANGE_POOL, 1), +(153033, @STRANGE_POOL, 1), +(153036, @STRANGE_POOL, 1), +(153038, @STRANGE_POOL, 1), +(153037, @STRANGE_POOL, 1), +(153039, @STRANGE_POOL, 1), +(153044, @STRANGE_POOL, 1), +(153043, @STRANGE_POOL, 1), +(153040, @STRANGE_POOL, 1), +(153041, @STRANGE_POOL, 1), +(153042, @STRANGE_POOL, 1), +(153045, @STRANGE_POOL, 1), +(153046, @STRANGE_POOL, 1), +(153047, @STRANGE_POOL, 1), +(153048, @STRANGE_POOL, 1), +(153053, @STRANGE_POOL, 1), +(153052, @STRANGE_POOL, 1), +(153049, @STRANGE_POOL, 1), +(153051, @STRANGE_POOL, 1), +(153050, @STRANGE_POOL, 1), +(153054, @STRANGE_POOL, 1), +(153055, @STRANGE_POOL, 1), +(153056, @STRANGE_POOL, 1), +(153057, @STRANGE_POOL, 1), +(153062, @STRANGE_POOL, 1), +(153061, @STRANGE_POOL, 1), +(153058, @STRANGE_POOL, 1), +(153060, @STRANGE_POOL, 1), +(153059, @STRANGE_POOL, 1), +(153063, @STRANGE_POOL, 1), +(153064, @STRANGE_POOL, 1), +(153065, @STRANGE_POOL, 1), +(153066, @STRANGE_POOL, 1), +(153071, @STRANGE_POOL, 1), +(153070, @STRANGE_POOL, 1), +(153067, @STRANGE_POOL, 1), +(153068, @STRANGE_POOL, 1), +(153069, @STRANGE_POOL, 1), +(153072, @STRANGE_POOL, 1), +(153073, @STRANGE_POOL, 1), +(153074, @STRANGE_POOL, 1), +(153075, @STRANGE_POOL, 1); + +SET @MOROGRIM := 153169; +DELETE FROM `linked_respawn` WHERE `linkedGuid` = @MOROGRIM; +INSERT INTO `linked_respawn`(`guid`, `linkedGuid`, `linkType`) VALUES +(153077, @MOROGRIM, 0), +(153076, @MOROGRIM, 0), +(153079, @MOROGRIM, 0), +(153080, @MOROGRIM, 0), +(153081, @MOROGRIM, 0), +(153078, @MOROGRIM, 0), +(153082, @MOROGRIM, 0), +(153087, @MOROGRIM, 0), +(153084, @MOROGRIM, 0), +(153085, @MOROGRIM, 0), +(153083, @MOROGRIM, 0), +(153086, @MOROGRIM, 0), +(153100, @MOROGRIM, 0), +(153094, @MOROGRIM, 0), +(153099, @MOROGRIM, 0), +(153097, @MOROGRIM, 0), +(153098, @MOROGRIM, 0), +(153096, @MOROGRIM, 0), +(153095, @MOROGRIM, 0), +(153109, @MOROGRIM, 0), +(153108, @MOROGRIM, 0), +(153107, @MOROGRIM, 0), +(153106, @MOROGRIM, 0), +(153194, @MOROGRIM, 0), +(153193, @MOROGRIM, 0), +(153189, @MOROGRIM, 0), +(153192, @MOROGRIM, 0), +(153191, @MOROGRIM, 0), +(153190, @MOROGRIM, 0), +(153176, @MOROGRIM, 0), +(153170, @MOROGRIM, 0), +(153175, @MOROGRIM, 0), +(153174, @MOROGRIM, 0), +(153172, @MOROGRIM, 0), +(153173, @MOROGRIM, 0), +(153171, @MOROGRIM, 0), +(153186, @MOROGRIM, 0), +(153185, @MOROGRIM, 0), +(153184, @MOROGRIM, 0), +(153188, @MOROGRIM, 0), +(153187, @MOROGRIM, 0), +(153183, @MOROGRIM, 0), +(153182, @MOROGRIM, 0), +(153177, @MOROGRIM, 0), +(153181, @MOROGRIM, 0), +(153178, @MOROGRIM, 0), +(153180, @MOROGRIM, 0), +(153179, @MOROGRIM, 0), +(153165, @MOROGRIM, 0), +(153166, @MOROGRIM, 0), +(153164, @MOROGRIM, 0), +(153167, @MOROGRIM, 0), +(153168, @MOROGRIM, 0); + +SET @LEOTHERAS := 153139; +DELETE FROM `linked_respawn` WHERE `linkedGuid` = @LEOTHERAS; +INSERT INTO `linked_respawn`(`guid`, `linkedGuid`, `linkType`) VALUES +(153101, @LEOTHERAS, 0), +(153088, @LEOTHERAS, 0), +(153092, @LEOTHERAS, 0), +(153090, @LEOTHERAS, 0), +(153091, @LEOTHERAS, 0), +(153089, @LEOTHERAS, 0), +(153104, @LEOTHERAS, 0), +(153102, @LEOTHERAS, 0), +(153103, @LEOTHERAS, 0), +(153105, @LEOTHERAS, 0), +(153115, @LEOTHERAS, 0), +(153116, @LEOTHERAS, 0), +(153117, @LEOTHERAS, 0), +(153118, @LEOTHERAS, 0), +(153121, @LEOTHERAS, 0), +(153120, @LEOTHERAS, 0), +(153119, @LEOTHERAS, 0), +(153126, @LEOTHERAS, 0), +(153125, @LEOTHERAS, 0), +(153124, @LEOTHERAS, 0), +(153123, @LEOTHERAS, 0), +(153122, @LEOTHERAS, 0), +(153131, @LEOTHERAS, 0), +(153129, @LEOTHERAS, 0), +(153132, @LEOTHERAS, 0), +(153127, @LEOTHERAS, 0), +(153128, @LEOTHERAS, 0), +(153130, @LEOTHERAS, 0), +(153138, @LEOTHERAS, 0), +(153137, @LEOTHERAS, 0), +(153136, @LEOTHERAS, 0), +(153135, @LEOTHERAS, 0), +(153133, @LEOTHERAS, 0), +(153134, @LEOTHERAS, 0); + +-- Leotheras formation +DELETE FROM `creature_formations` WHERE `leaderGUID` = @LEOTHERAS; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `groupAI`) VALUES +(@LEOTHERAS, @LEOTHERAS, 24), +(@LEOTHERAS, @LEOTHERAS+1, 24), +(@LEOTHERAS, @LEOTHERAS+2, 24), +(@LEOTHERAS, @LEOTHERAS+3, 24); + +SET @KARATHRESS := 153154; +DELETE FROM `linked_respawn` WHERE `linkedGuid` = @KARATHRESS; +INSERT INTO `linked_respawn`(`guid`, `linkedGuid`, `linkType`) VALUES +(153113, @KARATHRESS, 0), +(153111, @KARATHRESS, 0), +(153110, @KARATHRESS, 0), +(153112, @KARATHRESS, 0), +(153114, @KARATHRESS, 0), +(153144, @KARATHRESS, 0), +(153143, @KARATHRESS, 0), +(153145, @KARATHRESS, 0), +(153147, @KARATHRESS, 0), +(153146, @KARATHRESS, 0), +(153148, @KARATHRESS, 0), +(153162, @KARATHRESS, 0), +(153160, @KARATHRESS, 0), +(153159, @KARATHRESS, 0), +(153161, @KARATHRESS, 0), +(153163, @KARATHRESS, 0), +(153152, @KARATHRESS, 0), +(153150, @KARATHRESS, 0), +(153149, @KARATHRESS, 0), +(153153, @KARATHRESS, 0), +(153151, @KARATHRESS, 0); From d266bf3d15849eb315aab48247035a54a0c51a72 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 12 Dec 2023 14:57:10 +0000 Subject: [PATCH 06/12] chore(DB): import pending files Referenced commit(s): 071fdd1218a9f16799f63571f22161418c7bd5ed --- .../rev_1702386539450917700.sql => db_world/2023_12_12_15.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1702386539450917700.sql => db_world/2023_12_12_15.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1702386539450917700.sql b/data/sql/updates/db_world/2023_12_12_15.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1702386539450917700.sql rename to data/sql/updates/db_world/2023_12_12_15.sql index 8b3028675..d6f335036 100644 --- a/data/sql/updates/pending_db_world/rev_1702386539450917700.sql +++ b/data/sql/updates/db_world/2023_12_12_15.sql @@ -1,3 +1,4 @@ +-- DB update 2023_12_12_14 -> 2023_12_12_15 -- UPDATE `creature` SET `spawntimesecs` = 7200 WHERE `guid` IN (153016, 153017, 153003, 153005, 153001, 153004, 153002, 153007, 153009, 153006, 153010, 153008, 153013, 153015, 153011, 153014, 153012, From 18af46d35754172013ad7c15e6bb48f365dbe043 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Tue, 12 Dec 2023 18:29:05 -0300 Subject: [PATCH 07/12] 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); } From 41c1df7a0846c9fe2ead6b72b20f10c66e713b58 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 12 Dec 2023 21:29:53 +0000 Subject: [PATCH 08/12] chore(DB): import pending files Referenced commit(s): 18af46d35754172013ad7c15e6bb48f365dbe043 --- .../rev_1702400889402948200.sql => db_world/2023_12_12_16.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1702400889402948200.sql => db_world/2023_12_12_16.sql} (91%) diff --git a/data/sql/updates/pending_db_world/rev_1702400889402948200.sql b/data/sql/updates/db_world/2023_12_12_16.sql similarity index 91% rename from data/sql/updates/pending_db_world/rev_1702400889402948200.sql rename to data/sql/updates/db_world/2023_12_12_16.sql index 1307df508..c2f69ce9a 100644 --- a/data/sql/updates/pending_db_world/rev_1702400889402948200.sql +++ b/data/sql/updates/db_world/2023_12_12_16.sql @@ -1,3 +1,4 @@ +-- DB update 2023_12_12_15 -> 2023_12_12_16 -- 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; From 4d40b036440069fcfa964eac36eebda9d60140cb Mon Sep 17 00:00:00 2001 From: Dan <83884799+elthehablo@users.noreply.github.com> Date: Wed, 13 Dec 2023 00:13:12 +0100 Subject: [PATCH 09/12] fix(Scripts/SSC): play emerge animation on the Lurker Below and make sure whirl doesn't happen during spout (#18009) * initial * forgor register hook --- .../SerpentShrine/boss_lurker_below.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index b9db92497..26433f97f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -86,11 +86,12 @@ struct boss_the_lurker_below : public BossAI { if (action == ACTION_START_EVENT) { + me->SetStandState(UNIT_STAND_STATE_SUBMERGED); me->SetReactState(REACT_AGGRESSIVE); me->setAttackTimer(BASE_ATTACK, 6000); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetStandState(UNIT_STAND_STATE_STAND); me->SetInCombatWithZone(); + me->SetStandState(UNIT_STAND_STATE_STAND); } } @@ -135,7 +136,7 @@ struct boss_the_lurker_below : public BossAI me->SetFacingToObject(me->GetVictim()); me->SetTarget(); scheduler.RescheduleGroup(GROUP_GEYSER, 25s); - scheduler.RescheduleGroup(GROUP_WHIRL, 18s); + scheduler.RescheduleGroup(GROUP_WHIRL, 20s); scheduler.Schedule(3s, [this](TaskContext) { me->InterruptNonMeleeSpells(false); @@ -243,6 +244,11 @@ class spell_lurker_below_spout : public AuraScript SetDuration(16000); } + void CalcPeriodic(AuraEffect const* /*aurEff*/, bool& /*isPeriodic*/, int32& amplitude) + { + amplitude = 250; + } + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if (Creature* creature = GetUnitOwner()->ToCreature()) @@ -265,6 +271,7 @@ class spell_lurker_below_spout : public AuraScript void Register() override { + DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_lurker_below_spout::CalcPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); OnEffectApply += AuraEffectApplyFn(spell_lurker_below_spout::HandleEffectApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); OnEffectRemove += AuraEffectRemoveFn(spell_lurker_below_spout::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); OnEffectPeriodic += AuraEffectPeriodicFn(spell_lurker_below_spout::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); From 06525cdc1e79cc041583af40b9f923adb7996d64 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Wed, 13 Dec 2023 21:24:52 +0200 Subject: [PATCH 10/12] feat(Core/Object): Play radius sound/music. (#18011) --- src/server/game/Entities/Object/Object.cpp | 32 ++++++++++++++++++++++ src/server/game/Entities/Object/Object.h | 2 ++ 2 files changed, 34 insertions(+) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index fcd748008..368f814ae 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2883,6 +2883,22 @@ void WorldObject::PlayDirectSound(uint32 sound_id, Player* target /*= nullptr*/) SendMessageToSet(WorldPackets::Misc::Playsound(sound_id).Write(), true); } +void WorldObject::PlayRadiusSound(uint32 sound_id, float radius) +{ + std::list targets; + Acore::AnyPlayerInObjectRangeCheck check(this, radius, false); + Acore::PlayerListSearcher searcher(this, targets, check); + Cell::VisitWorldObjects(this, searcher, radius); + + for (Player* player : targets) + { + if (player) + { + player->SendDirectMessage(WorldPackets::Misc::Playsound(sound_id).Write()); + } + } +} + void WorldObject::PlayDirectMusic(uint32 music_id, Player* target /*= nullptr*/) { if (target) @@ -2895,6 +2911,22 @@ void WorldObject::PlayDirectMusic(uint32 music_id, Player* target /*= nullptr*/) } } +void WorldObject::PlayRadiusMusic(uint32 music_id, float radius) +{ + std::list targets; + Acore::AnyPlayerInObjectRangeCheck check(this, radius, false); + Acore::PlayerListSearcher searcher(this, targets, check); + Cell::VisitWorldObjects(this, searcher, radius); + + for (Player* player : targets) + { + if (player) + { + player->SendDirectMessage(WorldPackets::Misc::PlayMusic(music_id).Write()); + } + } +} + void WorldObject::DestroyForNearbyPlayers() { if (!IsInWorld()) diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 8a75f3d87..3547b36ce 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -487,7 +487,9 @@ public: void PlayDistanceSound(uint32 sound_id, Player* target = nullptr); void PlayDirectSound(uint32 sound_id, Player* target = nullptr); + void PlayRadiusSound(uint32 sound_id, float radius); void PlayDirectMusic(uint32 music_id, Player* target = nullptr); + void PlayRadiusMusic(uint32 music_id, float radius); void SendObjectDeSpawnAnim(ObjectGuid guid); From 9df2c485fca14aa787ee6e536664b7a30f4304b5 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 14 Dec 2023 16:42:20 -0300 Subject: [PATCH 11/12] =?UTF-8?q?fix(Scripts/SerpentshrineCavern):=20Fix?= =?UTF-8?q?=20Lurker=20spawn=20coords=20and=20spout=20s=E2=80=A6=20(#18014?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/SerpentshrineCavern): Fix Lurker spawn coords and spout shouldnt hit players on water at all --- .../SerpentShrine/boss_lurker_below.cpp | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 26433f97f..62b3e035d 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -147,7 +147,7 @@ struct boss_the_lurker_below : public BossAI { //phase2 scheduler.CancelAll(); - DoCastSelf(SPELL_SUBMERGE_VISUAL, true); + DoCastSelf(SPELL_SUBMERGE_VISUAL); DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS, true); me->SetStandState(UNIT_STAND_STATE_SUBMERGED); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); @@ -226,7 +226,7 @@ public: if (roll_chance_i(instance->GetBossState(DATA_THE_LURKER_BELOW) != DONE ? 25 : 0) && !instance->IsEncounterInProgress()) { player->CastSpell(player, SPELL_LURKER_SPAWN_TRIGGER, true); - if (Creature* lurker = go->SummonCreature(NPC_THE_LURKER_BELOW, 40.4058f, -417.108f, -21.5911f, 3.03312f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 604800000)) + if (Creature* lurker = go->SummonCreature(NPC_THE_LURKER_BELOW, 38.4567f, -417.324f, -18.916666f, 2.94960f, TEMPSUMMON_MANUAL_DESPAWN)) lurker->AI()->DoAction(ACTION_START_EVENT); return true; } @@ -284,22 +284,9 @@ class spell_lurker_below_spout_cone : public SpellScript void FilterTargets(std::list& targets) { - Unit* caster = GetCaster(); - targets.remove_if([caster](WorldObject const* target) -> bool + targets.remove_if([this](WorldObject const* target) -> bool { - if (!caster->HasInLine(target, 5.0f) || !target->IsPlayer()) - { - return true; - } - - LiquidData const& liquidData = target->GetLiquidData(); - - if (liquidData.Status == LIQUID_MAP_UNDER_WATER) - { - return true; - } - - return false; + return !GetCaster()->HasInLine(target, 5.0f) || !target->IsPlayer() || target->ToUnit()->IsInWater(); }); } From 03d06da87b85084e0a6891bed1c03807e30e663d Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Fri, 15 Dec 2023 14:43:24 +0200 Subject: [PATCH 12/12] feat(Core/SmartScripts): SMART_EVENT_SUMMONED_UNIT_EVADE (#18018) * feat(Core/SmartScripts): SMART_EVENT_SUMMONED_UNIT_EVADE * . --- src/server/game/AI/CoreAI/GameObjectAI.h | 8 +++++--- src/server/game/AI/CreatureAI.cpp | 18 +++++++++++++++++- src/server/game/AI/CreatureAI.h | 2 ++ src/server/game/AI/SmartScripts/SmartAI.cpp | 10 ++++++++++ src/server/game/AI/SmartScripts/SmartAI.h | 6 ++++++ .../game/AI/SmartScripts/SmartScript.cpp | 1 + .../game/AI/SmartScripts/SmartScriptMgr.cpp | 4 ++++ .../game/AI/SmartScripts/SmartScriptMgr.h | 6 ++++-- 8 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index 979f7ca45..384fca1ec 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -68,10 +68,12 @@ public: virtual bool CanBeSeen(Player const* /*seer*/) { return true; } // Called when the gameobject summon successfully other creature - virtual void JustSummoned(Creature* /*summon*/) { } - virtual void SummonedCreatureDespawn(Creature* /*summon*/) { } + virtual void JustSummoned(Creature* /*summon*/) {} + virtual void SummonedCreatureDespawn(Creature* /*summon*/) {} - virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { } + virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) {} + + virtual void SummonedCreatureEvade(Creature* /*summon*/) {} }; class NullGameObjectAI : public GameObjectAI diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index e85a674d0..bb014a034 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -21,6 +21,7 @@ #include "CreatureAIImpl.h" #include "CreatureGroups.h" #include "CreatureTextMgr.h" +#include "GameObjectAI.h" #include "Log.h" #include "MapReference.h" #include "Player.h" @@ -222,7 +223,7 @@ void CreatureAI::EnterEvadeMode(EvadeReason why) me->GetVehicleKit()->Reset(true); } - // despawn bosses at reset - only verified tbc/woltk bosses with this reset type - add bosses in last line respectively (dungeon/raid) and increase array limit + // despawn bosses at reset - only verified tbc/woltk bosses with this reset type CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(me->GetEntry()); if (cInfo && cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_HARD_RESET)) { @@ -321,6 +322,21 @@ bool CreatureAI::_EnterEvadeMode(EvadeReason /*why*/) formation->MemberEvaded(me); } + if (TempSummon* summon = me->ToTempSummon()) + { + if (WorldObject* summoner = summon->GetSummoner()) + { + if (summoner->ToCreature() && summoner->ToCreature()->IsAIEnabled) + { + summoner->ToCreature()->AI()->SummonedCreatureEvade(me); + } + else if (summoner->ToGameObject() && summoner->ToGameObject()->AI()) + { + summoner->ToGameObject()->AI()->SummonedCreatureEvade(me); + } + } + } + return true; } diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 977c29a62..94478d15e 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -137,6 +137,8 @@ public: virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) {} virtual void SummonedCreatureDespawnAll() {} + virtual void SummonedCreatureEvade(Creature* /*summon*/) {} + // Called when hit by a spell virtual void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) {} diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 88a14a1a2..c1210c836 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -817,6 +817,11 @@ void SmartAI::SummonedCreatureDies(Creature* summon, Unit* /*killer*/) GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_DIES, summon); } +void SmartAI::SummonedCreatureEvade(Creature* summon) +{ + GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_EVADE, summon); +} + void SmartAI::AttackStart(Unit* who) { // xinef: dont allow charmed npcs to act on their own @@ -1136,6 +1141,11 @@ void SmartGameObjectAI::SummonedCreatureDies(Creature* summon, Unit* /*killer*/) GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_DIES, summon); } +void SmartGameObjectAI::SummonedCreatureEvade(Creature* summon) +{ + GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_EVADE, summon); +} + void SmartGameObjectAI::UpdateAI(uint32 diff) { GetScript()->OnUpdate(diff); diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 93f942717..5723822f5 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -97,6 +97,9 @@ public: // Called when a summoned unit dies void SummonedCreatureDies(Creature* summon, Unit* killer) override; + // Called when a summoned unit evades + void SummonedCreatureEvade(Creature* summon) override; + // Tell creature to attack and follow the victim void AttackStart(Unit* who) override; @@ -283,6 +286,9 @@ public: // Called when a summoned unit dies void SummonedCreatureDies(Creature* summon, Unit* killer) override; + // Called when a summoned unit evades + void SummonedCreatureEvade(Creature* summon) override; + protected: SmartScript mScript; }; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 25b2c8cb3..41e3f9ce3 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -4077,6 +4077,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui } case SMART_EVENT_SUMMONED_UNIT: case SMART_EVENT_SUMMONED_UNIT_DIES: + case SMART_EVENT_SUMMONED_UNIT_EVADE: { if (!IsCreature(unit)) return; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 85422ee25..2ce60090a 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -345,6 +345,7 @@ void SmartAIMgr::LoadSmartAIFromDB() case SMART_EVENT_INSTANCE_PLAYER_ENTER: case SMART_EVENT_TRANSPORT_ADDCREATURE: case SMART_EVENT_NEAR_PLAYERS: + case SMART_EVENT_SUMMONED_UNIT_EVADE: return true; default: return false; @@ -454,6 +455,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e) case SMART_TARGET_ROLE_SELECTION: case SMART_TARGET_LOOT_RECIPIENTS: case SMART_EVENT_SUMMONED_UNIT_DIES: + case SMART_EVENT_SUMMONED_UNIT_EVADE: case SMART_TARGET_PLAYER_RANGE: case SMART_TARGET_CLOSEST_GAMEOBJECT: case SMART_TARGET_SELF: @@ -571,6 +573,7 @@ bool SmartAIMgr::CheckUnusedEventParams(SmartScriptHolder const& e) case SMART_EVENT_NEAR_UNIT_NEGATION: return sizeof(SmartEvent::nearUnitNegation); case SMART_EVENT_AREA_CASTING: return sizeof(SmartEvent::minMaxRepeat); case SMART_EVENT_AREA_RANGE: return sizeof(SmartEvent::minMaxRepeat); + case SMART_EVENT_SUMMONED_UNIT_EVADE: return sizeof(SmartEvent::summoned); default: LOG_WARN("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} is using an event {} with no unused params specified in SmartAIMgr::CheckUnusedEventParams(), please report this.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.GetEventType()); @@ -1060,6 +1063,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_EVENT_SUMMON_DESPAWNED: case SMART_EVENT_SUMMONED_UNIT: case SMART_EVENT_SUMMONED_UNIT_DIES: + case SMART_EVENT_SUMMONED_UNIT_EVADE: if (e.event.summoned.creature && !IsCreatureValid(e, e.event.summoned.creature)) return false; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 56f3b8940..a9530daed 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -212,8 +212,9 @@ enum SMART_EVENT SMART_EVENT_NEAR_UNIT_NEGATION = 104, // type (0: creature 1: gob), entry, count, range, timer SMART_EVENT_AREA_CASTING = 105, // min, max, repeatMin, repeatMax, rangeMin, rangeMax SMART_EVENT_AREA_RANGE = 106, // min, max, repeatMin, repeatMax, rangeMin, rangeMax + SMART_EVENT_SUMMONED_UNIT_EVADE = 107, // CreatureId(0 all), CooldownMin, CooldownMax - SMART_EVENT_AC_END = 107 + SMART_EVENT_AC_END = 108 }; struct SmartEvent @@ -1840,7 +1841,8 @@ const uint32 SmartAIEventMask[SMART_EVENT_AC_END][2] = {SMART_EVENT_NEAR_UNIT, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_NEAR_UNIT_NEGATION, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_AREA_CASTING, SMART_SCRIPT_TYPE_MASK_CREATURE }, - {SMART_EVENT_AREA_RANGE, SMART_SCRIPT_TYPE_MASK_CREATURE } + {SMART_EVENT_AREA_RANGE, SMART_SCRIPT_TYPE_MASK_CREATURE }, + {SMART_EVENT_SUMMONED_UNIT_EVADE, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, }; enum SmartEventFlags