aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Dove <1695733+jasongdove@users.noreply.github.com>2025-05-30 08:09:23 -0500
committerGitHub <noreply@github.com>2025-05-30 15:09:23 +0200
commitc49c5902a7f1e4884c261b58fb86d17929d57368 (patch)
tree8308b9e994501eafe42dd515cd1902844ed065e6
parent7ce9cf7cd49c26900d79f0181f5c0330f286714c (diff)
Scripts/AbyssalDepths: Add whirlpool entrance to Abyssal Maw (#31007)
-rw-r--r--sql/updates/world/master/2025_05_30_03_world.sql40
-rw-r--r--src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_abyssal_depths.cpp106
3 files changed, 148 insertions, 0 deletions
diff --git a/sql/updates/world/master/2025_05_30_03_world.sql b/sql/updates/world/master/2025_05_30_03_world.sql
new file mode 100644
index 00000000000..3518f542ddc
--- /dev/null
+++ b/sql/updates/world/master/2025_05_30_03_world.sql
@@ -0,0 +1,40 @@
+DELETE FROM `areatrigger_scripts` WHERE `entry` = 6200;
+INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
+(6200, 'at_abyssal_depths_whirlpool_entrance');
+
+UPDATE `creature_template` SET `faction`=14, `speed_walk`=2.799999952316284179, `speed_run`=1, `unit_flags`=0x2000000, `unit_flags3`=0x0, `VehicleId`=1023, `AIName`='', `ScriptName`='npc_abyssal_depths_whirlpool_vehicle' WHERE `entry`=44373; -- Whirlpool Vehicle
+
+DELETE FROM `creature_template_addon` WHERE `entry` = 44373;
+INSERT INTO `creature_template_addon` (`entry`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
+(44373, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 3, ''); -- 44373 (Whirlpool Vehicle)
+
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x20000000 WHERE (`Entry`=44373 AND `DifficultyID`=0); -- 44373 (Whirlpool Vehicle) - Floating
+
+-- fix whirlpool vehicle spawn orientation
+UPDATE `spell_target_position` SET `Orientation` = 4.939281940460205078 WHERE `ID` = 82891;
+
+-- Path 1 for Whirlpool Vehicle
+SET @ENTRY := 44373;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 1, 0x2, 21, 'Whirlpool Vehicle - Scripted Path - Fly Under Whirlpool');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -5700, 5353, -1409.9166, NULL, 0);
+
+-- fix Teleport Under Whirlpool orientation
+UPDATE `spell_target_position` SET `Orientation` = 5.585050106048583984 WHERE `ID` = 82903;
+
+-- fix Teleport to Vashj'ir orientation
+UPDATE `spell_target_position` SET `Orientation` = 2.156670093536376953 WHERE `ID` = 85040;
+
+UPDATE `gossip_menu_option` SET `GossipOptionID`=37688, `VerifiedBuild`=60822 WHERE (`MenuID`=12038 AND `OptionID`=0);
+
+UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 45514;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 45514 and `source_type` = 0;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `Difficulties`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param_string`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `action_param7`, `action_param_string`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_param_string`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(45514, 0, 0, 01, '', 62, 0, 100, 0, 12038, 0, 0, 0, 0, '', 85, 85040, 0, 0, 0, 0, 0, 0, NULL, 7, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Wavespeaker Valoren - On Gossip Option 0 Selected - Cast \'Teleport to Vashj\'ir\'');
diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
index d7251e164f9..6f423cc01eb 100644
--- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
+++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
@@ -181,6 +181,7 @@ void AddSC_boss_venoxis();
void AddSC_boss_wushoolay();
void AddSC_boss_zanzil();
void AddSC_instance_zulgurub();
+void AddSC_abyssal_depths();
//void AddSC_alterac_mountains();
//void AddSC_arathi_highlands();
void AddSC_blasted_lands();
@@ -373,6 +374,7 @@ void AddEasternKingdomsScripts()
AddSC_boss_zanzil();
AddSC_instance_zulgurub();
+ AddSC_abyssal_depths();
//AddSC_alterac_mountains();
//AddSC_arathi_highlands();
AddSC_blasted_lands();
diff --git a/src/server/scripts/EasternKingdoms/zone_abyssal_depths.cpp b/src/server/scripts/EasternKingdoms/zone_abyssal_depths.cpp
new file mode 100644
index 00000000000..272c325d1d0
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/zone_abyssal_depths.cpp
@@ -0,0 +1,106 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ScriptMgr.h"
+#include "Creature.h"
+#include "MotionMaster.h"
+#include "Player.h"
+#include "ScriptedCreature.h"
+#include "SpellInfo.h"
+
+namespace Scripts::EasternKingdoms::AbyssalDepths
+{
+namespace Spells
+{
+ static constexpr uint32 SummonVashjirWhirlpoolVehicleTrigger = 82905;
+ static constexpr uint32 RideVehicleHardcoded = 46598;
+ static constexpr uint32 TeleportUnderWhirlpool = 82903;
+}
+
+namespace Creatures
+{
+ static constexpr uint32 WorldTrigger = 22515;
+}
+
+namespace Paths
+{
+ static constexpr uint32 PathUnderWhirlpool = 4437300;
+}
+
+// 6200 - Abyssal Depths Whirlpool Entrance
+class at_abyssal_depths_whirlpool_entrance : public AreaTriggerScript
+{
+public:
+ at_abyssal_depths_whirlpool_entrance() : AreaTriggerScript("at_abyssal_depths_whirlpool_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ // cast from nearby worldtrigger
+ if (Creature* worldTrigger = player->FindNearestCreature(Creatures::WorldTrigger, 100.0f))
+ worldTrigger->CastSpell(player, Spells::SummonVashjirWhirlpoolVehicleTrigger);
+
+ return true;
+ }
+};
+
+// 44373 - Whirlpool Vehicle
+struct npc_abyssal_depths_whirlpool_vehicle : public ScriptedAI
+{
+ explicit npc_abyssal_depths_whirlpool_vehicle(Creature* creature) : ScriptedAI(creature) { }
+
+ void JustAppeared() override
+ {
+ if (Unit* owner = me->GetOwner())
+ {
+ owner->CastSpell(me, Spells::RideVehicleHardcoded);
+
+ _scheduler.Schedule(3s + 500ms, [this](TaskContext /*task*/)
+ {
+ me->SetAIAnimKitId(822);
+ me->CastSpell(nullptr, Spells::TeleportUnderWhirlpool, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_SET_FACING
+ });
+ me->GetMotionMaster()->MovePath(Paths::PathUnderWhirlpool, false);
+ });
+ }
+ }
+
+ void OnSpellCast(SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Id == Spells::TeleportUnderWhirlpool)
+ me->DespawnOrUnsummon();
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _scheduler.Update(diff);
+ }
+
+private:
+ TaskScheduler _scheduler;
+};
+
+}
+
+void AddSC_abyssal_depths()
+{
+ using namespace Scripts::EasternKingdoms::AbyssalDepths;
+
+ new at_abyssal_depths_whirlpool_entrance();
+
+ RegisterCreatureAI(npc_abyssal_depths_whirlpool_vehicle);
+}