aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
parent7ce9cf7cd49c26900d79f0181f5c0330f286714c (diff)
Scripts/AbyssalDepths: Add whirlpool entrance to Abyssal Maw (#31007)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_abyssal_depths.cpp106
2 files changed, 108 insertions, 0 deletions
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);
+}