Scripts/Karazhan: Rewrite Opera (#31881)
Credit for some things goes to CMaNGOS Closes #28951 Closes #28954 (cherry picked from commit e0fa5c79f0e427da01e1cfdd622736f0588d2159)
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
-- Spawn groups, creatures
|
||||
SET @CGUID := 147498; -- 13
|
||||
SET @OGUID := 94138; -- 13
|
||||
SET @SPAWN_GROUP_ID := 385; -- 14
|
||||
|
||||
DELETE FROM `creature_template_difficulty` WHERE `Entry` IN (18412,19525,17547,17543,17546,17535,18168) AND `DifficultyID` = 0;
|
||||
UPDATE `creature_template_difficulty` SET `DifficultyID` = 0, `ContentTuningID` = 0 WHERE `Entry` IN (18412,19525,17547,17543,17546,17535,18168) AND `DifficultyID` = 1;
|
||||
UPDATE `creature_template_difficulty` SET `LevelScalingDeltaMin` = 3, `LevelScalingDeltaMax` = 3 WHERE `Entry` IN (17534,17521,17533) AND `DifficultyID` = 0;
|
||||
|
||||
DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+12;
|
||||
INSERT INTO `creature` (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnDifficulties`,`phaseId`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`wander_distance`,`currentwaypoint`,`MovementType`,`ScriptName`,`StringId`,`VerifiedBuild`) VALUES
|
||||
(@CGUID+0,18412,532,0,0,'3',0,0,0,-10908.856,-1773.627,90.55865,5.833214759826660156,604800,0,0,2,'',NULL,0),
|
||||
(@CGUID+1,18412,532,0,0,'3',0,0,0,-10910.791,-1771.2006,90.56122,0.364255577325820922,604800,0,0,0,'',NULL,0),
|
||||
(@CGUID+2,18412,532,0,0,'3',0,0,0,-10907.685,-1778.6509,90.56018,2.441269636154174804,604800,0,0,0,'',NULL,0),
|
||||
(@CGUID+3,19525,532,0,0,'3',0,0,0,-10895.269,-1782.6263,90.559845,3.769911,604800,0,0,0,'',NULL,15595),
|
||||
(@CGUID+4,17603,532,0,0,'3',0,0,0,-10893.254,-1756.5731,90.559845,4.485496,604800,0,0,0,'',NULL,15595),
|
||||
(@CGUID+5,17547,532,0,0,'3',0,0,1,-10883.841,-1758.8567,90.559845,4.537856101989746093,604800,0,0,0,'',NULL,24742),
|
||||
(@CGUID+6,17543,532,0,0,'3',0,0,0,-10902.105,-1756.45,90.559845,4.660028934478759765,604800,0,0,0,'',NULL,24742),
|
||||
(@CGUID+7,17546,532,0,0,'3',0,0,0,-10889.533,-1758.1,90.559845,4.572762489318847656,604800,0,0,0,'',NULL,24742),
|
||||
(@CGUID+8,17535,532,0,0,'3',0,0,0,-10896.65,-1757.6233,90.559845,4.86946868896484375,604800,0,0,0,'',NULL,24742),
|
||||
(@CGUID+9,17534,532,0,0,'3',0,0,1,-10893.56,-1760.437,90.559845,4.5553093,604800,0,0,0,'',NULL,15595),
|
||||
(@CGUID+10,17521,532,0,0,'3',0,0,0,-10893.109,-1756.247,90.55985,4.485496,604800,0,0,0,'',NULL,15595),
|
||||
(@CGUID+11,18168,532,0,0,'3',0,0,1,-10893.107,-1757.8502,90.559845,4.607669353485107421,604800,0,0,0,'',NULL,24742),
|
||||
(@CGUID+12,17533,532,0,0,'3',0,0,1,-10893.619,-1760.782,90.55985,4.764749,604800,0,0,0,'',NULL,15595);
|
||||
|
||||
DELETE FROM `spawn_group_template` WHERE `groupId` BETWEEN @SPAWN_GROUP_ID+0 AND @SPAWN_GROUP_ID+10;
|
||||
INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES
|
||||
(@SPAWN_GROUP_ID+0,"Karazhan - Cyclone (The Crone)",4), -- 385
|
||||
(@SPAWN_GROUP_ID+1,"Karazhan - Stage Spotlight",4), -- 386
|
||||
(@SPAWN_GROUP_ID+2,"Karazhan - Grandmother",4), -- 387
|
||||
(@SPAWN_GROUP_ID+3,"Karazhan - Tinhead",4), -- 388
|
||||
(@SPAWN_GROUP_ID+4,"Karazhan - Strawman",4), -- 389
|
||||
(@SPAWN_GROUP_ID+5,"Karazhan - Roar",4), -- 390
|
||||
(@SPAWN_GROUP_ID+6,"Karazhan - Dorothee",4), -- 391
|
||||
(@SPAWN_GROUP_ID+7,"Karazhan - Julianne",4), -- 392
|
||||
(@SPAWN_GROUP_ID+8,"Karazhan - The Big Bad Wolf",4), -- 393
|
||||
(@SPAWN_GROUP_ID+9,"Karazhan - The Crone",4), -- 394
|
||||
(@SPAWN_GROUP_ID+10,"Karazhan - Romulo",4); -- 395
|
||||
|
||||
DELETE FROM `spawn_group` WHERE `spawnId` BETWEEN @CGUID+0 AND @CGUID+12 AND `spawnType` = 0;
|
||||
INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES
|
||||
(@SPAWN_GROUP_ID+0,0,@CGUID+0),
|
||||
(@SPAWN_GROUP_ID+0,0,@CGUID+1),
|
||||
(@SPAWN_GROUP_ID+0,0,@CGUID+2),
|
||||
(@SPAWN_GROUP_ID+1,0,@CGUID+3),
|
||||
(@SPAWN_GROUP_ID+2,0,@CGUID+4),
|
||||
(@SPAWN_GROUP_ID+3,0,@CGUID+5),
|
||||
(@SPAWN_GROUP_ID+4,0,@CGUID+6),
|
||||
(@SPAWN_GROUP_ID+5,0,@CGUID+7),
|
||||
(@SPAWN_GROUP_ID+6,0,@CGUID+8),
|
||||
(@SPAWN_GROUP_ID+7,0,@CGUID+9),
|
||||
(@SPAWN_GROUP_ID+8,0,@CGUID+10),
|
||||
(@SPAWN_GROUP_ID+9,0,@CGUID+11),
|
||||
(@SPAWN_GROUP_ID+10,0,@CGUID+12);
|
||||
|
||||
DELETE FROM `creature_formations` WHERE `leaderGUID` = @CGUID+0;
|
||||
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
|
||||
(@CGUID+0,@CGUID+0,0,0,515,0,0),
|
||||
(@CGUID+0,@CGUID+1,5,45,515,0,0),
|
||||
(@CGUID+0,@CGUID+2,5,315,515,0,0);
|
||||
|
||||
DELETE FROM `waypoint_path` WHERE `PathId` = (@CGUID+0)*10;
|
||||
INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Velocity`,`Comment`) VALUES
|
||||
((@CGUID+0)*10,0,0,NULL,'Migrated from refactor');
|
||||
|
||||
DELETE FROM `waypoint_path_node` WHERE `PathId` = (@CGUID+0)*10;
|
||||
INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES
|
||||
((@CGUID+0)*10,1,-10909.05,-1773.533,90.56085,NULL,0),
|
||||
((@CGUID+0)*10,2,-10901.14,-1777.352,90.47656,NULL,0),
|
||||
((@CGUID+0)*10,3,-10887.89,-1770.273,90.47697,NULL,0),
|
||||
((@CGUID+0)*10,4,-10873.88,-1756.602,90.47607,NULL,0),
|
||||
((@CGUID+0)*10,5,-10876.84,-1748.874,90.47689,NULL,0),
|
||||
((@CGUID+0)*10,6,-10881.68,-1747.438,90.47687,NULL,0),
|
||||
((@CGUID+0)*10,7,-10887.89,-1756.330,90.47715,NULL,0),
|
||||
((@CGUID+0)*10,8,-10899.38,-1765.153,90.47734,NULL,0),
|
||||
((@CGUID+0)*10,9,-10906.13,-1767.051,90.47772,NULL,0),
|
||||
((@CGUID+0)*10,10,-10910.60,-1758.063,90.47652,NULL,0),
|
||||
((@CGUID+0)*10,11,-10907.22,-1752.803,90.47632,NULL,0),
|
||||
((@CGUID+0)*10,12,-10899.46,-1745.427,90.47615,NULL,0),
|
||||
((@CGUID+0)*10,13,-10892.15,-1750.823,90.47671,NULL,0),
|
||||
((@CGUID+0)*10,14,-10881.37,-1764.995,90.47661,NULL,0),
|
||||
((@CGUID+0)*10,15,-10878.02,-1777.599,90.47767,NULL,0),
|
||||
((@CGUID+0)*10,16,-10884.86,-1779.286,90.47733,NULL,0),
|
||||
((@CGUID+0)*10,17,-10891.14,-1774.733,90.47724,NULL,0),
|
||||
((@CGUID+0)*10,18,-10896.53,-1767.449,90.47691,NULL,0),
|
||||
((@CGUID+0)*10,19,-10906.74,-1764.455,90.47702,NULL,0),
|
||||
((@CGUID+0)*10,20,-10911.01,-1767.946,90.47708,NULL,0);
|
||||
|
||||
DELETE FROM `creature_addon` WHERE `guid` = @CGUID+0;
|
||||
INSERT INTO `creature_addon` (`guid`, `PathId`, `mount`, `MountCreatureID`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvPFlags`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||
(@CGUID+0,(@CGUID+0)*10,0,0,0,0,0,1,0,0,0,'');
|
||||
|
||||
-- Spawn groups, objects
|
||||
DELETE FROM `gameobject_addon` WHERE `guid` IN (SELECT `guid` FROM `gameobject` WHERE `id` IN (183442,183496));
|
||||
DELETE FROM `gameobject` WHERE `id` IN (183442,183496);
|
||||
DELETE FROM `spawn_group` WHERE `spawnId` IN (24346,24381,24382,24383,24384) AND `spawnType` = 1;
|
||||
|
||||
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+12;
|
||||
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
|
||||
(@OGUID+0,183493,532,0,0,'3',0,-10881.7421875,-1754.593505859375,90.4765167236328125,4.625123500823974609,0,0,-0.73727703094482421,0.67559051513671875,300,255,1,15595),
|
||||
(@OGUID+1,183491,532,0,0,'3',0,-10890.96484375,-1744.3236083984375,90.4765167236328125,4.607671737670898437,0,0,-0.74314403533935546,0.669131457805633544,300,255,1,15595),
|
||||
(@OGUID+2,183492,532,0,0,'3',0,-10909.7646484375,-1763.95166015625,90.47745513916015625,4.642575740814208984,0,0,-0.731353759765625,0.681998312473297119,300,255,1,15595),
|
||||
(@OGUID+3,183492,532,0,0,'3',0,-10903.2548828125,-1754.0880126953125,90.47650909423828125,4.555310726165771484,0,0,-0.76040554046630859,0.649448513984680175,300,255,1,15595),
|
||||
(@OGUID+4,183492,532,0,0,'3',0,-10875.8642578125,-1761.30419921875,90.4771270751953125,4.59021615982055664,0,0,-0.74895572662353515,0.662620067596435546,300,255,1,15595),
|
||||
|
||||
(@OGUID+5,183442,532,0,0,'3',0,-10890.8798828125,-1744.0618896484375,90.47650909423828125,4.607671737670898437,0,0,-0.74314403533935546,0.669131457805633544,300,255,1,24742),
|
||||
(@OGUID+6,183496,532,0,0,'3',0,-10877.748046875,-1763.176025390625,90.47711181640625,4.59021615982055664,0,0,-0.74895572662353515,0.662620067596435546,300,255,1,24742),
|
||||
(@OGUID+7,183496,532,0,0,'3',0,-10909.4912109375,-1761.785888671875,90.47733306884765625,4.625123500823974609,0,0,-0.73727703094482421,0.67559051513671875,300,255,1,24742),
|
||||
(@OGUID+8,183496,532,0,0,'3',0,-10906.748046875,-1750.009033203125,90.4765472412109375,4.59021615982055664,0,0,-0.74895572662353515,0.662620067596435546,300,255,1,24742),
|
||||
(@OGUID+9,183496,532,0,0,'3',0,-10882.9970703125,-1751.80810546875,90.47650909423828125,4.555310726165771484,0,0,-0.76040554046630859,0.649448513984680175,300,255,1,24742),
|
||||
|
||||
(@OGUID+10,183443,532,0,0,'3',0,-10891.0654296875,-1744.8685302734375,90.4765167236328125,4.607671737670898437,0,0,-0.74314403533935546,0.669131457805633544,300,255,1,15595),
|
||||
(@OGUID+11,183494,532,0,0,'3',0,-10900.513671875,-1748.7257080078125,110.1709518432617187,4.625123500823974609,0,0,-0.73727703094482421,0.67559051513671875,300,255,1,15595),
|
||||
(@OGUID+12,183495,532,0,0,'3',0,-10890.1640625,-1750.0433349609375,90.47650909423828125,4.625123500823974609,0,0,-0.73727703094482421,0.67559051513671875,300,255,1,15595);
|
||||
|
||||
DELETE FROM `spawn_group_template` WHERE `groupId` BETWEEN @SPAWN_GROUP_ID+11 AND @SPAWN_GROUP_ID+13;
|
||||
INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES
|
||||
(@SPAWN_GROUP_ID+11,"Karazhan - Red Riding Hood Decorations",4), -- 396
|
||||
(@SPAWN_GROUP_ID+12,"Karazhan - Wizard of Oz Decorations",4), -- 397
|
||||
(@SPAWN_GROUP_ID+13,"Karazhan - Romeo and Juliet Decorations",4); -- 398
|
||||
|
||||
DELETE FROM `spawn_group` WHERE `spawnId` BETWEEN @OGUID+0 AND @OGUID+12 AND `spawnType` = 1;
|
||||
INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES
|
||||
(@SPAWN_GROUP_ID+11,1,@OGUID+0),
|
||||
(@SPAWN_GROUP_ID+11,1,@OGUID+1),
|
||||
(@SPAWN_GROUP_ID+11,1,@OGUID+2),
|
||||
(@SPAWN_GROUP_ID+11,1,@OGUID+3),
|
||||
(@SPAWN_GROUP_ID+11,1,@OGUID+4),
|
||||
(@SPAWN_GROUP_ID+12,1,@OGUID+5),
|
||||
(@SPAWN_GROUP_ID+12,1,@OGUID+6),
|
||||
(@SPAWN_GROUP_ID+12,1,@OGUID+7),
|
||||
(@SPAWN_GROUP_ID+12,1,@OGUID+8),
|
||||
(@SPAWN_GROUP_ID+12,1,@OGUID+9),
|
||||
(@SPAWN_GROUP_ID+13,1,@OGUID+10),
|
||||
(@SPAWN_GROUP_ID+13,1,@OGUID+11),
|
||||
(@SPAWN_GROUP_ID+13,1,@OGUID+12);
|
||||
|
||||
-- Barnes
|
||||
UPDATE `gameobject_template_addon` SET `flags` = 34 WHERE `entry` = 184275;
|
||||
|
||||
DELETE FROM `gossip_menu` WHERE `MenuID` = 7421 AND `TextID` IN (8969,8975,8981,8982);
|
||||
INSERT INTO `gossip_menu` (`MenuID`, `TextID`, `VerifiedBuild`) VALUES
|
||||
(7421,8969,15595),
|
||||
(7421,8975,0),
|
||||
(7421,8981,24742),
|
||||
(7421,8982,0);
|
||||
|
||||
DELETE FROM `npc_text` WHERE `ID` = 8982;
|
||||
INSERT INTO `npc_text` (`ID`, `Probability0`, `BroadcastTextID0`) VALUES
|
||||
(8982,1,14119);
|
||||
|
||||
DELETE FROM `gossip_menu_option` WHERE `MenuID` = 7421 AND `OptionID` IN (1,2,3);
|
||||
INSERT INTO `gossip_menu_option` (`MenuID`, `GossipOptionID`, `OptionID`, `OptionNpc`, `OptionText`, `OptionBroadcastTextID`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES
|
||||
(7421,-1899777,1,0,"The wolf's going down.",14074,0,0,0,0,'',0,0),
|
||||
(7421,-1899778,2,0,"I'll nail it!",14120,0,0,0,0,'',0,24742),
|
||||
(7421,-1899779,3,0,"I've never been more ready.",14121,0,0,0,0,'',0,0);
|
||||
|
||||
DELETE FROM `creature_text` WHERE `CreatureID` = 16812;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(16812,0,0,"Splendid. I'm going to get the audience ready. Break a leg!",12,0,100,0,0,0,14056,0,"Barnes SAY_BEGIN"),
|
||||
|
||||
(16812,1,0,"Good evening ladies and gentlemen, welcome to this evening's presentation!",14,0,100,0,0,9175,14057,0,"Barnes SAY_HOOD_1"),
|
||||
(16812,2,0,"Tonight, things are not what they seem... for tonight your eyes may not be trusted!",14,0,100,0,0,9335,15359,0,"Barnes SAY_HOOD_2"),
|
||||
(16812,3,0,"Take for instance this quiet elderly woman waiting for a visit from her granddaughter... surely there is nothing to fear from this sweet, gray-haired old lady!",14,0,100,0,0,9336,15360,0,"Barnes SAY_HOOD_3"),
|
||||
(16812,4,0,"But don't let me pull the wool over your eyes! See for yourself what lies beneath those covers! And now... on with the show!",14,0,100,0,0,9337,15361,0,"Barnes SAY_HOOD_4"),
|
||||
|
||||
(16812,5,0,"Welcome ladies and gentlemen, to this evening's presentation!",14,0,100,0,0,9174,14118,0,"Barnes SAY_OZ_1"),
|
||||
(16812,6,0,"Tonight we plumb the depths of the human soul as we join a lost, lonely girl trying desperately--with the help of her loyal companions--to find her way home!",14,0,100,0,0,9338,15362,0,"Barnes SAY_OZ_2"),
|
||||
(16812,7,0,"But she is pursued... by a wicked, malevolent crone!",14,0,100,0,0,9339,15363,0,"Barnes SAY_OZ_3"),
|
||||
(16812,8,0,"Will she survive? Will she prevail? Only time will tell. And now... on with the show!",14,0,100,0,0,9340,15364,0,"Barnes SAY_OZ_4"),
|
||||
|
||||
(16812,9,0,"Welcome ladies and gentlemen, to this evening's presentation!",14,0,100,0,0,9176,14122,0,"Barnes SAY_RAJ_1"),
|
||||
(16812,10,0,"Tonight... we explore a tale of forbidden love!",14,0,100,0,0,9341,15365,0,"Barnes SAY_RAJ_2"),
|
||||
(16812,11,0,"But beware, for not all love stories end happily, as you may find out. Sometimes, love pricks like a thorn!",14,0,100,0,0,9342,15366,0,"Barnes SAY_RAJ_3"),
|
||||
(16812,12,0,"But don't take it from me; see for yourself what tragedy lies ahead when the paths of star crossed lovers meet! And now... on with the show!",14,0,100,0,0,9343,15367,0,"Barnes SAY_RAJ_4");
|
||||
|
||||
DELETE FROM `waypoint_path` WHERE `PathId` IN (134498,1358230,1358231);
|
||||
INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Velocity`,`Comment`) VALUES
|
||||
(1358230,0,0,NULL,'Migrated from refactor'),
|
||||
(1358231,0,0,NULL,'Migrated from refactor');
|
||||
|
||||
DELETE FROM `waypoint_path_node` WHERE `PathId` IN (134498,1358230,1358231);
|
||||
INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES
|
||||
(1358230,1,-10870.946,-1779.4125,90.48595,NULL,0),
|
||||
(1358230,2,-10875.546,-1778.7738,90.47669,NULL,0),
|
||||
(1358230,3,-10880.226,-1780.0681,90.477554,NULL,0),
|
||||
(1358230,4,-10884.346,-1780.9225,90.47741,NULL,0),
|
||||
(1358230,5,-10889.578,-1781.6733,90.476456,NULL,0),
|
||||
(1358230,6,-10895.18,-1782.4739,90.47647,NULL,0),
|
||||
|
||||
(1358231,1,-10884.146,-1780.5691,90.47643,NULL,0),
|
||||
(1358231,2,-10874.754,-1778.8278,90.47655,NULL,0),
|
||||
(1358231,3,-10869.007,-1779.2379,90.47054,NULL,0),
|
||||
(1358231,4,-10866.676,-1780.9473,90.461075,NULL,0);
|
||||
|
||||
DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 16812);
|
||||
UPDATE `creature_template_addon` SET `auras` = '28002' WHERE `entry` = 16812;
|
||||
|
||||
-- Hood
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429, `unit_flags` = 33536 WHERE `entry` = 17603;
|
||||
UPDATE `creature_template` SET `speed_walk` = 2, `speed_run` = 1.21428571429, `BaseAttackTime` = 1200, `ScriptName` = 'boss_big_bad_wolf' WHERE `entry` = 17521;
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
|
||||
'spell_opera_pick_red_riding_hood',
|
||||
'spell_opera_little_red_riding_hood',
|
||||
'spell_opera_picnic_basket_smell');
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(30769, 'spell_opera_pick_red_riding_hood'),
|
||||
(30768, 'spell_opera_little_red_riding_hood'),
|
||||
(30755, 'spell_opera_picnic_basket_smell');
|
||||
|
||||
-- Oz
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 17547;
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 17543;
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 17546;
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 17535;
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 17548;
|
||||
UPDATE `creature_template` SET `speed_walk` = 0.8, `speed_run` = 0.857143 WHERE `entry` = 18412;
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 18168;
|
||||
|
||||
UPDATE `creature_template_addon` SET `auras` = '31073' WHERE `entry` = 17543;
|
||||
UPDATE `creature_template_addon` SET `auras` = '32339' WHERE `entry` = 18168;
|
||||
|
||||
DELETE FROM `spell_proc` WHERE `SpellId` = 31073;
|
||||
INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `DisableEffectsMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES
|
||||
(31073,4,0,0,0,0,0,0,0,0,2,0,0,0,0,0);
|
||||
|
||||
-- Romeo and Juliet
|
||||
DELETE FROM `creature_text` WHERE `CreatureID` IN (17534,17533);
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(17534,0,0,"What devil art thou, that dost torment me thus?",14,0,100,0,0,9196,15070,0,"Julianne SAY_JULIANNE_AGGRO"),
|
||||
(17534,1,0,"Romulo, I come! Oh... this do I drink to thee!",14,0,100,0,0,9198,15072,0,"Julianne SAY_JULIANNE_DEATH_1"),
|
||||
(17534,2,0,"O happy dagger! This is thy sheath; there rust, and let me die!",14,0,100,0,0,9310,15074,0,"Julianne SAY_JULIANNE_DEATH_2"),
|
||||
(17534,3,0,"Come, gentle night; and give me back my Romulo!",14,0,100,0,0,9200,15073,0,"Julianne SAY_JULIANNE_RESURRECT"),
|
||||
(17534,4,0,"Parting is such sweet sorrow.",14,0,100,0,0,9201,15071,0,"Julianne SAY_JULIANNE_SLAY"),
|
||||
|
||||
(17533,0,0,"Wilt thou provoke me? Then have at thee, boy!",14,0,100,0,0,9233,15075,0,"Romulo SAY_ROMULO_AGGRO"),
|
||||
(17533,1,0,"Thou smilest... upon the stroke that... murders me.",14,0,100,0,0,9235,15078,0,"Romulo SAY_ROMULO_DEATH"),
|
||||
(17533,2,0,"Thou detestable maw, thou womb of death; I enforce thy rotten jaws to open!",14,0,100,0,0,9237,15077,0,"Romulo SAY_ROMULO_RESURRECT"),
|
||||
(17533,3,0,"How well my comfort is revived by this!",14,0,100,0,0,9238,15076,0,"Romulo SAY_ROMULO_SLAY");
|
||||
|
||||
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429, `unit_flags` = 33088 WHERE `entry` = 17534;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,15 +15,9 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Instance_Karazhan
|
||||
SD%Complete: 70
|
||||
SDComment: Instance Script for Karazhan to help in various encounters. @todo GameObject visibility for Opera event.
|
||||
SDCategory: Karazhan
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "Creature.h"
|
||||
#include "CreatureAI.h"
|
||||
#include "GameObject.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "karazhan.h"
|
||||
@@ -44,6 +38,21 @@ EndScriptData */
|
||||
11 - Nightbane
|
||||
*/
|
||||
|
||||
static constexpr ObjectData creatureData[] =
|
||||
{
|
||||
{ NPC_BARNES, DATA_BARNES },
|
||||
{ NPC_JULIANNE, DATA_JULIANNE },
|
||||
{ NPC_ROMULO, DATA_ROMULO }
|
||||
};
|
||||
|
||||
static constexpr ObjectData gameObjectData[] =
|
||||
{
|
||||
{ GO_STAGE_CURTAIN, DATA_GO_STAGE_CURTAIN },
|
||||
{ GO_STAGE_DOOR_LEFT, DATA_GO_STAGE_DOOR_LEFT },
|
||||
{ GO_STAGE_DOOR_RIGHT, DATA_GO_STAGE_DOOR_RIGHT },
|
||||
{ GO_SIDE_ENTRANCE_DOOR, DATA_GO_SIDE_ENTRANCE_DOOR }
|
||||
};
|
||||
|
||||
DungeonEncounterData const encounters[] =
|
||||
{
|
||||
{ DATA_ATTUMEN, {{ 652 }} },
|
||||
@@ -82,16 +91,18 @@ public:
|
||||
{
|
||||
SetHeaders(DataHeader);
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadObjectData(creatureData, gameObjectData);
|
||||
LoadDungeonEncounterData(encounters);
|
||||
|
||||
// 1 - OZ, 2 - HOOD, 3 - RAJ, this never gets altered.
|
||||
OperaEvent = urand(EVENT_OZ, EVENT_RAJ);
|
||||
OperaEvent = RAND(EVENT_HOOD, EVENT_OZ, EVENT_RAJ);
|
||||
OzDeathCount = 0;
|
||||
OptionalBossCount = 0;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
InstanceScript::OnCreatureCreate(creature);
|
||||
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case NPC_KILREK:
|
||||
@@ -161,11 +172,14 @@ public:
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_OPERA_OZ_DEATHCOUNT:
|
||||
case DATA_OPERA_VARIATION:
|
||||
OperaEvent = data;
|
||||
break;
|
||||
case DATA_OPERA_OZ_DEATH_COUNT:
|
||||
if (data == SPECIAL)
|
||||
++OzDeathCount;
|
||||
else if (data == IN_PROGRESS)
|
||||
OzDeathCount = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -180,10 +194,24 @@ public:
|
||||
case DATA_OPERA_PERFORMANCE:
|
||||
if (state == DONE)
|
||||
{
|
||||
HandleGameObject(StageDoorLeftGUID, true);
|
||||
HandleGameObject(StageDoorRightGUID, true);
|
||||
if (GameObject* sideEntrance = instance->GetGameObject(SideEntranceDoor))
|
||||
sideEntrance->RemoveFlag(GO_FLAG_LOCKED);
|
||||
if (GameObject* go = GetGameObject(DATA_GO_STAGE_DOOR_LEFT))
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
if (GameObject* go = GetGameObject(DATA_GO_STAGE_DOOR_RIGHT))
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
if (GameObject* go = GetGameObject(DATA_GO_SIDE_ENTRANCE_DOOR))
|
||||
go->ActivateObject(GameObjectActions::Unlock, 0);
|
||||
if (Creature* barnes = GetCreature(DATA_BARNES))
|
||||
barnes->AI()->DoAction(ACTION_OPERA_FINISHED);
|
||||
}
|
||||
else if (state == FAIL)
|
||||
{
|
||||
OzDeathCount = 0;
|
||||
if (GameObject* go = GetGameObject(DATA_GO_STAGE_DOOR_LEFT))
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
if (GameObject* go = GetGameObject(DATA_GO_STAGE_CURTAIN))
|
||||
HandleGameObject(ObjectGuid::Empty, false, go);
|
||||
if (Creature* barnes = GetCreature(DATA_BARNES))
|
||||
barnes->AI()->DoAction(ACTION_OPERA_FINISHED);
|
||||
}
|
||||
break;
|
||||
case DATA_CHESS:
|
||||
@@ -205,20 +233,17 @@ public:
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) override
|
||||
{
|
||||
InstanceScript::OnGameObjectCreate(go);
|
||||
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_STAGE_CURTAIN:
|
||||
CurtainGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_STAGE_DOOR_LEFT:
|
||||
StageDoorLeftGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE || GetBossState(DATA_OPERA_PERFORMANCE) == FAIL)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_STAGE_DOOR_RIGHT:
|
||||
StageDoorRightGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_PRIVATE_LIBRARY_DOOR:
|
||||
LibraryDoor = go->GetGUID();
|
||||
@@ -242,11 +267,8 @@ public:
|
||||
MastersTerraceDoor[1] = go->GetGUID();
|
||||
break;
|
||||
case GO_SIDE_ENTRANCE_DOOR:
|
||||
SideEntranceDoor = go->GetGUID();
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE)
|
||||
go->SetFlag(GO_FLAG_LOCKED);
|
||||
else
|
||||
go->RemoveFlag(GO_FLAG_LOCKED);
|
||||
go->ActivateObject(GameObjectActions::Unlock, 0);
|
||||
break;
|
||||
case GO_DUST_COVERED_CHEST:
|
||||
DustCoveredChest = go->GetGUID();
|
||||
@@ -255,28 +277,15 @@ public:
|
||||
BlackenedUrnGUID = go->GetGUID();
|
||||
break;
|
||||
}
|
||||
|
||||
switch (OperaEvent)
|
||||
{
|
||||
/// @todo Set Object visibilities for Opera based on performance
|
||||
case EVENT_OZ:
|
||||
break;
|
||||
|
||||
case EVENT_HOOD:
|
||||
break;
|
||||
|
||||
case EVENT_RAJ:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_OPERA_PERFORMANCE:
|
||||
case DATA_OPERA_VARIATION:
|
||||
return OperaEvent;
|
||||
case DATA_OPERA_OZ_DEATHCOUNT:
|
||||
case DATA_OPERA_OZ_DEATH_COUNT:
|
||||
return OzDeathCount;
|
||||
}
|
||||
|
||||
@@ -295,18 +304,10 @@ public:
|
||||
return MoroesGUID;
|
||||
case DATA_NIGHTBANE:
|
||||
return NightbaneGUID;
|
||||
case DATA_GO_STAGEDOORLEFT:
|
||||
return StageDoorLeftGUID;
|
||||
case DATA_GO_STAGEDOORRIGHT:
|
||||
return StageDoorRightGUID;
|
||||
case DATA_GO_CURTAINS:
|
||||
return CurtainGUID;
|
||||
case DATA_GO_LIBRARY_DOOR:
|
||||
return LibraryDoor;
|
||||
case DATA_GO_MASSIVE_DOOR:
|
||||
return MassiveDoor;
|
||||
case DATA_GO_SIDE_ENTRANCE_DOOR:
|
||||
return SideEntranceDoor;
|
||||
case DATA_GO_GAME_DOOR:
|
||||
return GamesmansDoor;
|
||||
case DATA_GO_GAME_EXIT_DOOR:
|
||||
@@ -327,19 +328,13 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 OperaEvent;
|
||||
uint32 OzDeathCount;
|
||||
uint32 OptionalBossCount;
|
||||
ObjectGuid CurtainGUID;
|
||||
ObjectGuid StageDoorLeftGUID;
|
||||
ObjectGuid StageDoorRightGUID;
|
||||
ObjectGuid KilrekGUID;
|
||||
ObjectGuid TerestianGUID;
|
||||
ObjectGuid MoroesGUID;
|
||||
ObjectGuid NightbaneGUID;
|
||||
ObjectGuid LibraryDoor; // Door at Shade of Aran
|
||||
ObjectGuid MassiveDoor; // Door at Netherspite
|
||||
ObjectGuid SideEntranceDoor; // Side Entrance
|
||||
ObjectGuid GamesmansDoor; // Door before Chess
|
||||
ObjectGuid GamesmansExitDoor; // Door after Chess
|
||||
ObjectGuid NetherspaceDoor; // Door at Malchezaar
|
||||
@@ -347,6 +342,10 @@ public:
|
||||
ObjectGuid ImageGUID;
|
||||
ObjectGuid DustCoveredChest;
|
||||
ObjectGuid BlackenedUrnGUID;
|
||||
|
||||
protected:
|
||||
uint32 OperaEvent;
|
||||
uint32 OzDeathCount;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -15,403 +15,486 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Karazhan
|
||||
SD%Complete: 100
|
||||
SDComment: Support for Barnes (Opera controller) and Berthold (Doorman), Support for Quest 9645.
|
||||
SDCategory: Karazhan
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
npc_barnes
|
||||
npc_image_of_medivh
|
||||
EndContentData */
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "GameObject.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "karazhan.h"
|
||||
#include "Log.h"
|
||||
#include "Map.h"
|
||||
#include "MotionMaster.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedEscortAI.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptedGossip.h"
|
||||
#include "SpellScript.h"
|
||||
#include "TemporarySummon.h"
|
||||
|
||||
enum Spells
|
||||
enum BarnesTexts
|
||||
{
|
||||
// Barnes
|
||||
SPELL_SPOTLIGHT = 25824,
|
||||
SPELL_TUXEDO = 32616,
|
||||
|
||||
// Berthold
|
||||
SPELL_TELEPORT = 39567,
|
||||
|
||||
// Image of Medivh
|
||||
SPELL_FIRE_BALL = 30967,
|
||||
SPELL_UBER_FIREBALL = 30971,
|
||||
SPELL_CONFLAGRATION_BLAST = 30977,
|
||||
SPELL_MANA_SHIELD = 31635
|
||||
SAY_BEGIN = 0,
|
||||
SAY_HOOD_1 = 1,
|
||||
SAY_HOOD_2 = 2,
|
||||
SAY_HOOD_3 = 3,
|
||||
SAY_HOOD_4 = 4,
|
||||
SAY_OZ_1 = 5,
|
||||
SAY_OZ_2 = 6,
|
||||
SAY_OZ_3 = 7,
|
||||
SAY_OZ_4 = 8,
|
||||
SAY_RAJ_1 = 9,
|
||||
SAY_RAJ_2 = 10,
|
||||
SAY_RAJ_3 = 11,
|
||||
SAY_RAJ_4 = 12
|
||||
};
|
||||
|
||||
enum Creatures
|
||||
enum BarnesMisc
|
||||
{
|
||||
NPC_ARCANAGOS = 17652,
|
||||
NPC_SPOTLIGHT = 19525
|
||||
SPELL_TUXEDO = 32616,
|
||||
|
||||
GOSSIP_MENU_MAIN = 7421,
|
||||
GOSSIP_MENU_MAIN_2 = 7422,
|
||||
|
||||
GOSSIP_TEXT_MOROES_ALIVE = 8969,
|
||||
GOSSIP_TEXT_MAIN_1 = 8970,
|
||||
GOSSIP_TEXT_MAIN_2 = 8971,
|
||||
GOSSIP_TEXT_FAIL_HOOD = 8975,
|
||||
GOSSIP_TEXT_FAIL_OZ = 8981,
|
||||
GOSSIP_TEXT_FAIL_RAJ = 8982,
|
||||
GOSSIP_TEXT_DONE = 10471,
|
||||
|
||||
GOSSIP_OPTION_MAIN = 0,
|
||||
GOSSIP_OPTION_FAIL_HOOD = 1,
|
||||
GOSSIP_OPTION_FAIL_OZ = 2,
|
||||
GOSSIP_OPTION_FAIL_RAJ = 3,
|
||||
|
||||
PATH_ANNOUNCE_1 = 1358230,
|
||||
PATH_ANNOUNCE_2 = 1358231,
|
||||
|
||||
ACTION_START_ANNOUNCE = 0,
|
||||
|
||||
NPC_CROWD_HELPER = 18654
|
||||
};
|
||||
|
||||
/*######
|
||||
# npc_barnesAI
|
||||
######*/
|
||||
|
||||
enum Misc
|
||||
enum BarnesSounds
|
||||
{
|
||||
OZ_GOSSIP1_MID = 7421, // I'm not an actor.
|
||||
OZ_GOSSIP1_OID = 0,
|
||||
OZ_GOSSIP2_MID = 7422, // Ok, I'll give it a try, then.
|
||||
OZ_GOSSIP2_OID = 0,
|
||||
SOUND_APPLAUSE = 9332, // NYI
|
||||
SOUND_AMBIENCE_HOOD = 9357,
|
||||
SOUND_AMBIENCE_OZ = 9358,
|
||||
SOUND_AMBIENCE_RAJ = 9359
|
||||
};
|
||||
|
||||
#define OZ_GM_GOSSIP1 "[GM] Change event to EVENT_OZ"
|
||||
#define OZ_GM_GOSSIP2 "[GM] Change event to EVENT_HOOD"
|
||||
#define OZ_GM_GOSSIP3 "[GM] Change event to EVENT_RAJ"
|
||||
|
||||
struct Dialogue
|
||||
enum BarnesCreatureSpawnGroups
|
||||
{
|
||||
int32 textid;
|
||||
uint32 timer;
|
||||
SPAWN_GROUP_SPOTLIGHT = 386,
|
||||
SPAWN_GROUP_GRANDMOTHER = 387,
|
||||
SPAWN_GROUP_TINHEAD = 388,
|
||||
SPAWN_GROUP_STRAWMAN = 389,
|
||||
SPAWN_GROUP_ROAR = 390,
|
||||
SPAWN_GROUP_DOROTHEE = 391,
|
||||
SPAWN_GROUP_JULIANNE = 392
|
||||
};
|
||||
|
||||
static Dialogue OzDialogue[]=
|
||||
enum BarnesObjectSpawnGroups
|
||||
{
|
||||
{0, 6000},
|
||||
{1, 18000},
|
||||
{2, 9000},
|
||||
{3, 15000}
|
||||
SPAWN_GROUP_DECORATIONS_HOOD = 396,
|
||||
SPAWN_GROUP_DECORATIONS_OZ = 397,
|
||||
SPAWN_GROUP_DECORATIONS_RAJ = 398
|
||||
};
|
||||
|
||||
static Dialogue HoodDialogue[]=
|
||||
static constexpr const char* GOSSIP_OPTION_GM_1 = "[GM] Change event to EVENT_OZ";
|
||||
static constexpr const char* GOSSIP_OPTION_GM_2 = "[GM] Change event to EVENT_HOOD";
|
||||
static constexpr const char* GOSSIP_OPTION_GM_3 = "[GM] Change event to EVENT_RAJ";
|
||||
|
||||
// 16812 - Barnes
|
||||
struct npc_barnes : public ScriptedAI
|
||||
{
|
||||
{4, 6000},
|
||||
{5, 10000},
|
||||
{6, 14000},
|
||||
{7, 15000}
|
||||
};
|
||||
npc_barnes(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
|
||||
|
||||
static Dialogue RAJDialogue[]=
|
||||
{
|
||||
{8, 5000},
|
||||
{9, 7000},
|
||||
{10, 14000},
|
||||
{11, 14000}
|
||||
};
|
||||
|
||||
// Entries and spawn locations for creatures in Oz event
|
||||
float Spawns[6][2]=
|
||||
{
|
||||
{17535, -10896}, // Dorothee
|
||||
{17546, -10891}, // Roar
|
||||
{17547, -10884}, // Tinhead
|
||||
{17543, -10902}, // Strawman
|
||||
{17603, -10892}, // Grandmother
|
||||
{17534, -10900}, // Julianne
|
||||
};
|
||||
|
||||
#define SPAWN_Z 90.5f
|
||||
#define SPAWN_Y -1758
|
||||
#define SPAWN_O 4.738f
|
||||
|
||||
static constexpr uint32 PATH_ESCORT_BARNES = 134498;
|
||||
|
||||
class npc_barnes : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_barnes() : CreatureScript("npc_barnes") { }
|
||||
|
||||
struct npc_barnesAI : public EscortAI
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
npc_barnesAI(Creature* creature) : EscortAI(creature)
|
||||
switch (action)
|
||||
{
|
||||
Initialize();
|
||||
RaidWiped = false;
|
||||
m_uiEventId = 0;
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
m_uiSpotlightGUID.Clear();
|
||||
|
||||
TalkCount = 0;
|
||||
TalkTimer = 2000;
|
||||
WipeTimer = 5000;
|
||||
|
||||
PerformanceReady = false;
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
|
||||
ObjectGuid m_uiSpotlightGUID;
|
||||
|
||||
uint32 TalkCount;
|
||||
uint32 TalkTimer;
|
||||
uint32 WipeTimer;
|
||||
uint32 m_uiEventId;
|
||||
|
||||
bool PerformanceReady;
|
||||
bool RaidWiped;
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
Initialize();
|
||||
|
||||
m_uiEventId = instance->GetData(DATA_OPERA_PERFORMANCE);
|
||||
}
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, IN_PROGRESS);
|
||||
|
||||
//resets count for this event, in case earlier failed
|
||||
if (m_uiEventId == EVENT_OZ)
|
||||
instance->SetData(DATA_OPERA_OZ_DEATHCOUNT, IN_PROGRESS);
|
||||
|
||||
LoadPath(PATH_ESCORT_BARNES);
|
||||
Start(false);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override { }
|
||||
|
||||
void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
|
||||
{
|
||||
switch (waypointId)
|
||||
{
|
||||
case 0:
|
||||
DoCast(me, SPELL_TUXEDO, false);
|
||||
instance->DoUseDoorOrButton(instance->GetGuidData(DATA_GO_STAGEDOORLEFT));
|
||||
break;
|
||||
case 4:
|
||||
TalkCount = 0;
|
||||
SetEscortPaused(true);
|
||||
|
||||
if (Creature* spotlight = me->SummonCreature(NPC_SPOTLIGHT,
|
||||
me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f,
|
||||
TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 1min))
|
||||
case ACTION_START_ANNOUNCE:
|
||||
_scheduler.Schedule(0s, [this](TaskContext& task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
spotlight->SetUninteractible(true);
|
||||
spotlight->CastSpell(spotlight, SPELL_SPOTLIGHT, false);
|
||||
m_uiSpotlightGUID = spotlight->GetGUID();
|
||||
case 0:
|
||||
Talk(SAY_BEGIN);
|
||||
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||
_instance->SetBossState(DATA_OPERA_PERFORMANCE, IN_PROGRESS);
|
||||
_instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_DOOR_LEFT));
|
||||
task.Repeat(3400ms);
|
||||
break;
|
||||
case 1:
|
||||
DoCastSelf(SPELL_TUXEDO);
|
||||
me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_1, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
instance->DoUseDoorOrButton(instance->GetGuidData(DATA_GO_STAGEDOORLEFT));
|
||||
PerformanceReady = true;
|
||||
break;
|
||||
case 9:
|
||||
PrepareEncounter();
|
||||
instance->DoUseDoorOrButton(instance->GetGuidData(DATA_GO_CURTAINS));
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
case ACTION_OPERA_FINISHED:
|
||||
me->RemoveAurasDueToSpell(SPELL_TUXEDO);
|
||||
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
void Talk(uint32 count)
|
||||
{
|
||||
int32 text = 0;
|
||||
|
||||
switch (m_uiEventId)
|
||||
{
|
||||
case EVENT_OZ:
|
||||
if (OzDialogue[count].textid)
|
||||
text = OzDialogue[count].textid;
|
||||
if (OzDialogue[count].timer)
|
||||
TalkTimer = OzDialogue[count].timer;
|
||||
break;
|
||||
|
||||
case EVENT_HOOD:
|
||||
if (HoodDialogue[count].textid)
|
||||
text = HoodDialogue[count].textid;
|
||||
if (HoodDialogue[count].timer)
|
||||
TalkTimer = HoodDialogue[count].timer;
|
||||
break;
|
||||
|
||||
case EVENT_RAJ:
|
||||
if (RAJDialogue[count].textid)
|
||||
text = RAJDialogue[count].textid;
|
||||
if (RAJDialogue[count].timer)
|
||||
TalkTimer = RAJDialogue[count].timer;
|
||||
break;
|
||||
}
|
||||
|
||||
if (text)
|
||||
CreatureAI::Talk(text);
|
||||
}
|
||||
|
||||
void PrepareEncounter()
|
||||
{
|
||||
TC_LOG_DEBUG("scripts", "Barnes Opera Event - Introduction complete - preparing encounter {}", m_uiEventId);
|
||||
uint8 index = 0;
|
||||
uint8 count = 0;
|
||||
|
||||
switch (m_uiEventId)
|
||||
{
|
||||
case EVENT_OZ:
|
||||
index = 0;
|
||||
count = 4;
|
||||
break;
|
||||
case EVENT_HOOD:
|
||||
index = 4;
|
||||
count = index+1;
|
||||
break;
|
||||
case EVENT_RAJ:
|
||||
index = 5;
|
||||
count = index+1;
|
||||
break;
|
||||
}
|
||||
|
||||
for (; index < count; ++index)
|
||||
{
|
||||
uint32 entry = ((uint32)Spawns[index][0]);
|
||||
float PosX = Spawns[index][1];
|
||||
|
||||
if (Creature* creature = me->SummonCreature(entry, PosX, SPAWN_Y, SPAWN_Z, SPAWN_O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 2h))
|
||||
creature->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
|
||||
RaidWiped = false;
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
EscortAI::UpdateAI(diff);
|
||||
|
||||
if (HasEscortState(STATE_ESCORT_PAUSED))
|
||||
{
|
||||
if (TalkTimer <= diff)
|
||||
{
|
||||
if (TalkCount > 3)
|
||||
{
|
||||
if (Creature* pSpotlight = ObjectAccessor::GetCreature(*me, m_uiSpotlightGUID))
|
||||
pSpotlight->DespawnOrUnsummon();
|
||||
|
||||
SetEscortPaused(false);
|
||||
return;
|
||||
}
|
||||
|
||||
Talk(TalkCount);
|
||||
++TalkCount;
|
||||
} else TalkTimer -= diff;
|
||||
}
|
||||
|
||||
if (PerformanceReady)
|
||||
{
|
||||
if (!RaidWiped)
|
||||
{
|
||||
if (WipeTimer <= diff)
|
||||
{
|
||||
Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
|
||||
if (PlayerList.empty())
|
||||
return;
|
||||
|
||||
RaidWiped = true;
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
{
|
||||
if (i->GetSource()->IsAlive() && !i->GetSource()->IsGameMaster())
|
||||
{
|
||||
RaidWiped = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (RaidWiped)
|
||||
{
|
||||
EnterEvadeMode(EvadeReason::Other);
|
||||
return;
|
||||
}
|
||||
|
||||
WipeTimer = 15000;
|
||||
} else WipeTimer -= diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
|
||||
{
|
||||
uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
|
||||
ClearGossipMenuFor(player);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case GOSSIP_ACTION_INFO_DEF + 1:
|
||||
InitGossipMenuFor(player, OZ_GOSSIP2_MID);
|
||||
AddGossipItemFor(player, OZ_GOSSIP2_MID, OZ_GOSSIP2_OID, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
SendGossipMenuFor(player, 8971, me->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 2:
|
||||
CloseGossipMenuFor(player);
|
||||
m_uiEventId = urand(EVENT_OZ, EVENT_RAJ);
|
||||
StartEvent();
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 3:
|
||||
CloseGossipMenuFor(player);
|
||||
m_uiEventId = EVENT_OZ;
|
||||
TC_LOG_DEBUG("scripts", "player ({}) manually set Opera event to EVENT_OZ", player->GetGUID().ToString());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 4:
|
||||
CloseGossipMenuFor(player);
|
||||
m_uiEventId = EVENT_HOOD;
|
||||
TC_LOG_DEBUG("scripts", "player ({}) manually set Opera event to EVENT_HOOD", player->GetGUID().ToString());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 5:
|
||||
CloseGossipMenuFor(player);
|
||||
m_uiEventId = EVENT_RAJ;
|
||||
TC_LOG_DEBUG("scripts", "player ({}) manually set Opera event to EVENT_RAJ", player->GetGUID().ToString());
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player* player) override
|
||||
{
|
||||
InitGossipMenuFor(player, OZ_GOSSIP1_MID);
|
||||
// Check for death of Moroes and if opera event is not done already
|
||||
if (instance->GetBossState(DATA_MOROES) == DONE && instance->GetBossState(DATA_OPERA_PERFORMANCE) != DONE)
|
||||
{
|
||||
AddGossipItemFor(player, OZ_GOSSIP1_MID, OZ_GOSSIP1_OID, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
if (player->IsGameMaster())
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, OZ_GM_GOSSIP1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, OZ_GM_GOSSIP2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, OZ_GM_GOSSIP3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
}
|
||||
|
||||
if (!RaidWiped)
|
||||
SendGossipMenuFor(player, 8970, me->GetGUID());
|
||||
else
|
||||
SendGossipMenuFor(player, 8975, me->GetGUID());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
SendGossipMenuFor(player, 8978, me->GetGUID());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetKarazhanAI<npc_barnesAI>(creature);
|
||||
}
|
||||
|
||||
void WaypointPathEnded(uint32 /*waypointId*/, uint32 pathId) override
|
||||
{
|
||||
if (pathId == PATH_ANNOUNCE_1)
|
||||
{
|
||||
switch (_instance->GetData(DATA_OPERA_VARIATION))
|
||||
{
|
||||
case EVENT_HOOD:
|
||||
_scheduler.Schedule(0s, [this](TaskContext& task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
case 0:
|
||||
me->SetFacingTo(4.590215682983398437f);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
Talk(SAY_HOOD_1);
|
||||
|
||||
if (Creature* helper = me->FindNearestCreature(NPC_CROWD_HELPER, 100.0f))
|
||||
helper->PlayDirectSound(SOUND_AMBIENCE_HOOD);
|
||||
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_SPOTLIGHT, true);
|
||||
|
||||
task.Repeat(7s);
|
||||
break;
|
||||
case 1:
|
||||
Talk(SAY_HOOD_2);
|
||||
task.Repeat(7s);
|
||||
break;
|
||||
case 2:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 3:
|
||||
Talk(SAY_HOOD_3);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
task.Repeat(10s);
|
||||
break;
|
||||
case 4:
|
||||
Talk(SAY_HOOD_4);
|
||||
task.Repeat(10s);
|
||||
break;
|
||||
case 5:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(1200ms);
|
||||
break;
|
||||
case 6:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 7:
|
||||
me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_2, false);
|
||||
me->GetMap()->SpawnGroupDespawn(SPAWN_GROUP_SPOTLIGHT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
case EVENT_OZ:
|
||||
_scheduler.Schedule(0s, [this](TaskContext& task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
case 0:
|
||||
me->SetFacingTo(4.590215682983398437f);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
Talk(SAY_OZ_1);
|
||||
|
||||
if (Creature* helper = me->FindNearestCreature(NPC_CROWD_HELPER, 100.0f))
|
||||
helper->PlayDirectSound(SOUND_AMBIENCE_OZ);
|
||||
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_SPOTLIGHT, true);
|
||||
|
||||
task.Repeat(7s);
|
||||
break;
|
||||
case 1:
|
||||
Talk(SAY_OZ_2);
|
||||
task.Repeat(15s);
|
||||
break;
|
||||
case 2:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 3:
|
||||
Talk(SAY_OZ_3);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
task.Repeat(6s);
|
||||
break;
|
||||
case 4:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 5:
|
||||
Talk(SAY_OZ_4);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
task.Repeat(7s);
|
||||
break;
|
||||
case 6:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(1200ms);
|
||||
break;
|
||||
case 7:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 8:
|
||||
me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_2, false);
|
||||
me->GetMap()->SpawnGroupDespawn(SPAWN_GROUP_SPOTLIGHT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
case EVENT_RAJ:
|
||||
_scheduler.Schedule(0s, [this](TaskContext& task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
case 0:
|
||||
me->SetFacingTo(4.590215682983398437f);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
Talk(SAY_RAJ_1);
|
||||
|
||||
if (Creature* helper = me->FindNearestCreature(NPC_CROWD_HELPER, 100.0f))
|
||||
helper->PlayDirectSound(SOUND_AMBIENCE_RAJ);
|
||||
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_SPOTLIGHT, true);
|
||||
|
||||
task.Repeat(6s);
|
||||
break;
|
||||
case 1:
|
||||
Talk(SAY_RAJ_2);
|
||||
task.Repeat(4800ms);
|
||||
break;
|
||||
case 2:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 3:
|
||||
Talk(SAY_RAJ_3);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
task.Repeat(11s);
|
||||
break;
|
||||
case 4:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 5:
|
||||
Talk(SAY_RAJ_4);
|
||||
me->SetEmoteState(EMOTE_STATE_TALK);
|
||||
task.Repeat(8400ms);
|
||||
break;
|
||||
case 6:
|
||||
me->SetEmoteState(EMOTE_ONESHOT_NONE);
|
||||
task.Repeat(1200ms);
|
||||
break;
|
||||
case 7:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
|
||||
task.Repeat(3600ms);
|
||||
break;
|
||||
case 8:
|
||||
me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_2, false);
|
||||
me->GetMap()->SpawnGroupDespawn(SPAWN_GROUP_SPOTLIGHT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (pathId == PATH_ANNOUNCE_2)
|
||||
{
|
||||
switch (_instance->GetData(DATA_OPERA_VARIATION))
|
||||
{
|
||||
case EVENT_HOOD:
|
||||
_scheduler.Schedule(0s, [this](TaskContext& task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
case 0:
|
||||
me->SetFacingTo(1.448623299598693847f);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DECORATIONS_HOOD);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_GRANDMOTHER, true);
|
||||
task.Repeat(7s);
|
||||
break;
|
||||
case 1:
|
||||
_instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_CURTAIN));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
case EVENT_OZ:
|
||||
_scheduler.Schedule(0s, [this](TaskContext& task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
case 0:
|
||||
me->SetFacingTo(1.448623299598693847f);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DECORATIONS_OZ);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_TINHEAD, true);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_STRAWMAN, true);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_ROAR, true);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DOROTHEE, true);
|
||||
task.Repeat(1200ms);
|
||||
break;
|
||||
case 1:
|
||||
_instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_CURTAIN));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
case EVENT_RAJ:
|
||||
_scheduler.Schedule(0s, [this](TaskContext& task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
case 0:
|
||||
me->SetFacingTo(1.448623299598693847f);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DECORATIONS_RAJ);
|
||||
me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_JULIANNE, true);
|
||||
task.Repeat(4s);
|
||||
break;
|
||||
case 1:
|
||||
_instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_CURTAIN));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_scheduler.Update(diff);
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player* player) override
|
||||
{
|
||||
if (_instance->GetBossState(DATA_MOROES) != DONE)
|
||||
{
|
||||
InitGossipMenuFor(player, GOSSIP_MENU_MAIN);
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_MOROES_ALIVE, me->GetGUID());
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (_instance->GetBossState(DATA_OPERA_PERFORMANCE))
|
||||
{
|
||||
case NOT_STARTED:
|
||||
InitGossipMenuFor(player, GOSSIP_MENU_MAIN);
|
||||
|
||||
AddGossipItemFor(player, GOSSIP_MENU_MAIN, GOSSIP_OPTION_MAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
if (player->IsGameMaster())
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_OPTION_GM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_OPTION_GM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_OPTION_GM_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
|
||||
}
|
||||
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_MAIN_1, me->GetGUID());
|
||||
break;
|
||||
case FAIL:
|
||||
InitGossipMenuFor(player, GOSSIP_MENU_MAIN);
|
||||
|
||||
if (player->IsGameMaster())
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_OPTION_GM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_OPTION_GM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_OPTION_GM_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
|
||||
}
|
||||
|
||||
switch (_instance->GetData(DATA_OPERA_VARIATION))
|
||||
{
|
||||
case EVENT_HOOD:
|
||||
AddGossipItemFor(player, GOSSIP_MENU_MAIN, GOSSIP_OPTION_FAIL_HOOD, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_FAIL_HOOD, me->GetGUID());
|
||||
break;
|
||||
case EVENT_OZ:
|
||||
AddGossipItemFor(player, GOSSIP_MENU_MAIN, GOSSIP_OPTION_FAIL_OZ, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_FAIL_OZ, me->GetGUID());
|
||||
break;
|
||||
case EVENT_RAJ:
|
||||
AddGossipItemFor(player, GOSSIP_MENU_MAIN, GOSSIP_OPTION_FAIL_RAJ, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_FAIL_RAJ, me->GetGUID());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case DONE:
|
||||
InitGossipMenuFor(player, GOSSIP_MENU_MAIN);
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_DONE, me->GetGUID());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
|
||||
{
|
||||
uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
|
||||
ClearGossipMenuFor(player);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case GOSSIP_ACTION_INFO_DEF + 1:
|
||||
InitGossipMenuFor(player, GOSSIP_MENU_MAIN_2);
|
||||
AddGossipItemFor(player, GOSSIP_MENU_MAIN_2, GOSSIP_OPTION_MAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_MAIN_2, me->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 2:
|
||||
CloseGossipMenuFor(player);
|
||||
DoAction(ACTION_START_ANNOUNCE);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 10:
|
||||
CloseGossipMenuFor(player);
|
||||
_instance->SetData(DATA_OPERA_VARIATION, EVENT_OZ);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 11:
|
||||
CloseGossipMenuFor(player);
|
||||
_instance->SetData(DATA_OPERA_VARIATION, EVENT_HOOD);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 12:
|
||||
CloseGossipMenuFor(player);
|
||||
_instance->SetData(DATA_OPERA_VARIATION, EVENT_RAJ);
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* _instance;
|
||||
TaskScheduler _scheduler;
|
||||
};
|
||||
|
||||
/*###
|
||||
# npc_image_of_medivh
|
||||
####*/
|
||||
|
||||
enum
|
||||
enum ImageOfMedivhTexts
|
||||
{
|
||||
SAY_DIALOG_MEDIVH_1 = 0,
|
||||
SAY_DIALOG_ARCANAGOS_2 = 0,
|
||||
@@ -424,6 +507,16 @@ enum
|
||||
SAY_DIALOG_MEDIVH_9 = 4
|
||||
};
|
||||
|
||||
enum ImageOfMedivhMisc
|
||||
{
|
||||
SPELL_FIRE_BALL = 30967,
|
||||
SPELL_UBER_FIREBALL = 30971,
|
||||
SPELL_CONFLAGRATION_BLAST = 30977,
|
||||
SPELL_MANA_SHIELD = 31635,
|
||||
|
||||
NPC_ARCANAGOS = 17652
|
||||
};
|
||||
|
||||
static float MedivPos[4] = {-11161.49f, -1902.24f, 91.48f, 1.94f};
|
||||
static float ArcanagosPos[4] = {-11169.75f, -1881.48f, 95.39f, 4.83f};
|
||||
|
||||
@@ -649,7 +742,7 @@ class spell_karazhan_charge : public SpellScript
|
||||
|
||||
void AddSC_karazhan()
|
||||
{
|
||||
new npc_barnes();
|
||||
RegisterKarazhanCreatureAI(npc_barnes);
|
||||
new npc_image_of_medivh();
|
||||
RegisterSpellScript(spell_karazhan_charge);
|
||||
}
|
||||
|
||||
@@ -40,12 +40,7 @@ enum KZDataTypes
|
||||
DATA_MALCHEZZAR = 10,
|
||||
DATA_NIGHTBANE = 11,
|
||||
|
||||
DATA_OPERA_OZ_DEATHCOUNT = 14,
|
||||
|
||||
DATA_KILREK = 15,
|
||||
DATA_GO_CURTAINS = 18,
|
||||
DATA_GO_STAGEDOORLEFT = 19,
|
||||
DATA_GO_STAGEDOORRIGHT = 20,
|
||||
DATA_GO_LIBRARY_DOOR = 21,
|
||||
DATA_GO_MASSIVE_DOOR = 22,
|
||||
DATA_GO_NETHER_DOOR = 23,
|
||||
@@ -55,14 +50,25 @@ enum KZDataTypes
|
||||
DATA_IMAGE_OF_MEDIVH = 26,
|
||||
DATA_MASTERS_TERRACE_DOOR_1 = 27,
|
||||
DATA_MASTERS_TERRACE_DOOR_2 = 28,
|
||||
DATA_GO_SIDE_ENTRANCE_DOOR = 29,
|
||||
DATA_GO_BLACKENED_URN = 30
|
||||
DATA_GO_BLACKENED_URN = 30,
|
||||
|
||||
DATA_BARNES,
|
||||
DATA_JULIANNE,
|
||||
DATA_ROMULO,
|
||||
|
||||
DATA_OPERA_VARIATION,
|
||||
DATA_OPERA_OZ_DEATH_COUNT,
|
||||
|
||||
DATA_GO_STAGE_CURTAIN,
|
||||
DATA_GO_STAGE_DOOR_LEFT,
|
||||
DATA_GO_STAGE_DOOR_RIGHT,
|
||||
DATA_GO_SIDE_ENTRANCE_DOOR
|
||||
};
|
||||
|
||||
enum KZOperaEvents
|
||||
{
|
||||
EVENT_OZ = 1,
|
||||
EVENT_HOOD = 2,
|
||||
EVENT_HOOD = 1,
|
||||
EVENT_OZ = 2,
|
||||
EVENT_RAJ = 3
|
||||
};
|
||||
|
||||
@@ -73,6 +79,9 @@ enum KZMiscCreatures
|
||||
NPC_SHADIKITH_THE_GLIDER = 16180,
|
||||
NPC_TERESTIAN_ILLHOOF = 15688,
|
||||
NPC_MOROES = 15687,
|
||||
NPC_BARNES = 16812,
|
||||
NPC_JULIANNE = 17534,
|
||||
NPC_ROMULO = 17533,
|
||||
NPC_NIGHTBANE = 17225,
|
||||
NPC_ATTUMEN_UNMOUNTED = 15550,
|
||||
NPC_ATTUMEN_MOUNTED = 16152,
|
||||
@@ -107,6 +116,11 @@ enum KZGameObjectIds
|
||||
GO_BLACKENED_URN = 194092
|
||||
};
|
||||
|
||||
enum KZActionIds
|
||||
{
|
||||
ACTION_OPERA_FINISHED = 1681200
|
||||
};
|
||||
|
||||
enum KZMisc
|
||||
{
|
||||
OPTIONAL_BOSS_REQUIRED_DEATH_COUNT = 50
|
||||
|
||||
Reference in New Issue
Block a user