diff options
author | Jason Dove <1695733+jasongdove@users.noreply.github.com> | 2025-05-30 08:09:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-30 15:09:23 +0200 |
commit | c49c5902a7f1e4884c261b58fb86d17929d57368 (patch) | |
tree | 8308b9e994501eafe42dd515cd1902844ed065e6 | |
parent | 7ce9cf7cd49c26900d79f0181f5c0330f286714c (diff) |
Scripts/AbyssalDepths: Add whirlpool entrance to Abyssal Maw (#31007)
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); +} |