aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2024_04_12_00_world.sql236
-rw-r--r--src/server/scripts/BrokenIsles/zone_mardum.cpp326
2 files changed, 562 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_04_12_00_world.sql b/sql/updates/world/master/2024_04_12_00_world.sql
new file mode 100644
index 00000000000..0ea6aec1142
--- /dev/null
+++ b/sql/updates/world/master/2024_04_12_00_world.sql
@@ -0,0 +1,236 @@
+-- Template
+UPDATE `creature_template` SET `unit_flags2`=2048 WHERE `entry` IN (101790, 101787, 101789, 101788); -- Demon Hunter
+UPDATE `creature_template` SET `unit_flags2`=2048 WHERE `entry`=96501; -- Ashtongue Mystic
+UPDATE `creature_template` SET `unit_flags2`=2048 WHERE `entry`=96504; -- Shivarra Destroyer
+UPDATE `creature_template` SET `unit_flags`=0, `unit_flags2`=2048, `unit_flags3`=0 WHERE `entry`=96502; -- Coilskar Myrmidon
+UPDATE `creature_template` SET `unit_flags`=0, `unit_flags2`=2048 WHERE `entry`=96503; -- Coilskar Sea-Caller
+UPDATE `creature_template` SET `unit_flags2`=2048 WHERE `entry`=96500; -- Ashtongue Warrior
+
+UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_jayce_darkweaver_cryptic_hollow' WHERE `entry` = 96436;
+UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_demon_hunter_hidden_no_more_private' WHERE `entry` IN (101787, 101788, 101789, 101790);
+UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_basic_hidden_no_more_private' WHERE `entry` IN (96501, 96502, 96503, 96500);
+
+UPDATE `creature` SET `StringId` = 'CrypticHollowDh01' WHERE `guid` = 6000987;
+UPDATE `creature` SET `StringId` = 'CrypticHollowDh02' WHERE `guid` = 6000983;
+UPDATE `creature` SET `StringId` = 'CrypticHollowDh03' WHERE `guid` = 6000985;
+UPDATE `creature` SET `StringId` = 'CrypticHollowDh04' WHERE `guid` = 6000973;
+UPDATE `creature` SET `StringId` = 'CrypticHollowDh05' WHERE `guid` = 6000977;
+
+UPDATE `creature` SET `StringId` = 'CrypticHollowCoilskar01' WHERE `guid` = 6000979;
+UPDATE `creature` SET `StringId` = 'CrypticHollowCoilskar02' WHERE `guid` = 6000986;
+UPDATE `creature` SET `StringId` = 'CrypticHollowCoilskar03' WHERE `guid` = 6000974;
+
+UPDATE `creature` SET `StringId` = 'CrypticHollowAshtongue01' WHERE `guid` = 6000984;
+UPDATE `creature` SET `StringId` = 'CrypticHollowAshtongue02' WHERE `guid` = 6000978;
+UPDATE `creature` SET `StringId` = 'CrypticHollowAshtongue03' WHERE `guid` = 6000982;
+
+UPDATE `quest_template_addon` SET `ScriptName` = 'quest_hidden_no_more' WHERE `ID` = 39495;
+
+-- Addon
+DELETE FROM `creature_template_addon` WHERE `entry` = 96502;
+
+DELETE FROM `creature_addon` WHERE `guid` = 6000861;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `mount`, `MountCreatureID`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvPFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
+(6000861, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, '159474');
+
+-- Spelltarget
+DELETE FROM `spell_target_position` WHERE (`ID`=194376 AND `EffectIndex`=0);
+INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `VerifiedBuild`) VALUES
+(194376, 0, 1481, 1267.8499755859375, 1633.199951171875, 102.1699981689453125, 53913); -- Spell: 194376 (Hidden No More: Quest Abandon) Efffect: 252 (SPELL_EFFECT_TELEPORT_UNITS)
+
+-- Creature text
+DELETE FROM `creature_text` WHERE (`CreatureID` = 96436 AND `GroupID` = 1);
+INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(96436, 1, 0, 'They won\'t escape us. Illidari, attack!', 14, 0, 100, 397, 0, 55234, 98271, 0, 'Jace Darkweaver to Player');
+
+-- Difficulty & Model
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=268435456, `VerifiedBuild`=53913 WHERE (`Entry`=96436 AND `DifficultyID`=0); -- Jace Darkweaver
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=268435456, `VerifiedBuild`=53913 WHERE (`DifficultyID`=0 AND `Entry` IN (101790,101787,101789,101788)); -- Demon Hunter
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=268435456, `VerifiedBuild`=53913 WHERE (`Entry`=96501 AND `DifficultyID`=0); -- Ashtongue Mystic
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=268435456, `VerifiedBuild`=53913 WHERE (`Entry`=96504 AND `DifficultyID`=0); -- Shivarra Destroyer
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=268435456, `VerifiedBuild`=53913 WHERE (`Entry`=96502 AND `DifficultyID`=0); -- Coilskar Myrmidon
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=268435456, `VerifiedBuild`=53913 WHERE (`Entry`=96503 AND `DifficultyID`=0); -- Coilskar Sea-Caller
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=268435456, `VerifiedBuild`=53913 WHERE (`Entry`=96500 AND `DifficultyID`=0); -- Ashtongue Warrior
+
+-- convert SAI to c++
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 96436;
+
+-- Path for Jayce Darkweaver
+SET @ENTRY := 96436;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Jace Darkweaver - After jump into the Cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1231.3232, 1646.1763, 102.104324, NULL, 0),
+(@PATH, 1, 1228.3232, 1648.1763, 101.854324, NULL, 0),
+(@PATH, 2, 1226.3232, 1649.4263, 101.854324, NULL, 0),
+(@PATH, 3, 1226.0732, 1649.6763, 101.854324, NULL, 0),
+(@PATH, 4, 1221.8232, 1654.6763, 101.354324, NULL, 0),
+(@PATH, 5, 1221.5732, 1654.9263, 101.354324, NULL, 0),
+(@PATH, 6, 1220.5732, 1655.4263, 101.104324, NULL, 0),
+(@PATH, 7, 1220.3232, 1655.9263, 100.854324, NULL, 0),
+(@PATH, 8, 1219.5732, 1657.1763, 100.604324, NULL, 0),
+(@PATH, 9, 1218.2778, 1659.1702, 99.27652, NULL, 0);
+
+-- Path for 101797
+SET @ENTRY := 101787;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Demon Hunter - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1241.542, 1637.384, 101.2027, NULL, 0),
+(@PATH, 1, 1235.507, 1640.899, 101.6234, NULL, 0),
+(@PATH, 2, 1225.911, 1648.651, 101.7546, NULL, 0),
+(@PATH, 3, 1219.118, 1656.618, 100.1757, NULL, 0);
+
+SET @ENTRY := 101787;
+SET @PATHOFFSET := 1;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Demon Hunter - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1244.908, 1643.186, 101.196, NULL, 0),
+(@PATH, 1, 1230.847, 1647.148, 101.9025, NULL, 0),
+(@PATH, 2, 1220.007, 1657.832, 100.4984, NULL, 0);
+
+-- Path for 101788
+SET @ENTRY := 101788;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Demon Hunter - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1244.205, 1637.681, 101.2138, NULL, 0),
+(@PATH, 1, 1236.271, 1641.434, 101.5777, NULL, 0),
+(@PATH, 2, 1219.974, 1656.036, 100.7595, NULL, 0);
+
+-- Path for 101789
+SET @ENTRY := 101789;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Demon Hunter - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1243.12, 1641.931, 101.1786, NULL, 0),
+(@PATH, 1, 1226.87, 1649.651, 101.8028, NULL, 0),
+(@PATH, 2, 1220.248, 1657.264, 100.7088, NULL, 0);
+
+-- Path for 101790
+SET @ENTRY := 101790;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Demon Hunter - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1241.443, 1634.038, 101.2182, NULL, 0),
+(@PATH, 1, 1225.241, 1647.274, 101.8225, NULL, 0),
+(@PATH, 2, 1218.104, 1656.582, 99.6631, NULL, 0);
+
+-- Path for 96502
+SET @ENTRY := 96502;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Coilskar Myrmidon - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1243.377, 1637.101, 101.212, NULL, 0),
+(@PATH, 1, 1235.771, 1641.097, 101.608, NULL, 0),
+(@PATH, 2, 1227.807, 1647.467, 101.8113, NULL, 0),
+(@PATH, 3, 1218.911, 1657.052, 99.96143, NULL, 0);
+
+-- Path for 96502
+SET @ENTRY := 96502;
+SET @PATHOFFSET := 1;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Coilskar Myrmidon - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1240.778, 1643.863, 101.1712, NULL, 0),
+(@PATH, 1, 1236.285, 1644.309, 101.3833, NULL, 0),
+(@PATH, 2, 1230.906, 1647.694, 101.8904, NULL, 0);
+
+-- Path for 96503
+SET @ENTRY := 96503;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Coilskar Sea Caller - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1241.052, 1635.955, 101.2086, NULL, 0),
+(@PATH, 1, 1234.972, 1640.257, 101.6277, NULL, 0),
+(@PATH, 2, 1226.205, 1647.845, 101.7648, NULL, 0),
+(@PATH, 3, 1216.569, 1658.924, 98.47334, NULL, 0);
+
+-- Path for 96500
+SET @ENTRY := 96500;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Ashtongue Warrior - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1239.401, 1643.233, 101.2989, NULL, 0),
+(@PATH, 1, 1230.3, 1646.729, 101.9243, NULL, 0),
+(@PATH, 2, 1218.313, 1660.059, 99.27374, NULL, 0);
+
+-- Path for 96500
+SET @ENTRY := 96500;
+SET @PATHOFFSET := 1;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Ashtongue Warrior - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1249.576, 1642.826, 101.2186, NULL, 0),
+(@PATH, 1, 1240.368, 1642.8, 101.1937, NULL, 0),
+(@PATH, 2, 1230.075, 1646.575, 101.9319, NULL, 0),
+(@PATH, 3, 1221.061, 1655.795, 101.1307, NULL, 0),
+(@PATH, 4, 1216.111, 1661.177, 97.98268, NULL, 0);
+
+-- Path for 96501
+SET @ENTRY := 96501;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
+(@PATH, 1, 0, 'Ashtongue Mystic - Cryptic Hollow - run into cave');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1249.021, 1643.977, 101.215, NULL, 0),
+(@PATH, 1, 1237.769, 1643.149, 101.3568, NULL, 0),
+(@PATH, 2, 1228.896, 1647.661, 101.8191, NULL, 0),
+(@PATH, 3, 1216.691, 1661.094, 98.30368, NULL, 0);
diff --git a/src/server/scripts/BrokenIsles/zone_mardum.cpp b/src/server/scripts/BrokenIsles/zone_mardum.cpp
index 7ed591d195d..34b604ab7af 100644
--- a/src/server/scripts/BrokenIsles/zone_mardum.cpp
+++ b/src/server/scripts/BrokenIsles/zone_mardum.cpp
@@ -1611,7 +1611,15 @@ public:
enum GiveMeSightBeyondSightData
{
+ QUEST_GIVE_ME_SIGHT_BEYOND_SIGHT = 39262,
+
KILLCREDIT_FACE_THE_CAVE = 96437,
+ KILLCREDIT_SPEAK_WITH_JAYCE = 96436,
+
+ GOSSIP_MENU_USE_SPECTRAL_SIGHT = 19175,
+ GOSSIP_OPTION_USE_SPECTRAL_SIGHT = 0,
+
+ SAY_JAYCE_USE_SPECTRAL_SIGHT = 0,
SPELL_DH_SPECTRAL_SIGHT = 188501,
SPELL_GIVE_ME_SIGHT_PERIODIC_AURA = 191095,
@@ -1645,6 +1653,320 @@ class spell_give_me_sight_beyond_sight_periodic : public AuraScript
}
};
+enum HiddenNoMoreData
+{
+ QUEST_HIDDEN_NO_MORE = 39495,
+
+ NPC_JAYCE_CRYPTIC_HOLLOW = 96436,
+ NPC_SHIVARRA_CRYPTIC_HOLLOW = 96504,
+ NPC_ROCKSLIDE_KILLCREDIT = 98755,
+
+ SAY_JAYCE_ATTACK_ILLIDARI = 1,
+
+ ACTION_HIDDEN_NO_MORE_EYEBEAM = 1,
+ ACTION_HIDDEN_NO_MORE_MOVE = 2,
+
+ SPELL_VISUAL_KIT_SHIVARRA_TELEPORT = 43182,
+ SPELL_VISUAL_KIT_SHIVARRA_TELEPORT2 = 43576,
+ SPELL_VISUAL_KIT_SHIVARRA_TELEPORT3 = 45431,
+
+ SPELL_ABANDON_HIDDEN_NO_MORE = 194376,
+ SPELL_COSMETIC_EYE_BEAM_01_FEMALE = 200754,
+ SPELL_COSMETIC_EYE_BEAM_01_MALE = 194326
+};
+
+enum HiddenNoMorePaths
+{
+ POINT_JAYCE_DARKWEAVER_PREPARE_JUMP = 1,
+ POINT_JAYCE_DARKWEAVER_JUMP_TO_CAVE = 2,
+
+ PATH_JAYCE_DARKWEAVER_RUN_INTO_CAVE = 9643600,
+
+ PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_01 = 10178700,
+ PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_02 = 10178701,
+ PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_03 = 10178800,
+ PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_04 = 10178900,
+ PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_05 = 10179000,
+ PATH_CRYPTIC_HOLLOW_COILSKAR_01 = 9650200,
+ PATH_CRYPTIC_HOLLOW_COILSKAR_02 = 9650201,
+ PATH_CRYPTIC_HOLLOW_COILSKAR_03 = 9650300,
+ PATH_CRYPTIC_HOLLOW_ASHTONGUE_01 = 9650000,
+ PATH_CRYPTIC_HOLLOW_ASHTONGUE_02 = 9650001,
+ PATH_CRYPTIC_HOLLOW_ASHTONGUE_03 = 9650100
+};
+
+// 39495 - Hidden No More
+class quest_hidden_no_more : public QuestScript
+{
+public:
+ quest_hidden_no_more() : QuestScript("quest_hidden_no_more") { }
+
+ void OnQuestStatusChange(Player* player, Quest const* /*quest*/, QuestStatus /*oldStatus*/, QuestStatus newStatus) override
+ {
+ if (newStatus == QUEST_STATUS_NONE)
+ {
+ player->CastSpell(nullptr, SPELL_ABANDON_HIDDEN_NO_MORE, true);
+ }
+ }
+};
+
+// 96436 - Jayce Darkweaver
+struct npc_jayce_darkweaver_cryptic_hollow : public ScriptedAI
+{
+ npc_jayce_darkweaver_cryptic_hollow(Creature* creature) : ScriptedAI(creature) { }
+
+ void OnQuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_HIDDEN_NO_MORE)
+ me->SummonPersonalClone(me->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player);
+ }
+
+ bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ {
+ if (menuId == GOSSIP_MENU_USE_SPECTRAL_SIGHT && gossipListId == GOSSIP_OPTION_USE_SPECTRAL_SIGHT)
+ {
+ Talk(SAY_JAYCE_USE_SPECTRAL_SIGHT);
+ player->KilledMonsterCredit(KILLCREDIT_SPEAK_WITH_JAYCE);
+ player->CastSpell(player, SPELL_GIVE_ME_SIGHT_PERIODIC_AURA);
+ player->CastSpell(player, SPELL_GIVE_ME_SIGHT_PERIODIC_DUMMY);
+ CloseGossipMenuFor(player);
+ }
+ return true;
+ }
+};
+
+struct HiddenNoMorePathDelay
+{
+ uint32 PathId;
+ Milliseconds ActionDelay;
+ Milliseconds MoveDelay;
+};
+
+std::unordered_map<std::string_view, HiddenNoMorePathDelay> HiddenNoMorePathMap = {
+ { "CrypticHollowDh01", { PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_01, 554ms, 2990ms } },
+ { "CrypticHollowDh02", { PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_02, 270ms, 1690ms } },
+ { "CrypticHollowDh03", { PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_03, 554ms, 1690ms } },
+ { "CrypticHollowDh04", { PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_04, 554ms, 2990ms } },
+ { "CrypticHollowDh05", { PATH_CRYPTIC_HOLLOW_DEMON_HUNTER_05, 402ms, 2990ms } },
+ { "CrypticHollowCoilskar01", { PATH_CRYPTIC_HOLLOW_COILSKAR_01, 0ms, 1521ms } },
+ { "CrypticHollowCoilskar02", { PATH_CRYPTIC_HOLLOW_COILSKAR_02, 0ms, 2024ms } },
+ { "CrypticHollowCoilskar03", { PATH_CRYPTIC_HOLLOW_COILSKAR_03, 0ms, 1521ms } },
+ { "CrypticHollowAshtongue01", { PATH_CRYPTIC_HOLLOW_ASHTONGUE_01, 0ms, 1521ms } },
+ { "CrypticHollowAshtongue02", { PATH_CRYPTIC_HOLLOW_ASHTONGUE_02, 0ms, 1521ms } },
+ { "CrypticHollowAshtongue03", { PATH_CRYPTIC_HOLLOW_ASHTONGUE_03, 0ms, 1521ms } },
+};
+
+constexpr Position JaycePrepareJump = { 1263.948f, 1632.9402f, 102.08563f };
+constexpr Position JayceJumpPosition = { 1245.257f, 1639.049f, 101.223f };
+
+// 96436 - Jayce Darkweaver
+struct npc_jayce_darkweaver_cryptic_hollow_private : public ScriptedAI
+{
+ npc_jayce_darkweaver_cryptic_hollow_private(Creature* creature) : ScriptedAI(creature) { }
+
+ void JustAppeared() override
+ {
+ Player* player = me->GetDemonCreatorPlayer();
+ if (!player)
+ return;
+
+ me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
+ me->CastSpell(nullptr, SPELL_COSMETIC_EYE_BEAM_01_MALE, false);
+
+ Creature* shivarraObject = me->FindNearestCreatureWithOptions(25.0f, { .CreatureId = NPC_SHIVARRA_CRYPTIC_HOLLOW, .IgnorePhases = true });
+ if (!shivarraObject)
+ return;
+
+ Creature* shivarraClone = shivarraObject->SummonPersonalClone(shivarraObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player);
+ if (!shivarraClone)
+ return;
+
+ _scheduler.Schedule(4s, [this, shivarraGuid = shivarraClone->GetGUID()](TaskContext task)
+ {
+ Creature* shivarraClone = ObjectAccessor::GetCreature(*me, shivarraGuid);
+ if (!shivarraClone)
+ return;
+
+ shivarraClone->SendPlaySpellVisualKit(SPELL_VISUAL_KIT_SHIVARRA_TELEPORT, 4, 2000);
+ shivarraClone->SetEmoteState(EMOTE_STATE_READY_SPELL_OMNI);
+ task.Schedule(3s, [this, shivarraGuid](TaskContext /*task*/)
+ {
+ Creature* shivarraClone = ObjectAccessor::GetCreature(*me, shivarraGuid);
+ if (!shivarraClone)
+ return;
+
+ shivarraClone->HandleEmoteCommand(EMOTE_ONESHOT_SPELL_CAST_OMNI);
+ shivarraClone->SendPlaySpellVisualKit(SPELL_VISUAL_KIT_SHIVARRA_TELEPORT2, 4, 1000);
+ shivarraClone->SendPlaySpellVisualKit(SPELL_VISUAL_KIT_SHIVARRA_TELEPORT3, 4, 2000);
+ shivarraClone->DespawnOrUnsummon(1s);
+ });
+ });
+
+ for (std::pair<std::string_view const, HiddenNoMorePathDelay>& npcPair : HiddenNoMorePathMap)
+ {
+ Creature* originalObject = me->FindNearestCreatureWithOptions(25.0f, { .StringId = npcPair.first, .IgnorePhases = true });
+ if (!originalObject)
+ continue;
+
+ Creature* clone = originalObject->SummonPersonalClone(originalObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, me->GetDemonCreatorPlayer());
+ if (!clone)
+ continue;
+
+ _cloneGuids.push_back(clone->GetGUID());
+ clone->AI()->DoAction(ACTION_HIDDEN_NO_MORE_EYEBEAM);
+ }
+ }
+
+ void OnChannelFinished(SpellInfo const* spell) override
+ {
+ if (spell->Id != SPELL_COSMETIC_EYE_BEAM_01_MALE)
+ return;
+
+ Player* player = me->GetDemonCreatorPlayer();
+
+ player->KilledMonsterCredit(NPC_ROCKSLIDE_KILLCREDIT);
+ Talk(SAY_JAYCE_ATTACK_ILLIDARI);
+ _scheduler.Schedule(1s, [this](TaskContext /*task*/)
+ {
+ me->GetMotionMaster()->MovePoint(POINT_JAYCE_DARKWEAVER_PREPARE_JUMP, JaycePrepareJump);
+ for (ObjectGuid const& guid : _cloneGuids)
+ {
+ Creature* clone = ObjectAccessor::GetCreature(*me, guid);
+ if (!clone)
+ continue;
+
+ clone->AI()->DoAction(ACTION_HIDDEN_NO_MORE_MOVE);
+ }
+ });
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
+ {
+ if (type != EFFECT_MOTION_TYPE && type != POINT_MOTION_TYPE)
+ return;
+
+ if (pointId == POINT_JAYCE_DARKWEAVER_PREPARE_JUMP)
+ me->GetMotionMaster()->MoveJumpWithGravity(JayceJumpPosition, 19.880844f, 32.78205f, POINT_JAYCE_DARKWEAVER_JUMP_TO_CAVE);
+ else if (pointId == POINT_JAYCE_DARKWEAVER_JUMP_TO_CAVE)
+ {
+ me->GetMotionMaster()->MovePath(PATH_JAYCE_DARKWEAVER_RUN_INTO_CAVE, false);
+ me->DespawnOrUnsummon(5s);
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _scheduler.Update(diff);
+ }
+
+private:
+ TaskScheduler _scheduler;
+ std::vector<ObjectGuid> _cloneGuids;
+};
+
+CreatureAI* JayceDarkweaverCrypticHollowAISelector(Creature* creature)
+{
+ if (creature->IsPrivateObject())
+ return new npc_jayce_darkweaver_cryptic_hollow_private(creature);
+ return new npc_jayce_darkweaver_cryptic_hollow(creature);
+};
+
+struct npc_basic_hidden_no_more_private : public ScriptedAI
+{
+ npc_basic_hidden_no_more_private(Creature* creature) : ScriptedAI(creature) { }
+
+ HiddenNoMorePathDelay const* GetPathDelay()
+ {
+ if (HiddenNoMorePathDelay const* pathDelay = Trinity::Containers::MapGetValuePtr(HiddenNoMorePathMap, me->GetStringId(StringIdType::Spawn)))
+ return pathDelay;
+ return nullptr;
+ }
+
+ void DoAction(int32 param) override
+ {
+ HiddenNoMorePathDelay const* pathDelay = GetPathDelay();
+ if (!pathDelay)
+ return;
+
+ switch (param)
+ {
+ case ACTION_HIDDEN_NO_MORE_MOVE:
+ {
+ _scheduler.Schedule(pathDelay->MoveDelay, [this, pathDelay](TaskContext /*task*/)
+ {
+ me->GetMotionMaster()->MovePath(pathDelay->PathId, false);
+ me->DespawnOrUnsummon(6s);
+ });
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _scheduler.Update(diff);
+ }
+
+protected:
+ TaskScheduler _scheduler;
+};
+
+CreatureAI* BasicHiddenNoMoreAISelector(Creature* creature)
+{
+ if (creature->IsPrivateObject())
+ return new npc_basic_hidden_no_more_private(creature);
+ return new NullCreatureAI(creature);
+};
+
+// 101787 - Demon Hunter
+// 101788 - Demon Hunter
+// 101789 - Demon Hunter
+// 101790 - Demon Hunter
+struct npc_demon_hunter_hidden_no_more_private : public npc_basic_hidden_no_more_private
+{
+ npc_demon_hunter_hidden_no_more_private(Creature* creature) : npc_basic_hidden_no_more_private(creature) { }
+
+ void DoAction(int32 param) override
+ {
+ HiddenNoMorePathDelay const* pathDelay = GetPathDelay();
+ if (!pathDelay)
+ return;
+
+ switch (param)
+ {
+ case ACTION_HIDDEN_NO_MORE_EYEBEAM:
+ {
+ _scheduler.Schedule(pathDelay->ActionDelay, [this](TaskContext /*task*/)
+ {
+ me->CastSpell(me, (me->GetGender() == GENDER_FEMALE ? SPELL_COSMETIC_EYE_BEAM_01_FEMALE : SPELL_COSMETIC_EYE_BEAM_01_MALE), false);
+ });
+ break;
+ }
+ case ACTION_HIDDEN_NO_MORE_MOVE:
+ {
+ me->SetAIAnimKitId(ANIM_DH_RUN);
+ _scheduler.Schedule(pathDelay->MoveDelay, [this, pathDelay](TaskContext /*task*/)
+ {
+ me->GetMotionMaster()->MovePath(pathDelay->PathId, false);
+ me->DespawnOrUnsummon(6s);
+ });
+ break;
+ }
+ default:
+ break;
+ }
+ }
+};
+
+CreatureAI* DemonHunterHiddenNoMoreAISelector(Creature* creature)
+{
+ if (creature->IsPrivateObject())
+ return new npc_demon_hunter_hidden_no_more_private(creature);
+ return new NullCreatureAI(creature);
+};
+
void AddSC_zone_mardum()
{
// Creature
@@ -1667,6 +1989,9 @@ void AddSC_zone_mardum()
new FactoryCreatureScript<CreatureAI, &IzalWhitemoonFreedAISelector>("npc_izal_whitemoon_freed_private");
new FactoryCreatureScript<CreatureAI, &BelathDawnbladeFreedAISelector>("npc_belath_dawnblade_freed_private");
new FactoryCreatureScript<CreatureAI, &MannethrelDarkstarFreedAISelector>("npc_mannethrel_darkstar_freed_private");
+ new FactoryCreatureScript<CreatureAI, &JayceDarkweaverCrypticHollowAISelector>("npc_jayce_darkweaver_cryptic_hollow");
+ new FactoryCreatureScript<CreatureAI, &DemonHunterHiddenNoMoreAISelector>("npc_demon_hunter_hidden_no_more_private");
+ new FactoryCreatureScript<CreatureAI, &BasicHiddenNoMoreAISelector>("npc_basic_hidden_no_more_private");
// AreaTrigger
RegisterAreaTriggerAI(at_enter_the_illidari_ashtongue_allari_killcredit);
@@ -1686,6 +2011,7 @@ void AddSC_zone_mardum()
// Quests
new quest_enter_the_illidari_shivarra();
+ new quest_hidden_no_more();
// Spells
RegisterSpellScript(spell_demon_hunter_intro_aura);