diff options
author | Malcrom <malcromdev@gmail.com> | 2024-02-24 14:46:46 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-24 19:46:46 +0100 |
commit | c4f896f5910ba64f2bfa4fe575c562deac06e9fb (patch) | |
tree | 908c9f684411722bec6051ef2213e6d3b9621649 | |
parent | f6646739908215311f110842ed41055a54dae1f0 (diff) |
Scripts/ExilesReach: Implemented Ride SE Boar, Re-Deather and Stocking Up quest (#29670)
Co-authored-by: ModoX <moardox@gmail.com>
-rw-r--r-- | sql/updates/world/master/2024_02_24_01_world.sql | 638 | ||||
-rw-r--r-- | src/server/scripts/ExilesReach/zone_exiles_reach.cpp | 1202 |
2 files changed, 1818 insertions, 22 deletions
diff --git a/sql/updates/world/master/2024_02_24_01_world.sql b/sql/updates/world/master/2024_02_24_01_world.sql new file mode 100644 index 00000000000..4942310d6bc --- /dev/null +++ b/sql/updates/world/master/2024_02_24_01_world.sql @@ -0,0 +1,638 @@ +SET @CGUID := 8000041; +SET @OGUID := 8000014; + +-- Add missing Creature Spawns +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID AND @CGUID+17; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `phaseUseFlags`, `PhaseId`, `PhaseGroup`, `terrainSwapMap`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `ScriptName`, `StringId`, `VerifiedBuild`) VALUES +-- Alliance +(@CGUID,162817,2175,10424,10529,'0',0,14663,0,0,0,0,243.55556,-2242.9185,83.88086,4.5683498,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52649), -- Torgok <Binder of Souls> +(@CGUID+1,150245,2175,10424,10529,'0',0,13794,0,0,0,0,169.23438,-2297.9983,82.15651,2.54967,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52649), -- Lindie Springstock +(@CGUID+2,156800,2175,10424,10529,'0',0,13794,0,0,0,0,186.51042,-2284.6216,81.91817,3.558244,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52649), -- Quartermaster Richter <Supplies> +(@CGUID+3,156807,2175,10424,10529,'0',0,13835,0,0,0,0,185.90625,-2288.927,81.77783,1.908762,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52649), -- Captain Garrick +(@CGUID+4,156808,2175,10424,10529,'0',0,13794,0,0,0,0,169.73827,-2293.4995,82.96085,2.618248,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52649), -- Small Boar +-- Horde +(@CGUID+5,167142,2175,10424,10588,'0',0,15331,0,0,0,0,107.87153,-2414.177,95.44844,0,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Choppy Booster Mk. 5 +(@CGUID+6,167212,2175,10424,10529,'0',0,15485,0,0,0,0,185.70660400390625,-2282.98095703125,81.93126678466796875,3.950360536575317382,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Warlord Breka Grimaxe +(@CGUID+7,167216,2175,10424,10529,'0',0,15447,0,0,0,0,183.4184112548828125,-2278.020751953125,81.93170166015625,1.636933207511901855,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Grunt Throg +(@CGUID+8,167217,2175,10424,10529,'0',0,15330,0,0,0,0,177.1770782470703125,-2295.96875,81.96833038330078125,0,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Cork Fizzlepop +(@CGUID+9,167213,2175,10424,10529,'0',0,15330,0,0,0,0,178.4184112548828125,-2292.552001953125,81.93624114990234375,0.398178786039352416,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Provisioner Jin'hake +(@CGUID+10,167219,2175,10424,10529,'0',0,15353,0,0,0,0,257.260406494140625,-2337.651123046875,81.06317138671875,5.754884243011474609,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Shuja Grimaxe +(@CGUID+11,167222,2175,10424,10529,'0',0,15338,0,0,0,0,160.5868072509765625,-2310.088623046875,84.49564361572265625,3.033173322677612304,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Won'sa +(@CGUID+12,167221,2175,10424,10529,'0',0,15338,0,0,0,0,160.5989532470703125,-2307.404541015625,84.11737060546875,2.955642223358154296,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Lana Jordan +(@CGUID+13,167215,2175,10424,10529,'0',0,15377,0,0,0,0,183.6805572509765625,-2295.94091796875,82.250396728515625,4.669465065002441406,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,52808), -- Mithdran Dawntracker <Stable Master> +(@CGUID+14,167290,2175,10424,10528,'0',0,15354,0,0,0,0,392.46875,-2440.225830078125,125.4717788696289062,4.147569179534912109,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,53212), -- Shuja Grimaxe "Harpy area" +(@CGUID+15,167291,2175,10424,10588,'0',0,15354,0,0,0,0,391.211822509765625,-2443.717041015625,125.1890335083007812,0.829528868198394775,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,53212), -- Bo "Harpy area" +(@CGUID+16,167225,2175,10424,10527,'0',0,15337,0,0,0,0,92.015625,-2246.911376953125,94.49737548828125,2.622560739517211914,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,53212), -- Lana Jordan "Pit Area" +(@CGUID+17,167226,2175,10424,10527,'0',0,15337,0,0,0,0,89.265625,-2248.960205078125,94.74571990966796875,1.861210823059082031,120,0,0,1,0,0,NULL,NULL,NULL,NULL,'',NULL,53212); -- Won'sa "Pit Area" + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+18 AND @CGUID+21; +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+18, 167926, 2175, 10424, 10529, '0', 15558, 0, 0, 1, 232.1614532470703125, -2292.53466796875, 80.9791717529296875, 4.706853866577148437, 120, 0, 0, 224, 0, 0, NULL, NULL, NULL, NULL, 53262), -- Warlord Breka Grimaxe (Area: Ogre Ruins - Difficulty: 0) CreateObject1 +(@CGUID+19, 167126, 2175, 10424, 10529, '0', 15558, 0, 0, 0, 230.795135498046875, -2297.085205078125, 80.9791717529296875, 1.356228590011596679, 120, 0, 0, 119, 0, 0, 2, NULL, NULL, NULL, 53262), -- Shuja Grimaxe (Area: Ogre Ruins - Difficulty: 0) CreateObject1 +(@CGUID+20, 156799, 2175, 10424, 10529, '0', 13795, 0, 0, 0, 230.795135498046875, -2297.085205078125, 80.9791717529296875, 1.356228590011596679, 120, 0, 0, 95, 382, 0, NULL, NULL, NULL, NULL, 53262), -- Henry Garrick (Area: Ogre Ruins - Difficulty: 0) CreateObject1 +(@CGUID+21, 156807, 2175, 10424, 10529, '0', 13795, 0, 0, 1, 232.1614532470703125, -2292.53466796875, 80.9791717529296875, 4.706853866577148437, 120, 0, 0, 357, 0, 0, NULL, NULL, NULL, NULL, 53262); -- Captain Garrick (Area: Ogre Ruins - Difficulty: 0) CreateObject1 + +-- Add missing Creature Spawns +DELETE FROM `gameobject` WHERE `guid`=@OGUID; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES +-- Horde +(@OGUID, 351765, 2175, 10424, 10529, '0', 15330, 0, 162.796875, -2303.585205078125, 81.78006744384765625, 0.724311470985412597, 0, 0, 0.354290962219238281, 0.935135245323181152, 7200, 255, 1, 53212); + +-- Fix campfire at ogre ruins +UPDATE `gameobject_template_addon` SET `flags` = 4 WHERE `entry` = 342365; + +-- Ride of the Scientifically Enhanced Boar + +-- Pathing for Small Boar Entry: 156808 +SET @NPC := @CGUID+4; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=165.30946,`position_y`=-2298.7698,`position_z`=82.51129 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`PathId`,`mount`,`StandState`,`SheathState`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_path` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES +(@PATH,1,0,'Small Boar Ogre Ruins'); +DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES +(@PATH,1,165.30946,-2298.7698,82.51129,NULL,0), +(@PATH,2,170.00575,-2301.923,82.05885,NULL,0), +(@PATH,3,173.15572,-2298.7876,81.85623,NULL,0), +(@PATH,4,168.463,-2294.0735,81.95101,NULL,0); + +-- Pathing for Henry Garrick Ogre Ruins +SET @NPC := 8000023; +SET @PATH := @NPC * 10; +DELETE FROM `waypoint_path` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES +(@PATH,1,0,'Henry Garrick Ogre Ruins'); +DELETE FROM `waypoint_path_node` WHERE `PathId` IN (@PATH); +INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES +(@PATH,1,231.05,-2297.1802,87.1176,NULL,0), +(@PATH,2,230.88,-2297.09,84.0067,NULL,0), +(@PATH,3,230.71,-2297,80.8958,NULL,0), +(@PATH,4,230.71,-2297,80.8958,1.396685,0); + +UPDATE `creature` SET `StringId`= "captain_garrick_plains" WHERE `guid`=8000018; +UPDATE `creature` SET `StringId` = 'henry_garrick_ogre_ruins_prisoner' WHERE `guid`=8000023; + +UPDATE `creature_template` SET `faction`=1, `ScriptName`="npc_captain_garrick_q55879" WHERE `entry`=174955; +UPDATE `creature_template` SET `ScriptName`="npc_giant_boar_vehicle_q55879" WHERE `entry`=156267; +UPDATE `creature_template` SET `ScriptName`="npc_torgok_q55879" WHERE `entry`=162817; +UPDATE `creature_template` SET `ScriptName`="npc_prisoner_q55879" WHERE `entry`=156799; +UPDATE `creature_template` SET `npcflag`=16777216 WHERE entry IN (156595); +UPDATE `creature_template` SET `VehicleId`=6832 WHERE `entry`=156267; +UPDATE `creature_template` SET `npcflag`=2 WHERE `entry` IN (156799,156807); +UPDATE `creature_template` SET `npcflag`=641 WHERE `entry` IN (156800); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (162817); +INSERT INTO `creature_template_addon` (`entry`,`visibilityDistanceType`,`emote`,`auras`) VALUES +(162817,3,617, ''); -- Torgok + +-- Henry Garrick & Shuja Grimaxe +UPDATE `creature_template_movement` SET `Ground`=1, `Swim`=1 WHERE `CreatureId` IN (156799,167126); + +DELETE FROM `npc_vendor` WHERE (`entry`=156800 AND `item`=168100 AND `ExtendedCost`=0 AND `type`=1) OR (`entry`=156800 AND `item`=117 AND `ExtendedCost`=0 AND `type`=1); +INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `ExtendedCost`, `type`, `PlayerConditionID`, `IgnoreFiltering`, `VerifiedBuild`) VALUES +(156800, 2, 168100, 0, 0, 1, 0, 0, 53040), -- 168100 +(156800, 1, 117, 0, 0, 1, 0, 1, 53040); -- 117 + +DELETE FROM `creature_template_gossip` WHERE `CreatureID`=156800; +INSERT INTO `creature_template_gossip` (`CreatureID`, `MenuID`, `VerifiedBuild`) VALUES +(156800, 24885, 53040); -- 156800 + +DELETE FROM `gossip_menu` WHERE (`MenuID`=24885 AND `TextID`=201865); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`, `VerifiedBuild`) VALUES +(24885, 201865, 53040); -- 156800 + +DELETE FROM `gossip_menu_option` WHERE `MenuID` IN (24885); +INSERT INTO `gossip_menu_option` (`MenuID`, `GossipOptionID`, `OptionID`, `OptionNpc`, `OptionText`, `OptionBroadcastTextID`, `Language`, `Flags`, `ActionMenuID`, `ActionPoiID`, `GossipNpcOptionID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `SpellID`, `OverrideIconID`, `VerifiedBuild`) VALUES +(24885, 49522, 0, 1, 'Let me browse your goods.', 0, 0, 0, 0, 0, NULL, 0, 0, NULL, 0, NULL, NULL, 53040); + +DELETE FROM `creature_text` WHERE `CreatureID`=162817; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(162817, 0, 0, 'We take soul for ritual, you no stop!', 12, 0, 100, 0, 0, 0, 0, 0, 'Torgok aggro'), +(162817, 1, 0, 'Me never get... to see... ritual...', 12, 0, 100, 0, 0, 0, 0, 0, 'Torgok death'); + +-- Add Scenes for Ride of the Scientifically Enhanced Boar +DELETE FROM `scene_template` WHERE `SceneId` IN (2338,2341,2423,2422,2421,2420); +INSERT INTO `scene_template` (`SceneId`,`Flags`,`ScriptPackageID`,`Encrypted`,`ScriptName`) VALUES +(2338,16,2712,0,'scene_darkmaul_plains_skeleton_army_alliance'), +(2341,17,2933,0,''), +(2423,16,2825,0,''), +(2422,16,2824,0,''), +(2421,16,2823,0,''), +(2420,16,2822,0,''); + +-- Summon data for Captain Garrick +DELETE FROM `creature_summoned_data` WHERE `CreatureID` IN (174955, 167126); +INSERT INTO `creature_summoned_data` (`CreatureID`,`CreatureIDVisibleToSummoner`,`GroundMountDisplayID`,`FlyingMountDisplayID`, `DespawnOnQuestsRemoved`) VALUES +(174955,156781,NULL,NULL,''), +(167126,NULL,NULL,NULL,'59942'); + +DELETE FROM `creature_equip_template` WHERE `CreatureID`=174955; +INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `AppearanceModID1`, `ItemVisual1`, `ItemID2`, `AppearanceModID2`, `ItemVisual2`, `ItemID3`, `AppearanceModID3`, `ItemVisual3`, `VerifiedBuild`) VALUES +(174955, 1, 163887, 0, 0, 163891, 0, 0, 0, 0, 0, 52808); + +-- Spell Click +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (156595); +INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES +(156595,305068,1,0); + +-- Spell Target Position +DELETE FROM `spell_target_position` WHERE `ID` IN (305069); +INSERT INTO `spell_target_position` (`ID`,`EffectIndex`,`MapID`,`PositionX`,`PositionY`,`PositionZ`,`VerifiedBuild`) VALUES +(305069,0,2175,116.44965,-2430.3699,90.6546,52649); + +-- Condition for Spell click event condition type Queststate +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup` IN (156595) AND `SourceEntry` IN (305068) AND `SourceId`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(18, 156595, 305068, 0, 0, 47, 0, 55879, 8, 0, 0, 0, 0, '', 'Spellclick unit Giant Boar will cast spell Summon Darkmaul Plains Questgivers (DNT) on player if quest Ride of the Scientifically Enhanced Boar queststate is INCOMPLETE'); + +-- Condition for source Spell implicit target condition type Object entry guid +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=325406 AND `SourceId`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 325406, 0, 0, 31, 0, 3, 162817, 0, 0, 0, 0, '', 'Spell Necrotic Ritual (effect 0) will hit the potential target of the spell if target is unit Torgok.'); + +-- Condition for Spell Ping Garrick (DNT) +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=316982 AND `SourceId`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 316982, 0, 0, 31, 0, 3, 174955, 0, 0, 0, 0, '', 'Spell Ping Garrick (DNT) (effect 0) will hit unit Alliance Captain.'), +(13, 1, 316982, 0, 1, 31, 0, 3, 167146, 0, 0, 0, 0, '', 'Spell Ping Garrick (DNT) (effect 0) will hit unit Horde Warrior.'); + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (305779,173426,306357,296843,325368); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(305779,'spell_summon_darkmaul_plains_questgivers_q55879'), +(173426,'spell_riding_giant_boar_q55879'), +(306357,'spell_knockback_hint_q56034'), +(296843,'spell_gear_repaired_aura_q55194'), +(325368, 'spell_re_sizer_slaughter'); + +-- Phase Area +DELETE FROM `phase_area` WHERE `AreaId`=10424 AND `PhaseId` IN (14663,13835); +INSERT INTO `phase_area` (`AreaId`,`PhaseId`,`Comment`) VALUES +(10424,14663, 'Cosmetic - NPE - See Torgok <Binder of Souls>'), +(10424,13835, 'Cosmetic - NPE - See Captain Garrick, Lindie Springstock, Quartermaster Richter Ogre Ruins'); + +-- Phase Names +DELETE FROM `phase_name` WHERE `ID` IN (14663,13835); +INSERT INTO `phase_name` (`ID`,`Name`) VALUES +(14663,'Cosmetic - NPE - See Torgok <Binder of Souls>'), +(13835,'Cosmetic - NPE - See Captain Garrick, Lindie Springstock, Quartermaster Richter Ogre Ruins'); + +-- Phase Conditions +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (13775,13783) AND `ConditionValue1`=321670; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (13784,13779,13785,13780,13776,13766,13775) AND `ConditionValue1`=55879; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (13835,13794) AND `SourceEntry`=10424; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (14663) AND `SourceEntry`=10424 AND `ElseGroup`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(26,13775,10588, 0, 0, 1, 0, 321670, 0, 0, 1, 0, 0, '', 'See Re-sized Boar at Plains if quest Ride if player does not have aura'), +(26,13783,10529, 0, 0, 1, 0, 321670, 0, 0, 1, 0, 0, '', 'See See the Army of Undead if quest Ride if player does not have aura'), +(26,13784,10424, 0, 0, 47, 0, 55879, 66, 0, 1, 0, 0, '', 'See Henry Garrick at Ogre Ruins if quest Ride of the Scientifically Enhanced Boar is not completed | rewarded'), +(26,13779,10588, 0, 0, 47, 0, 55879, 74, 0, 1, 0, 0, '', 'See Captain Garrick at Plains if quest Ride of the Scientifically Enhanced Boar is not taken | completed | rewarded'), +(26,13785,10588, 0, 0, 47, 0, 55879, 64, 0, 1, 0, 0, '', 'See The Scout-o-Matic 5000 at Plains if quest Ride of the Scientifically Enhanced Boar is not rewarded'), +(26,13780,10588, 0, 0, 47, 0, 55879, 64, 0, 1, 0, 0, '', 'See Austin Huxworth at Darkmaul Plains if quest Ride of the Scientifically Enhanced Boar is not rewarded'), +(26,13780,10588, 0, 1, 47, 0, 55879, 64, 0, 1, 0, 0, '', 'See Austin Huxworth at Darkmaul Plains if quest Ride of the Scientifically Enhanced Boar is not rewarded'), +(26,13776,10588, 0, 0, 47, 0, 55879, 64, 0, 1, 0, 0, '', 'See Lindie Springstock at Darkmaul Plains if quest Ride of the Scientifically Enhanced Boar is not rewarded'), +(26,13766,10588, 0, 0, 47, 0, 55879, 64, 0, 1, 0, 0, '', 'See Alliance crew at Darkmaul Plains if quest Ride of the Scientifically Enhanced Boar is not rewarded'), +(26,13775,10588, 0, 0, 47, 0, 55879, 64, 0, 1, 0, 0, '', 'See Re-sized Boar at Plains if quest Ride of the Scientifically Enhanced Boar is not rewarded'), +(26,14663,10424, 0, 0, 47, 0, 55879, 64, 0, 1, 0, 0, '', 'See Torgok <Binder of Souls> if quest Ride of the Scientifically Enhanced Boar is not rewarded'), +(26,14663,10424, 0, 0, 48, 0, 396499, 0, 8, 0, 0, 0, '', 'See Torgok <Binder of Souls> if quest Ride if player has objective complete'), +(26,13835,10424, 0, 0, 47, 0, 55879, 64, 0, 0, 0, 0, '', 'See Garrick at ogre ruins if quest Ride of the Scientifically Enhanced Boar is rewarded'), +(26,13794,10424, 0, 0, 47, 0, 55879, 64, 0, 0, 0, 0, '', 'See Lindie and Richter at ogre ruins if quest Ride of the Scientifically Enhanced Boar is rewarded'); + +-- Quest data +DELETE FROM `creature_queststarter` WHERE `id`=156280 AND `quest`=55879; +DELETE FROM `creature_queststarter` WHERE `id`=156807 AND `quest`=55194; +INSERT INTO `creature_queststarter` (`id`, `quest`, `VerifiedBuild`) VALUES +(156280, 55879, 52649), -- Ride of the Scientifically Enhanced Boar accept from Captain Garrick +(156807, 55194, 52649); -- Stocking Up on Supplies accept from Captain Garrick + +DELETE FROM `creature_questender` WHERE `id`=156799 AND `quest`=55879; +DELETE FROM `creature_questender` WHERE `id`=156807 AND `quest`=55194; +INSERT INTO `creature_questender` (`id`, `quest`, `VerifiedBuild`) VALUES +(156799, 55879, 52649), -- Ride of the Scientifically Enhanced Boar turn in to Henry Garrick +(156807, 55194, 52649); -- Stocking Up on Supplies turn in to Captain Garrick + +DELETE FROM `quest_template_addon` WHERE `ID` IN (55879,55194); +INSERT INTO `quest_template_addon` (`ID`,`AllowableClasses`,`PrevQuestID`,`NextQuestID`,`ScriptName`) VALUES +(55879,0,56034,0,'quest_ride_of_the_scientifically_enhanced_boar'), -- Ride of the Scientifically Enhanced Boar +(55194,0,55879,0,''); -- Stocking Up on Supplies + +-- Conversation +DELETE FROM `conversation_template` WHERE `Id` IN (12090,12091,12092,12164,15615); +INSERT INTO `conversation_template` (`Id`,`FirstLineId`,`TextureKitId`,`ScriptName`,`VerifiedBuild`) VALUES +(12090,29443,0,'',52649), +(12091,29446,0,'',52649), +(12092,29447,0,'',52649), +(12164,29660,0,'',52649), +(15615,39167,0,'',52649); + +DELETE FROM `conversation_actors` WHERE `ConversationId` IN (12090,12091,12092,12164,15615); +INSERT INTO `conversation_actors` (`ConversationId`,`ConversationActorId`,`ConversationActorGuid`,`Idx`,`CreatureId`,`CreatureDisplayInfoId`,`NoActorObject`,`ActivePlayerObject`,`VerifiedBuild`) VALUES +(12090,0,0,0,0,0,0,1,52649), -- Player +(12090,71372,0,1,0,0,0,0,52649), -- Captain Garrick +(12091,71587,8000023,0,0,0,0,0,52649), -- Henry Garrick +(12092,0,0,0,0,0,0,1,52649), -- Player +(12092,71372,0,1,0,0,0,0,52649), -- Captain Garrick +(12164,71372,0,0,0,0,0,0,52649), -- Captain Garrick +(15615,71372,0,0,0,0,0,0,52649), -- Captain Garrick +(15615,78493,0,1,0,0,0,0,52649); -- Henry Garrick + +DELETE FROM `conversation_line_template` WHERE `Id` IN (29443,29444,29446,29660,29447,29448,29450,39167,39163,39164,39165,39166); +INSERT INTO `conversation_line_template` (`Id`,`UiCameraID`,`ActorIdx`,`Flags`,`VerifiedBuild`) VALUES +(29443,0,0,0,52649), +(29444,0,1,0,52649), +(29446,0,0,0,52649), +(29660,0,0,0,52649), +(29447,0,0,0,52649), +(29448,0,1,0,52649), +(29450,0,1,0,52649), +(39167,0,0,0,52649), +(39163,0,1,0,52649), +(39164,0,0,0,52649), +(39165,0,0,0,52649), +(39166,0,1,0,52649); + +-- Lindie Springstock SAI 'Ogre Ruins' +SET @ENTRY := 150245; +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, 1, '', 1, 0, 100, 0, 8000, 10000, 8000, 10000, 66, 0, 0, 0, 0, 0, 0, 19, 156808, 10, 0, 0, 0, 0, 0, 'Every 8 - 10 seconds (OOC) - Self: Look at Closest alive creature Small Boar (156808) in 10 yards'), +(@ENTRY, 0, 1, 0, '', 61, 0, 100, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Every 8 - 10 seconds (OOC) - Self: Play emote 4'); + +-- Captain Garrick SAI 'Ogre Ruins' +SET @ENTRY := 156807; +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, '', 47, 0, 100, 0, 55194, 0, 0, 0, 11, 296845, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'On quest accepted - Self: Cast spell 296845 on Player who accepted'); + +-- Loot for Torgok +SET @ID := 162817; +UPDATE `creature_template_difficulty` SET `LootID`=@ID, GoldMin=4, GoldMax=20 WHERE `Entry` IN (@ID); +DELETE FROM `creature_loot_template` WHERE `Entry` IN (@ID); +INSERT INTO `creature_loot_template` (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(@ID,176398,0,100,0,1,0,1,1,'Torgok - Torgok\'s Reagent Pouch'), +(@ID,175245,0,5,0,1,0,1,1,'Torgok - Runetusk Necklace'), +(@ID,0,10100,10,0,1,0,1,1,'Torgok - Poor Quality Table Level 1 to 5'); + +-- Conditions for class loot +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=@ID; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(1,@ID,176398,0,0,47,0,59610,64,0,1,0,0,'','Item drops if quest 59610 is not rewarded'); + +DELETE FROM `quest_template` WHERE `ID`=59610; +INSERT INTO `quest_template` (`ID`,`QuestType`,`RewardXPMultiplier`,`RewardMoneyMultiplier`,`RewardArtifactXPMultiplier`,`Flags`,`LogTitle`) VALUES +(59610,2,1,1,1,1024, '[Hidden Tracker] Torgok\'s Reagent Pouch Dropped'); + +-- Add missing scene spells "This will be updated in the future with end quest" +DELETE FROM `spell_area` WHERE `spell` IN (312605) AND `area` IN (10527); +DELETE FROM `spell_area` WHERE `spell` IN (321690,321691,321692,321693,325429) AND `area` IN (10424); +INSERT INTO `spell_area` (`spell`,`area`,`quest_start`,`quest_end`,`aura_spell`,`racemask`,`gender`,`flags`,`quest_start_status`,`quest_end_status`) VALUES +(312605,10527,55879,0,0,0,2,3,64,0), +(312605,10527,59942,0,0,0,2,3,64,0), +(321690,10424,55879,0,0,0,2,3,64,0), +(321690,10424,59942,0,0,0,2,3,64,0), +(321691,10424,55879,0,0,0,2,3,64,0), +(321691,10424,59942,0,0,0,2,3,64,0), +(321692,10424,55879,0,0,0,2,3,64,0), +(321692,10424,59942,0,0,0,2,3,64,0), +(321693,10424,55879,0,0,0,2,3,64,0), +(321693,10424,59942,0,0,0,2,3,64,0), +(325429,10424,59942,0,0,0,2,3,10,0); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceEntry` IN (325429)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ConditionStringValue1`, `NegativeCondition`, `Comment`) VALUES +(17, 0, 325429, 0, 0, 48, 0, 397279, 0, 8, '', 0, 'Caster of the spell has quest objective 397279 == 8 (but hasn\'t rewarded quest yet)'); + +-- Re-Deather + +UPDATE `creature` SET `StringId` = 'shuja_grimaxe_ogre_ruins_prisoner' WHERE `guid`=8000024; +UPDATE `creature_template` SET `ScriptName`="npc_warlord_grimaxe_q59942" WHERE `entry`=167146; +UPDATE `creature_template` SET `ScriptName`="npc_prisoner_q55879" WHERE `entry`=167126; +UPDATE `creature_template` SET `npcflag`=16777216 WHERE entry IN (167142); + +DELETE FROM `creature_equip_template` WHERE `CreatureID`=167146; +INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `AppearanceModID1`, `ItemVisual1`, `ItemID2`, `AppearanceModID2`, `ItemVisual2`, `ItemID3`, `AppearanceModID3`, `ItemVisual3`, `VerifiedBuild`) VALUES +(167146, 1, 165616, 0, 0, 0, 0, 0, 0, 0, 0, 52808); + +DELETE FROM `creature_template_movement` WHERE `CreatureId` IN (167142); +INSERT INTO `creature_template_movement` (`CreatureId`,`Ground`,`Swim`,`Flight`,`Rooted`,`Chase`,`Random`,`InteractionPauseTimer`) VALUES +(167142,0,0,1,0,0,0,0); -- Choppy Booster Mk. 5 + +DELETE FROM `npc_vendor` WHERE `entry`=167213; +INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `ExtendedCost`, `type`, `PlayerConditionID`, `IgnoreFiltering`, `VerifiedBuild`) VALUES +(167213, 2, 178120, 0, 0, 1, 0, 0, 52808), +(167213, 1, 117, 0, 0, 1, 0, 1, 52808); + +-- Quest data +DELETE FROM `creature_queststarter` WHERE `id`=167019 AND `quest`=59942; +DELETE FROM `creature_queststarter` WHERE `id`=167212 AND `quest`=59950; +INSERT INTO `creature_queststarter` (`id`, `quest`, `VerifiedBuild`) VALUES +(167019, 59942, 52649), -- The Re-Deather accept from Cork Fizzlepop +(167212, 59950, 52649); -- Stocking Up on Supplies accept from Warlord Breka Grimaxe + +DELETE FROM `creature_questender` WHERE `id`=167126 AND `quest`=59942; +DELETE FROM `creature_questender` WHERE `id`=167212 AND `quest`=59950; +INSERT INTO `creature_questender` (`id`, `quest`, `VerifiedBuild`) VALUES +(167126, 59942, 52649), -- The Re-Deather turn in to Shuja Grimaxe +(167212, 59950, 52649); -- Stocking Up on Supplies turn in to Warlord Breka Grimaxe + +DELETE FROM `quest_template_addon` WHERE `ID` IN (59942,59950); +INSERT INTO `quest_template_addon` (`ID`,`AllowableClasses`,`PrevQuestID`,`NextQuestID`,`ScriptName`) VALUES +(59942,0,59941,0,'quest_the_re_deather'), -- The Re-Deather +(59950,0,59942,0,''); -- Stocking Up on Supplies + +-- Phase Area +DELETE FROM `phase_area` WHERE `AreaId`=10588 AND `PhaseId` IN (15331); +DELETE FROM `phase_area` WHERE `AreaId`=10424 AND `PhaseId` IN (15485,15447,15353,15338,15377); +INSERT INTO `phase_area` (`AreaId`,`PhaseId`,`Comment`) VALUES +(10588,15331, 'Cosmetic - NPE - See Choppy Booster Mk. 5 for Re-Deather'), +(10424,15485, 'Cosmetic - NPE - See Warlord Breka Grimaxe at Ogre Ruins'), +(10424,15447, 'Cosmetic - NPE - See Grunt Throg at Ogre Ruins'), +(10424,15353, 'Cosmetic - NPE - See Shuja Grimaxe at Ogre Ruins pre quest at Ogre Ruins'), +(10424,15338, 'Cosmetic - NPE - See Won\'sa and Lana Jordan at Ogre Ruins pre quest at Ogre Ruins'), +(10424,15377, 'Cosmetic - NPE - See Mithdran Dawntracker at Ogre Ruins pre quest at Ogre Ruins'); + +-- Phase Names +DELETE FROM `phase_name` WHERE `ID` IN (15331,15485,15447,15353,15338,15377); +INSERT INTO `phase_name` (`ID`,`Name`) VALUES +(15331,'Cosmetic - NPE - See Choppy Booster Mk. 5 for Re-Deather'), +(15485,'Cosmetic - NPE - See Warlord Breka Grimaxe at Ogre Ruins'), +(15447,'Cosmetic - NPE - See Grunt Throg at Ogre Ruins'), +(15353,'Cosmetic - NPE - See Shuja Grimaxe at Ogre Ruins pre quest at Ogre Ruins'), +(15338,'Cosmetic - NPE - See Won\'sa and Lana Jordan at Ogre Ruins pre quest at Ogre Ruins'), +(15377,'Cosmetic - NPE - See Mithdran Dawntracker at Ogre Ruins pre quest at Ogre Ruins'); + +-- Phase Conditions +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (15331) AND `SourceEntry`=10588; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (15319) AND `ConditionValue1`=59942; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (13783) AND `ConditionValue1`=325368; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (15485,15447,15353,15338,15377,15553,15316,15315,15318) AND `ConditionValue1`=59942; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (15316) AND `SourceEntry`=0; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (14663,15327) AND `ConditionValue1`=59942; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (14663) AND `ConditionValue1`=397279; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(26,15331,10588, 0, 0, 47, 0, 59942, 8, 0, 0, 0, 0, '', 'Choppy Booster Mk. 5 if quest The Re-Deather is inprogress'), +(26,15331,10588, 0, 0, 1, 0, 325368, 0, 0, 1, 0, 0, '', 'See Choppy Booster Mk. 5 if player does not have aura'), +(26,15331,10588, 0, 0, 48, 0, 397279, 0, 0, 0, 0, 0, '', 'Player has quest objective 397279 == 0 (but hasn\'t rewarded quest yet)'), +(26,15319,10588, 0, 0, 47, 0, 59942, 1, 0, 0, 0, 0, '', 'Choppy Booster Mk. 5 if quest The Re-Deather is not taken'), +(26,13783,10529, 0, 0, 1, 0, 325368, 0, 0, 1, 0, 0, '', 'See See the Army of Undead if player does not have aura'), +(26,15485,10424, 0, 0, 47, 0, 59942, 64, 0, 0, 0, 0, '', 'See Warlord Breka Grimaxe at Ogre Ruins if quest The Re-Deather is rewarded'), +(26,15447,10424, 0, 0, 47, 0, 59942, 64, 0, 0, 0, 0, '', 'See Grunt Throg at Ogre Ruins if quest The Re-Deather is rewarded'), +(26,15353,10424, 0, 0, 47, 0, 59942, 64, 0, 0, 0, 0, '', 'See Shuja Grimaxe at Ogre Ruins pre quest if quest The Re-Deather is rewarded'), +(26,15338,10424, 0, 0, 47, 0, 59942, 64, 0, 0, 0, 0, '', 'See Won\'sa and Lana Jordan at Ogre Ruins pre quest if quest The Re-Deather is rewarded'), +(26,15377,10424, 0, 0, 47, 0, 59942, 64, 0, 0, 0, 0, '', 'See Mithdran Dawntracker at Ogre Ruins pre quest if quest The Re-Deather is rewarded'), +(26,15553,10588, 0, 0, 47, 0, 59942, 64, 0, 1, 0, 0, '', 'See Horde Crew at Darkmaul Plains if quest The Re-Deather is not rewarded'), +(26,15316,10588, 0, 0, 47, 0, 59942, 64, 0, 1, 0, 0, '', 'See Mithran Dawntracker at Darkmaul Plains if quest The Re-Deather is not rewarded'), +(26,15316,10588, 0, 1, 47, 0, 59942, 64, 0, 1, 0, 0, '', 'See Mithran Dawntracker at Darkmaul Plains if quest The Re-Deather is not rewarded'), +(26,15315,10588, 0, 0, 47, 0, 59942, 64, 0, 1, 0, 0, '', 'See Warlord Breka Grimaxe at Darkmaul Plains if quest The Re-Deather is not rewarded'), +(26,15318,10588, 0, 0, 47, 0, 59942, 64, 0, 1, 0, 0, '', 'See Cork Fizzlepop at Darkmaul Plains if quest The Re-Deather is not rewarded'), +(26,14663,10424, 0, 1, 47, 0, 59942, 64, 0, 1, 0, 0, '', 'See Torgok <Binder of Souls> if quest The Re-Deather is not rewarded'), +(26,14663,10424, 0, 1, 48, 0, 397279, 0, 8, 0, 0, 0, '', 'See Torgok <Binder of Souls> if quest Ride if player has objective complete'), +(26,15327,10424, 0, 0, 47, 0, 59942, 66, 0, 1, 0, 0, '', 'AND0 See Shuja Grimaxe at Ogre Ruins if quest The Re-Deather is not completed | rewarded Horde.'); + +-- Add Scenes for The Re-Deather +DELETE FROM `scene_template` WHERE `SceneId` IN (2489,2489,2497,2423,2422,2421,2420); +INSERT INTO `scene_template` (`SceneId`,`Flags`,`ScriptPackageID`,`Encrypted`,`ScriptName`) VALUES +(2489,17,2896,0,'scene_darkmaul_plains_skeleton_army_horde'), +(2497,17,2933,0,''), +(2423,16,2825,0,''), +(2422,16,2824,0,''), +(2421,16,2823,0,''), +(2420,16,2822,0,''); + +-- Spell Click +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (167142); +INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES +(167142,325368,1,0); + +-- Condition for Spell click event condition type Queststate +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup` IN (167142) AND `SourceEntry` IN (325368) AND `SourceId`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(18, 167142, 325368, 0, 0, 47, 0, 59942, 8, 0, 0, 0, 0, '', 'Spellclick unit Choppy Booster Mk. 5 will cast spell Riding Choppy Booster Mk 5 (DNT) on player if quest The Choppy Booster Mk. 5 queststate is INCOMPLETE'); + +-- Spell Target Position +DELETE FROM `spell_target_position` WHERE `ID` IN (325368); +INSERT INTO `spell_target_position` (`ID`,`EffectIndex`,`MapID`,`PositionX`,`PositionY`,`PositionZ`,`VerifiedBuild`) VALUES +(325368,0,2175,107.87153,-2414.177,95.44844,52649); + +-- Spell Target Position +DELETE FROM `spell_target_position` WHERE `ID` IN (325401); +INSERT INTO `spell_target_position` (`ID`,`EffectIndex`,`MapID`,`PositionX`,`PositionY`,`PositionZ`,`VerifiedBuild`) VALUES +(325401,0,2175,233.55,-2332.52,80.84,52649); + +-- Summon data for Warlord Grimaxe +DELETE FROM `creature_summoned_data` WHERE `CreatureID` IN (167146); +INSERT INTO `creature_summoned_data` (`CreatureID`,`CreatureIDVisibleToSummoner`,`GroundMountDisplayID`,`FlyingMountDisplayID`, `DespawnOnQuestsRemoved`) VALUES +(167146,167145,NULL,NULL,''); + +-- Conversation +DELETE FROM `conversation_template` WHERE `Id` IN (14525,14526,14527,15618); +INSERT INTO `conversation_template` (`Id`,`FirstLineId`,`TextureKitId`,`ScriptName`,`VerifiedBuild`) VALUES +(14525,36400,0,'',52649), +(14526,36402,0,'',52649), +(14527,36403,0,'',52649), +(15618,39171,0,'',52649); + +DELETE FROM `conversation_actors` WHERE `ConversationId` IN (14525,14526,14527,15618); +INSERT INTO `conversation_actors` (`ConversationId`,`ConversationActorId`,`ConversationActorGuid`,`Idx`,`CreatureId`,`CreatureDisplayInfoId`,`NoActorObject`,`ActivePlayerObject`,`VerifiedBuild`) VALUES +(14525,75979,8000016,0,0,0,0,0,52649), -- Cork Fizzlepop +(14526,75979,0,0,167915,96314,0,0,52649), -- Cork Fizzlepop +(14527,76004,0,0,0,0,0,0,52649), +(14527,76357,0,1,0,0,0,0,52649), +(15618,76357,0,0,0,0,0,0,52649), +(15618,78501,0,1,0,0,0,0,52649); + +DELETE FROM `conversation_line_template` WHERE `Id` IN (36400,36402,36403,36404,39171,39172,39173,39174,39175); +INSERT INTO `conversation_line_template` (`Id`,`UiCameraID`,`ActorIdx`,`Flags`,`VerifiedBuild`) VALUES +(36400,0,0,0,52649), +(36402,114,0,0,52649), +(36403,0,0,0,52649), +(36404,0,1,0,52649), +(39171,0,0,0,52649), +(39172,0,1,0,52649), +(39173,0,0,0,52649), +(39174,0,0,0,52649), +(39175,0,1,0,52649); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup`=14663 AND `ElseGroup`=1; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(26,14663,10424, 0, 1, 47, 0, 59942, 64, 0, 1, 0, 0, '', 'See Torgok <Binder of Souls> if quest The Re-Deather is not rewarded'), +(26,14663,10424, 0, 1, 48, 0, 397279, 0, 8, 0, 0, 0, '', 'See Torgok <Binder of Souls> if quest Ride if player has objective complete'); + +-- Westward Bound + +UPDATE `creature` SET `StringId`= "bjorn_stouthands_pit_pre_quest" WHERE `guid`=1051890; +UPDATE `creature` SET `StringId`= "alaria_pit_pre_quest" WHERE `guid`=1051889; +UPDATE `creature` SET `StringId`= "lana_joran_pit_pre_quest" WHERE `guid`=8000057; +UPDATE `creature` SET `StringId`= "wonsa_pit_pre_quest" WHERE `guid`=8000058; + +UPDATE `creature_template` SET `npcflag`=2 WHERE `entry` IN (154300,156891,167225); +UPDATE `creature_template` SET `ScriptName`="npc_bjorn_stouthands_q55965" WHERE `entry`=156891; +UPDATE `creature_template` SET `ScriptName`="npc_alaria_q55965" WHERE `entry`=156803; +UPDATE `creature_template` SET `ScriptName`="npc_lana_jordan_q59948" WHERE `entry`=167225; +UPDATE `creature_template` SET `ScriptName`="npc_wonsa_q59948" WHERE `entry`=167226; + +DELETE FROM `creature_template_addon` WHERE `entry` IN (156891,158803,167225,167226); +INSERT INTO `creature_template_addon` (`entry`,`visibilityDistanceType`,`emote`,`auras`) VALUES +(156891,3,0, ''), -- Bjorn Stouthands +(158803,3,0, ''), -- Alaria +(167225,3,0, ''), -- Lana Jordan +(167226,3,0, ''); -- Won'sa + +DELETE FROM `creature_text` WHERE `CreatureID` IN (156891,167225); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(156891,0,0,'All right, let\'s see what we can find.', 12, 0, 100, 0, 0, 153011, 178906, 0, 'Bjorn Stouthands to Player'), +(156891,1,0,'Well... I think we can say we found somethin\'.', 12, 0, 100, 0, 0, 153012, 178907, 0, 'Bjorn Stouthands to Player'), +(167225,0,0,'Let\'s see if we can find one of those rituals.', 12, 0, 100, 0, 0, 155935, 196409, 0, 'Lana Jordan to Player'), +(167225,1,0,'A dark pit and darker magic. I think we found the ritual.', 12, 0, 100, 0, 0, 155936, 196410, 0, 'Lana Jordan to Player'); + +-- Pathing for Bjorn Stouthands Entry: 156891 +SET @NPC := 1051890; +SET @PATH := @NPC * 10; +DELETE FROM `waypoint_path` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES +(@PATH,1,0,'Bjorn Stouthands Ogre Ruins'); +DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES +(@PATH,1,143.74654,-2304.6077,89.66764,NULL,0), +(@PATH,2,129.32639,-2291.981,94.09912,NULL,0), +(@PATH,3,119.19444,-2285.2258,96.639084,NULL,0), +(@PATH,4,111.0816,-2275.9983,97.39326,NULL,0), +(@PATH,5,102.78819,-2265.302,96.73692,NULL,0), +(@PATH,6,89.68403,-2249.264,94.694824,NULL,0), +(@PATH,7,89.68403,-2249.264,94.694824,1.939347267150878906,0); + +-- Pathing for Alaria Entry: 156803 +SET @NPC := 1051889; +SET @PATH := @NPC * 10; +DELETE FROM `waypoint_path` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES +(@PATH,1,0,'Alaria Ogre Ruins'); +DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES +(@PATH,1,165.59766,-2308.5781,83.23175,NULL,0), +(@PATH,2,153.73611,-2305.8403,86.4088,NULL,0), +(@PATH,3,140.17014,-2296.8699,90.521965,NULL,0), +(@PATH,4,129.96355,-2287.9636,95.05551,NULL,0), +(@PATH,5,91.98264,-2246.8298,94.39893,NULL,0), +(@PATH,6,91.98264,-2246.8298,94.39893,2.024514675140380859,0); + +-- Pathing for Lana Jordan Entry: 167225 +SET @NPC := @CGUID+16; +SET @PATH := @NPC * 10; +DELETE FROM `waypoint_path` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES +(@PATH,1,0,'Lana Ogre Ruins'); +DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES +(@PATH,1,149.25081,-2299.1108,89.23349,NULL,0), +(@PATH,2,138.00081,-2287.6108,93.98349,NULL,0), +(@PATH,3,125.25081,-2278.8608,97.48349,NULL,0), +(@PATH,4,102.25081,-2260.3608,96.23349,NULL,0), +(@PATH,5,92.015625,-2246.9114,94.41398,NULL,0), +(@PATH,6,92.015625,-2246.9114,94.41398,2.622560739517211914,0); + +-- Pathing for Won'sa Entry: 167226 +SET @NPC := @CGUID+17; +SET @PATH := @NPC * 10; +DELETE FROM `waypoint_path` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES +(@PATH,1,0,'Wansa Ogre Ruins'); +DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH; +INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES +(@PATH,1,146.84831,-2298.0352,89.56113,NULL,0), +(@PATH,2,134.59831,-2287.7852,94.81113,NULL,0), +(@PATH,3,112.09831,-2268.2852,97.31113,NULL,0), +(@PATH,4,94.09831,-2252.7852,95.06113,NULL,0), +(@PATH,5,89.265625,-2248.9602,94.66245,NULL,0), +(@PATH,6,89.265625,-2248.9602,94.66245,1.861210823059082031,0); + +-- Quest data +DELETE FROM `creature_queststarter` WHERE `id`=154300 AND `quest`=55965; +DELETE FROM `creature_queststarter` WHERE `id`=167221 AND `quest`=59948; +INSERT INTO `creature_queststarter` (`id`, `quest`, `VerifiedBuild`) VALUES +(154300, 55965, 52649), -- Westward Bound accept from Bjorn Stouthands Alliance +(167221, 59948, 52649); -- Westward Bound accept from Lana Jordan Horde + +DELETE FROM `creature_questender` WHERE `id`=156891 AND `quest`=55965; +DELETE FROM `creature_questender` WHERE `id`=167225 AND `quest`=59948; +INSERT INTO `creature_questender` (`id`, `quest`, `VerifiedBuild`) VALUES +(156891, 55965, 52649), -- Westward Bound turn in to Bjorn Stouthands Alliance +(167225, 59948, 52649); -- Westward Bound turn in to Lana Jordan Horde + +DELETE FROM `quest_template_addon` WHERE `ID` IN (55965,59948); +INSERT INTO `quest_template_addon` (`ID`,`AllowableClasses`,`PrevQuestID`,`NextQuestID`,`ScriptName`) VALUES +(55965,0,55194,0,'quest_westward_bound_alliance'), -- Westward Bound Alliance +(59948,0,59950,0,'quest_westward_bound_horde'); -- Westward Bound Horde + +-- Phase Area +DELETE FROM `phase_area` WHERE `AreaId`=10424 AND `PhaseId` IN (15337); +INSERT INTO `phase_area` (`AreaId`,`PhaseId`,`Comment`) VALUES +(10424,15337, 'Cosmetic - NPE - See Won\'sa and Lana Jordan at pit pre quest'); + +-- Phase Names +DELETE FROM `phase_name` WHERE `ID` IN (15337); +INSERT INTO `phase_name` (`ID`,`Name`) VALUES +(15337,'Cosmetic - NPE - See Won\'sa and Lana Jordan at pit pre quest'); + +-- Phase Conditions +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup` IN (15338,15337) AND `ConditionValue1` IN (59948,59949); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(26,15338,10424, 0, 0, 47, 0, 59948, 74, 0, 1, 0, 0, '', 'See Won\'sa and Lana Jordan at Ogre Ruins pre quest if quest Westward Bound is not taken | complete | rewarded'), +(26,15337,10424, 0, 0, 47, 0, 59948, 74, 0, 0, 0, 0, '', 'See Won\'sa and Lana Jordan at pit pre quest if quest Westward Bound is taken | complete | rewarded'), +(26,15337,10424, 0, 0, 47, 0, 59949, 66, 0, 1, 0, 0, '', 'See Won\'sa and Lana Jordan at pit pre quest if quest Who Lurks in the Pit is not complete | rewarded'); + +UPDATE `creature` SET `PhaseUseFlags`=`PhaseUseFlags` | 0x01 WHERE `guid` IN(1051317, 1051942); -- fix spirithealer phases + +UPDATE `creature_template_difficulty` SET `ContentTuningID`=957, `VerifiedBuild`=53262 WHERE (`Entry`=167146 AND `DifficultyID`=0); -- Horde Warrior +UPDATE `creature_template_difficulty` SET `ContentTuningID`=741, `VerifiedBuild`=53262 WHERE (`Entry`=167905 AND `DifficultyID`=0); -- Choppy Booster Mk. 5 +UPDATE `creature_template_difficulty` SET `ContentTuningID`=741, `VerifiedBuild`=53262 WHERE (`Entry`=167915 AND `DifficultyID`=0); -- Cork Fizzlepop + +UPDATE `creature_template` SET `faction`=116, `BaseAttackTime`=2000, `unit_flags`=64, `unit_flags2`=2048, `unit_flags3`=16 WHERE `entry`=167146; -- Horde Warrior + +DELETE FROM `phase_area` WHERE `AreaId`=10424 AND `PhaseId` IN (15558, 13795); +INSERT INTO `phase_area` (`AreaId`,`PhaseId`,`Comment`) VALUES +(10424,15558, 'Cosmetic - NPE - See Breka and Shuja Grimaxe after freeing Shuja'), +(10424,13795, 'Cosmetic - NPE - See Captain and Henry Garrick after freeing Henry'); + +DELETE FROM `phase_name` WHERE `ID` IN (15558, 13795); +INSERT INTO `phase_name` (`ID`,`Name`) VALUES +(15558,'Cosmetic - NPE - See Breka and Shuja Grimaxe after freeing Shuja'), +(13795,'Cosmetic - NPE - See Captain and Henry Garrick after freeing Henry'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 26 AND `SourceEntry`=10424 AND `SourceGroup` IN(15558,13795); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ConditionStringValue1`, `NegativeCondition`, `Comment`) VALUES +(26, 15558, 10424, 0, 0, 28, 0, 59942, 0, 0, '', 0, 'Player has completed quest quest The Re-Deather (59942) (but not yet rewarded)'), +(26, 13795, 10424, 0, 0, 28, 0, 55879, 0, 0, '', 0, 'Player has completed quest quest Ride of the Scientifically Enhanced Boar (55879) (but not yet rewarded)'); + +DELETE FROM `creature_template_addon` WHERE `entry` IN(156799, 167126); +DELETE FROM `creature_addon` WHERE `guid` IN(8000023, 8000024); +INSERT INTO `creature_addon` (`guid`, `PathId`, `mount`, `MountCreatureID`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvPFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES +(8000023, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, '305513 325408'), +(8000024, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, '305513 325408'); + +DELETE FROM `creature_template_movement` WHERE `CreatureId` IN(156799, 167126); +DELETE FROM `creature_movement_override` WHERE `SpawnId` IN(8000023, 8000024); +INSERT INTO `creature_movement_override` (`SpawnId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(8000023, 1, 1, 1, 0, 0, 0, 0), +(8000024, 1, 1, 1, 0, 0, 0, 0); + +DELETE FROM `quest_request_items` WHERE `ID`=55879; +INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `EmoteOnCompleteDelay`, `EmoteOnIncompleteDelay`, `CompletionText`, `VerifiedBuild`) VALUES +(55879, 0, 0, 0, 0, 'Please... help! I won\'t last much longer!', 53262); -- Ride of the Scientifically Enhanced Boar + +UPDATE `creature_template_difficulty` SET `ContentTuningID`=741, `VerifiedBuild`=53262 WHERE (`Entry`=156267 AND `DifficultyID`=0); -- Giant Boar +UPDATE `creature_template_difficulty` SET `ContentTuningID`=741, `VerifiedBuild`=53262 WHERE (`Entry`=156736 AND `DifficultyID`=0); -- Re-sized Boar +UPDATE `creature_template_difficulty` SET `ContentTuningID`=741, `VerifiedBuild`=53262 WHERE (`Entry`=156749 AND `DifficultyID`=0); -- Lindie Springstock +UPDATE `creature_template_difficulty` SET `ContentTuningID`=1421, `VerifiedBuild`=53262 WHERE (`Entry`=174955 AND `DifficultyID`=0); -- Alliance Captain + +UPDATE `creature_template` SET `faction`=35, `BaseAttackTime`=2000, `unit_flags2`=2048 WHERE `entry`=156807; -- Captain Garrick +UPDATE `creature_template` SET `faction`=2142, `speed_walk`=6.40000009536743164, `speed_run`=2.285714387893676757, `BaseAttackTime`=2000, `RangeAttackTime`=0, `unit_flags2`=2048, `unit_flags3`=67108864 WHERE `entry`=156267; -- Giant Boar +UPDATE `creature_template` SET `faction`=35, `BaseAttackTime`=2000, `unit_flags`=768, `unit_flags2`=2048, `unit_flags3`=67108864 WHERE `entry`=156595; -- Giant Boar +UPDATE `creature_template` SET `faction`=35, `BaseAttackTime`=2000, `unit_flags`=32832, `unit_flags2`=2048, `unit_flags3`=67633152 WHERE `entry`=156736; -- Re-sized Boar +UPDATE `creature_template` SET `faction`=2618, `BaseAttackTime`=2000, `unit_flags2`=2048 WHERE `entry`=156749; -- Lindie Springstock +UPDATE `creature_template` SET `faction`=35, `BaseAttackTime`=2000, `unit_flags2`=2048 WHERE `entry`=156799; -- Henry Garrick +UPDATE `creature_template` SET `faction`=4, `BaseAttackTime`=2000, `unit_flags`=32768, `unit_flags2`=2048 WHERE `entry`=174955; -- Alliance Captain diff --git a/src/server/scripts/ExilesReach/zone_exiles_reach.cpp b/src/server/scripts/ExilesReach/zone_exiles_reach.cpp index bc4d31c4a2f..0ec3d94693f 100644 --- a/src/server/scripts/ExilesReach/zone_exiles_reach.cpp +++ b/src/server/scripts/ExilesReach/zone_exiles_reach.cpp @@ -41,6 +41,11 @@ #include "Loot.h" #include "SpellHistory.h" #include "WorldStateMgr.h" +#include "Unit.h" +#include "Vehicle.h" +#include "WorldSession.h" +#include "CombatAI.h" +#include "PhasingHandler.h" template<class privateAI, class publicAI> CreatureAI* GetPrivatePublicPairAISelector(Creature* creature) @@ -1483,7 +1488,7 @@ struct npc_mithran_dawntracker_beach_laying : public ScriptedAI if (spellInfo->Id != SPELL_BANDAGING_QUEST) return; - static Position const MithranCloneSpawnPosition = { -428.576f, -2593.93f, 0.152832f, 4.849576f }; + static constexpr Position MithranCloneSpawnPosition = { -428.576f, -2593.93f, 0.152832f, 4.849576f }; if (Player* player = caster->ToPlayer()) { @@ -1505,7 +1510,7 @@ struct npc_lana_jordan_beach_laying : public ScriptedAI if (spellInfo->Id != SPELL_BANDAGING_QUEST) return; - static Position const LanaCloneSpawnPosition = { -420.656f, -2600.28f, 0.556646f, 4.046853f }; + static constexpr Position LanaCloneSpawnPosition = { -420.656f, -2600.28f, 0.556646f, 4.046853f }; if (Player* player = caster->ToPlayer()) { @@ -1743,8 +1748,8 @@ enum LostExpeditionFollowerData POINT_CAMP_POSITION = 0, }; -Position const GarrickAbandonedCampPosition = { -249.059006f, -2492.520020f, 18.0742f }; -Position const GrimaxeAbandonedCampPosition = { -249.20117f, -2492.6191f, 17.964903f }; +static constexpr Position GarrickAbandonedCampPosition = { -249.059006f, -2492.520020f, 18.0742f }; +static constexpr Position GrimaxeAbandonedCampPosition = { -249.20117f, -2492.6191f, 17.964903f }; // 165359 - Captain Garrick // This script is used by Captian Garrick Follower for Finding the Lost Expedition quest @@ -2062,7 +2067,7 @@ enum CookingMeatQuestData ANIMATION_KIT_INJURED = 14432 }; -Position const InjuredNpcPositionAbandonedCamp = { -245.40973f, -2492.0886f, 18.404648f, 2.4754f }; +static constexpr Position InjuredNpcPositionAbandonedCamp = { -245.40973f, -2492.0886f, 18.404648f, 2.4754f }; // 55174 - Cooking Meat // 59932 - Cooking Meat @@ -2369,8 +2374,8 @@ enum EnhancedCombatTrainerData SPELL_AGGRO_RADIUS_CHECK_DNT_DRUID = 320766 }; -Position const EnhancedTrainingWalkPosition = { -250.60243f, -2485.2517f, 17.787413f }; -Position const EnhancedTrainingRunPosition = { -231.5225f, -2480.5276f, 19.019197f }; +static constexpr Position EnhancedTrainingWalkPosition = { -250.60243f, -2485.2517f, 17.787413f }; +static constexpr Position EnhancedTrainingRunPosition = { -231.5225f, -2480.5276f, 19.019197f }; // 164577 - Alliance Sparring Partner // 166916 - Horde Sparring Partner @@ -3503,8 +3508,8 @@ enum NorthboundData SPELL_LINGER_NORTHBOUND_HORDE = 344385, }; -Position const GarrickQuillboarBriarpatchPosition = { -142.62154f, -2641.0364f, 48.775497f }; -Position const GrimaxeQuillboarBriarpatchPosition = { -142.56076f, -2640.9915f, 48.755478f }; +static constexpr Position GarrickQuillboarBriarpatchPosition = { -142.62154f, -2641.0364f, 48.775497f }; +static constexpr Position GrimaxeQuillboarBriarpatchPosition = { -142.56076f, -2640.9915f, 48.755478f }; // 165360 - Alliance Survivor // This script is used by Captian Garrick Follower for Northbound quest @@ -3927,8 +3932,8 @@ enum HuxsworthBriarpatchData EVENT_HUXSWORTH_GARRICK_RUN_BRIARPATCH = 2, }; -Position const GarrickBriarpatchDespawnPosition = { -112.92383f, -2640.541f, 52.35042f }; -Position const HuxworthBriarpatchDespawnPosition = { -112.61979f, -2645.9775f, 52.22835f }; +static constexpr Position GarrickBriarpatchDespawnPosition = { -112.92383f, -2640.541f, 52.35042f }; +static constexpr Position HuxworthBriarpatchDespawnPosition = { -112.61979f, -2645.9775f, 52.22835f }; // 154327 - Austin Huxsworth struct npc_huxsworth_briarpatch_quest_private : public ScriptedAI @@ -4075,8 +4080,8 @@ enum DawntrackerBriarpatch EVENT_DAWNTRACKER_GRIMAXE_RUN_BRIARPATCH = 2, }; -Position const GrimaxeBriarpatchDespawnPosition = { -112.92383f, -2640.541f, 52.35042f }; -Position const DawntrackerBriarpatchDespawnPosition = { -112.61979f, -2645.9775f, 52.22835f }; +static constexpr Position GrimaxeBriarpatchDespawnPosition = { -112.92383f, -2640.541f, 52.35042f }; +static constexpr Position DawntrackerBriarpatchDespawnPosition = { -112.61979f, -2645.9775f, 52.22835f }; // 166996 - Mithdran Dawntracker struct npc_dawntracker_briarpatch_quest_private : public ScriptedAI @@ -4364,7 +4369,7 @@ enum GeolordData WORLDSTATE_HORDE = 4486 }; -Position const PrisonerPosition = { 16.4271f, -2511.82f, 78.8215f, 5.66398f }; +static constexpr Position PrisonerPosition = { 16.4271f, -2511.82f, 78.8215f, 5.66398f }; // 151091 - Geolord Grek'og struct npc_geolord_grekog : public ScriptedAI @@ -4443,8 +4448,8 @@ enum BriarpatchPrisonerData SAY_GET_OUT_OF_HERE = 0 }; -Position const BriarpatchPrisonerJumpToPosition = { 19.5174f, -2513.75f, 74.0545f }; -Position const PrisonerBriarpatchDespawnPosition = { 51.005207f, -2485.644f, 78.15223f }; +static constexpr Position BriarpatchPrisonerJumpToPosition = { 19.5174f, -2513.75f, 74.0545f }; +static constexpr Position PrisonerBriarpatchDespawnPosition = { 51.005207f, -2485.644f, 78.15223f }; // 167008 - Cork Fizzlepop // 154301 - Lindie Springstock @@ -4842,7 +4847,7 @@ enum LindieSpringStockData SPELL_GROW_THREE = 111701 }; -Position const MiniChopperJumpPosition = { 107.979f, -2414.13f, 95.6243f }; +static constexpr Position MiniChopperJumpPosition = { 107.979f, -2414.13f, 95.6243f }; // 149899 - Lindie Springstock // 167019 - Cork Fizzlepop @@ -5111,7 +5116,7 @@ private: EventMap _events; }; -Position const HordeCrewPersonalSpawnLocation[] = +static constexpr Position HordeCrewPersonalSpawnLocation[] = { { 50.920593f, -2477.466f, 79.444374f, 0.8753076f }, { 60.51328f, -2476.4822f, 81.034775f, 0.9128374f }, @@ -5265,7 +5270,7 @@ CreatureAI* HordeCrewPlainsSelector(Creature* creature) return new NullCreatureAI(creature); }; -Position const CopterCloneSpawnPosition = { 100.583f, -2417.87f, 90.268f, 0.0f }; +static constexpr Position CopterCloneSpawnPosition = { 100.583f, -2417.87f, 90.268f, 0.0f }; // Quest 55193 - The Scout-o-Matic 5000 "Alliance" // Quest 59940 - The Choppy Booster Mk. 5 "Horde" @@ -5544,13 +5549,15 @@ struct npc_re_sized_boar_q56034 : public ScriptedAI if (uiType != POINT_MOTION_TYPE) return; - if (uiId != 0) + if (uiId != POINT_HOME_POSITION) return; me->SetFacingTo(0.785398f); - if (Unit* owner = me->GetOwner()) - owner->CastSpell(owner, SPELL_UPDATE_PHASE_SHIFT); + if (Unit* summoner = me->GetDemonCreator()) + summoner->CastSpell(summoner, SPELL_UPDATE_PHASE_SHIFT); + + me->DespawnOrUnsummon(); } void UpdateAI(uint32 diff) override @@ -5871,6 +5878,29 @@ class spell_re_sizing_aura_q59941 : public AuraScript } }; +// 325368 - Re-sizer Slaughter (DNT) +class spell_re_sizer_slaughter : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_UPDATE_PHASE_SHIFT + }); + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(nullptr, SPELL_UPDATE_PHASE_SHIFT); + } + + void Register() override + { + AfterEffectApply += AuraEffectRemoveFn(spell_re_sizer_slaughter::OnApply, EFFECT_0, SPELL_AURA_PLAY_SCENE, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_re_sizer_slaughter::OnApply, EFFECT_0, SPELL_AURA_PLAY_SCENE, AURA_EFFECT_HANDLE_REAL); + } +}; + // 56034 - Re-sizing the Situation "Alliance" // 59941 - Re-sizing the Situation "Horde" class quest_resizing_the_situation : public QuestScript @@ -5920,6 +5950,1112 @@ public: } }; +enum QuestRideBoar +{ + NPC_ALLIANCE_CAPTAIN = 174955, + NPC_HENRY_GARRICK_PRISONER = 156799, + + SPELL_SUMMON_DARKMAUL_PLAINS_QUESTGIVERS_SUMMON = 305779, + SPELL_SUMMON_DARKMAUL_PLAINS_QUESTGIVERS_AURA = 305776, + SPELL_PING_GARRICK_TORGOK = 316982, + SPELL_REUNION_DNT_ALLIANCE = 305893, + SPELL_RITUAL_SCENE_OGRE_CITADEL_DNT = 321693, + SPELL_RITUAL_SCENE_HRUN_BEAM_DNT = 321692, + SPELL_RITUAL_SCENE_HARPY_BEAM_DNT = 321691, + SPELL_RITUAL_SCENE_MAIN_BEAM_DNT = 321690 +}; + +static constexpr Position ReDeatherAbandonTeleportPos = { 102.3f, -2422.5f, 90.1f, 0.764454185962677001f }; + +// 55879 - Ride of the Scientifically Enhanced Boar +class quest_ride_of_the_scientifically_enhanced_boar : public QuestScript +{ +public: + quest_ride_of_the_scientifically_enhanced_boar() : QuestScript("quest_ride_of_the_scientifically_enhanced_boar") { } + + void OnQuestStatusChange(Player* player, Quest const* /*quest*/, QuestStatus /*oldStatus*/, QuestStatus newStatus) override + { + switch (newStatus) + { + case QUEST_STATUS_INCOMPLETE: + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + player->CastSpell(player, SPELL_SUMMON_DARKMAUL_PLAINS_QUESTGIVERS_SUMMON); + break; + case QUEST_STATUS_COMPLETE: + player->CombatStop(); + player->CastSpell(player, SPELL_PING_GARRICK_TORGOK); + break; + case QUEST_STATUS_REWARDED: + player->CastSpell(player, SPELL_REUNION_DNT_ALLIANCE); + player->CastSpell(player, SPELL_RITUAL_SCENE_OGRE_CITADEL_DNT); + player->CastSpell(player, SPELL_RITUAL_SCENE_HRUN_BEAM_DNT); + player->CastSpell(player, SPELL_RITUAL_SCENE_HARPY_BEAM_DNT); + player->CastSpell(player, SPELL_RITUAL_SCENE_MAIN_BEAM_DNT); + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + break; + case QUEST_STATUS_NONE: + player->RemoveAura(SPELL_RITUAL_SCENE_OGRE_CITADEL_DNT); + player->RemoveAura(SPELL_RITUAL_SCENE_HRUN_BEAM_DNT); + player->RemoveAura(SPELL_RITUAL_SCENE_HARPY_BEAM_DNT); + player->RemoveAura(SPELL_RITUAL_SCENE_MAIN_BEAM_DNT); + player->RemoveAura(SPELL_SUMMON_DARKMAUL_PLAINS_QUESTGIVERS_AURA); + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + player->NearTeleportTo(ReDeatherAbandonTeleportPos); + break; + default: + break; + } + } +}; + +enum SceneOgreRuinsRideBoar +{ + QUEST_RIDE_ENHANCED_BOAR = 55879, + QUEST_RIDE_BOAR_OBJECTIVE_TWO = 396499, + QUEST_RIDE_BOAR_OBJECTIVE_TWO_MAX = 8, + + SPELL_ENHANCED_BOAR_TRAMPLE = 305557, + SPELL_ENHANCED_BOAR_CHARGE = 321627, + SPELL_ENHANCED_BOAR_KILL_CREDIT = 321668, + SPELL_ENHANCED_BOAR_PING_VEHICLE = 305559, + SPELL_ENHANCED_BOAR_CHARGE_CONVO = 305815, + SPELL_ENHANCED_BOAR_KNOCKBACK = 306356, + SPELL_ENHANCED_BOAR_KNOCKBACK_HINT = 306357 +}; + +// Script scene for Ride of the Scientifically Enhanced Boar quest +class scene_darkmaul_plains_skeleton_army_alliance : public SceneScript +{ +public: + scene_darkmaul_plains_skeleton_army_alliance() : SceneScript("scene_darkmaul_plains_skeleton_army_alliance") { } + + void OnSceneTriggerEvent(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& triggerName) override + { + if (triggerName == "Trampling Time") + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_TRAMPLE, true); + if (Unit* boar = player->GetVehicleBase()) + boar->CastSpell(boar, SPELL_ENHANCED_BOAR_CHARGE, true); + } + else if (triggerName == "Big Kill Credit") + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_KILL_CREDIT, true); + + if (player->GetQuestObjectiveData(QUEST_RIDE_ENHANCED_BOAR, QUEST_RIDE_BOAR_OBJECTIVE_TWO) == QUEST_RIDE_BOAR_OBJECTIVE_TWO_MAX) + player->CastSpell(player, SPELL_ENHANCED_BOAR_PING_VEHICLE); + } + else if (triggerName == "Conversation") + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_CHARGE_CONVO, true); + } + else if (triggerName == "Knockback") + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_KNOCKBACK, true); + } + else if (triggerName == "Hint") + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_KNOCKBACK_HINT, true); + } + } +}; + +// Spell 305779 - Summon Darkmaul Plains Questgivers (DNT) +class spell_summon_darkmaul_plains_questgivers_q55879 : public SpellScript +{ + // @TODO: drop after TARGET_UNK_142 impl + + void SelectTarget(WorldObject*& target) + { + Player* player = Object::ToPlayer(GetCaster()); + if (!player) + return; + + Creature* survivor = FindCreatureIgnorePhase(player, "captain_garrick_plains", 5.0f); + if (!survivor) + return; + + target = survivor; + } + + void Register() override + { + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_summon_darkmaul_plains_questgivers_q55879::SelectTarget, EFFECT_0, TARGET_DEST_NEARBY_ENTRY_OR_DB); + } +}; + +enum SpellRidingGiantBoar +{ + SPELL_RIDING_GIANT_BOAR_305068 = 305068, + SPELL_RIDING_GIANT_BOAR_321670 = 321670 +}; + +// 173426 - Riding Giant Boar +class spell_riding_giant_boar_q55879 : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_RIDING_GIANT_BOAR_305068, + SPELL_RIDING_GIANT_BOAR_321670, + SPELL_UPDATE_PHASE_SHIFT + }); + } + + void OnAuraRemoveHandler(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Player* player = Object::ToPlayer(GetCaster()); + if (!player) + return; + + player->RemoveAura(SPELL_RIDING_GIANT_BOAR_305068); + player->RemoveAura(SPELL_RIDING_GIANT_BOAR_321670); + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_riding_giant_boar_q55879::OnAuraRemoveHandler, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL); + } +}; + +enum SpellKnockbackHint +{ + ACTOR_ALLIANCE_CAPTAIN = 71372 +}; + +// 305742 - Resizer Hit +class spell_knockback_hint_q56034 : public SpellScript +{ + void HandleLaunch(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + } + + void HandleEffect(SpellEffIndex effIndex) + { + Player* player = Object::ToPlayer(GetCaster()); + if (!player) + return; + + Creature* garrick = player->FindNearestCreatureWithOptions(10.0f, { .CreatureId = NPC_ALLIANCE_CAPTAIN, .OwnerGuid = player->GetGUID() }); + if (!garrick) + return; + + Conversation* conversation = Conversation::CreateConversation(GetSpellInfo()->GetEffect(effIndex).MiscValue, player, *player, player->GetGUID(), nullptr, false); + if (!conversation) + return; + + conversation->AddActor(ACTOR_ALLIANCE_CAPTAIN, 0, garrick->GetGUID()); + conversation->Start(); + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_knockback_hint_q56034::HandleLaunch, EFFECT_0, SPELL_EFFECT_CREATE_PRIVATE_CONVERSATION); + OnEffectHitTarget += SpellEffectFn(spell_knockback_hint_q56034::HandleEffect, EFFECT_0, SPELL_EFFECT_CREATE_PRIVATE_CONVERSATION); + } +}; + +enum CaptainGarrickGiantBoar +{ + ACTION_EXIT_BOAR = 1, + + ACTOR_HENRY_GARRICK_PRISONER = 78493, + + CONVERSATION_CAPTAIN_GARRICK_RIDE_BOAR_QUEST_ACCEPT = 12090, + + CONVERSATION_CAPTAIN_GARRICK_RIDE_BOAR_QUEST_HENRY = 15615, + CONVERSATION_CAPTAIN_GARRICK_RIDE_BOAR_QUEST_EXIT = 12092, + + EVENT_CAPTAIN_GARRICK_RIDE_BOAR = 1, + EVENT_CAPTAIN_GARRICK_RIDE_BOAR_CHECK_OWNER = 2, + EVENT_CAPTAIN_GARRICK_RIDE_BOAR_TALK_TO_HENRY = 3, + EVENT_CAPTAIN_GARRICK_RIDE_BOAR_HENRY_DESPAWN = 4, + EVENT_CAPTAIN_GARRICK_RIDE_BOAR_EXIT_BOAR_CONVERSATION = 5, + + NPC_GIANT_BOAR = 156267, + + PHASE_SEE_TORGOK = 14663, + + POINT_HENRY_POSITION = 0, + + SPELL_PING_GARRICK_TO_RIDE_BOAR = 316984, + SPELL_RIDE_VEHICLE_CAPTIAN_BOAR = 63315 +}; + +Position MoveToPrisonerPosition = { 232.16145f, -2292.5347f, 80.91198f }; + +// 174955 - Captain Garrick +struct npc_captain_garrick_q55879 : public ScriptedAI +{ + npc_captain_garrick_q55879(Creature* creature) : ScriptedAI(creature) { } + + void JustAppeared() override + { + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + return; + + Conversation* conversation = Conversation::CreateConversation(CONVERSATION_CAPTAIN_GARRICK_RIDE_BOAR_QUEST_ACCEPT, player, *player, player->GetGUID(), nullptr, false); + if (!conversation) + return; + + conversation->AddActor(0, 0, player->GetGUID()); + conversation->AddActor(ACTOR_ALLIANCE_CAPTAIN, 1, me->GetGUID()); + conversation->Start(); + + me->SetReactState(REACT_PASSIVE); + me->GetMotionMaster()->MoveFollow(player, 0.0f, float(M_PI / 4.0f)); + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override + { + if (me->GetHealth() <= damage) + damage = me->GetHealth() - 1; + } + + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override + { + switch (spellInfo->Id) + { + case SPELL_PING_GARRICK_TO_RIDE_BOAR: + { + Unit* owner = me->GetOwner(); + if (!owner) + break; + + PhasingHandler::InheritPhaseShift(me, owner); + PhasingHandler::ResetPhaseShift(me); + + _events.ScheduleEvent(EVENT_CAPTAIN_GARRICK_RIDE_BOAR, 2s); + break; + } + case SPELL_ENHANCED_BOAR_PING_VEHICLE: + { + PhasingHandler::AddPhase(me, PHASE_SEE_TORGOK, true); + _events.ScheduleEvent(EVENT_CAPTAIN_GARRICK_RIDE_BOAR_EXIT_BOAR_CONVERSATION, 500ms); + break; + } + case SPELL_PING_GARRICK_TORGOK: + { + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + break; + + Creature* henry = FindCreatureIgnorePhase(me, "henry_garrick_ogre_ruins_prisoner"); + if (!henry) + break; + + Creature* henryPersonal = henry->SummonPersonalClone(henry->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player); + if (!henryPersonal) + break; + + me->SetReactState(REACT_AGGRESSIVE); + _henryGUID = henryPersonal->GetGUID(); + _events.ScheduleEvent(EVENT_CAPTAIN_GARRICK_RIDE_BOAR_TALK_TO_HENRY, 1s); + break; + } + default: + break; + } + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CAPTAIN_GARRICK_RIDE_BOAR: + { + if (Unit* owner = me->GetOwner()) + { + Creature* boar = owner->FindNearestCreatureWithOptions(10.0f, { .CreatureId = NPC_GIANT_BOAR, .OwnerGuid = owner->GetGUID() }); + if (!boar) + return; + + boar->SetTemplateRooted(false); + me->CastSpell(boar, SPELL_RIDE_VEHICLE_CAPTIAN_BOAR); + } + break; + } + case EVENT_CAPTAIN_GARRICK_RIDE_BOAR_TALK_TO_HENRY: + { + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + break; + + Conversation* conversation = Conversation::CreateConversation(CONVERSATION_CAPTAIN_GARRICK_RIDE_BOAR_QUEST_HENRY, player, *player, player->GetGUID(), nullptr, false); + if (!conversation) + break; + + conversation->AddActor(ACTOR_ALLIANCE_CAPTAIN, 0, me->GetGUID()); + conversation->AddActor(ACTOR_HENRY_GARRICK_PRISONER, 1, _henryGUID); + conversation->Start(); + + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MovePoint(POINT_HENRY_POSITION, MoveToPrisonerPosition); + _events.ScheduleEvent(EVENT_CAPTAIN_GARRICK_RIDE_BOAR_HENRY_DESPAWN, 18s); + break; + } + case EVENT_CAPTAIN_GARRICK_RIDE_BOAR_HENRY_DESPAWN: + { + me->DespawnOrUnsummon(); + if (Creature* henry = ObjectAccessor::GetCreature(*me, _henryGUID)) + henry->DespawnOrUnsummon(); + + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + break; + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + break; + } + case EVENT_CAPTAIN_GARRICK_RIDE_BOAR_EXIT_BOAR_CONVERSATION: + { + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + break; + + Conversation* conversation = Conversation::CreateConversation(CONVERSATION_CAPTAIN_GARRICK_RIDE_BOAR_QUEST_EXIT, player, *player, player->GetGUID(), nullptr, false); + if (!conversation) + break; + + conversation->AddActor(0, 0, player->GetGUID()); + conversation->AddActor(ACTOR_ALLIANCE_CAPTAIN, 1, me->GetGUID()); + conversation->Start(); + break; + } + default: + break; + } + } + + UpdateVictim(); + } +private: + EventMap _events; + ObjectGuid _henryGUID; +}; + +enum GiantBoar +{ + EVENT_GIANT_BOAR_SIZE_ONE = 1, + EVENT_GIANT_BOAR_SIZE_TWO = 2, + EVENT_GIANT_BOAR_SIZE_THREE = 3, + EVENT_GIANT_BOAR_SIZE_FOUR = 4, + EVENT_GIANT_BOAR_EJECT_PASSENGERS = 5, + EVENT_GIANT_BOAR_UNROOT = 6, + + SOUND_ENLARGE_BOAR = 157516, + SOUND_SHRINK_BOAR = 157517, + + VEHICLE_BOAR_SEAT_ONE = 1 +}; + +// 156267 - Giant Boar +struct npc_giant_boar_vehicle_q55879 : public VehicleAI +{ + npc_giant_boar_vehicle_q55879(Creature* creature) : VehicleAI(creature), _endOfScene(false) + { + me->SetOrientation(0.844224f); + } + + void JustAppeared() override + { + me->SetSpeed(MOVE_RUN, 14.0f); + } + + void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override + { + if (apply && passenger->IsPlayer()) + { + me->SetTemplateRooted(true); + passenger->SetMovedUnit(me); + passenger->CastSpell(passenger, SPELL_PING_GARRICK_TO_RIDE_BOAR); // Ping Garrick to ride Boar (DNT) + passenger->CastSpell(passenger, SPELL_UPDATE_PHASE_SHIFT); + } + else if (apply && passenger->IsCreature()) + { + passenger->ChangeSeat(VEHICLE_BOAR_SEAT_ONE); + } + } + + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override + { + if (spellInfo->Id == SPELL_ENHANCED_BOAR_PING_VEHICLE) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_01); + me->SetTemplateRooted(true); + me->CastSpell(me, SPELL_ENHANCED_BOAR_CHARGE); + _endOfScene = true; + _events.ScheduleEvent(EVENT_GIANT_BOAR_SIZE_ONE, 4s); + + if (Unit* owner = me->GetOwner()) + owner->CastSpell(owner, SPELL_UPDATE_PHASE_SHIFT); + } + } + + void UpdateAI(uint32 diff) override + { + if (!_endOfScene) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_GIANT_BOAR_SIZE_ONE: + me->PlayDirectSound(SOUND_ENLARGE_BOAR); + me->SetObjectScale(1.2f); + _events.ScheduleEvent(EVENT_GIANT_BOAR_SIZE_TWO, 1000ms); + break; + case EVENT_GIANT_BOAR_SIZE_TWO: + me->PlayDirectSound(SOUND_SHRINK_BOAR); + me->SetObjectScale(0.7f); + _events.ScheduleEvent(EVENT_GIANT_BOAR_SIZE_THREE, 1000ms); + break; + case EVENT_GIANT_BOAR_SIZE_THREE: + me->PlayDirectSound(SOUND_ENLARGE_BOAR); + me->SetObjectScale(1.2f); + _events.ScheduleEvent(EVENT_GIANT_BOAR_SIZE_FOUR, 500ms); + break; + case EVENT_GIANT_BOAR_SIZE_FOUR: + me->PlayDirectSound(SOUND_SHRINK_BOAR); + me->SetObjectScale(0.1f); + _events.ScheduleEvent(EVENT_GIANT_BOAR_EJECT_PASSENGERS, 500ms); + break; + case EVENT_GIANT_BOAR_EJECT_PASSENGERS: + me->RemoveAllAuras(); + _events.ScheduleEvent(EVENT_GIANT_BOAR_UNROOT, 500ms); + break; + case EVENT_GIANT_BOAR_UNROOT: + me->SetTemplateRooted(false); + break; + default: + break; + } + } + } +private: + EventMap _events; + bool _endOfScene; +}; + +enum TorgokData +{ + EVENT_CAST_SPIRIT_BOLT = 1, + EVENT_CAST_SOUL_GRASP = 2, + + ITEM_TORGOKS_REAGENT_POUCH = 176398, + + QUEST_TORGOKS_REAGENT_POUCH_DROPPED = 59610, + + SPELL_SPIRIT_BOLT = 319294, + SPELL_SOUL_GRASP = 319298 +}; + +// 162817 - Torgok +struct npc_torgok_q55879 : public ScriptedAI +{ + npc_torgok_q55879(Creature* creature) : ScriptedAI(creature) { } + + void Reset() override + { + _events.Reset(); + } + + void JustEngagedWith(Unit* who) override + { + Talk(SAY_AGGRO, who); + + _events.ScheduleEvent(EVENT_CAST_SPIRIT_BOLT, 4s); + _events.ScheduleEvent(EVENT_CAST_SOUL_GRASP, 14s); + } + + void JustDied(Unit* killer) override + { + Talk(SAY_DEATH, killer); + + for (auto const& [playerGuid, loot] : me->m_personalLoot) + { + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGuid)) + { + for (LootItem const& lootItem : loot->items) + { + if (lootItem.itemid == ITEM_TORGOKS_REAGENT_POUCH) + { + player->SetRewardedQuest(QUEST_TORGOKS_REAGENT_POUCH_DROPPED); + break; + } + } + } + } + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CAST_SPIRIT_BOLT: + DoCastVictim(SPELL_SPIRIT_BOLT); + _events.ScheduleEvent(EVENT_CAST_SPIRIT_BOLT, 6s); + break; + case EVENT_CAST_SOUL_GRASP: + DoCastAOE(SPELL_SOUL_GRASP); + _events.ScheduleEvent(EVENT_CAST_SOUL_GRASP, 14s); + break; + default: + break; + } + } + } +private: + EventMap _events; +}; + +enum PrisonerQuest55879 +{ + PATH_PRISONER_TO_GROUND = 80000230 +}; + +// 156799 - Henry Garrick +// 167126 - Shuja Grimaxe +struct npc_prisoner_q55879_private : public ScriptedAI +{ + npc_prisoner_q55879_private(Creature* creature) : ScriptedAI(creature) { } + + void InitializeAI() override + { + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); + } + + void JustAppeared() override + { + me->RemoveAllAuras(); + me->GetMotionMaster()->MovePath(PATH_PRISONER_TO_GROUND, false); + } +}; + +CreatureAI* PrisonerQ55879Selector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_prisoner_q55879_private(creature); + else + return new NullCreatureAI(creature); +}; + +enum TheReDeather +{ + CONVERSATION_ACCEPT_RE_DEATHER_QUEST = 14525, + CONVERSATION_RE_DEATHER_EXPLODE = 14526, + + NPC_HORDE_WARRIOR = 167146, + NPC_SHUJA_GRIMAXE_PRISONER = 167126, + + QUEST_RE_DEATHER = 59942, + + OBJECTIVE_RE_DEATHER_CADAVERS_KILLED = 397279, + + RE_DEATHER_CADAVERS_KILLED_MAX = 8, + + SPELL_REUNION_DNT_HORDE = 326678, + SPELL_RE_DEATHER_TEMP_OBJECTIVE_CHECK = 325394, + SPELL_RE_DEATHER_ROUGH_LANDING_DNT = 325401, + SPELL_RE_DEATHER_SUMMON_GRIMAXE = 325429 +}; + +// 59942 - The Re-Deather +class quest_the_re_deather : public QuestScript +{ +public: + quest_the_re_deather() : QuestScript("quest_the_re_deather") { } + + void OnQuestStatusChange(Player* player, Quest const* /*quest*/, QuestStatus /*oldStatus*/, QuestStatus newStatus) override + { + switch (newStatus) + { + case QUEST_STATUS_INCOMPLETE: + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + Conversation::CreateConversation(CONVERSATION_ACCEPT_RE_DEATHER_QUEST, player, *player, player->GetGUID(), nullptr); + break; + case QUEST_STATUS_COMPLETE: + player->CombatStop(); + player->CastSpell(player, SPELL_PING_GARRICK_TORGOK); + break; + case QUEST_STATUS_REWARDED: + player->CastSpell(player, SPELL_REUNION_DNT_HORDE); + player->CastSpell(player, SPELL_RITUAL_SCENE_OGRE_CITADEL_DNT); + player->CastSpell(player, SPELL_RITUAL_SCENE_HRUN_BEAM_DNT); + player->CastSpell(player, SPELL_RITUAL_SCENE_HARPY_BEAM_DNT); + player->CastSpell(player, SPELL_RITUAL_SCENE_MAIN_BEAM_DNT); + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + break; + case QUEST_STATUS_NONE: + { + player->CastSpell(player, SPELL_RITUAL_SCENE_OGRE_CITADEL_DNT); + player->RemoveAura(SPELL_RE_DEATHER_SUMMON_GRIMAXE); + player->RemoveAura(SPELL_RITUAL_SCENE_HRUN_BEAM_DNT); + player->RemoveAura(SPELL_RITUAL_SCENE_HARPY_BEAM_DNT); + player->RemoveAura(SPELL_RITUAL_SCENE_MAIN_BEAM_DNT); + player->RemoveAura(SPELL_RE_DEATHER_TEMP_OBJECTIVE_CHECK); + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + player->NearTeleportTo(ReDeatherAbandonTeleportPos); + break; + } + default: + break; + } + } +}; + +// 2489 +class scene_darkmaul_plains_skeleton_army_horde : public SceneScript +{ +public: + scene_darkmaul_plains_skeleton_army_horde() : SceneScript("scene_darkmaul_plains_skeleton_army_horde") { } + + void OnSceneTriggerEvent(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& triggerName) override + { + if (triggerName == "Big Kill Credit") + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_KILL_CREDIT, true); + + if (player->GetQuestObjectiveData(QUEST_RE_DEATHER, OBJECTIVE_RE_DEATHER_CADAVERS_KILLED) == RE_DEATHER_CADAVERS_KILLED_MAX) + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_PING_VEHICLE); // Ping Vehicle + player->CastSpell(player, SPELL_RE_DEATHER_TEMP_OBJECTIVE_CHECK); // Temp Objective Check + Conversation::CreateConversation(CONVERSATION_RE_DEATHER_EXPLODE, player, *player, player->GetGUID(), nullptr); + } + } + else if (triggerName == "Conversation") + { + player->CastSpell(player, SPELL_ENHANCED_BOAR_CHARGE_CONVO, true); // Does nothing but it's blizzlike + } + else if (triggerName == "Teleport") + { + player->CastSpell(player, SPELL_RE_DEATHER_ROUGH_LANDING_DNT); + } + } + + void OnSceneComplete(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) override + { + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + } +}; + +enum GrimaxeReDeather +{ + ACTOR_SHUJA_GRIMAXE_PRISONER = 76004, + ACTOR_WARLORD_GRIMAXE_Q59942 = 76357, + ACTOR_SHUJA_GRIMAXE_FREED = 78501, + + CONVERSATION_WARLORD_GRIMAXE_SPAWN_Q59942 = 14527, + CONVERSATION_WARLORD_GRIMAXE_QUEST_COMPLETE_Q59942 = 15618 +}; + +// 167146 - Warlord Grimaxe +struct npc_warlord_grimaxe_q59942 : public ScriptedAI +{ + npc_warlord_grimaxe_q59942(Creature* creature) : ScriptedAI(creature) + { + me->SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); + } + + void JustAppeared() override + { + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + return; + + Creature* shuja = FindCreatureIgnorePhase(me, "shuja_grimaxe_ogre_ruins_prisoner"); + if (!shuja) + return; + + Conversation* conversation = Conversation::CreateConversation(CONVERSATION_WARLORD_GRIMAXE_SPAWN_Q59942, player, *player, player->GetGUID(), nullptr, false); + if (!conversation) + return; + + conversation->AddActor(ACTOR_SHUJA_GRIMAXE_PRISONER, 0, shuja->GetGUID()); + conversation->AddActor(ACTOR_WARLORD_GRIMAXE_Q59942, 1, me->GetGUID()); + conversation->Start(); + + me->GetMotionMaster()->MoveFollow(player, 0.0f, float(M_PI / 4.0f)); + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override + { + if (me->GetHealth() <= damage) + damage = me->GetHealth() - 1; + } + + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override + { + switch (spellInfo->Id) + { + case SPELL_PING_GARRICK_TORGOK: + { + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + break; + + Creature* shuja = FindCreatureIgnorePhase(me, "shuja_grimaxe_ogre_ruins_prisoner"); + if (!shuja) + break; + + Creature* shujaPersonal = shuja->SummonPersonalClone(shuja->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player); + if (!shujaPersonal) + break; + + me->SetReactState(REACT_AGGRESSIVE); + _shujaGUID = shujaPersonal->GetGUID(); + _events.ScheduleEvent(EVENT_CAPTAIN_GARRICK_RIDE_BOAR_TALK_TO_HENRY, 1s); + break; + } + default: + break; + } + } + + void OnDespawn() override + { + if (Creature* shuja = ObjectAccessor::GetCreature(*me, _shujaGUID)) + shuja->DespawnOrUnsummon(); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CAPTAIN_GARRICK_RIDE_BOAR_TALK_TO_HENRY: + { + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + break; + + Conversation* conversation = Conversation::CreateConversation(CONVERSATION_WARLORD_GRIMAXE_QUEST_COMPLETE_Q59942, player, *player, player->GetGUID(), nullptr, false); + if (!conversation) + break; + + conversation->AddActor(ACTOR_WARLORD_GRIMAXE_Q59942, 0, me->GetGUID()); + conversation->AddActor(ACTOR_SHUJA_GRIMAXE_FREED, 1, _shujaGUID); + conversation->Start(); + + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MovePoint(POINT_HENRY_POSITION, MoveToPrisonerPosition); + _events.ScheduleEvent(EVENT_CAPTAIN_GARRICK_RIDE_BOAR_HENRY_DESPAWN, 22s); + break; + } + case EVENT_CAPTAIN_GARRICK_RIDE_BOAR_HENRY_DESPAWN: + { + me->DespawnOrUnsummon(); + if (Creature* shuja = ObjectAccessor::GetCreature(*me, _shujaGUID)) + shuja->DespawnOrUnsummon(); + + Player* player = Object::ToPlayer(me->GetOwner()); + if (!player) + break; + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + break; + } + default: + break; + } + } + + UpdateVictim(); + } +private: + EventMap _events; + ObjectGuid _shujaGUID; +}; + +// *************************************************************** +// * Scripting in this section occurs between Ogre Ruins and Pit * +// *************************************************************** + +enum WestwardBound +{ + NPC_BJORN_STOUTHANDS_PIT_ONE = 156891, + NPC_ALARIA_PIT_ONE = 156803, + NPC_LANAJORDAN_PIT_ONE = 167225, + NPC_WONSA_PIT_ONE = 167226 +}; + +static constexpr Position BjornWestwardBoundRuinsPos = { 192.181f, -2311.44f, 80.6975f, 3.368485450744628906f }; +static constexpr Position AlariaWestwardBoundRuinsPos = { 190.953f, -2308.32f, 80.6586f, 2.984513044357299804f }; +static constexpr Position LanaWestwardBoundRuinsPos = { 160.486f, -2307.31f, 84.053f, 2.932153224945068359f }; +static constexpr Position WonsaWestwardBoundRuinsPos = { 160.431f, -2310.11f, 84.4598f, 3.03687286376953125f }; + +// 55965 - Quest Westward Bound "Alliance" +// 59948 - Quest Westward Bound "Horde" +class quest_westward_bound : public QuestScript +{ +public: + quest_westward_bound(char const* script) : QuestScript(script) { } + + void HandleQuestStatusChange(Player* player, QuestStatus newStatus, std::string_view creatureStringOne, std::string_view creatureStringTwo, uint32 questEnderEntry, uint32 questEnderCompanionEntry, Position questGiverPos, Position companionPos) + { + switch (newStatus) + { + case QUEST_STATUS_INCOMPLETE: + { + Creature* questEnder = FindCreatureIgnorePhase(player, creatureStringOne, 125.0f); + if (!questEnder) + return; + + Creature* questEnderCompanion = FindCreatureIgnorePhase(player, creatureStringTwo, 125.0f); + if (!questEnderCompanion) + return; + + questEnder->SummonPersonalClone(questGiverPos, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player); + questEnderCompanion->SummonPersonalClone(companionPos, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player); + + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + break; + } + case QUEST_STATUS_NONE: + { + player->CastSpell(player, SPELL_UPDATE_PHASE_SHIFT); + + if (Creature* questGiver = player->FindNearestCreatureWithOptions(100.0f, { .CreatureId = questEnderEntry, .IgnorePhases = true, .PrivateObjectOwnerGuid = player->GetGUID() })) + questGiver->DespawnOrUnsummon(); + + if (Creature* companion = player->FindNearestCreatureWithOptions(100.0f, { .CreatureId = questEnderCompanionEntry, .IgnorePhases = true, .PrivateObjectOwnerGuid = player->GetGUID() })) + companion->DespawnOrUnsummon(); + + break; + } + default: + break; + } + } +}; + +// 55965 - Quest Westward Bound "Alliance" +class quest_westward_bound_alliance : public quest_westward_bound +{ +public: + quest_westward_bound_alliance() : quest_westward_bound("quest_westward_bound_alliance") { } + + void OnQuestStatusChange(Player* player, Quest const* /*quest*/, QuestStatus /*oldStatus*/, QuestStatus newStatus) override + { + HandleQuestStatusChange(player, newStatus, "bjorn_stouthands_pit_pre_quest", "alaria_pit_pre_quest", NPC_BJORN_STOUTHANDS_PIT_ONE, NPC_ALARIA_PIT_ONE, BjornWestwardBoundRuinsPos, AlariaWestwardBoundRuinsPos); + } +}; + +// 59948 - Quest Westward Bound "Horde" +class quest_westward_bound_horde : public quest_westward_bound +{ +public: + quest_westward_bound_horde() : quest_westward_bound("quest_westward_bound_horde") { } + + void OnQuestStatusChange(Player* player, Quest const* /*quest*/, QuestStatus /*oldStatus*/, QuestStatus newStatus) override + { + HandleQuestStatusChange(player, newStatus, "lana_joran_pit_pre_quest", "wonsa_pit_pre_quest", NPC_LANAJORDAN_PIT_ONE, NPC_WONSA_PIT_ONE, LanaWestwardBoundRuinsPos, WonsaWestwardBoundRuinsPos); + } +}; + +enum BjornRunToPit +{ + EVENT_BJORN_RUN_TO_PIT = 1, + + PATH_BJORN_RUN_TO_PIT = 10518900, + + SAY_BJORN_RUN_TO_PIT = 0, + SAY_BJORN_REACHED_PIT = 1 +}; + +// 156891 - Bjorn Stouthands +struct npc_bjorn_stouthands_q55965_private : public ScriptedAI +{ + npc_bjorn_stouthands_q55965_private(Creature* creature) : ScriptedAI(creature) { } + + void InitializeAI() override + { + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); + } + + void JustAppeared() override + { + _events.ScheduleEvent(EVENT_BJORN_RUN_TO_PIT, 1s); + } + + void WaypointPathEnded(uint32 /*nodeId*/, uint32 /*pathId*/) override + { + Talk(SAY_BJORN_REACHED_PIT); + me->DespawnOrUnsummon(4s); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_BJORN_RUN_TO_PIT: + Talk(SAY_BJORN_RUN_TO_PIT); + me->GetMotionMaster()->MovePath(PATH_BJORN_RUN_TO_PIT, false); + break; + default: + break; + } + } + } +private: + EventMap _events; +}; + +CreatureAI* BjornRuinsSelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_bjorn_stouthands_q55965_private(creature); + else + return new NullCreatureAI(creature); +}; + +enum LanaRunToPit +{ + EVENT_LANA_SAY_AT_RUINS = 1, + EVENT_LANA_RUN_TO_PIT = 2, + + PATH_LANA_RUN_TO_PIT = 80000570, + + SAY_LANA_RUN_TO_PIT = 0, + SAY_LANA_REACHED_PIT = 1 +}; + +// 167225 - Lana Jordan +struct npc_lana_jordan_q59948_private : public ScriptedAI +{ + npc_lana_jordan_q59948_private(Creature* creature) : ScriptedAI(creature) { } + + void InitializeAI() override + { + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); + } + + void JustAppeared() override + { + _events.ScheduleEvent(EVENT_LANA_SAY_AT_RUINS, 1s); + } + + void WaypointPathEnded(uint32 /*nodeId*/, uint32 /*pathId*/) override + { + Talk(SAY_LANA_REACHED_PIT); + me->DespawnOrUnsummon(7s); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_LANA_SAY_AT_RUINS: + Talk(SAY_BJORN_RUN_TO_PIT); + _events.ScheduleEvent(EVENT_LANA_RUN_TO_PIT, 5s); + break; + case EVENT_LANA_RUN_TO_PIT: + me->GetMotionMaster()->MovePath(PATH_LANA_RUN_TO_PIT, false); + break; + default: + break; + } + } + } +private: + EventMap _events; +}; + +CreatureAI* LanaRuinsSelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_lana_jordan_q59948_private(creature); + else + return new NullCreatureAI(creature); +}; + +enum CompanionRunToPit +{ + EVENT_COMPANION_RUN_TO_PIT = 1, + + PATH_ALARIA_RUN_TO_PIT = 10518890, + PATH_WONSA_RUN_TO_PIT = 80000580 +}; + +// 156891 - Alaria +// 167226 - Won'sa +template<uint32 PitPathId> +struct npc_companion_q55965_q59948_private : public ScriptedAI +{ + npc_companion_q55965_q59948_private(Creature* creature) : ScriptedAI(creature) { } + + void JustAppeared() override + { + _events.ScheduleEvent(EVENT_COMPANION_RUN_TO_PIT, 1s); + } + + void WaypointPathEnded(uint32 /*nodeId*/, uint32 /*pathId*/) override + { + me->DespawnOrUnsummon(1s); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_COMPANION_RUN_TO_PIT: + me->GetMotionMaster()->MovePath(PitPathId, false); + break; + default: + break; + } + } + } +private: + EventMap _events; +}; + +CreatureAI* AlariaRuinsSelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_companion_q55965_q59948_private<PATH_ALARIA_RUN_TO_PIT>(creature); + else + return new NullCreatureAI(creature); +}; + +CreatureAI* WansaRuinsSelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_companion_q55965_q59948_private<PATH_WONSA_RUN_TO_PIT>(creature); + else + return new NullCreatureAI(creature); +}; + void AddSC_zone_exiles_reach() { // Ship @@ -6028,4 +7164,26 @@ void AddSC_zone_exiles_reach() RegisterSpellScript(spell_resizer_hit_three_q56034); RegisterSpellScript(spell_re_sizing_q59941); RegisterSpellScript(spell_re_sizing_aura_q59941); + RegisterSpellScript(spell_re_sizer_slaughter); + // Ride Boar + new quest_ride_of_the_scientifically_enhanced_boar(); + new scene_darkmaul_plains_skeleton_army_alliance(); + RegisterSpellScript(spell_summon_darkmaul_plains_questgivers_q55879); + RegisterSpellScript(spell_riding_giant_boar_q55879); + RegisterSpellScript(spell_knockback_hint_q56034); + RegisterCreatureAI(npc_captain_garrick_q55879); + RegisterCreatureAI(npc_giant_boar_vehicle_q55879); + RegisterCreatureAI(npc_torgok_q55879); + new FactoryCreatureScript<CreatureAI, &PrisonerQ55879Selector>("npc_prisoner_q55879"); + // The Re-Deather + new quest_the_re_deather(); + new scene_darkmaul_plains_skeleton_army_horde(); + RegisterCreatureAI(npc_warlord_grimaxe_q59942); + // Westward Bound + new quest_westward_bound_alliance(); + new quest_westward_bound_horde(); + new FactoryCreatureScript<CreatureAI, &BjornRuinsSelector>("npc_bjorn_stouthands_q55965"); + new FactoryCreatureScript<CreatureAI, &LanaRuinsSelector>("npc_lana_jordan_q59948"); + new FactoryCreatureScript<CreatureAI, &AlariaRuinsSelector>("npc_alaria_q55965"); + new FactoryCreatureScript<CreatureAI, &WansaRuinsSelector>("npc_wonsa_q59948"); }; |