diff options
-rw-r--r-- | sql/updates/world/master/2024_01_27_01_world.sql | 259 | ||||
-rw-r--r-- | src/server/scripts/KulTiras/zone_boralus.cpp | 397 |
2 files changed, 656 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_01_27_01_world.sql b/sql/updates/world/master/2024_01_27_01_world.sql new file mode 100644 index 00000000000..a149476a9cd --- /dev/null +++ b/sql/updates/world/master/2024_01_27_01_world.sql @@ -0,0 +1,259 @@ +SET @CGUID := 8000035; +SET @ATID := 62; +SEt @ATCP := 50; +SET @ATIDSPAWN := 62; + +-- Creature +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+4; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `VerifiedBuild`) VALUES +(@CGUID+0, 120788, 1643, 8717, 9802, '0', 10845, 0, 0, 0, 1068.16845703125, -487.204864501953125, 9.783460617065429687, 0.248383447527885437, 120, 0, 0, 4737000, 90350, 0, NULL, NULL, NULL, NULL, 52808), -- Genn Greymane (Area: Harbormaster's Office - Difficulty: 0) CreateObject1 +(@CGUID+1, 120599, 1643, 8717, 9802, '0', 10845, 0, 0, 1, 1064.234375, -489.888885498046875, 9.783459663391113281, 1.296923279762268066, 120, 0, 0, 176210, 0, 0, NULL, NULL, NULL, NULL, 52808), -- Greyguard (Area: Harbormaster's Office - Difficulty: 0) CreateObject1 +(@CGUID+2, 120599, 1643, 8717, 9802, '0', 10845, 0, 0, 1, 1058.7447509765625, -488.9444580078125, 9.78342437744140625, 1.206693172454833984, 120, 0, 0, 176210, 0, 0, NULL, NULL, NULL, NULL, 52808), -- Greyguard (Area: Harbormaster's Office - Difficulty: 0) CreateObject1 +(@CGUID+3, 121235, 1643, 8717, 9802, '0', 10827, 0, 0, 1, 1070.404541015625, -489.321197509765625, 9.783461570739746093, 1.501441717147827148, 120, 0, 0, 17621, 0, 0, NULL, NULL, NULL, NULL, 52808), -- Taelia (Area: Harbormaster's Office - Difficulty: 0) CreateObject1 +(@CGUID+4, 122370, 1643, 8717, 9802, '0', 9001, 0, 0, 0, 1071.4288330078125, -486.3125, 9.7834625244140625, 3.499564647674560546, 120, 0, 0, 17621, 0, 0, NULL, NULL, NULL, NULL, 52808); -- Cyrus Crestfall (Area: Harbormaster's Office - Difficulty: 0) CreateObject1 + +-- Template +UPDATE `creature` SET `StringId` = "GreyguardOne" WHERE `guid` = @CGUID+1; +UPDATE `creature` SET `StringId` = "GreyguardTwo" WHERE `guid` = @CGUID+2; + +UPDATE `creature_template` SET `ScriptName` = 'npc_cyrus_crestfall_old_knight' WHERE `entry` = 122370; +UPDATE `creature_template` SET `npcflag`=3 WHERE `entry`=120788; -- Genn Greymane + +-- AreaTrigger +DELETE FROM `areatrigger_template` WHERE (`Id` = @ATID+0 AND `IsCustom` = 1) OR (`Id` = @ATID+1 AND `IsCustom` = 1); +INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `Flags`, `VerifiedBuild`) VALUES +(@ATID+0, 1, 1, 0), +(@ATID+1, 1, 1, 0); + +DELETE FROM `areatrigger_create_properties` WHERE (`Id`= @ATCP+0 AND `IsCustom`=1) OR (`Id`= @ATCP+1 AND `IsCustom`=1); +INSERT INTO `areatrigger_create_properties` (`Id`, `IsCustom`, `AreaTriggerId`, `IsAreatriggerCustom`, `Flags`, `MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`, `AnimId`, `AnimKitId`, `DecalPropertiesId`, `TimeToTarget`, `TimeToTargetScale`, `Shape`, `ShapeData0`, `ShapeData1`, `ShapeData2`, `ShapeData3`, `ShapeData4`, `ShapeData5`, `ShapeData6`, `ShapeData7`, `ScriptName`, `VerifiedBuild`) VALUES +(@ATCP+0, 1, @ATID+0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 12, 8, 6, 12, 8, 6, 0, 0, '', 0), +(@ATCP+1, 1, @ATID+1, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 7, 4, 7, 7, 4, 7, 0, 0, '', 0); + +DELETE FROM `areatrigger` WHERE `SpawnId` BETWEEN @ATIDSPAWN+0 AND @ATIDSPAWN+3; +INSERT INTO `areatrigger` (`SpawnId`, `AreaTriggerCreatePropertiesId`, `IsCustom`, `MapId`, `SpawnDifficulties`, `PosX`, `PosY`, `PosZ`, `Orientation`, `PhaseUseFlags`, `PhaseId`, `PhaseGroup`, `SpellForVisuals`, `ScriptName`, `Comment`, `VerifiedBuild`) VALUES +(@ATIDSPAWN+0, @ATCP+0, 1, 1643, '0', 1083.3828, -485.8729, 20.3390, 1.313066, 0, 0, 0, NULL, 'at_boralus_old_knight_enter_harbormasters_office', 'Boralus - Enter Harbormasters Office', 0), +(@ATIDSPAWN+1, @ATCP+1, 1, 1643, '0', 1063.0791, -472.2944, 11.6384, 6.063283, 0, 0, 0, NULL, 'at_boralus_old_knight_genn_arrives_boralus', 'Boralus - Genn Greymane arrives Boralus', 0); + +-- SpellScript Names +DELETE FROM `spell_script_names` WHERE `spell_id` = 269054; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(269054, 'spell_boralus_find_cyrus_objective_complete'); + +-- Scene +DELETE FROM `scene_template` WHERE `SceneId`=1960; +INSERT INTO `scene_template` (`SceneId`, `Flags`, `ScriptPackageID`, `Encrypted`) VALUES +(1960, 17, 2107, 0); + +UPDATE `scene_template` SET `ScriptName` = 'scene_boralus_client_scene_cyrus_and_genn' WHERE `SceneId` = 1960; + +-- Gossip +DELETE FROM `creature_template_gossip` WHERE (`CreatureID`=122370 AND `MenuID`=22543) OR (`CreatureID`=120788 AND `MenuID`=23317); +INSERT INTO `creature_template_gossip` (`CreatureID`, `MenuID`, `VerifiedBuild`) VALUES +(122370, 22543, 52808), -- Cyrus Crestfall +(120788, 23317, 53040); -- Genn Greymane + +UPDATE `creature_template_gossip` SET `VerifiedBuild`=52808 WHERE (`CreatureID`=121235 AND `MenuID`=21307); + +DELETE FROM `gossip_menu` WHERE (`MenuID`=21307 AND `TextID`=133576); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`, `VerifiedBuild`) VALUES +(21307, 133576, 52808); -- 121235 (Taelia) + +UPDATE `gossip_menu_option` SET `GossipOptionID`=48242, `VerifiedBuild`=53040 WHERE (`MenuID`=22543 AND `OptionID`=0); + +-- Quest stuff +DELETE FROM `creature_questender` WHERE (`id`=121235 AND `quest`=46729); +INSERT INTO `creature_questender` (`id`, `quest`, `VerifiedBuild`) VALUES +(121235, 46729, 52808); -- The Old Knight ended by Taelia + +-- Conversation +DELETE FROM `conversation_template` WHERE `Id` IN (7653, 8062, 7605); +INSERT INTO `conversation_template` (`Id`, `FirstLineID`, `TextureKitId`, `VerifiedBuild`) VALUES +(7653, 17449, 0, 52808), +(8062, 18297, 0, 52808), +(7605, 17297, 0, 52808); + +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_accept_old_knight' WHERE `Id` = 9556; +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_enter_harbormaster_office' WHERE `Id` = 7605; +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_cyrus_meets_genn' WHERE `Id` = 8062; +UPDATE `conversation_template` SET `ScriptName` = 'conversation_cyrus_crestfall_shaking_hands' WHERE `Id` = 7653; + +DELETE FROM `conversation_actors` WHERE (`Idx`=1 AND `ConversationId` IN (8062,7653)) OR (`Idx`=0 AND `ConversationId` IN (8062,7605,7653)); +INSERT INTO `conversation_actors` (`ConversationId`, `ConversationActorId`, `ConversationActorGuid`, `Idx`, `CreatureId`, `CreatureDisplayInfoId`, `NoActorObject`, `ActivePlayerObject`, `VerifiedBuild`) VALUES +(8062, 0,(@CGUID+3), 1, 0, 0, 0, 0, 52808), -- Full: 0x20309CCD607664C00000EA00001E0614 Creature/0 R3111/S234 Map: 1643 (Kul Tiras) Entry: 121235 (Taelia) Low: 1967636 +(8062, 59635, 0, 0, 0, 0, 0, 0, 52808), -- Full: 0x20309CCD607780800000EA00001E0614 Creature/0 R3111/S234 Map: 1643 (Kul Tiras) Entry: 122370 (Cyrus Crestfall) Low: 1967636 +(7605, 59582, 0, 0, 0, 0, 0, 0, 52808), -- Full: 0x20309CCD6079B5800000EA000021CFE2 Creature/0 R3111/S234 Map: 1643 (Kul Tiras) Entry: 124630 (Kul Tiran Guard) Low: 2215906 +(7653, 64106, (@CGUID+0), 0, 0, 0, 0, 0, 52808), -- Full: 0x0 +(7653, 59635, 0, 1, 0, 0, 0, 0, 52808); -- Full: 0x20309CCD607780800000EA00001E0614 Creature/0 R3111/S234 Map: 1643 (Kul Tiras) Entry: 122370 (Cyrus Crestfall) Low: 1967636 + +DELETE FROM `conversation_line_template` WHERE `Id` IN (18299, 18298, 18297, 17447, 17297, 17446, 17423, 17422, 17421, 17420, 18294, 17419, 17417, 17416, 18293, 17414, 17413, 17449); +INSERT INTO `conversation_line_template` (`Id`, `UiCameraID`, `ActorIdx`, `Flags`, `ChatType`, `VerifiedBuild`) VALUES +(18299, 0, 1, 0, 0, 52808), +(18298, 0, 0, 0, 0, 52808), +(18297, 0, 0, 0, 0, 52808), +(17447, 0, 0, 0, 0, 52808), +(17297, 0, 0, 0, 0, 52808), +(17446, 0, 0, 0, 0, 52808), +(17423, 0, 0, 0, 0, 52808), +(17422, 0, 1, 0, 0, 52808), +(17421, 0, 1, 0, 0, 52808), +(17420, 0, 1, 0, 0, 52808), +(18294, 0, 1, 0, 0, 52808), +(17419, 0, 1, 0, 0, 52808), +(17417, 0, 1, 0, 0, 52808), +(17416, 0, 1, 0, 0, 52808), +(18293, 0, 1, 0, 0, 52808), +(17414, 0, 1, 0, 0, 52808), +(17413, 0, 0, 0, 0, 52808), +(17449, 0, 0, 0, 0, 52808); + +-- Phasing +DELETE FROM `phase_name` WHERE `ID` IN (10845, 10827, 9001); +INSERT INTO `phase_name` (`ID`, `Name`) VALUES +(10845, 'Cosmetic - See Genn Greymane and Greyguards in Harbormasters Office'), +(10827, 'Cosmetic - See Taelia in Harbormasters Office'), +(9001, 'Cosmetic - See Cyrus Crestfall in Harbormasters Office'); + +DELETE FROM `phase_area` WHERE `AreaId` = 9802 AND `PhaseId` IN (10845, 10827, 9001); +INSERT INTO `phase_area` (`AreaId`, `PhaseId`, `Comment`) VALUES +(9802, 10845, 'See Genn Greymane and Greyguards in Harbormasters Office'), +(9802, 10827, 'See Taelia in Harbormasters Office'), +(9802, 9001, 'See Cyrus Crestfall in Harbormasters Office'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (10845, 10827, 9001) AND `SourceEntry` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES +(26, 10845, 0, 0, 0, 47, 0, 46729, 8, 0, 0, 'Apply Phase 10845 if Quest 46729 is in progress'), +(26, 10845, 0, 0, 0, 48, 0, 335127, 0, 1, 0, 'Apply Phase 10845 if Questobjective 335127 (Enter the Harbormasters Office) is rewarded'), +(26, 10845, 0, 0, 1, 47, 0, 46729, 2|64, 0, 0, 'Apply Phase 10845 if Quest 46729 is complete | rewarded'), +(26, 10827, 0, 0, 0, 47, 0, 46729, 8, 0, 0, 'Apply Phase 10827 if Quest 46729 is in progress'), +(26, 10827, 0, 0, 0, 48, 0, 335127, 0, 1, 0, 'Apply Phase 10827 if Questobjective 335127 (Enter the Harbormasters Office) is rewarded'), +(26, 10827, 0, 0, 1, 47, 0, 46729, 2|64, 0, 0, 'Apply Phase 10827 if Quest 46729 is complete | rewarded'), +(26, 9001, 0, 0, 0, 47, 0, 46729, 8, 0, 0, 'Apply Phase 9001 if Quest 46729 is in progress'), +(26, 9001, 0, 0, 0, 48, 0, 335127, 0, 1, 0, 'Apply Phase 9001 if Questobjective 335127 (Enter the Harbormasters Office) is rewarded'), +(26, 9001, 0, 0, 1, 47, 0, 46729, 2|64, 0, 0, 'Apply Phase 9001 if Quest 46729 is complete | rewarded'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId`=15 AND `SourceGroup` = 22543 AND `SourceEntry` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES +(15, 22543, 0, 0, 0, 47, 0, 46729, 8, 0, 0, 'Show gossip menu option if player has Quest 46729 in Progress'), +(15, 22543, 0, 0, 0, 48, 0, 335216, 0, 1, 1, 'Show gossip menu option if player has not quest objective done: Speak with Cyrus Crestfall'); + +-- Difficulty & Model +UPDATE `creature_template_difficulty` SET `VerifiedBuild`=52808 WHERE (`DifficultyID`=0 AND `Entry` IN (145730,121235,137314,120788,120599,122370,137316,145728,142189,137317,124238,151173,140944,142181,142089,141116,141114,141117,142163,131992,141115,135658,143272,141033,143040,135521,137298,137281,139148,139144,124805,126781,139088,146902,147206,131989,123604,145729,135681,143856,140472,143842,143116,143110,143111,143104,143107,143101,143109,143114,142138,143112,135618,143108,142160,135612,138744,137282,143844,137300,143100,137279,144635,137294,140473,138704,143846,137293,143106,153932,135614,135677,143103,143870,137295,148922,143105,135675,135678,143839,152000,142612,143718,136059,143260,143259,124695,142176,138280,135064,143248,126634,139375,141274,143242,126642,126519,144147,123633,136061,136063,143251,144148,140313,138726,124859,132625,123675,160101,137268,142086,142174,124289,143262,125005,143261,139522,142169,142132,143263,150208,142063,142056,142167,154464,135230,142188,142371,142457,124725,177193,143244,121239,143246,142191,123635,143295,124720,135153,149045,142187,143243,142073,142180,144383,142068,143709,142543,124295,142117,142136,143098,142066,150493,138724,123244,132036,132642,128531,143502,138725,142752,136041,144310,143022,140350,142137,143254,137265,132638,123642,137266,142139,135520,142346,123639,143250,130377,135808,142459,135509,142077,135446,123169,133282,133325,62821,197611,131994,62822,136052,126682,124180,142166,142094,126434,124181,124727,136633,142095,121541,124630)); +UPDATE `creature_template_difficulty` SET `ContentTuningID`=328, `VerifiedBuild`=52808 WHERE (`Entry`=131983 AND `DifficultyID`=0); -- Raider's Training Dummy +UPDATE `creature_template_difficulty` SET `ContentTuningID`=371, `VerifiedBuild`=52808 WHERE (`Entry`=115785 AND `DifficultyID`=0); -- Direbeak Hatchling +UPDATE `creature_template_difficulty` SET `ContentTuningID`=371, `VerifiedBuild`=52808 WHERE (`Entry`=213407 AND `DifficultyID`=0); -- Lil' Wrathion + +DELETE FROM `creature_model_info` WHERE `DisplayID`=115559; +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `DisplayID_Other_Gender`, `VerifiedBuild`) VALUES +(115559, 0.337544381618499755, 0.625, 0, 52808); + +UPDATE `creature_model_info` SET `VerifiedBuild`=52808 WHERE `DisplayID` IN (80177, 88828, 84174, 75877, 75910, 76907, 88825, 83982, 87638, 84173, 82950, 91067, 83985, 86950, 86028, 87602, 77041, 77055, 84812, 86638, 60256, 76549, 1141, 32790, 32789, 83521, 82995, 86168, 65, 78193, 55345, 81302, 89604, 229, 87422, 5565, 88051, 26353, 53108, 77523, 87833, 87824, 87825, 87820, 87814, 87818, 32646, 87823, 87831, 41325, 87826, 32681, 88065, 77687, 85758, 87495, 83093, 88050, 81313, 87817, 85228, 86764, 83533, 58202, 78869, 83531, 55344, 87822, 62093, 85767, 72253, 53107, 87819, 83532, 90161, 87821, 86472, 85771, 86471, 41667, 38801, 79014, 87690, 21936, 84554, 87797, 87793, 76552, 88493, 85797, 80857, 84069, 87792, 79015, 25073, 87183, 87791, 342, 36499, 88317, 87549, 84555, 84557, 88262, 86027, 87788, 88318, 86025, 85964, 46710, 82148, 77532, 88609, 79969, 93865, 82026, 70070, 78631, 88608, 87601, 27681, 77936, 81194, 87794, 86443, 87648, 86763, 87581, 87790, 90661, 87376, 81363, 87564, 82543, 87647, 81166, 87781, 82814, 82538, 80754, 87634, 87628, 87050, 83812, 88605, 85967, 87780, 76222, 87769, 39631, 77466, 88502, 33519, 84110, 76422, 88271, 80893, 87786, 80753, 87599, 82540, 88606, 80751, 80752, 77691, 38804, 13069, 77940, 24052, 78472, 88264, 80767, 87583, 88610, 87815, 87375, 90788, 88612, 85962, 82693, 32778, 82545, 79970, 52723, 85963, 87713, 84544, 81372, 88611, 88528, 74793, 77054, 86640, 88615, 87584, 87796, 82025, 82539, 84262, 88607, 84263, 82024, 76046, 77039, 87630, 77496, 88614, 87795, 81168, 84415, 87649, 84284, 87600, 88690, 78483, 81321, 81807, 88613, 42720, 11686, 28047, 42722, 84551, 61205, 77851, 88265, 87611, 33719, 76515, 83664, 88604, 87612, 27823); +UPDATE `creature_model_info` SET `BoundingRadius`=0.305999994277954101, `CombatReach`=1.5, `VerifiedBuild`=52808 WHERE `DisplayID`=86639; +UPDATE `creature_model_info` SET `BoundingRadius`=4.419252872467041015, `CombatReach`=3.20000004768371582, `VerifiedBuild`=52808 WHERE `DisplayID`=15275; +UPDATE `creature_model_info` SET `BoundingRadius`=0.60000002384185791, `CombatReach`=2, `VerifiedBuild`=52808 WHERE `DisplayID`=42178; +UPDATE `creature_model_info` SET `BoundingRadius`=0.280177772045135498, `CombatReach`=1, `VerifiedBuild`=52808 WHERE `DisplayID`=87565; +UPDATE `creature_model_info` SET `BoundingRadius`=0.5, `VerifiedBuild`=52808 WHERE `DisplayID`=79382; +UPDATE `creature_model_info` SET `BoundingRadius`=0.208000004291534423, `CombatReach`=1.5, `VerifiedBuild`=52808 WHERE `DisplayID`=81291; + +-- Greyguard smart ai +SET @ENTRY := 120599; +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY; +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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@ENTRY, 0, 0, 0, '', 58, 0, 100, 0, (0xFFFFFFFF), 12059900, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On any waypoint of path 12059900 ended - Self: Despawn instantly'), +(@ENTRY, 0, 1, 0, '', 58, 0, 100, 0, (0xFFFFFFFF), 12059901, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On any waypoint of path 12059901 ended - Self: Despawn instantly'); + +-- Path Taelia +SET @ENTRY := 124630; +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, 'Taelia - The Old Knight Quest'); + +DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH; +INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES +(@PATH, 0, 1079.5695, -476.7725, 20.7355, NULL, 2000), +(@PATH, 1, 1069.0481, -473.7091, 16.4489, NULL, 0), +(@PATH, 2, 1047.5667, -470.1653, 8.95465, NULL, 0); + +SET @ENTRY := 124630; +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, 0, 0, 'Taelia - After Client Scene: Cyrus and Genn'); + +DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH; +INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES +(@PATH, 0, 1058.854, -471.6476, 11.65849, NULL, 0), +(@PATH, 1, 1059.061, -478.934, 10.2413, NULL, 0), +(@PATH, 2, 1069.51, -487.0607, 9.691328, NULL, 0), +(@PATH, 3, 1070.431, -489.1788, 9.717813, 1.50144, 0); + +-- Path Cyrus +SET @ENTRY := 122370; +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, 0, 0, 'Cyrus - After Client Scene: Cyrus and Genn'); + +DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH; +INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES +(@PATH, 0, 1059.382, -479.4549, 10.17741, NULL, 0), +(@PATH, 1, 1065.797, -484.2326, 9.897485, NULL, 0), +(@PATH, 2, 1071.325, -486.184, 9.744476, 3.49956, 0); + +-- Path Genn Greymane +SET @ENTRY := 120788; +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, 0, 0, 'Genn - After Client Scene: Cyrus and Genn'); + +DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH; +INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES +(@PATH, 0, 1058.998, -472.7778, 11.65849, NULL, 0), +(@PATH, 1, 1058.879, -478.0556, 10.12054, NULL, 0), +(@PATH, 2, 1059.028, -481.0955, 9.979296, NULL, 0), +(@PATH, 3, 1059.656, -484.1667, 9.949183, NULL, 0), +(@PATH, 4, 1065.174, -486.9184, 9.874442, NULL, 0), +(@PATH, 5, 1068.137, -487.2014, 9.691328, 0.24838, 0); + +-- Path Greyguard +SET @ENTRY := 120599; +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, 0, 0, 'Greyguard - After Client Scene: Cyrus and Genn'); + +DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH; +INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES +(@PATH, 0, 1050.243, -469.1406, 10.48856, NULL, 0), +(@PATH, 1, 1052.11, -469.5472, 11.86161, NULL, 0), +(@PATH, 2, 1055.064, -470.1649, 11.74733, NULL, 0), +(@PATH, 3, 1058.658, -472.8438, 11.65849, NULL, 0), +(@PATH, 4, 1058.786, -475.0191, 11.65849, NULL, 0), +(@PATH, 5, 1058.193, -478.4648, 10.32366, NULL, 0), +(@PATH, 6, 1058.155, -482.3889, 9.946414, NULL, 0), +(@PATH, 7, 1058.78, -488.8403, 10.06123, NULL, 0); + +SET @ENTRY := 120599; +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, 0, 0, 'Greyguard - After Client Scene: Cyrus and Genn'); + +DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH; +INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES +(@PATH, 0, 1052.17, -470.2413, 11.86161, NULL, 0), +(@PATH, 1, 1055.045, -470.7951, 11.74097, NULL, 0), +(@PATH, 2, 1058.658, -472.8438, 11.65849, NULL, 0), +(@PATH, 3, 1059.632, -474.9479, 11.65849, NULL, 0), +(@PATH, 4, 1059.16, -478.5278, 10.21113, NULL, 0), +(@PATH, 5, 1060.052, -483.7674, 9.961575, NULL, 0), +(@PATH, 6, 1064.194, -489.7517, 9.86161, NULL, 0); diff --git a/src/server/scripts/KulTiras/zone_boralus.cpp b/src/server/scripts/KulTiras/zone_boralus.cpp index 5b5f8a44b19..3f2147ec23e 100644 --- a/src/server/scripts/KulTiras/zone_boralus.cpp +++ b/src/server/scripts/KulTiras/zone_boralus.cpp @@ -26,6 +26,8 @@ #include "Player.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "ScriptedGossip.h" +#include "SpellInfo.h" #include "SpellScript.h" #include "TemporarySummon.h" @@ -56,6 +58,40 @@ enum GetYourBearingsData SPELL_HUB_TOUR_CONVO_FLIGHT_MASTER = 247753 }; +enum TheOldKnightData +{ + QUEST_THE_OLD_KNIGHT = 46729, + + NPC_CYRUS_CRESTFALL = 122370, + NPC_GENN_GREYMANE = 120788, + NPC_GREYGUARD = 120599, + + GOSSIP_MENU_CYRUS_SHAKING_HANDS = 22543, + GOSSIP_OPTION_CYRUS_SHAKING_HANDS = 0, + + CONVO_ACCEPT_OLD_KNIGHT_QUEST = 9556, + CONVO_CYRUS_MEETS_GENN_IN_OFFICE = 8062, + CONVO_CYRUS_SHAKING_HAND = 7653, + + CONVO_ACTOR_CYRUS_CRESTFAL = 59635, + + OBJECTIVE_ENTER_HARBORMASTERS_OFFICE = 335127, + + KILLCREDIT_SPEAK_WITH_CYRUS_OLD_KNIGHT = 137009, + KILLCREDIT_HEAR_CYRUS_TALE_OLD_KNIGHT = 137877, + + PATH_KULTIRAN_GUARD_ENTER_OFFICE = 12463000, + PATH_KULTIRAN_GUARD_AFTER_SCENE_OFFICE = 12463001, + PATH_CYRUS_CRESTFAL_AFTER_SCENE_OFFICE = 12237000, + PATH_GENN_GREYMANE_AFTER_SCENE_OFFICE = 12078800, + PATH_GREYGUARD_TWO_AFTER_SCENE_OFFICE = 12059900, + PATH_GREYGUARD_ONE_AFTER_SCENE_OFFICE = 12059901, + + SPELL_ENTER_HARBOR_MASTERS_OFFICE = 268759, + SPELL_FIND_CYRUS_OBJECTIVE_COMPLETE = 269054, + SPELL_CLIENT_SCENE_CYRUS_AND_GENN = 271234 +}; + // 124630 - Taelia struct npc_taelia_get_your_bearings : public ScriptedAI { @@ -68,6 +104,20 @@ struct npc_taelia_get_your_bearings : public ScriptedAI me->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); } + void OnQuestAccept(Player* player, Quest const* quest) override + { + if (quest->GetQuestId() == QUEST_THE_OLD_KNIGHT) + Conversation::CreateConversation(CONVO_ACCEPT_OLD_KNIGHT_QUEST, player, *player, player->GetGUID(), nullptr, false); + } + + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override + { + if (spellInfo->Id != SPELL_FIND_CYRUS_OBJECTIVE_COMPLETE) + return; + + me->GetMotionMaster()->MovePath(PATH_KULTIRAN_GUARD_AFTER_SCENE_OFFICE, false); + } + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE) @@ -79,6 +129,12 @@ struct npc_taelia_get_your_bearings : public ScriptedAI me->SetFacingToObject(summoner); } } + + void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override + { + if (pathId == PATH_KULTIRAN_GUARD_AFTER_SCENE_OFFICE) + me->DespawnOrUnsummon(); + } }; // 5360 - Conversation @@ -255,10 +311,337 @@ public: } }; +// 9556 - Conversation The Old Knight (accept Quest) +class conversation_boralus_accept_old_knight : public ConversationScript +{ +public: + conversation_boralus_accept_old_knight() : ConversationScript("conversation_boralus_accept_old_knight") { } + + void OnConversationCreate(Conversation* conversation, Unit* creator) override + { + Creature* kultiranGuard = creator->FindNearestCreatureWithOptions(20.0f, { .CreatureId = NPC_SUMMONED_KULTIRAN_GUARD, .IgnorePhases = true, .OwnerGuid = creator->GetGUID() }); + if (!kultiranGuard) + return; + + conversation->AddActor(CONVO_ACTOR_KULTIRAN_GUARD, 0, kultiranGuard->GetGUID()); + conversation->Start(); + } +}; + +// XX - Boralus The Old Knight (Enter the Harbormasters Office) +struct at_boralus_old_knight_enter_harbormasters_office : AreaTriggerAI +{ + at_boralus_old_knight_enter_harbormasters_office(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } + + void OnUnitEnter(Unit* unit) override + { + Player* player = unit->ToPlayer(); + if (!player || player->GetQuestStatus(QUEST_THE_OLD_KNIGHT) != QUEST_STATUS_INCOMPLETE || player->GetQuestObjectiveData(QUEST_THE_OLD_KNIGHT, OBJECTIVE_ENTER_HARBORMASTERS_OFFICE)) + return; + + player->CastSpell(nullptr, SPELL_ENTER_HARBOR_MASTERS_OFFICE, false); + } +}; + +// 7605 - Conversation The Old Knight (Enter the Harbormasters Office) +class conversation_boralus_enter_harbormaster_office : public ConversationScript +{ +public: + conversation_boralus_enter_harbormaster_office() : ConversationScript("conversation_boralus_enter_harbormaster_office") { } + + void OnConversationCreate(Conversation* conversation, Unit* creator) override + { + Creature* kultiranGuard = creator->FindNearestCreatureWithOptions(20.0f, { .CreatureId = NPC_SUMMONED_KULTIRAN_GUARD, .IgnorePhases = true, .OwnerGuid = creator->GetGUID() }); + if (!kultiranGuard) + return; + + kultiranGuard->GetMotionMaster()->Clear(); + kultiranGuard->GetMotionMaster()->MovePath(PATH_KULTIRAN_GUARD_ENTER_OFFICE, false); + + conversation->AddActor(CONVO_ACTOR_KULTIRAN_GUARD, 0, kultiranGuard->GetGUID()); + conversation->Start(); + } +}; + +// XX - Boralus The Old Knight (Genn Greymane arrives Boralus) +struct at_boralus_old_knight_genn_arrives_boralus : AreaTriggerAI +{ + at_boralus_old_knight_genn_arrives_boralus(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } + + void OnUnitEnter(Unit* unit) override + { + Player* player = unit->ToPlayer(); + if (!player || player->GetQuestStatus(QUEST_THE_OLD_KNIGHT) != QUEST_STATUS_INCOMPLETE || player->GetQuestObjectiveData(QUEST_THE_OLD_KNIGHT, OBJECTIVE_ENTER_HARBORMASTERS_OFFICE)) + return; + + player->CastSpell(nullptr, SPELL_CLIENT_SCENE_CYRUS_AND_GENN, false); + } +}; + +// 1960 - Client Scene: Cyrus and Genn +class scene_boralus_client_scene_cyrus_and_genn : public SceneScript +{ +public: + scene_boralus_client_scene_cyrus_and_genn() : SceneScript("scene_boralus_client_scene_cyrus_and_genn") { } + + void OnSceneComplete(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) override + { + player->CastSpell(player, SPELL_FIND_CYRUS_OBJECTIVE_COMPLETE, true); + } + + void OnSceneCancel(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) override + { + player->CastSpell(player, SPELL_FIND_CYRUS_OBJECTIVE_COMPLETE, true); + } +}; + +Position const TaeliaTeleportOfficePos = { 1054.29f, -469.776f, 11.7166f, 3.065999f }; + +// 269054 - Find Cyrus Objective Complete +class spell_boralus_find_cyrus_objective_complete : public SpellScript +{ + void HandleHitTarget(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetHitUnit()->ToPlayer()) + { + player->KilledMonsterCredit(NPC_CYRUS_CRESTFALL); + Conversation::CreateConversation(CONVO_CYRUS_MEETS_GENN_IN_OFFICE, player, *player, player->GetGUID(), nullptr, false); + } + else + { + if (GetHitUnit()->GetEntry() != NPC_SUMMONED_KULTIRAN_GUARD) + return; + + GetHitUnit()->NearTeleportTo(TaeliaTeleportOfficePos); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_boralus_find_cyrus_objective_complete::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +Position const CyrusOfficePos = { 1056.310f, -470.567f, 11.656f, 5.80610f }; +Position const GennOfficePos = { 1052.689f, -470.200f, 11.692f, 0.24838f }; +Position const GreyguardOneOfficePos = { 1044.979f, -468.523f, 8.386f, 6.03047f }; +Position const GreyguardTwoOfficePos = { 1042.359f, -467.738f, 8.386f, 6.04665f }; + +// 8062 - Conversation +class conversation_boralus_cyrus_meets_genn : public ConversationScript +{ +public: + conversation_boralus_cyrus_meets_genn() : ConversationScript("conversation_boralus_cyrus_meets_genn") { } + + enum OldKnightsConversationData + { + CONVO_LINE_CYRUS_AND_GENN_DESPAWN = 18298, + + EVENT_OLD_KNIGHTS_CLONE_DESPAWN = 1 + }; + + void OnConversationCreate(Conversation* conversation, Unit* creator) override + { + Creature* cyrusObject = GetClosestCreatureWithOptions(creator, 30.0f, { .CreatureId = NPC_CYRUS_CRESTFALL, .IgnorePhases = true }); + Creature* gennObject = GetClosestCreatureWithOptions(creator, 30.0f, { .CreatureId = NPC_GENN_GREYMANE, .IgnorePhases = true }); + Creature* greyguardOneObject = GetClosestCreatureWithOptions(creator, 30.0f, { .CreatureId = NPC_GREYGUARD, .StringId = "GreyguardOne", .IgnorePhases = true }); + Creature* greyguardTwoObject = GetClosestCreatureWithOptions(creator, 30.0f, { .CreatureId = NPC_GREYGUARD, .StringId = "GreyguardTwo", .IgnorePhases = true }); + if (!cyrusObject || !gennObject || !greyguardOneObject || !greyguardTwoObject) + return; + + TempSummon* cyrusClone = cyrusObject->SummonPersonalClone(CyrusOfficePos, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer()); + TempSummon* gennClone = gennObject->SummonPersonalClone(GennOfficePos, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer()); + TempSummon* greyguardOneClone = greyguardOneObject->SummonPersonalClone(GreyguardOneOfficePos, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer()); + TempSummon* greyguardTwoClone = greyguardTwoObject->SummonPersonalClone(GreyguardTwoOfficePos, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer()); + if (!cyrusClone || !gennClone || !greyguardOneClone || !greyguardTwoClone) + return; + + _gennCloneGUID = gennClone->GetGUID(); + + cyrusClone->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); + gennClone->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); + + cyrusClone->GetMotionMaster()->MovePath(PATH_CYRUS_CRESTFAL_AFTER_SCENE_OFFICE, false); + gennClone->GetMotionMaster()->MovePath(PATH_GENN_GREYMANE_AFTER_SCENE_OFFICE, false); + greyguardOneClone->GetMotionMaster()->MovePath(PATH_GREYGUARD_ONE_AFTER_SCENE_OFFICE, false); + greyguardTwoClone->GetMotionMaster()->MovePath(PATH_GREYGUARD_TWO_AFTER_SCENE_OFFICE, false); + + conversation->AddActor(CONVO_ACTOR_CYRUS_CRESTFAL, 0, cyrusClone->GetGUID()); + conversation->Start(); + } + + void OnConversationStart(Conversation* conversation) override + { + LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale(); + + _events.ScheduleEvent(EVENT_OLD_KNIGHTS_CLONE_DESPAWN, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_CYRUS_AND_GENN_DESPAWN)); + } + + void OnConversationUpdate(Conversation* conversation, uint32 diff) override + { + _events.Update(diff); + + switch (_events.ExecuteEvent()) + { + case EVENT_OLD_KNIGHTS_CLONE_DESPAWN: + { + Creature* cyrusClone = conversation->GetActorCreature(0); + if (!cyrusClone) + break; + + Unit* privateObjectOwner = ObjectAccessor::GetUnit(*conversation, conversation->GetPrivateObjectOwner()); + if (!privateObjectOwner) + return; + + if (Creature* gennClone = ObjectAccessor::GetCreature(*conversation, _gennCloneGUID)) + gennClone->DespawnOrUnsummon(); + + cyrusClone->DespawnOrUnsummon(); + PhasingHandler::OnConditionChange(privateObjectOwner); + break; + } + default: + break; + } + } + +private: + ObjectGuid _gennCloneGUID; + EventMap _events; +}; + +// 122370 - Cyrus Crestfall +struct npc_cyrus_crestfall_old_knight : public ScriptedAI +{ + npc_cyrus_crestfall_old_knight(Creature* creature) : ScriptedAI(creature) { } + + bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + { + // Quest 46729 - The Old Knight + if (menuId == GOSSIP_MENU_CYRUS_SHAKING_HANDS && gossipListId == GOSSIP_OPTION_CYRUS_SHAKING_HANDS) + { + CloseGossipMenuFor(player); + player->KilledMonsterCredit(KILLCREDIT_SPEAK_WITH_CYRUS_OLD_KNIGHT); + Conversation::CreateConversation(CONVO_CYRUS_SHAKING_HAND, player, *player, player->GetGUID(), nullptr, false); + } + return true; + } +}; + +Position const CyrusMoveToOfficeFirePos = { 1075.257f, -487.25696f, 9.812291f }; +Position const CyrusStaticOfficePos = { 1071.428f, -486.312f, 9.783f, 3.4995f }; + +// 7653 - Conversation +class conversation_cyrus_crestfall_shaking_hands : public ConversationScript +{ +public: + conversation_cyrus_crestfall_shaking_hands() : ConversationScript("conversation_cyrus_crestfall_shaking_hands") { } + + enum ShakingHandsConversationData + { + CONVO_LINE_CYRUS_START_WALK_TO_FIRE = 17416, + CONVO_LINE_CYRUS_CHANGE_FACING_GENN = 17419, + CONVO_LINE_CYRUS_MOVE_BACK_TO_GENN = 17421, + CONVO_LINE_CYRUS_DESPAWN_CLONE_OFFICE = 17423, + + EVENT_CYRUS_START_WALK_TO_FIRE = 1, + EVENT_CYRUS_CHANGE_FACING_GENN = 2, + EVENT_CYRUS_MOVE_BACK_TO_GENN = 3, + EVENT_CYRUS_DESPAWN_CLONE_OFFICE = 4, + + POINT_CYRUS_MOVE_TO_OFFICE_FIRE = 1, + POINT_CYRUS_MOVE_BACK_TO_GENN = 2 + }; + + void OnConversationCreate(Conversation* conversation, Unit* creator) override + { + Creature* cyrusObject = GetClosestCreatureWithOptions(creator, 10.0f, { .CreatureId = NPC_CYRUS_CRESTFALL, .IgnorePhases = true }); + if (!cyrusObject) + return; + + TempSummon* cyrusClone = cyrusObject->SummonPersonalClone(cyrusObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer()); + if (!cyrusClone) + return; + + cyrusClone->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); + + conversation->AddActor(CONVO_ACTOR_CYRUS_CRESTFAL, 1, cyrusClone->GetGUID()); + conversation->Start(); + } + + void OnConversationStart(Conversation* conversation) override + { + LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale(); + + _events.ScheduleEvent(EVENT_CYRUS_START_WALK_TO_FIRE, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_CYRUS_START_WALK_TO_FIRE)); + _events.ScheduleEvent(EVENT_CYRUS_CHANGE_FACING_GENN, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_CYRUS_CHANGE_FACING_GENN)); + _events.ScheduleEvent(EVENT_CYRUS_MOVE_BACK_TO_GENN, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_CYRUS_MOVE_BACK_TO_GENN)); + _events.ScheduleEvent(EVENT_CYRUS_DESPAWN_CLONE_OFFICE, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_CYRUS_DESPAWN_CLONE_OFFICE)); + } + + void OnConversationUpdate(Conversation* conversation, uint32 diff) override + { + _events.Update(diff); + + switch (_events.ExecuteEvent()) + { + case EVENT_CYRUS_START_WALK_TO_FIRE: + { + Creature* cyrusClone = conversation->GetActorCreature(1); + if (!cyrusClone) + break; + + cyrusClone->SetWalk(true); + cyrusClone->GetMotionMaster()->MovePoint(POINT_CYRUS_MOVE_TO_OFFICE_FIRE, CyrusMoveToOfficeFirePos); + break; + } + case EVENT_CYRUS_CHANGE_FACING_GENN: + { + Creature* cyrusClone = conversation->GetActorCreature(1); + if (!cyrusClone) + break; + + cyrusClone->SetFacingTo(3.49956f); + break; + } + case EVENT_CYRUS_MOVE_BACK_TO_GENN: + { + Creature* cyrusClone = conversation->GetActorCreature(1); + if (!cyrusClone) + break; + + Player* privateObjectOwner = ObjectAccessor::GetPlayer(*conversation, conversation->GetPrivateObjectOwner()); + if (!privateObjectOwner) + return; + + cyrusClone->SetWalk(true); + cyrusClone->GetMotionMaster()->MovePoint(POINT_CYRUS_MOVE_BACK_TO_GENN, CyrusStaticOfficePos); + privateObjectOwner->KilledMonsterCredit(KILLCREDIT_HEAR_CYRUS_TALE_OLD_KNIGHT); + break; + } + case EVENT_CYRUS_DESPAWN_CLONE_OFFICE: + { + Creature* cyrusClone = conversation->GetActorCreature(1); + if (!cyrusClone) + break; + + cyrusClone->DespawnOrUnsummon(); + break; + } + default: + break; + } + } + +private: + EventMap _events; +}; + void AddSC_zone_boralus() { // Creature RegisterCreatureAI(npc_taelia_get_your_bearings); + RegisterCreatureAI(npc_cyrus_crestfall_old_knight); // Conversation new conversation_boralus_hub_tour_00(); @@ -266,10 +649,24 @@ void AddSC_zone_boralus() new conversation_boralus_hub_tour_counting_house(); new conversation_boralus_hub_tour_harbor_inn(); new conversation_boralus_hub_tour_flight_master(); + new conversation_boralus_accept_old_knight(); + new conversation_boralus_enter_harbormaster_office(); + new conversation_boralus_cyrus_meets_genn(); + new conversation_cyrus_crestfall_shaking_hands(); + + // Scene + new scene_boralus_client_scene_cyrus_and_genn(); // AreaTrigger + RegisterAreaTriggerAI(at_boralus_old_knight_enter_harbormasters_office); + RegisterAreaTriggerAI(at_boralus_old_knight_genn_arrives_boralus); + + // AreaTrigger Template new GenericAreaTriggerEntityScript<at_boralus_get_your_bearings<QUEST_GET_YOUR_BEARINGS, OBJECTIVE_FERRY_DOCK_VISITED, SPELL_HUB_TOUR_CONVO_FERRY>>("at_boralus_get_your_bearings_ferry"); new GenericAreaTriggerEntityScript<at_boralus_get_your_bearings<QUEST_GET_YOUR_BEARINGS, OBJECTIVE_COUNTING_HOUSE_VISITED, SPELL_HUB_TOUR_CONVO_BANK>>("at_boralus_get_your_bearings_counting_house"); new GenericAreaTriggerEntityScript<at_boralus_get_your_bearings<QUEST_GET_YOUR_BEARINGS, OBJECTIVE_SNUG_HARBOR_INN_VISITED, SPELL_HUB_TOUR_CONVO_INN>>("at_boralus_get_your_bearings_inn"); new GenericAreaTriggerEntityScript<at_boralus_get_your_bearings<QUEST_GET_YOUR_BEARINGS, OBJECTIVE_FLIGHT_MASTER_VISITED, SPELL_HUB_TOUR_CONVO_FLIGHT_MASTER>>("at_boralus_get_your_bearings_flight_master"); + + // Spells + RegisterSpellScript(spell_boralus_find_cyrus_objective_complete); } |