diff options
author | Naddley <64811442+Naddley@users.noreply.github.com> | 2024-01-09 22:47:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-09 22:47:46 +0100 |
commit | 10ac56512ea70d64ab7b9e538840d0589fb37e44 (patch) | |
tree | e0dd80f613e9dd6ea23d9c5496ad3af6542245c4 | |
parent | 139051b0550e1b3e34aef9fd40de50071ef69422 (diff) |
Scripts/Boralus: Implement Quest "Get Your Bearings" (#29566)
-rw-r--r-- | sql/updates/world/master/2024_01_09_03_world.sql | 127 | ||||
-rw-r--r-- | src/server/scripts/KulTiras/kultiras_script_loader.cpp | 27 | ||||
-rw-r--r-- | src/server/scripts/KulTiras/zone_boralus.cpp | 275 |
3 files changed, 429 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_01_09_03_world.sql b/sql/updates/world/master/2024_01_09_03_world.sql new file mode 100644 index 00000000000..561437eaaa4 --- /dev/null +++ b/sql/updates/world/master/2024_01_09_03_world.sql @@ -0,0 +1,127 @@ +SET @ATID := 58; +SEt @ATCP := 46; +SET @ATIDSPAWN := 58; + +-- Update Template +UPDATE `creature_template` SET `npcflag`=2, `BaseAttackTime`=2000, `unit_flags`=32768, `unit_flags2`=2048, `AIName` = '', `ScriptName` = 'npc_taelia_get_your_bearings' WHERE `entry`=124630; -- Kul Tiran Guard + +-- Serverside AT +DELETE FROM `areatrigger_template` WHERE (`Id` = @ATID+0 AND `IsCustom` = 1) OR (`Id` = @ATID+1 AND `IsCustom` = 1) OR (`Id` = @ATID+2 AND `IsCustom` = 1) OR (`Id` = @ATID+3 AND `IsCustom` = 1); +INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `Flags`, `VerifiedBuild`) VALUES +(@ATID+0, 1, 1, 0), +(@ATID+1, 1, 1, 0), +(@ATID+2, 1, 1, 0), +(@ATID+3, 1, 1, 0); + +DELETE FROM `areatrigger_create_properties` WHERE (`Id`= @ATCP+0 AND `IsCustom`=1) OR (`Id`= @ATCP+1 AND `IsCustom`=1) OR (`Id`= @ATCP+2 AND `IsCustom`=1) OR (`Id`= @ATCP+3 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, 8, 3, 8, 8, 3, 8, 0, 0, '', 0), +(@ATCP+1, 1, @ATID+1, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 12, 8, 6, 12, 8, 6, 0, 0, '', 0), +(@ATCP+2, 1, @ATID+2, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 9, 5, 5, 9, 5, 5, 0, 0, '', 0), +(@ATCP+3, 1, @ATID+3, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 9, 10, 10, 9, 10, 8, 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', 1041.622, -596.877, 1.3597, 3.11838, 0, 0, 0, NULL, 'at_boralus_get_your_bearings_ferry', 'Boralus - Hub Tour Ferry', 0), +(@ATIDSPAWN+1, @ATCP+1, 1, 1643, '0', 1123.316, -621.119, 17.533, 3.23322, 0, 0, 0, NULL, 'at_boralus_get_your_bearings_counting_house', 'Boralus - Hub Tour Tradewinds Counting House', 0), +(@ATIDSPAWN+2, @ATCP+2, 1, 1643, '0', 1178.928, -588.619, 31.502, 6.14635, 0, 0, 0, NULL, 'at_boralus_get_your_bearings_inn', 'Boralus - Hub Tour Harbor Inn', 0), +(@ATIDSPAWN+3, @ATCP+3, 1, 1643, '0', 1152.882, -472.908, 30.425, 1.25463, 0, 0, 0, NULL, 'at_boralus_get_your_bearings_flight_master', 'Boralus - Hub Tour Flightmaster', 0); + +-- Creature Summoned data +DELETE FROM `creature_summoned_data` WHERE `CreatureID` = 124630; +INSERT INTO `creature_summoned_data` (`CreatureID`, `CreatureIDVisibleToSummoner`, `GroundMountDisplayID`, `FlyingMountDisplayID`) VALUES +(124630, 121235, NULL, NULL); + +-- Conversation +DELETE FROM `conversation_template` WHERE `Id` IN (9556, 5366, 10795, 5375, 5365, 5362, 5360); +INSERT INTO `conversation_template` (`Id`, `FirstLineID`, `TextureKitId`, `VerifiedBuild`) VALUES +(9556, 21684, 0, 52649), +(5366, 12010, 0, 52649), +(10795, 25477, 0, 52649), +(5375, 17269, 0, 52649), +(5365, 12005, 0, 52649), +(5362, 11992, 0, 52649), +(5360, 11989, 0, 52649); + +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_hub_tour_00' WHERE `Id` = 5360; +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_hub_tour_ferry' WHERE `Id` = 5362; +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_hub_tour_counting_house' WHERE `Id` = 5365; +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_hub_tour_harbor_inn' WHERE `Id` = 5375; +UPDATE `conversation_template` SET `ScriptName` = 'conversation_boralus_hub_tour_flight_master' WHERE `Id` = 5366; + +DELETE FROM `conversation_actors` WHERE (`Idx`=0 AND `ConversationId` IN (5375,5362,9556,5366,5360,5365)); +INSERT INTO `conversation_actors` (`ConversationId`, `ConversationActorId`, `Idx`, `CreatureId`, `CreatureDisplayInfoId`, `NoActorObject`, `ActivePlayerObject`, `VerifiedBuild`) VALUES +(5375, 59582, 0, 0, 0, 0, 0, 52649), -- Full: 0x2016ECCD6079B5800001A5000015AE3A Creature/0 R1467/S421 Map: 1643 (Kul Tiras) Entry: 124630 (Kul Tiran Guard) Low: 1420858 +(5362, 59582, 0, 0, 0, 0, 0, 52649), -- Full: 0x2016ECCD6079B5800001A5000015AE3A Creature/0 R1467/S421 Map: 1643 (Kul Tiras) Entry: 124630 (Kul Tiran Guard) Low: 1420858 +(9556, 59582, 0, 0, 0, 0, 0, 52649), -- Full: 0x2016ECCD6079B5800001A5000015AE3A Creature/0 R1467/S421 Map: 1643 (Kul Tiras) Entry: 124630 (Kul Tiran Guard) Low: 1420858 +(5366, 59582, 0, 0, 0, 0, 0, 52649), -- Full: 0x2016ECCD6079B5800001A5000015AE3A Creature/0 R1467/S421 Map: 1643 (Kul Tiras) Entry: 124630 (Kul Tiran Guard) Low: 1420858 +(5360, 59582, 0, 0, 0, 0, 0, 52649), -- Full: 0x2016ECCD6079B5800001A5000015AE3A Creature/0 R1467/S421 Map: 1643 (Kul Tiras) Entry: 124630 (Kul Tiran Guard) Low: 1420858 +(5365, 59582, 0, 0, 0, 0, 0, 52649); -- Full: 0x2016ECCD6079B5800001A5000015AE3A Creature/0 R1467/S421 Map: 1643 (Kul Tiras) Entry: 124630 (Kul Tiran Guard) Low: 1420858 + +DELETE FROM `conversation_line_template` WHERE `Id` IN (17293, 17269, 17292, 11992, 21684, 25478, 25477, 17294, 17271, 12010, 11989, 12005); +INSERT INTO `conversation_line_template` (`Id`, `UiCameraID`, `ActorIdx`, `Flags`, `ChatType`, `VerifiedBuild`) VALUES +(17293, 0, 0, 0, 0, 52649), +(17269, 0, 0, 0, 0, 52649), +(17292, 0, 0, 0, 0, 52649), +(11992, 0, 0, 0, 0, 52649), +(21684, 0, 0, 0, 0, 52649), +(25478, 0, 0, 0, 0, 52649), +(25477, 0, 0, 0, 0, 52649), +(17294, 0, 0, 0, 0, 52649), +(17271, 0, 0, 0, 0, 52649), +(12010, 0, 0, 0, 0, 52649), +(11989, 0, 0, 0, 0, 52649), +(12005, 0, 0, 0, 0, 52649); + +-- Update Model & Gossip +UPDATE `creature_template_difficulty` SET `VerifiedBuild`=52649 WHERE (`DifficultyID`=0 AND `Entry` IN (126583,135792,135603,124238,135658,136106,139148,139144,141033,132036,121239,135808,124859,124725,124727,150208,132638,150493,131994,136102,150300,130399,128531,132228,142457,136091,143502,133536,143295,143250,130377,132625,136052,143022,123169,142073,142086,142459,142139,142137,142543,129940,142132,142136,130368,142077,132642,142371,143261,136041,149045,136071,135520,142063,138726,142095,142066,148228,144030,138725,142068,138724,135153,142056,142752,177193,136061,136063,136059,139522,142346,123639,144383,154464,123635,124289,144310,143251,135446,137279,142160,142138,137293,137282,137281,148922,137294,137298,137299,135618,138744,143844,143870,142187,135677,140473,144635,138704,137301,137300,135612,125005,145729,153932,135614,123633,143114,143108,142174,143109,143110,143259,142612,124720,143107,135675,143248,138280,160101,143263,143846,143709,139375,137265,152000,137266,142169,142188,143101,142166,135064,142191,143116,142167,144148,143098,141274,143112,197611,123675,135678,135230,124180,126642,142176,124181,144147,142117,143111,143104,143105,143106,137295,137268,140350,121235,143262,143040,143242,143718,143254,123642,142094,133282,143246,140313,126434,133325,124695,126682,142180,143839,143243,143260,143100,123244,136633,135509,143244,126634,143103,124295)); +UPDATE `creature_template_difficulty` SET `ContentTuningID`=186, `VerifiedBuild`=52649 WHERE (`Entry`=124630 AND `DifficultyID`=0); -- Kul Tiran Guard + +UPDATE `creature_model_info` SET `VerifiedBuild`=52649 WHERE `DisplayID` IN (4626, 78480, 82950, 81321, 84584, 1141, 32789, 80767, 82814, 32778, 76222, 84415, 87050, 46710, 88608, 83812, 83664, 81372, 82538, 82539, 82541, 90788, 28047, 84583, 81363, 81188, 79970, 79969, 82315, 87053, 87647, 84577, 88265, 52723, 82988, 88502, 87795, 81168, 82148, 88604, 84551, 87648, 74793, 78483, 87599, 87601, 87649, 76046, 87584, 77698, 87581, 87583, 81160, 87600, 87631, 82545, 88605, 84262, 87628, 76547, 80182, 87794, 84544, 76422, 84559, 80753, 77043, 87376, 85964, 87612, 87375, 93838, 88152, 85963, 38804, 85962, 84110, 87564, 87713, 85967, 88609, 84555, 84557, 84554, 86443, 87630, 77496, 77691, 87781, 77466, 77936, 80857, 88613, 88528, 87788, 88690, 85228, 81345, 77687, 41325, 83531, 83093, 82995, 90161, 88050, 83533, 83521, 84139, 32681, 87495, 88051, 80893, 55345, 53107, 27823, 85767, 86764, 58202, 81312, 81313, 85758, 78472, 87422, 80754, 80858, 88614, 84263, 62093, 86026, 72253, 87549, 87831, 88611, 88065, 27681, 87823, 87824, 87793, 87690, 33519, 87814, 85771, 87792, 32790, 93865, 87790, 78869, 13069, 61205, 88610, 25073, 82025, 82024, 86763, 87634, 87818, 88271, 84069, 39631, 87833, 81166, 88318, 87815, 86471, 87183, 87826, 11686, 77532, 86472, 82813, 78928, 77851, 88493, 76515, 88317, 24052, 87825, 87820, 87821, 87822, 83532, 82026, 86640, 81291, 81194, 79014, 88615, 87791, 32646, 21936, 87796, 80178, 87611, 81366, 87769, 86028, 88612, 33719, 81807, 76552, 88607, 81516, 61206, 80751, 41667, 87786, 87797, 87817, 78631, 88606, 80180, 87780, 79015, 87819, 77940); +UPDATE `creature_model_info` SET `BoundingRadius`=0.305999994277954101, `CombatReach`=1.5, `VerifiedBuild`=52649 WHERE `DisplayID` IN (86168, 86638, 90661); +UPDATE `creature_model_info` SET `BoundingRadius`=0.769999980926513671, `CombatReach`=2.20000004768371582, `VerifiedBuild`=52649 WHERE `DisplayID`=38801; +UPDATE `creature_model_info` SET `BoundingRadius`=1.339599251747131347, `CombatReach`=1.75, `VerifiedBuild`=52649 WHERE `DisplayID`=342; + +UPDATE `creature_template_gossip` SET `VerifiedBuild`=52649 WHERE (`CreatureID`=121235 AND `MenuID`=21307); + +DELETE FROM `gossip_menu` WHERE (`MenuID`=21307 AND `TextID`=133574); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`, `VerifiedBuild`) VALUES +(21307, 133574, 52649); -- 121235 (Taelia) + +-- Quest data +UPDATE `quest_details` SET `VerifiedBuild`=52649 WHERE `ID` IN (46729, 47099); + +DELETE FROM `quest_request_items` WHERE `ID`=47099; +INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `EmoteOnCompleteDelay`, `EmoteOnIncompleteDelay`, `CompletionText`, `VerifiedBuild`) VALUES +(47099, 0, 0, 0, 0, 'I\'ll bring you to Cyrus after a brief tour of the market.', 52649); -- Get Your Bearings + +DELETE FROM `creature_queststarter` WHERE (`id`=124630 AND `quest`=46729); +INSERT INTO `creature_queststarter` (`id`, `quest`, `VerifiedBuild`) VALUES +(124630, 46729, 52649); -- The Old Knight offered by Kul Tiran Guard + +UPDATE `creature_queststarter` SET `VerifiedBuild`=52649 WHERE (`id`=121235 AND `quest`=47099); + +DELETE FROM `creature_questender` WHERE (`id`=124630 AND `quest`=47099); +INSERT INTO `creature_questender` (`id`, `quest`, `VerifiedBuild`) VALUES +(124630, 47099, 52649); -- Get Your Bearings ended by Kul Tiran Guard + +DELETE FROM `quest_template_addon` WHERE `ID` = 46729; +INSERT INTO `quest_template_addon` (`ID`, `MaxLevel`, `AllowableClasses`, `SourceSpellID`, `PrevQuestID`, `NextQuestID`, `ExclusiveGroup`, `BreadcrumbForQuestId`, `RewardMailTemplateID`, `RewardMailDelay`, `RequiredSkillID`, `RequiredSkillPoints`, `RequiredMinRepFaction`, `RequiredMaxRepFaction`, `RequiredMinRepValue`, `RequiredMaxRepValue`, `ProvidedItemCount`, `SpecialFlags`, `ScriptName`) VALUES +(46729, 0, 0, 0, 47099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ''); + +-- Creature 121235 smart ai +SET @ENTRY := 121235; +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY; +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @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, 1, '', 61, 0, 100, 0, 0, 0, 0, 0, 85, 247663, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'On player accepted quest 47099 - Player who accepted quest: Cast spell 247663 on self'), +(@ENTRY, 0, 1, 0, '', 61, 0, 100, 0, 0, 0, 0, 0, 85, 82238, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'On player accepted quest 47099 - Player who accepted quest: Cast spell 82238 on self'); + +DELETE FROM `spell_area` WHERE `spell` IN(247532); +INSERT INTO `spell_area` (`area`, `spell`, `quest_start`, `quest_start_status`, `quest_end`, `quest_end_status`, `flags`, `aura_spell`, `racemask`, `gender`) VALUES +(8717, 247532, 47099, 74, 46729, 9, 3, 0, 0, 2); -- Get Your Bearings - Tradewinds Market + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceEntry` IN (247532)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES +(17, 0, 247532, 0, 0, 48, 0, 335127, 0, 0, 0, 'Caster of the spell has quest objective 335127 == 0'), +(17, 0, 247532, 0, 1, 9, 0, 46729, 0, 0, 1, 'Caster of the spell has quest NOT taken'); diff --git a/src/server/scripts/KulTiras/kultiras_script_loader.cpp b/src/server/scripts/KulTiras/kultiras_script_loader.cpp new file mode 100644 index 00000000000..e4ed7ba007f --- /dev/null +++ b/src/server/scripts/KulTiras/kultiras_script_loader.cpp @@ -0,0 +1,27 @@ +/* + * 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/>. + */ + + // This is where scripts' loading functions should be declared: + +void AddSC_zone_boralus(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddKulTirasScripts() +{ + AddSC_zone_boralus(); +} diff --git a/src/server/scripts/KulTiras/zone_boralus.cpp b/src/server/scripts/KulTiras/zone_boralus.cpp new file mode 100644 index 00000000000..5b5f8a44b19 --- /dev/null +++ b/src/server/scripts/KulTiras/zone_boralus.cpp @@ -0,0 +1,275 @@ +/* + * 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 "AreaTrigger.h" +#include "AreaTriggerAI.h" +#include "Containers.h" +#include "Conversation.h" +#include "CreatureAIImpl.h" +#include "MotionMaster.h" +#include "ObjectAccessor.h" +#include "PhasingHandler.h" +#include "Player.h" +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "SpellScript.h" +#include "TemporarySummon.h" + +enum GetYourBearingsData +{ + QUEST_GET_YOUR_BEARINGS = 47099, + + KILL_CREDIT_FERRY_DOCK_VISITED = 124588, + KILL_CREDIT_COUNTING_HOUSE_VISITED = 124586, + KILL_CREDIT_SNUG_HARBOR_INN_VISITED = 124768, + KILL_CREDIT_FLIGHT_MASTER_VISITED = 124587, + + OBJECTIVE_FERRY_DOCK_VISITED = 291081, + OBJECTIVE_COUNTING_HOUSE_VISITED = 291079, + OBJECTIVE_SNUG_HARBOR_INN_VISITED = 291080, + OBJECTIVE_FLIGHT_MASTER_VISITED = 291171, + + NPC_SUMMONED_KULTIRAN_GUARD = 124630, + + CONVO_ACTOR_KULTIRAN_GUARD = 59582, + + POINT_KULTIRAN_GUARD = 1, + POINT_KULTIRAN_GUARD_FLIGHT_MASTER = 2, + + SPELL_HUB_TOUR_CONVO_FERRY = 247669, + SPELL_HUB_TOUR_CONVO_BANK = 247749, + SPELL_HUB_TOUR_CONVO_INN = 247894, + SPELL_HUB_TOUR_CONVO_FLIGHT_MASTER = 247753 +}; + +// 124630 - Taelia +struct npc_taelia_get_your_bearings : public ScriptedAI +{ + npc_taelia_get_your_bearings(Creature* creature) : ScriptedAI(creature) { } + + void IsSummonedBy(WorldObject* summoner) override + { + // might be handled by SummonProperties + if (Player* player = summoner->ToPlayer()) + me->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type != POINT_MOTION_TYPE) + return; + + if (pointId == POINT_KULTIRAN_GUARD) + { + if (Unit* summoner = me->GetOwner()) + me->SetFacingToObject(summoner); + } + } +}; + +// 5360 - Conversation +class conversation_boralus_hub_tour_00 : public ConversationScript +{ +public: + conversation_boralus_hub_tour_00() : ConversationScript("conversation_boralus_hub_tour_00") { } + + 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 - Get your Bearings (Ferry) +// XX - Boralus - Get your Bearings (Bank) +// XX - Boralus - Get your Bearings (Inn) +// XX - Boralus - Get your Bearings (Flightmaster) +template<uint32 QuestId, uint32 ObjectiveId, uint32 SpellId> +struct at_boralus_get_your_bearings : AreaTriggerAI +{ + at_boralus_get_your_bearings(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } + + void OnUnitEnter(Unit* unit) override + { + Player* player = unit->ToPlayer(); + if (!player || player->GetQuestStatus(QuestId) != QUEST_STATUS_INCOMPLETE || player->GetQuestObjectiveData(QuestId, ObjectiveId)) + return; + + player->CastSpell(nullptr, SpellId, false); + } +}; + +// 5362 - Conversation - Get your Bearings (Ferry) +class conversation_boralus_hub_tour : public ConversationScript +{ +public: + conversation_boralus_hub_tour(char const* scriptName) : ConversationScript(scriptName) { } + + enum ConversationFerryData + { + EVENT_TAELIA_CREDIT = 1 + }; + + virtual Position const& GetGuardMovePosition() = 0; + virtual uint32 GetKillCreditId() = 0; + + 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()->MovePoint(POINT_KULTIRAN_GUARD, GetGuardMovePosition()); + + conversation->AddActor(CONVO_ACTOR_KULTIRAN_GUARD, 0, kultiranGuard->GetGUID()); + conversation->Start(); + } + + void OnConversationStart(Conversation* conversation) override + { + LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale(); + + _events.ScheduleEvent(EVENT_TAELIA_CREDIT, conversation->GetLastLineEndTime(privateOwnerLocale)); + } + + void OnConversationUpdate(Conversation* conversation, uint32 diff) override + { + _events.Update(diff); + + switch (_events.ExecuteEvent()) + { + case EVENT_TAELIA_CREDIT: + { + Player* player = ObjectAccessor::GetPlayer(*conversation, conversation->GetPrivateObjectOwner()); + if (!player) + break; + + Creature* kultiranGuard = player->FindNearestCreatureWithOptions(50.0f, { .CreatureId = NPC_SUMMONED_KULTIRAN_GUARD, .IgnorePhases = true, .OwnerGuid = player->GetGUID() }); + if (!kultiranGuard) + break; + + player->KilledMonsterCredit(GetKillCreditId()); + kultiranGuard->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + break; + } + default: + break; + } + } +private: + EventMap _events; +}; + +Position const TaeliaFerryPos = { 1039.5955f, -598.00653f, 1.458778f }; + +// 5362 - Conversation - Get your Bearings (Ferry) +class conversation_boralus_hub_tour_ferry : public conversation_boralus_hub_tour +{ +public: + conversation_boralus_hub_tour_ferry() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_ferry") { } + + Position const& GetGuardMovePosition() + { + return TaeliaFerryPos; + } + + uint32 GetKillCreditId() + { + return KILL_CREDIT_FERRY_DOCK_VISITED; + } +}; + +Position const TaeliaBankPos = { 1118.7385f, -622.4115f, 17.76035f }; + +// 5365 - Conversation Get your Bearings (Counting House) +class conversation_boralus_hub_tour_counting_house : public conversation_boralus_hub_tour +{ +public: + conversation_boralus_hub_tour_counting_house() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_counting_house") { } + + Position const& GetGuardMovePosition() + { + return TaeliaBankPos; + } + + uint32 GetKillCreditId() + { + return KILL_CREDIT_COUNTING_HOUSE_VISITED; + } +}; + +Position const TaeliaInnPos = { 1177.39f, -587.682f, 31.557224f }; + +// 5375 - Conversation Get your Bearings (Harbor Inn) +class conversation_boralus_hub_tour_harbor_inn : public conversation_boralus_hub_tour +{ +public: + conversation_boralus_hub_tour_harbor_inn() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_harbor_inn") { } + + Position const& GetGuardMovePosition() + { + return TaeliaInnPos; + } + + uint32 GetKillCreditId() + { + return KILL_CREDIT_SNUG_HARBOR_INN_VISITED; + } +}; + +Position const TaeliaFlightMasterPos = { 1149.82f, -471.071f, 30.503826f }; + +// 5366 - Conversation Get your Bearings (Flight Master) +class conversation_boralus_hub_tour_flight_master : public conversation_boralus_hub_tour +{ +public: + conversation_boralus_hub_tour_flight_master() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_flight_master") { } + + Position const& GetGuardMovePosition() + { + return TaeliaFlightMasterPos; + } + + uint32 GetKillCreditId() + { + return KILL_CREDIT_FLIGHT_MASTER_VISITED; + } +}; + +void AddSC_zone_boralus() +{ + // Creature + RegisterCreatureAI(npc_taelia_get_your_bearings); + + // Conversation + new conversation_boralus_hub_tour_00(); + new conversation_boralus_hub_tour_ferry(); + new conversation_boralus_hub_tour_counting_house(); + new conversation_boralus_hub_tour_harbor_inn(); + new conversation_boralus_hub_tour_flight_master(); + + // AreaTrigger + 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"); +} |