aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/FULL/world_script_texts.sql134
-rw-r--r--sql/FULL/world_script_waypoints.sql61
-rw-r--r--sql/FULL/world_scripts_full.sql9
-rw-r--r--sql/updates/7721_world_script_texts.sql129
-rw-r--r--sql/updates/7721_world_script_waypoints.sql60
-rw-r--r--sql/updates/7721_world_scriptname.sql7
-rw-r--r--src/game/ScriptLoader.cpp14
-rw-r--r--src/scripts/CMakeLists.txt1
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp41
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp26
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp109
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp24
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp75
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp1210
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h22
-rw-r--r--src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp33
-rw-r--r--win/VC90/game.vcproj4
17 files changed, 1821 insertions, 138 deletions
diff --git a/sql/FULL/world_script_texts.sql b/sql/FULL/world_script_texts.sql
index ab68e488a6d..39b51b32f58 100644
--- a/sql/FULL/world_script_texts.sql
+++ b/sql/FULL/world_script_texts.sql
@@ -1492,16 +1492,16 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(17848,-1560010,'Time to bleed!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10430,1,0,0,'lieutenant_drake SAY_MORTAL'),
(17848,-1560011,'Run, you blasted cowards!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10431,1,0,0,'lieutenant_drake SAY_SHOUT'),
(17848,-1560012,'Thrall... must not... go free.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10434,1,0,0,'lieutenant_drake SAY_DEATH'),
- (18096,-1560013,'Thrall! Come outside and face your fate!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10418,1,0,0,'epoch SAY_ENTER1'),
- (18096,-1560014,'Taretha''s life hangs in the balance. Surely you care for her. Surely you wish to save her...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10419,1,0,0,'epoch SAY_ENTER2'),
- (18096,-1560015,'Ah, there you are. I had hoped to accomplish this with a bit of subtlety, but I suppose direct confrontation was inevitable. Your future, Thrall, must not come to pass and so...you and your troublesome friends must die!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10420,1,0,0,'epoch SAY_ENTER3'),
- (18096,-1560016,'Enough! I will erase your very existence!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10421,1,0,0,'epoch SAY_AGGRO1'),
- (18096,-1560017,'You cannot fight fate!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10422,1,0,0,'epoch SAY_AGGRO2'),
- (18096,-1560018,'You are...irrelevant.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10425,1,0,0,'epoch SAY_SLAY1'),
- (18096,-1560019,'Thrall will remain a slave. Taretha will die. You have failed.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10426,1,0,0,'epoch SAY_SLAY2'),
- (18096,-1560020,'Not so fast!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10423,1,0,0,'epoch SAY_BREATH1'),
- (18096,-1560021,'Struggle as much as you like!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10424,1,0,0,'epoch SAY_BREATH2'),
- (18096,-1560022,'No!...The master... will not... be pleased.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10427,1,0,0,'epoch SAY_DEATH'),
+ (18096,-1560013,'Thrall! Come outside and face your fate!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10418,1,0,0,'epoch_hunter SAY_ENTER1'),
+ (18096,-1560014,'Taretha''s life hangs in the balance. Surely you care for her. Surely you wish to save her...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10419,1,0,0,'epoch_hunter SAY_ENTER2'),
+ (18096,-1560015,'Ah, there you are. I had hoped to accomplish this with a bit of subtlety, but I suppose direct confrontation was inevitable. Your future, Thrall, must not come to pass and so...you and your troublesome friends must die!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10420,1,0,0,'epoch_hunter SAY_ENTER3'),
+ (18096,-1560016,'Enough! I will erase your very existence!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10421,1,0,0,'epoch_hunter SAY_AGGRO1'),
+ (18096,-1560017,'You cannot fight fate!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10422,1,0,0,'epoch_hunter SAY_AGGRO2'),
+ (18096,-1560018,'You are...irrelevant.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10425,1,0,0,'epoch_hunter SAY_SLAY1'),
+ (18096,-1560019,'Thrall will remain a slave. Taretha will die. You have failed.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10426,1,0,0,'epoch_hunter SAY_SLAY2'),
+ (18096,-1560020,'Not so fast!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10423,1,0,0,'epoch_hunter SAY_BREATH1'),
+ (18096,-1560021,'Struggle as much as you like!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10424,1,0,0,'epoch_hunter SAY_BREATH2'),
+ (18096,-1560022,'No!...The master... will not... be pleased.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10427,1,0,0,'epoch_hunter SAY_DEATH'),
(17876,-1560023,'Very well then. Let''s go!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10465,1,0,0,'thrall hillsbrad SAY_TH_START_EVENT_PART1'),
(17876,-1560024,'As long as we''re going with a new plan, I may aswell pick up a weapon and some armor.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'thrall hillsbrad SAY_TH_ARMORY'),
(17876,-1560025,'A rider approaches!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10466,0,0,0,'thrall hillsbrad SAY_TH_SKARLOC_MEET'),
@@ -1912,6 +1912,120 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(33993,-1590001,'A Tempest Minion appears to defend Emalon!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'emalon EMOTE_MINION_RESPAWN'),
(33993,-1590002,'Archavon the Stone Watcher goes into a berserker rage!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,2,0,0,'archavon EMOTE_BERSERK'),
+-- -1 595 000 CAVERNS OF TIME: CULLING OF STRATHOLME
+-- Chrono Lord Epoch
+ (26532,-1595000,'Prince Arthas Menethil, on this day, a powerful darkness has taken hold of your soul. The death you are destined to visit upon others will this day be your own.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13408,1,0,0,'epoch SAY_INTRO | culling SAY_PHASE314'),
+ (26532,-1595001,'We''ll see about that, young prince.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13409,1,0,0,'epoch SAY_AGGRO'),
+ (26532,-1595002,'Tick tock, tick tock...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13410,1,0,0,'epoch SAY_TIME_WARP_1'),
+ (26532,-1595003,'Not quick enough!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13411,1,0,0,'epoch SAY_TIME_WARP_2'),
+ (26532,-1595004,'Let''s get this over with. ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13412,1,0,0,'epoch SAY_TIME_WARP_3'),
+ (26532,-1595005,'There is no future for you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13413,1,0,0,'epoch SAY_SLAY_1'),
+ (26532,-1595006,'This is the hour of our greatest triumph!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13414,1,0,0,'epoch SAY_SLAY_2'),
+ (26532,-1595007,'You were destined to fail.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13415,1,0,0,'epoch SAY_SLAY_3'),
+ (26532,-1595008,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13416,0,0,0,'epoch SAY_DEATH'),
+-- Mal'Ganis
+ (26533,-1595009,'Yes, this is the beginning. I''ve been waiting for you, young prince. I am Mal''Ganis.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14410,0,0,1,'mal_ganis SAY_INTRO_1 | culling SAY_PHASE206'),
+ (26533,-1595010,'As you can see, your people are now mine. I will now turn this city household by household, until the flame of life has been snuffed out... forever.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14411,0,0,1,'mal_ganis SAY_INTRO_2 | culling SAY_PHASE207'),
+ (26533,-1595011,'This will be a fine test...Prince Arthas...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14413,1,0,0,'mal_ganis SAY_AGGRO'),
+ (26533,-1595012,'All too easy...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14416,1,0,0,'mal_ganis SAY_KILL_1'),
+ (26533,-1595013,'The dark lord is displeased with your interference...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14417,1,0,0,'mal_ganis SAY_KILL_2'),
+ (26533,-1595014,'It is Prince Arthas I want... not you...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14418,1,0,0,'mal_ganis SAY_KILL_3'),
+ (26533,-1595015,'Anak''Keri...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14422,1,0,0,'mal_ganis SAY_SLAY_1'),
+ (26533,-1595016,'My onslaught will wash over the Lich King''s forces...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14423,1,0,0,'mal_ganis SAY_SLAY_2'),
+ (26533,-1595017,'Your death is in vain, tiny mortal...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14424,1,0,0,'mal_ganis SAY_SLAY_3'),
+ (26533,-1595018,'Your time has come to an end!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14425,1,0,0,'mal_ganis SAY_SLAY_4'),
+ (26533,-1595019,'Time out...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14414,1,0,0,'mal_ganis SAY_SLEEP_1'),
+ (26533,-1595020,'You seem...tired...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14415,1,0,0,'mal_ganis SAY_SLEEP_2'),
+ (26533,-1595021,'I spent too much time in that weak little shell...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14426,1,0,0,'mal_ganis SAY_30HEALTH'),
+ (26533,-1595022,'(Eredun) I AM MAL''GANIS! I AM ETERNAL!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14427,1,0,0,'mal_ganis SAY_15HEALTH'),
+ (26533,-1595023,'ENOUGH! I waste my time here...I must gather my strength on the home world...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14428,1,0,0,'mal_ganis SAY_ESCAPE_SPEECH_1'),
+ (26533,-1595024,'You''ll never defeat the Lich King without my forces! I''ll have my revenge...on him, AND you...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14429,1,0,0,'mal_ganis SAY_ESCAPE_SPEECH_2'),
+ (26533,-1595025,'Your journey has just begun, young prince. Gather your forces and meet me in the artic land of Northrend. It is there that we shall settle the score between us. It is there that your true destiny will unfold.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14412,1,0,1,'mal_ganis SAY_OUTRO'),
+-- Meathook
+ (26529,-1595026,'Play time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13428,1,0,0,'meathook SAY_AGGRO'),
+ (26529,-1595027,'Boring...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13430,1,0,0,'meathook SAY_SLAY_1'),
+ (26529,-1595028,'Why you stop moving?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13431,1,0,0,'meathook SAY_SLAY_2'),
+ (26529,-1595029,'Get up! Me not done!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13432,1,0,0,'meathook SAY_SLAY_3'),
+ (26529,-1595030,'New toys!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13429,1,0,0,'meathook SAY_SPAWN'),
+ (26529,-1595031,'This... not fun...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13433,1,0,0,'meathook SAY_DEATH'),
+-- Salramm the Fleshcrafter
+ (26530,-1595032,'Ah, the entertainment has arrived!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13472,1,0,0,'salramm SAY_AGGRO'),
+ (26530,-1595033,'You are too late, champion of Lordaeron. The dead shall have their day.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13471,1,0,0,'salramm SAY_SPAWN'),
+ (26530,-1595034,'The fun is just beginning!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13473,1,0,0,'salramm SAY_SLAY_1'),
+ (26530,-1595035,'Aah, quality materials!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13474,1,0,0,'salramm SAY_SLAY_2'),
+ (26530,-1595036,'Don''t worry, I''ll make good use of you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13475,1,0,0,'salramm SAY_SLAY_3'),
+ (26530,-1595037,'You only advance... the master''s plan...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13483,1,0,0,'salramm SAY_DEATH'),
+ (26530,-1595038,'BOOM! Hahahahah...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13478,1,0,0,'salramm SAY_EXPLODE_GHOUL_1'),
+ (26530,-1595039,'Blood... destruction... EXHILARATING!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13479,1,0,0,'salramm SAY_EXPLODE_GHOUL_2'),
+ (26530,-1595040,'I want a sample...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13480,1,0,0,'salramm SAY_STEAL_FLESH_1'),
+ (26530,-1595041,'Such strength... it must be mine!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13481,1,0,0,'salramm SAY_STEAL_FLESH_2'),
+ (26530,-1595042,'Your flesh betrays you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13482,1,0,0,'salramm SAY_STEAL_FLESH_3'),
+ (26530,-1595043,'Say hello to some friends of mine.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13476,1,0,0,'salramm SAY_SUMMON_GHOULS_1'),
+ (26530,-1595044,'Come, citizen of Stratholme! Meet your saviors.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13477,1,0,0,'salramm SAY_SUMMON_GHOULS_2'),
+-- The Infinite Corruptor
+ (32273,-1595045,'How dare you interfere with our work here!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'infinite SAY_AGGRO'),
+ (32273,-1595046,'My work here is finished!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'infinite SAY_FAIL'),
+ (32273,-1595047,'My time... has run out...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'infinite SAY_DEATH'),
+-- First Act - Uther and Jaina Dialog
+-- Outside the city, Arthas, Uther and Jaina dialog
+ (26499,-1595070,'Glad you could make it, Uther.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12828,0,0,1,'culling SAY_PHASE101'),
+ (26528,-1595071,'Watch your tone with me, boy. You may be the prince, but I''m still your superior as a paladin!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12839,0,0,25,'culling SAY_PHASE102'),
+ (26499,-1595072,'As if I could forget. Listen, Uther, there''s something about the plague you should know... ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12829,0,0,0,'culling SAY_PHASE103'),
+ (26499,-1595073,'Oh, no. We''re too late. These people have all been infected! They may look fine now, but it''s just a matter of time before they turn into the undead!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12830,0,0,1,'culling SAY_PHASE104'),
+ (26528,-1595074,'What?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12840,0,0,5,'culling SAY_PHASE105'),
+ (26499,-1595075,'This entire city must be purged.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12831,0,0,1,'culling SAY_PHASE106'),
+ (26528,-1595076,'How can you even consider that? There''s got to be some other way.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12841,0,0,1,'culling SAY_PHASE107'),
+ (26499,-1595077,'Damn it, Uther! As your future king, I order you to purge this city!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12832,1,0,5,'culling SAY_PHASE108'),
+ (26528,-1595078,'You are not my king yet, boy! Nor would I obey that command even if you were!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12842,1,0,22,'culling SAY_PHASE109'),
+ (26499,-1595079,'Then I must consider this an act of treason.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12833,0,0,0,'culling SAY_PHASE110'),
+ (26528,-1595080,'Treason? Have you lost your mind, Arthas?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12843,0,0,5,'culling SAY_PHASE111'),
+ (26499,-1595081,'Have I? Lord Uther, by my right of succession and the sovereignty of my crown, I hereby relieve you of your command and suspend your paladins from service.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12834,0,0,1,'culling SAY_PHASE112'),
+ (26497,-1595082,'Arthas! You can''t just--',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12837,0,0,1,'culling SAY_PHASE113'),
+ (26499,-1595083,'It''s done! Those of you who have the will to save this land, follow me! The rest of you... get out of my sight!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12835,0,0,0,'culling SAY_PHASE114'),
+ (26528,-1595084,'You''ve just crossed a terrible threshold, Arthas.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12844,0,0,25,'culling SAY_PHASE115'),
+ (26499,-1595085,'Jaina?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12836,0,0,1,'culling SAY_PHASE116'),
+ (26497,-1595086,'I''m sorry, Arthas. I can''t watch you do this.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12838,0,0,1,'culling SAY_PHASE117'),
+ (26499,-1595087,'Take position here, and I will lead a small force inside Stratholme to begin the culling. We must contain and purge the infected for the sake of all Lordaeron!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14327,0,0,1,'culling SAY_PHASE118'),
+-- Second Act - City Streets
+-- Arthas enters the city and dialog with Mal'Ganis
+-- After defeating 2 bosses he runs to Town Hall
+ (26499,-1595088,'Everyone looks ready. Remember, these people are all infected with the plague and will die soon. We must purge Stratholme to protect the remainder of Lordaeron from the Scourge. Let''s go.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14293,0,0,1,'culling SAY_PHASE201'),
+ (0,-1595089,'Prince Arthas, may the light be praised! Many people in the town have begun to fall seriously ill, can you help us?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,1,'culling SAY_PHASE202'),
+ (26499,-1595090,'I can only help you with a clean death.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14294,0,0,0,'culling SAY_PHASE203'),
+ (0,-1595091,'What? This can''t be!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'culling SAY_PHASE204'),
+ (26499,-1595092,'That was just the beginning.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14295,0,0,1,'culling SAY_PHASE205'),
+ (26499,-1595093,'I won''t allow it, Mal''Ganis! Better that these people die by my hand than serve as your slaves in death!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14296,0,0,5,'culling SAY_PHASE208'),
+ (26499,-1595094,'Mal''ganis will send out some of his Scourge minions to interfere with us. Those of you with the strongest steel and magic shall go forth and destroy them. I will lead the rest of my forces in purging Stratholme of the infected.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14885,0,0,1,'culling SAY_PHASE209'),
+ (26499,-1595095,'Champions, meet me at town hall at once! We must take the fight to Mal''Ganis.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14297,0,0,1,'culling SAY_PHASE210'),
+-- Third Act - Town Hall
+ (26499,-1595096,'Follow me. I know the way trought.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14298,0,0,1,'culling SAY_PHASE301'),
+ (0,-1595097,'Ah, you''ve finally arrived Prince Arthas. You''re just in the nick of time.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,1,'culling SAY_PHASE302'),
+ (26499,-1595098,'Yes, I''m glad i could get you before the plague.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14299,0,0,1,'culling SAY_PHASE303'),
+ (26499,-1595099,'What is this sorcery?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14300,0,0,0,'culling SAY_PHASE304'),
+ (0,-1595100,'There''s no need for you to understand, Arthas. All you need to do is die!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'culling SAY_PHASE305'),
+ (26499,-1595101,'Mal''Ganis appears to have more than scourge in his arsenal. We should make haste.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14301,0,0,0,'culling SAY_PHASE306'),
+ (26499,-1595102,'More vile sorcery! Be ready for anything.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14302,0,0,0,'culling SAY_PHASE307'),
+ (26499,-1595103,'Let''s move on.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14303,0,0,0,'culling SAY_PHASE308'),
+ (26499,-1595104,'Watch your backs... they have us surrounded in this hall.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14304,0,0,0,'culling SAY_PHASE309'),
+ (26499,-1595105,'One less obstacle to deal with.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'culling SAY_PHASE310'),
+ (26499,-1595106,'Mal''Ganis is not making this easy...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14305,0,0,0,'culling SAY_PHASE311'),
+ (26499,-1595107,'They''re very persistent.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14306,0,0,0,'culling SAY_PHASE312'),
+ (26499,-1595108,'What else can be put in my way?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14307,0,0,0,'culling SAY_PHASE313'),
+ (26499,-1595109,'I do what i must for Lordaeron. And neither your words nor your actions will stop me.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14309,0,0,5,'culling SAY_PHASE315'),
+-- Fourth Act - Fire Corridor
+ (26499,-1595110,'The quickest path to Mal''Ganis lays behind that bookshelf ahead.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14308,0,0,0,'culling SAY_PHASE401'),
+ (26499,-1595111,'This will only take a moment.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14310,0,0,0,'culling SAY_PHASE402'),
+ (26499,-1595112,'I believe that secret passage still works!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14311,0,0,0,'culling SAY_PHASE403'),
+ (26499,-1595113,'Let''s move trought here as quickly as possible. If the undead don''t kill us the fires might.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14312,0,0,0,'culling SAY_PHASE404'),
+ (26499,-1595114,'Rest a moment and clear your lungs. But we must move again soon.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14313,0,0,0,'culling SAY_PHASE405'),
+ (26499,-1595115,'That''s enough, we must move again. Mal''Ganis awaits.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14314,0,0,0,'culling SAY_PHASE406'),
+ (26499,-1595116,'At last some good luck, Market Row has not caught fire yet. Mal''Ganis is supposed to be on Crusader Square which is just ahead. Tell me when you''re ready to move forth.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14315,0,0,0,'culling SAY_PHASE407'),
+-- Fifth Act - Mal'Ganis Fight
+ (26499,-1595117,'Justice will be done!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14316,0,0,0,'culling SAY_PHASE501'),
+ (26499,-1595118,'We''re going to finish this right now Mal''Ganis... just you and me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14317,0,0,0,'culling SAY_PHASE502'),
+ (26499,-1595119,'I''ll hunt you to the ends of the earth if I have to! Do you hear me? To the ends of the earth!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14318,1,0,5,'culling SAY_PHASE503'),
+ (26499,-1595120,'You performed well this day. Anything that Mal''Ganis has left behind is yours. Take it as your reward. I must now begin plans for an expedition to Northrend.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14319,0,0,5,'culling SAY_PHASE504'),
+
-- -1 599 000 HALLS OF STONE
/* Maiden of Grief */
(27975,-1599000,'You shouldn''t have come...now you will die!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13487,1,0,0,'maiden of grief SAY_AGGRO'),
diff --git a/sql/FULL/world_script_waypoints.sql b/sql/FULL/world_script_waypoints.sql
index facfea47152..9a7bc41dd67 100644
--- a/sql/FULL/world_script_waypoints.sql
+++ b/sql/FULL/world_script_waypoints.sql
@@ -2032,3 +2032,64 @@ INSERT INTO `script_waypoint` (`entry`, `pointid`, `location_x`, `location_y`, `
(26588, 25, 4353.72, -3965.61, 190.154, 0, '0'),
(26588, 26, 4363.12, -3995.61, 183.327, 0, '0'),
(26588, 27, 4371.99, -4010.97, 181.33, 0, '0');
+
+-- script_waypoints for Arthas movements inside Culling
+DELETE FROM `script_waypoint` WHERE `entry`=26499;
+INSERT INTO `script_waypoint` (`entry`, `pointid`, `location_x`, `location_y`, `location_z`, `waittime`, `point_comment`) VALUES
+(26499,0,1903.167,1291.573,143.32,0, 'culling Bridge WP1'),
+(26499,1,1911.087,1314.263,150.026,0, 'culling Bridge WP2'),
+(26499,2,1902.959,1295.127,143.388,10000, 'culling Bridge WP3'),
+(26499,3,1913.726,1287.407,141.927,0, 'culling Bridge WP4'),
+(26499,4,1990.833,1293.391,145.467,0, 'culling Bridge WP5'),
+(26499,5,1997.003,1317.776,142.963,0, 'culling Bridge WP6'),
+(26499,6,2019.631,1326.084,142.929,0, 'culling Bridge WP7'),
+(26499,7,2026.469,1287.088,143.596,0, 'culling Bridge WP8'),
+(26499,8,2050.660,1287.333,142.671,0, 'culling Bridge WP9'),
+(26499,9,2081.447,1287.770,141.324,0, 'culling Streets WP1'),
+(26499,10,2087.689,1280.344,140.730,0, 'culling Streets WP2'),
+(26499,11,2092.154,1276.645,140.520,0, 'culling Streets WP3'),
+(26499,12,2099.876,1280.21,138.55,0, 'culling Streets WP4'),
+(26499,13,2120.757,1286.97,136.343,0, 'culling Streets WP5'),
+(26499,14,2165.073,1279.338,133.40,0, 'culling Streets WP6'),
+(26499,15,2186.441,1234.445,136.524,0, 'culling Streets WP7'),
+(26499,16,2210.385,1207.550,136.259,0, 'culling Streets WP8'),
+(26499,17,2243.594,1177.705,137.144,0, 'culling Streets WP9'),
+(26499,18,2286.883,1177.262,137.631,0, 'culling Streets WP10'),
+(26499,19,2320.374,1179.954,133.926,0, 'culling Streets WP11'),
+(26499,20,2365.626,1194.838,131.974,0, 'culling Streets WP12'),
+(26499,21,2366.559,1197.759,132.382,0, 'culling House WP1'),
+(26499,22,2394.011,1205.148,134.125,0, 'culling House WP2'),
+(26499,23,2395.854,1206.345,134.039,0, 'culling House WP3'),
+(26499,24,2442.023,1219.205,133.999,0, 'culling House WP3'),
+(26499,25,2447.105,1191.182,148.076,0, 'culling House WP4'),
+(26499,26,2444.250,1190.510,148.076,0, 'culling House WP5'),
+(26499,27,2418.487,1196.059,148.076,0, 'culling House WP6'),
+(26499,28,2401.221,1191.705,148.076,0, 'culling House WP7'),
+(26499,29,2409.205,1157.425,148.190,0, 'culling House WP8'),
+(26499,30,2417.584,1121.026,148.082,0, 'culling House WP9'),
+(26499,31,2423.123,1119.431,148.076,0, 'culling House WP10'),
+(26499,32,2447.833,1112.714,148.076,0, 'culling House WP11'),
+(26499,33,2457.133,1120.941,150.008,0, 'culling House WP12'),
+(26499,34,2459.694,1127.012,150.008,0, 'culling House WP13'),
+(26499,35,2469.617,1122.274,150.008,0, 'culling House WP14'),
+(26499,36,2470.437,1122.794,150.008,3000, 'culling House WP15'),
+(26499,37,2471.662,1123.077,150.035,3000, 'culling House WP16'),
+(26499,38,2483.183,1125.042,149.905,0, 'culling Secret WP1'),
+(26499,39,2487.867,1099.760,144.858,0, 'culling Secret WP2'),
+(26499,40,2498.270,1101.929,144.599,0, 'culling Secret WP3'),
+(26499,41,2492.114,1128.238,139.967,0, 'culling Secret WP4'),
+(26499,42,2500.286,1130.183,139.982,0, 'culling Room WP1'),
+(26499,43,2503.010,1119.241,139.978,0, 'culling Room WP2'),
+(26499,44,2517.820,1122.645,132.066,0, 'culling Room WP3'),
+(26499,45,2540.479,1129.061,130.868,7000, 'culling Fire Street WP1'),
+(26499,46,2568.619,1157.794,126.906,0, 'culling Fire Street WP2'),
+(26499,47,2556.074,1222.058,125.412,20000, 'culling Fire Street WP3'),
+(26499,48,2521.531,1295.209,130.573,0, 'culling Fire Street WP4'),
+(26499,49,2504.362,1348.667,132.944,0, 'culling Fire Street WP5'),
+(26499,50,2450.594,1431.544,131.361,0, 'culling Fire Street WP6'),
+(26499,51,2353.485,1404.839,128.531,0, 'culling Market WP1'),
+(26499,52,2329.882,1406.273,128.013,0, 'culling Market WP2'),
+(26499,53,2329.882,1406.273,128.013,12000, 'culling Market WP3'),
+(26499,54,2327.391,1412.475,127.692,0, 'culling Market WP4'),
+(26499,55,2303.016,1480.070,128.139,0, 'culling Crusader WP1'),
+(26499,56,2296.665,1502.362,128.362,0, 'culling Crusader WP2');
diff --git a/sql/FULL/world_scripts_full.sql b/sql/FULL/world_scripts_full.sql
index 38d34d06f57..c87f9e61963 100644
--- a/sql/FULL/world_scripts_full.sql
+++ b/sql/FULL/world_scripts_full.sql
@@ -407,7 +407,14 @@ UPDATE `creature_template` SET `ScriptName`='npc_magmoth_crusher' WHERE `entry`=
/* BURNING STEPPES */
UPDATE `creature_template` SET `ScriptName`='npc_ragged_john' WHERE `entry`=9563;
-/* CAVERNS OF TIME */
+/* CAVERNS OF TIME - CULLING OF STRATHOLME */
+UPDATE `instance_template` SET `script`='instance_culling_of_stratholme' WHERE `map`=595;
+UPDATE `creature_template` SET `Scriptname`='npc_arthas' WHERE `entry`=26499;
+UPDATE `creature_template` SET `Scriptname`='boss_salramm' WHERE `entry`=26530;
+UPDATE `creature_template` SET `Scriptname`='boss_meathook' WHERE `entry`=26529;
+UPDATE `creature_template` SET `Scriptname`='boss_epoch' WHERE `entry`=26532;
+UPDATE `creature_template` SET `Scriptname`='boss_mal_ganis' WHERE `entry`=26533;
+UPDATE `creature_template` SET `Scriptname`='boss_infinite_corruptor' WHERE `entry`=32273;
/* CRYSTALSONG FOREST */
UPDATE `creature_template` SET `ScriptName`='npc_warmage_violetstand' WHERE `entry` IN (32369,32371,32372);
diff --git a/sql/updates/7721_world_script_texts.sql b/sql/updates/7721_world_script_texts.sql
new file mode 100644
index 00000000000..5b349bbb14f
--- /dev/null
+++ b/sql/updates/7721_world_script_texts.sql
@@ -0,0 +1,129 @@
+DELETE FROM `script_texts` WHERE `entry` <= -1595000 and `entry` >= -1595999;
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`,`sound`,`type`,`language`,`emote`,`comment`) VALUES
+-- Chrono Lord Epoch
+(26532,-1595000,'Prince Arthas Menethil, on this day, a powerful darkness has taken hold of your soul. The death you are destined to visit upon others will this day be your own.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13408,1,0,0,'epoch SAY_INTRO | culling SAY_PHASE314'),
+(26532,-1595001,'We''ll see about that, young prince.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13409,1,0,0,'epoch SAY_AGGRO'),
+(26532,-1595002,'Tick tock, tick tock...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13410,1,0,0,'epoch SAY_TIME_WARP_1'),
+(26532,-1595003,'Not quick enough!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13411,1,0,0,'epoch SAY_TIME_WARP_2'),
+(26532,-1595004,'Let''s get this over with. ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13412,1,0,0,'epoch SAY_TIME_WARP_3'),
+(26532,-1595005,'There is no future for you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13413,1,0,0,'epoch SAY_SLAY_1'),
+(26532,-1595006,'This is the hour of our greatest triumph!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13414,1,0,0,'epoch SAY_SLAY_2'),
+(26532,-1595007,'You were destined to fail.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13415,1,0,0,'epoch SAY_SLAY_3'),
+(26532,-1595008,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13416,0,0,0,'epoch SAY_DEATH'),
+-- Mal'Ganis
+(26533,-1595009,'Yes, this is the beginning. I''ve been waiting for you, young prince. I am Mal''Ganis.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14410,0,0,1,'mal_ganis SAY_INTRO_1 | culling SAY_PHASE206'),
+(26533,-1595010,'As you can see, your people are now mine. I will now turn this city household by household, until the flame of life has been snuffed out... forever.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14411,0,0,1,'mal_ganis SAY_INTRO_2 | culling SAY_PHASE207'),
+(26533,-1595011,'This will be a fine test...Prince Arthas...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14413,1,0,0,'mal_ganis SAY_AGGRO'),
+(26533,-1595012,'All too easy...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14416,1,0,0,'mal_ganis SAY_KILL_1'),
+(26533,-1595013,'The dark lord is displeased with your interference...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14417,1,0,0,'mal_ganis SAY_KILL_2'),
+(26533,-1595014,'It is Prince Arthas I want... not you...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14418,1,0,0,'mal_ganis SAY_KILL_3'),
+(26533,-1595015,'Anak''Keri...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14422,1,0,0,'mal_ganis SAY_SLAY_1'),
+(26533,-1595016,'My onslaught will wash over the Lich King''s forces...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14423,1,0,0,'mal_ganis SAY_SLAY_2'),
+(26533,-1595017,'Your death is in vain, tiny mortal...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14424,1,0,0,'mal_ganis SAY_SLAY_3'),
+(26533,-1595018,'Your time has come to an end!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14425,1,0,0,'mal_ganis SAY_SLAY_4'),
+(26533,-1595019,'Time out...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14414,1,0,0,'mal_ganis SAY_SLEEP_1'),
+(26533,-1595020,'You seem...tired...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14415,1,0,0,'mal_ganis SAY_SLEEP_2'),
+(26533,-1595021,'I spent too much time in that weak little shell...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14426,1,0,0,'mal_ganis SAY_30HEALTH'),
+(26533,-1595022,'(Eredun) I AM MAL''GANIS! I AM ETERNAL!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14427,1,0,0,'mal_ganis SAY_15HEALTH'),
+(26533,-1595023,'ENOUGH! I waste my time here...I must gather my strength on the home world...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14428,1,0,0,'mal_ganis SAY_ESCAPE_SPEECH_1'),
+(26533,-1595024,'You''ll never defeat the Lich King without my forces! I''ll have my revenge...on him, AND you...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14429,1,0,0,'mal_ganis SAY_ESCAPE_SPEECH_2'),
+(26533,-1595025,'Your journey has just begun, young prince. Gather your forces and meet me in the artic land of Northrend. It is there that we shall settle the score between us. It is there that your true destiny will unfold.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14412,1,0,1,'mal_ganis SAY_OUTRO'),
+-- Meathook
+(26529,-1595026,'Play time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13428,1,0,0,'meathook SAY_AGGRO'),
+(26529,-1595027,'Boring...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13430,1,0,0,'meathook SAY_SLAY_1'),
+(26529,-1595028,'Why you stop moving?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13431,1,0,0,'meathook SAY_SLAY_2'),
+(26529,-1595029,'Get up! Me not done!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13432,1,0,0,'meathook SAY_SLAY_3'),
+(26529,-1595030,'New toys!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13429,1,0,0,'meathook SAY_SPAWN'),
+(26529,-1595031,'This... not fun...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13433,1,0,0,'meathook SAY_DEATH'),
+-- Salramm the Fleshcrafter
+(26530,-1595032,'Ah, the entertainment has arrived!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13472,1,0,0,'salramm SAY_AGGRO'),
+(26530,-1595033,'You are too late, champion of Lordaeron. The dead shall have their day.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13471,1,0,0,'salramm SAY_SPAWN'),
+(26530,-1595034,'The fun is just beginning!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13473,1,0,0,'salramm SAY_SLAY_1'),
+(26530,-1595035,'Aah, quality materials!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13474,1,0,0,'salramm SAY_SLAY_2'),
+(26530,-1595036,'Don''t worry, I''ll make good use of you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13475,1,0,0,'salramm SAY_SLAY_3'),
+(26530,-1595037,'You only advance... the master''s plan...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13483,1,0,0,'salramm SAY_DEATH'),
+(26530,-1595038,'BOOM! Hahahahah...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13478,1,0,0,'salramm SAY_EXPLODE_GHOUL_1'),
+(26530,-1595039,'Blood... destruction... EXHILARATING!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13479,1,0,0,'salramm SAY_EXPLODE_GHOUL_2'),
+(26530,-1595040,'I want a sample...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13480,1,0,0,'salramm SAY_STEAL_FLESH_1'),
+(26530,-1595041,'Such strength... it must be mine!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13481,1,0,0,'salramm SAY_STEAL_FLESH_2'),
+(26530,-1595042,'Your flesh betrays you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13482,1,0,0,'salramm SAY_STEAL_FLESH_3'),
+(26530,-1595043,'Say hello to some friends of mine.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13476,1,0,0,'salramm SAY_SUMMON_GHOULS_1'),
+(26530,-1595044,'Come, citizen of Stratholme! Meet your saviors.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13477,1,0,0,'salramm SAY_SUMMON_GHOULS_2'),
+-- The Infinite Corruptor
+-- Couldn't find the value from the audios for `sound` column, not added.
+(32273,-1595045,'How dare you interfere with our work here!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'infinite SAY_AGGRO'),
+(32273,-1595046,'My work here is finished!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'infinite SAY_FAIL'),
+(32273,-1595047,'My time... has run out...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'infinite SAY_DEATH'),
+-- First Act - Uther and Jaina Dialog
+-- Outside the city, Arthas, Uther and Jaina dialog
+(26499,-1595070,'Glad you could make it, Uther.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12828,0,0,1,'culling SAY_PHASE101'),
+(26528,-1595071,'Watch your tone with me, boy. You may be the prince, but I''m still your superior as a paladin!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12839,0,0,25,'culling SAY_PHASE102'),
+(26499,-1595072,'As if I could forget. Listen, Uther, there''s something about the plague you should know... ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12829,0,0,0,'culling SAY_PHASE103'),
+(26499,-1595073,'Oh, no. We''re too late. These people have all been infected! They may look fine now, but it''s just a matter of time before they turn into the undead!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12830,0,0,1,'culling SAY_PHASE104'),
+(26528,-1595074,'What?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12840,0,0,5,'culling SAY_PHASE105'),
+(26499,-1595075,'This entire city must be purged.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12831,0,0,1,'culling SAY_PHASE106'),
+(26528,-1595076,'How can you even consider that? There''s got to be some other way.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12841,0,0,1,'culling SAY_PHASE107'),
+(26499,-1595077,'Damn it, Uther! As your future king, I order you to purge this city!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12832,1,0,5,'culling SAY_PHASE108'),
+(26528,-1595078,'You are not my king yet, boy! Nor would I obey that command even if you were!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12842,1,0,22,'culling SAY_PHASE109'),
+(26499,-1595079,'Then I must consider this an act of treason.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12833,0,0,0,'culling SAY_PHASE110'),
+(26528,-1595080,'Treason? Have you lost your mind, Arthas?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12843,0,0,5,'culling SAY_PHASE111'),
+(26499,-1595081,'Have I? Lord Uther, by my right of succession and the sovereignty of my crown, I hereby relieve you of your command and suspend your paladins from service.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12834,0,0,1,'culling SAY_PHASE112'),
+(26497,-1595082,'Arthas! You can''t just--',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12837,0,0,1,'culling SAY_PHASE113'),
+(26499,-1595083,'It''s done! Those of you who have the will to save this land, follow me! The rest of you... get out of my sight!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12835,0,0,0,'culling SAY_PHASE114'),
+(26528,-1595084,'You''ve just crossed a terrible threshold, Arthas.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12844,0,0,25,'culling SAY_PHASE115'),
+(26499,-1595085,'Jaina?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12836,0,0,1,'culling SAY_PHASE116'),
+(26497,-1595086,'I''m sorry, Arthas. I can''t watch you do this.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,12838,0,0,1,'culling SAY_PHASE117'),
+(26499,-1595087,'Take position here, and I will lead a small force inside Stratholme to begin the culling. We must contain and purge the infected for the sake of all Lordaeron!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14327,0,0,1,'culling SAY_PHASE118'),
+-- Second Act - City Streets
+-- Arthas enters the city and dialog with Mal'Ganis
+-- After defeating 2 bosses he runs to Town Hall
+(26499,-1595088,'Everyone looks ready. Remember, these people are all infected with the plague and will die soon. We must purge Stratholme to protect the remainder of Lordaeron from the Scourge. Let''s go.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14293,0,0,1,'culling SAY_PHASE201'),
+(0,-1595089,'Prince Arthas, may the light be praised! Many people in the town have begun to fall seriously ill, can you help us?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,1,'culling SAY_PHASE202'),
+(26499,-1595090,'I can only help you with a clean death.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14294,0,0,0,'culling SAY_PHASE203'),
+(0,-1595091,'What? This can''t be!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'culling SAY_PHASE204'),
+(26499,-1595092,'That was just the beginning.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14295,0,0,1,'culling SAY_PHASE205'),
+(26499,-1595093,'I won''t allow it, Mal''Ganis! Better that these people die by my hand than serve as your slaves in death!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14296,0,0,5,'culling SAY_PHASE208'),
+(26499,-1595094,'Mal''ganis will send out some of his Scourge minions to interfere with us. Those of you with the strongest steel and magic shall go forth and destroy them. I will lead the rest of my forces in purging Stratholme of the infected.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14885,0,0,1,'culling SAY_PHASE209'),
+(26499,-1595095,'Champions, meet me at town hall at once! We must take the fight to Mal''Ganis.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14297,0,0,1,'culling SAY_PHASE210'),
+-- Third Act - Town Hall
+(26499,-1595096,'Follow me. I know the way trought.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14298,0,0,1,'culling SAY_PHASE301'),
+(0,-1595097,'Ah, you''ve finally arrived Prince Arthas. You''re just in the nick of time.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,1,'culling SAY_PHASE302'),
+(26499,-1595098,'Yes, I''m glad i could get you before the plague.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14299,0,0,1,'culling SAY_PHASE303'),
+(26499,-1595099,'What is this sorcery?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14300,0,0,0,'culling SAY_PHASE304'),
+(0,-1595100,'There''s no need for you to understand, Arthas. All you need to do is die!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'culling SAY_PHASE305'),
+(26499,-1595101,'Mal''Ganis appears to have more than scourge in his arsenal. We should make haste.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14301,0,0,0,'culling SAY_PHASE306'),
+(26499,-1595102,'More vile sorcery! Be ready for anything.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14302,0,0,0,'culling SAY_PHASE307'),
+(26499,-1595103,'Let''s move on.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14303,0,0,0,'culling SAY_PHASE308'),
+(26499,-1595104,'Watch your backs... they have us surrounded in this hall.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14304,0,0,0,'culling SAY_PHASE309'),
+(26499,-1595105,'One less obstacle to deal with.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'culling SAY_PHASE310'),
+(26499,-1595106,'Mal''Ganis is not making this easy...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14305,0,0,0,'culling SAY_PHASE311'),
+(26499,-1595107,'They''re very persistent.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14306,0,0,0,'culling SAY_PHASE312'),
+(26499,-1595108,'What else can be put in my way?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14307,0,0,0,'culling SAY_PHASE313'),
+(26499,-1595109,'I do what i must for Lordaeron. And neither your words nor your actions will stop me.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14309,0,0,5,'culling SAY_PHASE315'),
+-- Fourth Act - Fire Corridor
+(26499,-1595110,'The quickest path to Mal''Ganis lays behind that bookshelf ahead.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14308,0,0,0,'culling SAY_PHASE401'),
+(26499,-1595111,'This will only take a moment.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14310,0,0,0,'culling SAY_PHASE402'),
+(26499,-1595112,'I believe that secret passage still works!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14311,0,0,0,'culling SAY_PHASE403'),
+(26499,-1595113,'Let''s move trought here as quickly as possible. If the undead don''t kill us the fires might.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14312,0,0,0,'culling SAY_PHASE404'),
+(26499,-1595114,'Rest a moment and clear your lungs. But we must move again soon.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14313,0,0,0,'culling SAY_PHASE405'),
+(26499,-1595115,'That''s enough, we must move again. Mal''Ganis awaits.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14314,0,0,0,'culling SAY_PHASE406'),
+(26499,-1595116,'At last some good luck, Market Row has not caught fire yet. Mal''Ganis is supposed to be on Crusader Square which is just ahead. Tell me when you''re ready to move forth.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14315,0,0,0,'culling SAY_PHASE407'),
+-- Fifth Act - Mal'Ganis Fight
+(26499,-1595117,'Justice will be done!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14316,0,0,0,'culling SAY_PHASE501'),
+(26499,-1595118,'We''re going to finish this right now Mal''Ganis... just you and me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14317,0,0,0,'culling SAY_PHASE502'),
+(26499,-1595119,'I''ll hunt you to the ends of the earth if I have to! Do you hear me? To the ends of the earth!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14318,1,0,5,'culling SAY_PHASE503'),
+(26499,-1595120,'You performed well this day. Anything that Mal''Ganis has left behind is yours. Take it as your reward. I must now begin plans for an expedition to Northrend.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14319,0,0,5,'culling SAY_PHASE504');
+
+-- script_texts for boss_epoch_hunter have wrong comment (epoch instead of epoch_hunter)
+-- This generates ambiguities with boss_epoch script_texts just introduced
+-- The following queries eliminate script_texts comment conflict from boss_epoch and boss_epoch_hunter
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_ENTER1' WHERE `entry`=-1560013;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_ENTER2' WHERE `entry`=-1560014;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_ENTER3' WHERE `entry`=-1560015;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_AGGRO1' WHERE `entry`=-1560016;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_AGGRO2' WHERE `entry`=-1560017;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_SLAY1' WHERE `entry`=-1560018;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_SLAY2' WHERE `entry`=-1560019;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_BREATH1' WHERE `entry`=-1560020;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_BREATH2' WHERE `entry`=-1560021;
+UPDATE `script_texts` SET `comment`= 'epoch_hunter SAY_DEATH' WHERE `entry`=-1560022;
diff --git a/sql/updates/7721_world_script_waypoints.sql b/sql/updates/7721_world_script_waypoints.sql
new file mode 100644
index 00000000000..a8d99dc55ed
--- /dev/null
+++ b/sql/updates/7721_world_script_waypoints.sql
@@ -0,0 +1,60 @@
+-- script_waypoints for Arthas movements inside Culling
+DELETE FROM `script_waypoint` WHERE `entry`=26499;
+INSERT INTO `script_waypoint` (`entry`, `pointid`, `location_x`, `location_y`, `location_z`, `waittime`, `point_comment`) VALUES
+(26499,0,1903.167,1291.573,143.32,0, 'culling Bridge WP1'),
+(26499,1,1911.087,1314.263,150.026,0, 'culling Bridge WP2'),
+(26499,2,1902.959,1295.127,143.388,10000, 'culling Bridge WP3'),
+(26499,3,1913.726,1287.407,141.927,0, 'culling Bridge WP4'),
+(26499,4,1990.833,1293.391,145.467,0, 'culling Bridge WP5'),
+(26499,5,1997.003,1317.776,142.963,0, 'culling Bridge WP6'),
+(26499,6,2019.631,1326.084,142.929,0, 'culling Bridge WP7'),
+(26499,7,2026.469,1287.088,143.596,0, 'culling Bridge WP8'),
+(26499,8,2050.660,1287.333,142.671,0, 'culling Bridge WP9'),
+(26499,9,2081.447,1287.770,141.324,0, 'culling Streets WP1'),
+(26499,10,2087.689,1280.344,140.730,0, 'culling Streets WP2'),
+(26499,11,2092.154,1276.645,140.520,0, 'culling Streets WP3'),
+(26499,12,2099.876,1280.21,138.55,0, 'culling Streets WP4'),
+(26499,13,2120.757,1286.97,136.343,0, 'culling Streets WP5'),
+(26499,14,2165.073,1279.338,133.40,0, 'culling Streets WP6'),
+(26499,15,2186.441,1234.445,136.524,0, 'culling Streets WP7'),
+(26499,16,2210.385,1207.550,136.259,0, 'culling Streets WP8'),
+(26499,17,2243.594,1177.705,137.144,0, 'culling Streets WP9'),
+(26499,18,2286.883,1177.262,137.631,0, 'culling Streets WP10'),
+(26499,19,2320.374,1179.954,133.926,0, 'culling Streets WP11'),
+(26499,20,2365.626,1194.838,131.974,0, 'culling Streets WP12'),
+(26499,21,2366.559,1197.759,132.382,0, 'culling House WP1'),
+(26499,22,2394.011,1205.148,134.125,0, 'culling House WP2'),
+(26499,23,2395.854,1206.345,134.039,0, 'culling House WP3'),
+(26499,24,2442.023,1219.205,133.999,0, 'culling House WP3'),
+(26499,25,2447.105,1191.182,148.076,0, 'culling House WP4'),
+(26499,26,2444.250,1190.510,148.076,0, 'culling House WP5'),
+(26499,27,2418.487,1196.059,148.076,0, 'culling House WP6'),
+(26499,28,2401.221,1191.705,148.076,0, 'culling House WP7'),
+(26499,29,2409.205,1157.425,148.190,0, 'culling House WP8'),
+(26499,30,2417.584,1121.026,148.082,0, 'culling House WP9'),
+(26499,31,2423.123,1119.431,148.076,0, 'culling House WP10'),
+(26499,32,2447.833,1112.714,148.076,0, 'culling House WP11'),
+(26499,33,2457.133,1120.941,150.008,0, 'culling House WP12'),
+(26499,34,2459.694,1127.012,150.008,0, 'culling House WP13'),
+(26499,35,2469.617,1122.274,150.008,0, 'culling House WP14'),
+(26499,36,2470.437,1122.794,150.008,3000, 'culling House WP15'),
+(26499,37,2471.662,1123.077,150.035,3000, 'culling House WP16'),
+(26499,38,2483.183,1125.042,149.905,0, 'culling Secret WP1'),
+(26499,39,2487.867,1099.760,144.858,0, 'culling Secret WP2'),
+(26499,40,2498.270,1101.929,144.599,0, 'culling Secret WP3'),
+(26499,41,2492.114,1128.238,139.967,0, 'culling Secret WP4'),
+(26499,42,2500.286,1130.183,139.982,0, 'culling Room WP1'),
+(26499,43,2503.010,1119.241,139.978,0, 'culling Room WP2'),
+(26499,44,2517.820,1122.645,132.066,0, 'culling Room WP3'),
+(26499,45,2540.479,1129.061,130.868,7000, 'culling Fire Street WP1'),
+(26499,46,2568.619,1157.794,126.906,0, 'culling Fire Street WP2'),
+(26499,47,2556.074,1222.058,125.412,20000, 'culling Fire Street WP3'),
+(26499,48,2521.531,1295.209,130.573,0, 'culling Fire Street WP4'),
+(26499,49,2504.362,1348.667,132.944,0, 'culling Fire Street WP5'),
+(26499,50,2450.594,1431.544,131.361,0, 'culling Fire Street WP6'),
+(26499,51,2353.485,1404.839,128.531,0, 'culling Market WP1'),
+(26499,52,2329.882,1406.273,128.013,0, 'culling Market WP2'),
+(26499,53,2329.882,1406.273,128.013,12000, 'culling Market WP3'),
+(26499,54,2327.391,1412.475,127.692,0, 'culling Market WP4'),
+(26499,55,2303.016,1480.070,128.139,0, 'culling Crusader WP1'),
+(26499,56,2296.665,1502.362,128.362,0, 'culling Crusader WP2');
diff --git a/sql/updates/7721_world_scriptname.sql b/sql/updates/7721_world_scriptname.sql
new file mode 100644
index 00000000000..ec1f13c92b0
--- /dev/null
+++ b/sql/updates/7721_world_scriptname.sql
@@ -0,0 +1,7 @@
+UPDATE `instance_template` SET `script`='instance_culling_of_stratholme' WHERE `map`=595;
+UPDATE `creature_template` SET `Scriptname`='npc_arthas' WHERE `entry`=26499;
+UPDATE `creature_template` SET `Scriptname`='boss_salramm' WHERE `entry`=26530;
+UPDATE `creature_template` SET `Scriptname`='boss_meathook' WHERE `entry`=26529;
+UPDATE `creature_template` SET `Scriptname`='boss_epoch' WHERE `entry`=26532;
+UPDATE `creature_template` SET `Scriptname`='boss_mal_ganis' WHERE `entry`=26533;
+UPDATE `creature_template` SET `Scriptname`='boss_infinite_corruptor' WHERE `entry`=32273;
diff --git a/src/game/ScriptLoader.cpp b/src/game/ScriptLoader.cpp
index 0e900c5ab56..8e2eed1e2b5 100644
--- a/src/game/ScriptLoader.cpp
+++ b/src/game/ScriptLoader.cpp
@@ -231,6 +231,13 @@ void AddSC_boss_chrono_lord_deja();
void AddSC_boss_temporus();
void AddSC_dark_portal();
void AddSC_instance_dark_portal();
+void AddSC_boss_epoch(); //CoT Culling Of Stratholme
+void AddSC_boss_infinite_corruptor();
+void AddSC_boss_salramm();
+void AddSC_boss_mal_ganis();
+void AddSC_boss_meathook();
+void AddSC_culling_of_stratholme();
+void AddSC_instance_culling_of_stratholme();
void AddSC_boss_celebras_the_cursed(); //Maraudon
void AddSC_boss_landslide();
void AddSC_boss_noxxion();
@@ -704,6 +711,13 @@ void AddScripts()
AddSC_boss_temporus();
AddSC_dark_portal();
AddSC_instance_dark_portal();
+ AddSC_boss_epoch(); //CoT Culling Of Stratholme
+ AddSC_boss_infinite_corruptor();
+ AddSC_boss_salramm();
+ AddSC_boss_mal_ganis();
+ AddSC_boss_meathook();
+ AddSC_culling_of_stratholme();
+ AddSC_instance_culling_of_stratholme();
AddSC_boss_celebras_the_cursed(); //Maraudon
AddSC_boss_landslide();
AddSC_boss_noxxion();
diff --git a/src/scripts/CMakeLists.txt b/src/scripts/CMakeLists.txt
index 87179533ebf..c5e917923f3 100644
--- a/src/scripts/CMakeLists.txt
+++ b/src/scripts/CMakeLists.txt
@@ -221,6 +221,7 @@ SET(scripts_STAT_SRCS
kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp
kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp
kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp
+ kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp
kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h
kalimdor/caverns_of_time/dark_portal/dark_portal.h
kalimdor/caverns_of_time/dark_portal/instance_dark_portal.cpp
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp
index 7cde29ee855..d95d8d696d2 100644
--- a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp
@@ -30,30 +30,24 @@ Script Data End */
enum Spells
{
- SPELL_CURSE_OF_EXERTION = 52772,
- SPELL_TIME_WARP = 52766, //Time slows down, reducing attack, casting and movement speed by 70% for 6 sec.
- SPELL_TIME_STOP = 58848, //Stops time in a 50 yard sphere for 2 sec.
- SPELL_WOUNDING_STRIKE = 52771, //Used only on the tank
- H_SPELL_WOUNDING_STRIKE = 58830
+ SPELL_CURSE_OF_EXERTION = 52772,
+ SPELL_TIME_WARP = 52766, //Time slows down, reducing attack, casting and movement speed by 70% for 6 sec.
+ SPELL_TIME_STOP = 58848, //Stops time in a 50 yard sphere for 2 sec.
+ SPELL_WOUNDING_STRIKE = 52771, //Used only on the tank
+ H_SPELL_WOUNDING_STRIKE = 58830
};
-//not in db
enum Yells
{
- SAY_INTRO = -1595000, //"Prince Arthas Menethil, on this day, a powerful darkness has taken hold of your soul. The death you are destined to visit upon others will this day be your own."
- SAY_AGGRO = -1595001, //"We'll see about that, young prince."
- SAY_TIME_WARP_1 = -1595002, //"Tick tock, tick tock..."
- SAY_TIME_WARP_2 = -1595003, //"Not quick enough!"
- SAY_TIME_WARP_3 = -1595004, //"Let's get this over with. "
- SAY_SLAY_1 = -1595005, //"There is no future for you."
- SAY_SLAY_2 = -1595006, //"This is the hour of our greatest triumph!"
- SAY_SLAY_3 = -1595007, //"You were destined to fail. "
- SAY_DEATH = -1595008 //"*gurgles*"
-};
-enum CombatPhases
-{
- INTRO,
- COMBAT
+ SAY_INTRO = -1595000, //"Prince Arthas Menethil, on this day, a powerful darkness has taken hold of your soul. The death you are destined to visit upon others will this day be your own."
+ SAY_AGGRO = -1595001, //"We'll see about that, young prince."
+ SAY_TIME_WARP_1 = -1595002, //"Tick tock, tick tock..."
+ SAY_TIME_WARP_2 = -1595003, //"Not quick enough!"
+ SAY_TIME_WARP_3 = -1595004, //"Let's get this over with. "
+ SAY_SLAY_1 = -1595005, //"There is no future for you."
+ SAY_SLAY_2 = -1595006, //"This is the hour of our greatest triumph!"
+ SAY_SLAY_3 = -1595007, //"You were destined to fail. "
+ SAY_DEATH = -1595008 //"*gurgles*"
};
struct boss_epochAI : public ScriptedAI
@@ -71,8 +65,6 @@ struct boss_epochAI : public ScriptedAI
uint32 uiTimeStopTimer;
uint32 uiCurseOfExertionTimer;
- CombatPhases Phase;
-
ScriptedInstance* pInstance;
void Reset()
@@ -98,11 +90,6 @@ struct boss_epochAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
- if (Phase == INTRO)
- {
- return;
- }
-
//Return since we have no target
if (!UpdateVictim())
return;
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp
index 6691b8fd2b0..aa6e66a853a 100644
--- a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp
@@ -21,13 +21,21 @@
enum Spells
{
- SPELL_CORRUPTING_BLIGHT = 60588,
- SPELL_VOID_STRIKE = 60590
+ SPELL_CORRUPTING_BLIGHT = 60588,
+ SPELL_VOID_STRIKE = 60590
};
-struct boss_infiniteAI : public ScriptedAI
+enum Yells
{
- boss_infiniteAI(Creature *c) : ScriptedAI(c)
+ SAY_AGGRO = -1595045,
+ SAY_FAIL = -1595046,
+ SAY_DEATH = -1595047
+};
+
+
+struct boss_infinite_corruptorAI : public ScriptedAI
+{
+ boss_infinite_corruptorAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
@@ -64,17 +72,17 @@ struct boss_infiniteAI : public ScriptedAI
}
};
-CreatureAI* GetAI_boss_infinite(Creature* pCreature)
+CreatureAI* GetAI_boss_infinite_corruptor(Creature* pCreature)
{
- return new boss_infiniteAI (pCreature);
+ return new boss_infinite_corruptorAI(pCreature);
}
-void AddSC_infinite_epoch()
+void AddSC_boss_infinite_corruptor()
{
Script *newscript;
newscript = new Script;
- newscript->Name = "boss_infinite";
- newscript->GetAI = &GetAI_boss_infinite;
+ newscript->Name = "boss_infinite_corruptor";
+ newscript->GetAI = &GetAI_boss_infinite_corruptor;
newscript->RegisterSelf();
}
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp
index 0c4f7dbdaca..054669f7fea 100644
--- a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp
@@ -32,35 +32,34 @@ update creature_template set scriptname = 'boss_mal_ganis' where entry = '';
enum Spells
{
- SPELL_CARRION_SWARM = 52720, //A cresting wave of chaotic magic splashes over enemies in front of the caster, dealing 3230 to 3570 Shadow damage and 380 to 420 Shadow damage every 3 sec. for 15 sec.
- H_SPELL_CARRION_SWARM = 58852,
- SPELL_MIND_BLAST = 52722, //Inflicts 4163 to 4837 Shadow damage to an enemy.
- H_SPELL_MIND_BLAST = 58850,
- SPELL_SLEEP = 52721, //Puts an enemy to sleep for up to 10 sec. Any damage caused will awaken the target.
- H_SPELL_SLEEP = 58849,
- SPELL_VAMPIRIC_TOUCH = 52723 //Heals the caster for half the damage dealt by a melee attack.
+ SPELL_CARRION_SWARM = 52720, //A cresting wave of chaotic magic splashes over enemies in front of the caster, dealing 3230 to 3570 Shadow damage and 380 to 420 Shadow damage every 3 sec. for 15 sec.
+ H_SPELL_CARRION_SWARM = 58852,
+ SPELL_MIND_BLAST = 52722, //Inflicts 4163 to 4837 Shadow damage to an enemy.
+ H_SPELL_MIND_BLAST = 58850,
+ SPELL_SLEEP = 52721, //Puts an enemy to sleep for up to 10 sec. Any damage caused will awaken the target.
+ H_SPELL_SLEEP = 58849,
+ SPELL_VAMPIRIC_TOUCH = 52723 //Heals the caster for half the damage dealt by a melee attack.
};
-//not in db
enum Yells
{
- SAY_INTRO_1 = -1595009,
- SAY_INTRO_2 = -1595010,
- SAY_OUTRO = -1595011,
- SAY_AGGRO = -1595012,
- SAY_KILL_1 = -1595013,
- SAY_KILL_2 = -1595014,
- SAY_KILL_3 = -1595015,
- SAY_SLAY_1 = -1595016,
- SAY_SLAY_2 = -1595017,
- SAY_SLAY_3 = -1595018,
- SAY_SLAY_4 = -1595019,
- SAY_SLEEP_1 = -1595020,
- SAY_SLEEP_2 = -1595021,
- SAY_30HEALTH = -1595022,
- SAY_15HEALTH = -1595023,
- SAY_ESCAPE_SPEECH_1 = -1595024,
- SAY_ESCAPE_SPEECH_2 = -1595025
+ SAY_INTRO_1 = -1595009,
+ SAY_INTRO_2 = -1595010,
+ SAY_AGGRO = -1595011,
+ SAY_KILL_1 = -1595012,
+ SAY_KILL_2 = -1595013,
+ SAY_KILL_3 = -1595014,
+ SAY_SLAY_1 = -1595015,
+ SAY_SLAY_2 = -1595016,
+ SAY_SLAY_3 = -1595017,
+ SAY_SLAY_4 = -1595018,
+ SAY_SLEEP_1 = -1595019,
+ SAY_SLEEP_2 = -1595020,
+ SAY_30HEALTH = -1595021,
+ SAY_15HEALTH = -1595022,
+ SAY_ESCAPE_SPEECH_1 = -1595023,
+ SAY_ESCAPE_SPEECH_2 = -1595024,
+ SAY_OUTRO = -1595025,
};
enum CombatPhases
@@ -82,6 +81,7 @@ struct boss_mal_ganisAI : public ScriptedAI
uint32 uiSleepTimer;
uint8 uiOutroStep;
+ uint32 uiOutroTimer;
bool bYelled;
bool bYelled2;
@@ -101,6 +101,7 @@ struct boss_mal_ganisAI : public ScriptedAI
uiMindBlastTimer = 11000;
uiVampiricTouchTimer = urand(10000,15000);
uiSleepTimer = urand(15000,20000);
+ uiOutroTimer = 1000;
if (pInstance)
pInstance->SetData(DATA_MAL_GANIS_EVENT, NOT_STARTED);
@@ -116,6 +117,12 @@ struct boss_mal_ganisAI : public ScriptedAI
pInstance->SetData(DATA_MAL_GANIS_EVENT, IN_PROGRESS);
}
+ void DamageTaken(Unit *done_by, uint32 &damage)
+ {
+ if (damage >= m_creature->GetHealth() && done_by != m_creature)
+ damage = m_creature->GetHealth()-1;
+ }
+
void UpdateAI(const uint32 diff)
{
switch(Phase)
@@ -164,16 +171,18 @@ struct boss_mal_ganisAI : public ScriptedAI
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, DUNGEON_MODE(SPELL_MIND_BLAST, H_SPELL_MIND_BLAST));
+ uiMindBlastTimer = 6000;
} else uiMindBlastTimer -= diff;
if (uiVampiricTouchTimer < diff)
{
- if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(pTarget, SPELL_VAMPIRIC_TOUCH);
+ DoCast(m_creature, SPELL_VAMPIRIC_TOUCH);
+ uiVampiricTouchTimer = 32000;
} else uiVampiricTouchTimer -= diff;
if (uiSleepTimer < diff)
{
+ DoScriptText(RAND(SAY_SLEEP_1,SAY_SLEEP_2), m_creature);
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, DUNGEON_MODE(SPELL_SLEEP, H_SPELL_SLEEP));
uiSleepTimer = urand(15000,20000);
@@ -181,13 +190,57 @@ struct boss_mal_ganisAI : public ScriptedAI
DoMeleeAttackIfReady();
break;
+ case OUTRO:
+ if (uiOutroTimer < diff)
+ {
+ switch(uiOutroStep)
+ {
+ case 1:
+ DoScriptText(SAY_ESCAPE_SPEECH_1, m_creature);
+ me->GetMotionMaster()->MoveTargetedHome();
+ ++uiOutroStep;
+ uiOutroTimer = 8000;
+ break;
+ case 2:
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, pArthas->GetGUID());
+ m_creature->HandleEmoteCommand(29);
+ DoScriptText(SAY_ESCAPE_SPEECH_2, m_creature);
+ ++uiOutroStep;
+ uiOutroTimer = 9000;
+ break;
+ case 3:
+ DoScriptText(SAY_OUTRO, m_creature);
+ ++uiOutroStep;
+ uiOutroTimer = 16000;
+ break;
+ case 4:
+ m_creature->HandleEmoteCommand(33);
+ ++uiOutroStep;
+ uiOutroTimer = 500;
+ break;
+ case 5:
+ m_creature->SetVisibility(VISIBILITY_OFF);
+ m_creature->Kill(m_creature);
+ break;
+
+ }
+ } else uiOutroTimer -= diff;
+ break;
}
}
+
void JustDied(Unit* killer)
{
if (pInstance)
- pInstance->SetData(DATA_MAL_GANIS_EVENT, DONE);
+ {
+ pInstance->SetData(DATA_MAL_GANIS_EVENT, DONE);
+
+ // give achievement credit to players. criteria use spell 58630 which doesn't exist.
+ if (pInstance)
+ pInstance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 58630);
+ }
}
+
void KilledUnit(Unit *victim)
{
if (victim == m_creature)
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp
index 597a4159fa8..e9cae41409a 100644
--- a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp
@@ -29,21 +29,21 @@ Script Data End */
enum Spells
{
- SPELL_CONSTRICTING_CHAINS = 52696, //Encases the targets in chains, dealing 1800 Physical damage every 1 sec. and stunning the target for 5 sec.
- H_SPELL_CONSTRICTING_CHAINS = 58823,
- SPELL_DISEASE_EXPULSION = 52666, //Meathook belches out a cloud of disease, dealing 1710 to 1890 Nature damage and interrupting the spell casting of nearby enemy targets for 4 sec.
- H_SPELL_DISEASE_EXPULSION = 58824,
- SPELL_FRENZY = 58841 //Increases the caster's Physical damage by 10% for 30 sec.
+ SPELL_CONSTRICTING_CHAINS = 52696, //Encases the targets in chains, dealing 1800 Physical damage every 1 sec. and stunning the target for 5 sec.
+ H_SPELL_CONSTRICTING_CHAINS = 58823,
+ SPELL_DISEASE_EXPULSION = 52666, //Meathook belches out a cloud of disease, dealing 1710 to 1890 Nature damage and interrupting the spell casting of nearby enemy targets for 4 sec.
+ H_SPELL_DISEASE_EXPULSION = 58824,
+ SPELL_FRENZY = 58841 //Increases the caster's Physical damage by 10% for 30 sec.
};
-//not in db
+
enum Yells
{
- SAY_AGGRO = -1595026,
- SAY_SLAY_1 = -1595027,
- SAY_SLAY_2 = -1595028,
- SAY_SLAY_3 = -1595029,
- SAY_SPAWN = -1595030,
- SAY_DEATH = -1595031
+ SAY_AGGRO = -1595026,
+ SAY_SLAY_1 = -1595027,
+ SAY_SLAY_2 = -1595028,
+ SAY_SLAY_3 = -1595029,
+ SAY_SPAWN = -1595030,
+ SAY_DEATH = -1595031
};
struct boss_meathookAI : public ScriptedAI
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp
index ae8a9f0fe52..c1841771559 100644
--- a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp
@@ -41,22 +41,21 @@ enum Spells
SPELL_SUMMON_GHOULS = 52451
};
-//not in db
enum Yells
{
- SAY_AGGRO = -1595032,
- SAY_SPAWN = -1595033,
- SAY_SLAY_1 = -1595034,
- SAY_SLAY_2 = -1595035,
- SAY_SLAY_3 = -1595036,
- SAY_DEATH = -1595037,
- SAY_EXPLODE_GHOUL_1 = -1595038,
- SAY_EXPLODE_GHOUL_2 = -1595039,
- SAY_STEAL_FLESH_1 = -1595040,
- SAY_STEAL_FLESH_2 = -1595041,
- SAY_STEAL_FLESH_3 = -1595042,
- SAY_SUMMON_GHOULS_1 = -1595043,
- SAY_SUMMON_GHOULS_2 = -1595044
+ SAY_AGGRO = -1595032,
+ SAY_SPAWN = -1595033,
+ SAY_SLAY_1 = -1595034,
+ SAY_SLAY_2 = -1595035,
+ SAY_SLAY_3 = -1595036,
+ SAY_DEATH = -1595037,
+ SAY_EXPLODE_GHOUL_1 = -1595038,
+ SAY_EXPLODE_GHOUL_2 = -1595039,
+ SAY_STEAL_FLESH_1 = -1595040,
+ SAY_STEAL_FLESH_2 = -1595041,
+ SAY_STEAL_FLESH_3 = -1595042,
+ SAY_SUMMON_GHOULS_1 = -1595043,
+ SAY_SUMMON_GHOULS_2 = -1595044
};
struct boss_salrammAI : public ScriptedAI
@@ -64,23 +63,25 @@ struct boss_salrammAI : public ScriptedAI
boss_salrammAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
+ if (pInstance)
+ DoScriptText(SAY_SPAWN,m_creature);
}
- uint32 Curse_flesh_Timer;
- uint32 Explode_ghoul_Timer;
- uint32 Shadow_bolt_Timer;
- uint32 Steal_flesh_Timer;
- uint32 Summon_ghouls_Timer;
+ uint32 uiCurseFleshTimer;
+ uint32 uiExplodeGhoulTimer;
+ uint32 uiShadowBoltTimer;
+ uint32 uiStealFleshTimer;
+ uint32 uiSummonGhoulsTimer;
ScriptedInstance* pInstance;
void Reset()
{
- Curse_flesh_Timer = 30000; //30s DBM
- Explode_ghoul_Timer = urand(25000,28000); //approx 6 sec after summon ghouls
- Shadow_bolt_Timer = urand(8000,12000); // approx 10s
- Steal_flesh_Timer = 12345;
- Summon_ghouls_Timer = urand(19000,24000); //on a video approx 24s after aggro
+ uiCurseFleshTimer = 30000; //30s DBM
+ uiExplodeGhoulTimer = urand(25000,28000); //approx 6 sec after summon ghouls
+ uiShadowBoltTimer = urand(8000,12000); // approx 10s
+ uiStealFleshTimer = 12345;
+ uiSummonGhoulsTimer = urand(19000,24000); //on a video approx 24s after aggro
if (pInstance)
pInstance->SetData(DATA_SALRAMM_EVENT, NOT_STARTED);
@@ -94,8 +95,6 @@ struct boss_salrammAI : public ScriptedAI
pInstance->SetData(DATA_SALRAMM_EVENT, IN_PROGRESS);
}
- void AttackStart(Unit* who) {}
- void MoveInLineOfSight(Unit* who) {}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
@@ -103,37 +102,37 @@ struct boss_salrammAI : public ScriptedAI
return;
//Curse of twisted flesh timer
- if (Curse_flesh_Timer <= diff)
+ if (uiCurseFleshTimer <= diff)
{
DoCast(m_creature->getVictim(), SPELL_CURSE_OF_TWISTED_FLESH);
- Curse_flesh_Timer = 37000;
- } else Curse_flesh_Timer -= diff;
+ uiCurseFleshTimer = 37000;
+ } else uiCurseFleshTimer -= diff;
//Shadow bolt timer
- if (Shadow_bolt_Timer <= diff)
+ if (uiShadowBoltTimer <= diff)
{
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, DUNGEON_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT));
- Shadow_bolt_Timer = urand(8000,12000);
- } else Shadow_bolt_Timer -= diff;
+ uiShadowBoltTimer = urand(8000,12000);
+ } else uiShadowBoltTimer -= diff;
//Steal Flesh timer
- if (Steal_flesh_Timer <= diff)
+ if (uiStealFleshTimer <= diff)
{
DoScriptText(RAND(SAY_STEAL_FLESH_1,SAY_STEAL_FLESH_2,SAY_STEAL_FLESH_3), m_creature);
if (Unit* random_pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(random_pTarget, SPELL_STEAL_FLESH);
- Steal_flesh_Timer = 10000;
- } else Steal_flesh_Timer -= diff;
+ uiStealFleshTimer = 10000;
+ } else uiStealFleshTimer -= diff;
//Summon ghouls timer
- if (Summon_ghouls_Timer <= diff)
+ if (uiSummonGhoulsTimer <= diff)
{
DoScriptText(RAND(SAY_SUMMON_GHOULS_1,SAY_SUMMON_GHOULS_2), m_creature);
if (Unit* random_pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(random_pTarget, SPELL_SUMMON_GHOULS);
- Summon_ghouls_Timer = 10000;
- } else Summon_ghouls_Timer -= diff;
+ uiSummonGhoulsTimer = 10000;
+ } else uiSummonGhoulsTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp
new file mode 100644
index 00000000000..63c7f0b0f83
--- /dev/null
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp
@@ -0,0 +1,1210 @@
+/*
+* Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "ScriptedPch.h"
+#include "culling_of_stratholme.h"
+#include "ScriptedEscortAI.h"
+
+enum Says
+{
+ //First Act - Uther and Jaina Dialog
+ SAY_PHASE101 = -1595070, //Arthas
+ SAY_PHASE102 = -1595071, //Uther
+ SAY_PHASE103 = -1595072, //Arthas
+ SAY_PHASE104 = -1595073, //Arthas
+ SAY_PHASE105 = -1595074, //Uther
+ SAY_PHASE106 = -1595075, //Arthas
+ SAY_PHASE107 = -1595076, //Uther
+ SAY_PHASE108 = -1595077, //Arthas
+ SAY_PHASE109 = -1595078, //Arthas
+ SAY_PHASE110 = -1595079, //Uther
+ SAY_PHASE111 = -1595080, //Arthas
+ SAY_PHASE112 = -1595081, //Uther
+ SAY_PHASE113 = -1595082, //Jaina
+ SAY_PHASE114 = -1595083, //Arthas
+ SAY_PHASE115 = -1595084, //Uther
+ SAY_PHASE116 = -1595085, //Arthas
+ SAY_PHASE117 = -1595086, //Jaina
+ SAY_PHASE118 = -1595087, //Arthas
+ //Second Act - City Streets
+ SAY_PHASE201 = -1595088, //Arthas
+ SAY_PHASE202 = -1595089, //Cityman
+ SAY_PHASE203 = -1595090, //Arthas
+ SAY_PHASE204 = -1595091, //Crazyman
+ SAY_PHASE205 = -1595092, //Arthas
+ SAY_PHASE206 = -1595009, //Malganis
+ SAY_PHASE207 = -1595010, //Malganis
+ SAY_PHASE208 = -1595093, //Arthas
+ SAY_PHASE209 = -1595094, //Arthas
+ SAY_PHASE210 = -1595095, //Arthas
+ //Third Act - Town Hall
+ SAY_PHASE301 = -1595096, //Arthas
+ SAY_PHASE302 = -1595097, //Drakonian
+ SAY_PHASE303 = -1595098, //Arthas
+ SAY_PHASE304 = -1595099, //Arthas
+ SAY_PHASE305 = -1595100, //Drakonian
+ SAY_PHASE306 = -1595101, //Arthas
+ SAY_PHASE307 = -1595102, //Arthas
+ SAY_PHASE308 = -1595103, //Arthas
+ SAY_PHASE309 = -1595104, //Arthas
+ SAY_PHASE310 = -1595105, //Arthas
+ SAY_PHASE311 = -1595106, //Arthas
+ SAY_PHASE312 = -1595107, //Arthas
+ SAY_PHASE313 = -1595108, //Arthas
+ SAY_PHASE314 = -1595000, //Epoch
+ SAY_PHASE315 = -1595109, //Arthas
+ //Fourth Act - Fire Corridor
+ SAY_PHASE401 = -1595110, //Arthas
+ SAY_PHASE402 = -1595111, //Arthas
+ SAY_PHASE403 = -1595112, //Arthas
+ SAY_PHASE404 = -1595113, //Arthas
+ SAY_PHASE405 = -1595114, //Arthas
+ SAY_PHASE406 = -1595115, //Arthas
+ SAY_PHASE407 = -1595116, //Arthas
+ //Fifth Act - Mal'Ganis Fight
+ SAY_PHASE501 = -1595117, //Arthas
+ SAY_PHASE502 = -1595118, //Arthas
+ SAY_PHASE503 = -1595119, //Arthas
+ SAY_PHASE504 = -1595120, //Arthas
+};
+
+enum NPCs
+{
+ NPC_INFINITE_ADVERSARY = 27742,
+ NPC_INFINITE_HUNTER = 27743,
+ NPC_INFINITE_AGENT = 27744,
+ NPC_TIME_RIFT = 28409,
+ NPC_ZOMBIE = 27737,
+ NPC_GHOUL = 28249,
+ NPC_NECROMANCER = 28200,
+ NPC_STALKER = 28199,
+ NPC_FIEND = 27734,
+ NPC_GOLEM = 28201,
+ NPC_EGHOUL = 27729,
+ NPC_CONSTRUCT = 27736,
+
+ NPC_INVIS_TARGET = 20562,
+
+ NPC_KNIGHT_ESCORT = 27745,
+ NPC_PRIEST_ESCORT = 27747,
+ NPC_CITY_MAN = 28167,
+ NPC_CITY_MAN2 = 28169,
+ NPC_CITY_MAN3 = 31126,
+ NPC_CITY_MAN4 = 31127,
+};
+
+enum Spells
+{
+ SPELL_FEAR = 39176,
+ SPELL_ARTHAS_AURA = 52442,
+ SPELL_EXORCISM_N = 52445,
+ SPELL_EXORCISM_H = 58822,
+ SPELL_HOLY_LIGHT = 52444,
+};
+
+enum GossipMenuArthas
+{
+ GOSSIP_MENU_ARTHAS_1 = 100001,
+ GOSSIP_MENU_ARTHAS_2 = 100002,
+ GOSSIP_MENU_ARTHAS_3 = 100003,
+ GOSSIP_MENU_ARTHAS_4 = 100004,
+ GOSSIP_MENU_ARTHAS_5 = 100005
+};
+
+enum
+{
+ ENCOUNTER_WAVES_NUMBER = 8,
+ ENCOUNTER_WAVES_MAX_SPAWNS = 5,
+ ENCOUNTER_DRACONIAN_NUMBER = 4,
+ ENCOUNTER_CHRONO_SPAWNS = 19
+};
+
+// Locations for necromancers and add to spawn
+float WavesLocations[ENCOUNTER_WAVES_NUMBER][ENCOUNTER_WAVES_MAX_SPAWNS][5]=
+{
+ {
+ {NPC_ZOMBIE, 2164.698975, 1255.392944, 135.040878, 0.490202},
+ {NPC_ZOMBIE, 2183.501465, 1263.079102, 134.859055, 3.169981},
+ {NPC_GHOUL, 2177.512939, 1247.313843, 135.846695, 1.696574},
+ {NPC_GHOUL, 2171.991943, 1246.615845, 135.745026, 1.696574},
+ {0, 0, 0, 0, 0}
+ },
+ {
+ {NPC_GHOUL, 2254.434326, 1163.427612, 138.055038, 2.077358},
+ {NPC_GHOUL, 2254.703613, 1158.867798, 138.212234, 2.345532},
+ {NPC_GHOUL, 2257.615723, 1162.310913, 138.091202, 2.077358},
+ {NPC_NECROMANCER, 2258.258057, 1157.250732, 138.272873, 2.387766},
+ {0, 0, 0, 0, 0}
+ },
+ {
+ {NPC_STALKER, 2348.120117, 1202.302490, 130.491104, 4.698538},
+ {NPC_GHOUL, 2352.863525, 1207.819092, 130.424271, 4.949865},
+ {NPC_GHOUL, 2343.593750, 1207.915039, 130.781311, 4.321547},
+ {NPC_NECROMANCER, 2348.257324, 1212.202515, 130.670135, 4.450352},
+ {0, 0, 0, 0, 0}
+ },
+ {
+ {NPC_STALKER, 2139.825195, 1356.277100, 132.199615, 5.820131},
+ {NPC_GHOUL, 2137.073486, 1362.464844, 132.271637, 5.820131},
+ {NPC_GHOUL, 2134.075684, 1354.148071, 131.885864, 5.820131},
+ {NPC_NECROMANCER, 2133.302246, 1358.907837, 132.037689, 5.820131},
+ {0, 0, 0, 0, 0}
+ },
+ {
+ {NPC_NECROMANCER, 2264.013428, 1174.055908, 138.093094, 2.860481},
+ {NPC_GHOUL, 2264.207764, 1170.892700, 138.034973, 2.860481},
+ {NPC_GHOUL, 2266.948975, 1176.898926, 137.976929, 2.860481},
+ {NPC_STALKER, 2269.215576, 1170.109253, 137.742691, 2.860481},
+ {NPC_FIEND, 2273.106689, 1176.101074, 137.880508, 2.860481}
+ },
+ {
+ {NPC_GOLEM, 2349.701660, 1188.436646, 130.428864, 3.908642},
+ {NPC_GHOUL, 2349.909180, 1194.582642, 130.417816, 3.577001},
+ {NPC_EGHOUL, 2354.662598, 1185.692017, 130.552032, 3.577001},
+ {NPC_EGHOUL, 2354.716797, 1191.614380, 130.539810, 3.577001},
+ {0, 0, 0, 0, 0}
+ },
+ {
+ {NPC_CONSTRUCT, 2145.212891, 1355.288086, 132.288773, 6.004838},
+ {NPC_NECROMANCER, 2137.078613, 1357.612671, 132.173340, 6.004838},
+ {NPC_EGHOUL, 2139.402100, 1352.541626, 132.127518, 5.812850},
+ {NPC_EGHOUL, 2142.408447, 1360.760620, 132.321564, 5.812850},
+ {0, 0, 0, 0, 0}
+ },
+ {
+ {NPC_GHOUL, 2172.686279, 1259.618164, 134.391754, 1.865499},
+ {NPC_FIEND, 2177.649170, 1256.061157, 135.096512, 1.849572},
+ {NPC_CONSTRUCT, 2170.782959, 1253.594849, 134.973022, 1.849572},
+ {NPC_NECROMANCER, 2175.595703, 1249.041992, 135.603531, 1.849572},
+ {0, 0, 0, 0, 0}
+ }
+};
+
+// Locations for rifts to spawn and draconians to go
+float RiftAndSpawnsLocations[ENCOUNTER_CHRONO_SPAWNS][5]=
+{
+ {NPC_TIME_RIFT, 2431.790039, 1190.670044, 148.076004, 0.187923},
+ {NPC_INFINITE_ADVERSARY, 2433.857910, 1185.612061, 148.075974, 4.566168},
+ {NPC_INFINITE_ADVERSARY, 2437.577881, 1188.241089, 148.075974, 0.196999},
+ {NPC_INFINITE_AGENT, 2437.165527, 1192.294922, 148.075974, 0.169247},
+ {NPC_INFINITE_HUNTER, 2434.989990, 1197.679565, 148.075974, 0.715971},
+ {NPC_TIME_RIFT, 2403.954834, 1178.815430, 148.075943, 4.966126},
+ {NPC_INFINITE_AGENT, 2403.676758, 1171.495850, 148.075607, 4.902797},
+ {NPC_INFINITE_HUNTER, 2407.691162, 1172.162720, 148.075607, 4.963010},
+ {NPC_TIME_RIFT, 2414.217041, 1133.446167, 148.076050, 1.706972},
+ {NPC_INFINITE_ADVERSARY, 2416.024658, 1139.456177, 148.076431, 1.752129},
+ {NPC_INFINITE_HUNTER, 2410.866699, 1139.680542, 148.076431, 1.752129},
+ {NPC_TIME_RIFT, 2433.081543, 1099.869751, 148.076157, 1.809509},
+ {NPC_INFINITE_ADVERSARY, 2426.947998, 1107.471680, 148.076019, 1.877580},
+ {NPC_INFINITE_HUNTER, 2432.944580, 1108.896362, 148.208160, 2.199241},
+ {NPC_TIME_RIFT, 2444.077637, 1114.366089, 148.076157, 3.049565},
+ {NPC_INFINITE_ADVERSARY, 2438.190674, 1118.368164, 148.076172, 3.139232},
+ {NPC_INFINITE_AGENT, 2435.861328, 1113.402954, 148.169327, 2.390271},
+ {NPC_TIME_RIFT, 2463.131592, 1115.391724, 152.473129, 3.409651},
+ {NPC_EPOCH, 2451.809326, 1112.901245, 149.220459, 3.363617}
+};
+
+struct npc_arthasAI : public npc_escortAI
+{
+ npc_arthasAI(Creature *pCreature) : npc_escortAI(pCreature)
+ {
+ pInstance = pCreature->GetInstanceData();
+ Reset();
+ }
+
+ ScriptedInstance* pInstance;
+
+ bool bStepping;
+ uint32 uiStep;
+ uint32 uiPhaseTimer;
+ uint32 uiGossipStep;
+ uint32 uiPlayerFaction;
+ uint32 uiBossEvent;
+ uint32 uiWave;
+
+ uint64 uiUtherGUID;
+ uint64 uiJainaGUID;
+ uint64 uiCitymenGUID[2];
+ uint64 uiWaveGUID[ENCOUNTER_WAVES_MAX_SPAWNS];
+ uint64 uiInfiniteDraconianGUID[ENCOUNTER_DRACONIAN_NUMBER];
+ uint64 uiStalkerGUID;
+
+ uint64 uiBossGUID; //uiMeathookGUID || uiSalrammGUID
+ uint64 uiEpochGUID;
+ uint64 uiMalganisGUID;
+ uint64 uiInfiniteGUID;
+
+ uint32 uiExorcismTimer;
+
+ void Reset()
+ {
+ uiUtherGUID = 0;
+ uiJainaGUID = 0;
+
+ for (uint8 i = 0; i < 2; ++i)
+ uiCitymenGUID[i] = 0;
+
+ for (uint8 i = 0; i < ENCOUNTER_WAVES_MAX_SPAWNS; ++i)
+ uiWaveGUID[i] = 0;
+
+ for (uint8 i = 0; i < ENCOUNTER_DRACONIAN_NUMBER; ++i)
+ uiInfiniteDraconianGUID[i] = 0;
+
+ uiStalkerGUID = 0;
+ uiBossGUID = 0;
+ uiEpochGUID = 0;
+ uiMalganisGUID = 0;
+ uiInfiniteGUID = 0;
+
+ if (pInstance) {
+ pInstance->SetData(DATA_ARTHAS_EVENT, NOT_STARTED);
+ switch(pInstance->GetData(DATA_ARTHAS_EVENT))
+ {
+ case NOT_STARTED:
+ bStepping = true;
+ uiStep = 0;
+ m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ uiBossEvent = DATA_MEATHOOK_EVENT;
+ uiGossipStep = 0;
+ break;
+ }
+ uiPhaseTimer = 1000;
+ uiExorcismTimer = 7300;
+ uiWave = 0;
+ }
+ }
+
+ void EnterCombat(Unit* who)
+ {
+ DoCast(m_creature, SPELL_ARTHAS_AURA);
+ }
+
+ void JustDied(Unit *killer)
+ {
+ if (pInstance)
+ pInstance->SetData(DATA_ARTHAS_EVENT, FAIL);
+ }
+
+ void SpawnTimeRift(uint32 timeRiftID, uint64* guidVector)
+ {
+ m_creature->SummonCreature((uint32)RiftAndSpawnsLocations[timeRiftID][0],RiftAndSpawnsLocations[timeRiftID][1],RiftAndSpawnsLocations[timeRiftID][2],RiftAndSpawnsLocations[timeRiftID][3],RiftAndSpawnsLocations[timeRiftID][4],TEMPSUMMON_TIMED_DESPAWN,11000);
+
+ for (uint32 i = timeRiftID+1; i < ENCOUNTER_CHRONO_SPAWNS; ++i)
+ {
+ if ((uint32)RiftAndSpawnsLocations[i][0] == NPC_TIME_RIFT) break;
+ if (Creature* pTemp = m_creature->SummonCreature((uint32)RiftAndSpawnsLocations[i][0],RiftAndSpawnsLocations[timeRiftID][1],RiftAndSpawnsLocations[timeRiftID][2],RiftAndSpawnsLocations[timeRiftID][3],RiftAndSpawnsLocations[timeRiftID][4],TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,900000))
+ {
+ guidVector[i-timeRiftID-1] = pTemp->GetGUID();
+ pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_UNK_9);
+ pTemp->SetReactState(REACT_PASSIVE);
+ pTemp->GetMotionMaster()->MovePoint(0, RiftAndSpawnsLocations[i][1],RiftAndSpawnsLocations[i][2],RiftAndSpawnsLocations[i][3]);
+ if ((uint32)RiftAndSpawnsLocations[i][0] == NPC_EPOCH)
+ uiEpochGUID = pTemp->GetGUID();
+ }
+ }
+ }
+
+ void SpawnWaveGroup(uint32 waveID, uint64* guidVector)
+ {
+ for (uint32 i = 0; i < ENCOUNTER_WAVES_MAX_SPAWNS; ++i)
+ {
+ if ((uint32)WavesLocations[waveID][i][0] == 0) break;
+ if (Creature* pTemp = m_creature->SummonCreature((uint32)WavesLocations[waveID][i][0],WavesLocations[waveID][i][1],WavesLocations[waveID][i][2],WavesLocations[waveID][i][3],WavesLocations[waveID][i][4],TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,900000))
+ {
+ guidVector[i] = pTemp->GetGUID();
+ }
+ }
+ }
+
+ void SetHoldState(bool bOnHold)
+ {
+ SetEscortPaused(bOnHold);
+ }
+
+ void JumpToNextStep(uint32 uiTimer)
+ {
+ uiPhaseTimer = uiTimer;
+ ++uiStep;
+ }
+
+ void WaypointReached(uint32 uiPointId)
+ {
+ switch(uiPointId)
+ {
+ case 0:
+ case 1:
+ case 3:
+ case 9:
+ case 10:
+ case 11:
+ case 22:
+ case 23:
+ case 26:
+ case 55:
+ case 56:
+ SetHoldState(true);
+ bStepping = true;
+ break;
+ case 7:
+ if (Unit* pCityman0 = m_creature->SummonCreature(NPC_CITY_MAN,2091.977f,1275.021f,140.757f,0.558f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,60000))
+ uiCitymenGUID[0] = pCityman0->GetGUID();
+ if (Unit* pCityman1 = m_creature->SummonCreature(NPC_CITY_MAN2,2093.514f,1275.842f,140.408f,3.801f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,60000))
+ uiCitymenGUID[1] = pCityman1->GetGUID();
+ break;
+ case 8:
+ uiGossipStep = 1;
+ m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ SetHoldState(true);
+ break;
+ case 12:
+ SetRun(true);
+ DoScriptText(SAY_PHASE210, m_creature);
+ if (Unit* pDisguised0 = m_creature->SummonCreature(NPC_CITY_MAN3,2398.14f,1207.81f,134.04f,5.155249f,TEMPSUMMON_DEAD_DESPAWN,180000))
+ {
+ uiInfiniteDraconianGUID[0] = pDisguised0->GetGUID();
+ if (Unit* pDisguised1 = m_creature->SummonCreature(NPC_CITY_MAN4,2403.22f,1205.54f,134.04f,3.311264f,TEMPSUMMON_DEAD_DESPAWN,180000))
+ {
+ uiInfiniteDraconianGUID[1] = pDisguised1->GetGUID();
+
+ if (Unit* pDisguised2 = m_creature->SummonCreature(NPC_CITY_MAN,2400.82f,1201.69f,134.01f,1.534082f,TEMPSUMMON_DEAD_DESPAWN,180000))
+ {
+ uiInfiniteDraconianGUID[2] = pDisguised2->GetGUID();
+ pDisguised0->SetUInt64Value(UNIT_FIELD_TARGET, uiInfiniteDraconianGUID[1]);
+ pDisguised1->SetUInt64Value(UNIT_FIELD_TARGET, uiInfiniteDraconianGUID[0]);
+ pDisguised2->SetUInt64Value(UNIT_FIELD_TARGET, uiInfiniteDraconianGUID[1]);
+ }
+ }
+ }
+ break;
+ case 20:
+ uiGossipStep = 2;
+ m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ SetRun(false);
+ SetHoldState(true);
+ break;
+ case 21:
+ DoScriptText(SAY_PHASE301, m_creature);
+ break;
+ case 25:
+ SetRun(false);
+ SpawnTimeRift(0,&uiInfiniteDraconianGUID[0]);
+ DoScriptText(SAY_PHASE307,m_creature);
+ break;
+ case 29:
+ SetRun(false);
+ SpawnTimeRift(5,&uiInfiniteDraconianGUID[0]);
+ SpawnTimeRift(8,&uiInfiniteDraconianGUID[2]);
+ DoScriptText(SAY_PHASE309,m_creature);
+ SetHoldState(true);
+ bStepping = true;
+ break;
+ case 31:
+ SetRun(false);
+ SpawnTimeRift(11,&uiInfiniteDraconianGUID[0]);
+ SpawnTimeRift(14,&uiInfiniteDraconianGUID[2]);
+ DoScriptText(SAY_PHASE311,m_creature);
+ SetHoldState(true);
+ bStepping = true;
+ break;
+ case 32:
+ DoScriptText(SAY_PHASE401,m_creature);
+ break;
+ case 34:
+ DoScriptText(SAY_PHASE402,m_creature);
+ break;
+ case 35:
+ DoScriptText(SAY_PHASE403,m_creature);
+ break;
+ case 36:
+ if (pInstance)
+ {
+ GameObject* pGate = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SHKAF_GATE));
+ pGate->SetGoState(GO_STATE_ACTIVE);
+ }
+ break;
+ case 45:
+ SetRun(true);
+ SetDespawnAtFar(false);
+ uiGossipStep = 4;
+ m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ SetHoldState(true);
+ break;
+ case 47:
+ SetRun(false);
+ DoScriptText(SAY_PHASE405,m_creature);
+ break;
+ case 48:
+ SetRun(true);
+ DoScriptText(SAY_PHASE406,m_creature);
+ break;
+ case 53:
+ DoScriptText(SAY_PHASE407,m_creature);
+ break;
+ case 54:
+ uiGossipStep = 5;
+ m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ SetHoldState(true);
+ break;
+ }
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ npc_escortAI::UpdateAI(diff);
+
+ DoMeleeAttackIfReady();
+
+ if(bStepping)
+ {
+ if (uiPhaseTimer <= diff)
+ {
+ switch(uiStep)
+ {
+ //After reset
+ case 0:
+ if (Unit* pJaina = GetClosestCreatureWithEntry(m_creature, NPC_JAINA, 50.0f))
+ uiJainaGUID = pJaina->GetGUID();
+ else if (Unit* pJaina = m_creature->SummonCreature(NPC_JAINA,1895.48f,1292.66f,143.706f,0.023475f,TEMPSUMMON_DEAD_DESPAWN,180000))
+ uiJainaGUID = pJaina->GetGUID();
+ bStepping = false;
+ JumpToNextStep(0);
+ break;
+ //After waypoint 0
+ case 1:
+ m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ if(Unit* pUther = m_creature->SummonCreature(NPC_UTHER,1794.357f,1272.183f,140.558f,1.37f,TEMPSUMMON_DEAD_DESPAWN,180000))
+ {
+ uiUtherGUID = pUther->GetGUID();
+ pUther->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ pUther->GetMotionMaster()->MovePoint(0, 1897.018f, 1287.487f, 143.481f);
+ pUther->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiUtherGUID);
+ }
+ JumpToNextStep(17000);
+ break;
+ case 2:
+ DoScriptText(SAY_PHASE101, m_creature);
+ JumpToNextStep(2000);
+ break;
+ case 3:
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ {
+ DoScriptText(SAY_PHASE102, pUther);
+ }
+ JumpToNextStep(8000);
+ break;
+ case 4:
+ SetEscortPaused(false);
+ bStepping = false;
+ SetRun(false);
+ DoScriptText(SAY_PHASE103, m_creature);
+ JumpToNextStep(0);
+ break;
+ //After waypoint 1
+ case 5:
+ if (Creature* pJaina = Unit::GetCreature(*me, uiJainaGUID))
+ pJaina->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ DoScriptText(SAY_PHASE104, m_creature);
+ JumpToNextStep(10000);
+ break;
+ case 6:
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ DoScriptText(SAY_PHASE105, pUther);
+ JumpToNextStep(1000);
+ break;
+ case 7:
+ DoScriptText(SAY_PHASE106, m_creature);
+ JumpToNextStep(4000);
+ break;
+ case 8:
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ DoScriptText(SAY_PHASE107, pUther);
+ JumpToNextStep(6000);
+ break;
+ case 9:
+ DoScriptText(SAY_PHASE108, m_creature);
+ JumpToNextStep(4000);
+ break;
+ case 10:
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ DoScriptText(SAY_PHASE109, pUther);
+ JumpToNextStep(8000);
+ break;
+ case 11:
+ DoScriptText(SAY_PHASE110, m_creature);
+ JumpToNextStep(4000);
+ break;
+ case 12:
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ DoScriptText(SAY_PHASE111, pUther);
+ JumpToNextStep(4000);
+ break;
+ case 13:
+ DoScriptText(SAY_PHASE112, m_creature);
+ JumpToNextStep(11000);
+ break;
+ case 14:
+ if (Creature* pJaina = Unit::GetCreature(*me, uiJainaGUID))
+ DoScriptText(SAY_PHASE113, pJaina);
+ JumpToNextStep(3000);
+ break;
+ case 15:
+ DoScriptText(SAY_PHASE114, m_creature);
+ JumpToNextStep(9000);
+ break;
+ case 16:
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ DoScriptText(SAY_PHASE115, pUther);
+ JumpToNextStep(4000);
+ break;
+ case 17:
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ {
+ pUther->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ pUther->GetMotionMaster()->MovePoint(0, 1794.357f,1272.183f,140.558f);
+ }
+ JumpToNextStep(1000);
+ break;
+ case 18:
+ if (Creature* pJaina = Unit::GetCreature(*me, uiJainaGUID))
+ {
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiJainaGUID);
+ pJaina->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ pJaina->GetMotionMaster()->MovePoint(0, 1794.357f,1272.183f,140.558f);
+ }
+ JumpToNextStep(1000);
+ break;
+ case 19:
+ DoScriptText(SAY_PHASE116, m_creature);
+ JumpToNextStep(1000);
+ break;
+ case 20:
+ if (Creature* pJaina = Unit::GetCreature(*me, uiJainaGUID))
+ DoScriptText(SAY_PHASE117, pJaina);
+ JumpToNextStep(3000);
+ break;
+ case 21:
+ SetEscortPaused(false);
+ bStepping = false;
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0);
+ JumpToNextStep(0);
+ break;
+ //After waypoint 3
+ case 22:
+ DoScriptText(SAY_PHASE118, m_creature);
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiJainaGUID);
+ JumpToNextStep(10000);
+ break;
+ case 23:
+ SetEscortPaused(false);
+ bStepping = false;
+ SetRun(true);
+
+ if (Creature* pJaina = Unit::GetCreature(*me, uiJainaGUID))
+ pJaina->DisappearAndDie();
+
+ if (Creature* pUther = Unit::GetCreature(*me, uiUtherGUID))
+ pUther->DisappearAndDie();
+
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0);
+ JumpToNextStep(0);
+ break;
+ //After Gossip 1 (waypoint 8)
+ case 24:
+ if (Unit* pStalker = m_creature->SummonCreature(NPC_INVIS_TARGET,2026.469f,1287.088f,143.596f,1.37f,TEMPSUMMON_TIMED_DESPAWN,14000))
+ {
+ uiStalkerGUID = pStalker->GetGUID();
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiStalkerGUID);
+ }
+ JumpToNextStep(1000);
+ break;
+ case 25:
+ DoScriptText(SAY_PHASE201, m_creature);
+ JumpToNextStep(12000);
+ break;
+ case 26:
+ SetEscortPaused(false);
+ bStepping = false;
+ SetRun(false);
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0);
+ JumpToNextStep(0);
+ break;
+ //After waypoint 9
+ case 27:
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiCitymenGUID[0]);
+ if (Creature* pCityman = Unit::GetCreature(*me, uiCitymenGUID[0]))
+ {
+ pCityman->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ pCityman->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ pCityman->GetMotionMaster()->MovePoint(0, 2088.625f,1279.191f,140.743f);
+ }
+ JumpToNextStep(2000);
+ break;
+ case 28:
+ if (Creature* pCityman = Unit::GetCreature(*me, uiCitymenGUID[0]))
+ DoScriptText(SAY_PHASE202, pCityman);
+ JumpToNextStep(4000);
+ break;
+ case 29:
+ SetEscortPaused(false);
+ bStepping = false;
+ DoScriptText(SAY_PHASE203, m_creature);
+ JumpToNextStep(0);
+ break;
+ //After waypoint 10
+ case 30:
+ m_creature->HandleEmoteCommand(37);
+ JumpToNextStep(1000);
+ break;
+ case 31:
+ SetEscortPaused(false);
+ bStepping = false;
+ if (Creature* pCityman1 = Unit::GetCreature(*me, uiCitymenGUID[1]))
+ {
+ DoScriptText(SAY_PHASE204, pCityman1);
+ pCityman1->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ if (Creature* pCityman0 = Unit::GetCreature(*me, uiCitymenGUID[0]))
+ pCityman0->Kill(pCityman0);
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiCitymenGUID[1]);
+ }
+ JumpToNextStep(0);
+ break;
+ //After waypoint 11
+ case 32:
+ m_creature->HandleEmoteCommand(37);
+ JumpToNextStep(1000);
+ break;
+ case 33:
+ if (Creature* pCityman1 = Unit::GetCreature(*me, uiCitymenGUID[1]))
+ pCityman1->Kill(pCityman1);
+ JumpToNextStep(1000);
+ break;
+ case 34:
+ if (Unit* pStalker = m_creature->SummonCreature(NPC_INVIS_TARGET,2081.447f,1287.770f,141.3241f,1.37f,TEMPSUMMON_TIMED_DESPAWN,10000))
+ {
+ uiStalkerGUID = pStalker->GetGUID();
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiStalkerGUID);
+ }
+ DoScriptText(SAY_PHASE205, m_creature);
+ JumpToNextStep(3000);
+ break;
+ case 35:
+ if (Unit* pStalkerM = m_creature->SummonCreature(NPC_INVIS_TARGET,2117.349f,1288.624f,136.271f,1.37f,TEMPSUMMON_TIMED_DESPAWN,60000))
+ {
+ uiStalkerGUID = pStalkerM->GetGUID();
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiStalkerGUID);
+ }
+ JumpToNextStep(1000);
+ break;
+ case 36:
+ if (Creature* pMalganis = m_creature->SummonCreature(NPC_MAL_GANIS,2117.349f,1288.624f,136.271f,1.37f,TEMPSUMMON_TIMED_DESPAWN,60000))
+ {
+ if (Creature* pStalkerM = Unit::GetCreature(*me, uiStalkerGUID))
+ pMalganis->CastSpell(pStalkerM,63793,false);
+
+ uiMalganisGUID = pMalganis->GetGUID();
+ DoScriptText(SAY_PHASE206, pMalganis);
+ pMalganis->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ pMalganis->SetReactState(REACT_PASSIVE);
+ }
+ JumpToNextStep(11000);
+ break;
+ case 37:
+ if (Creature* pMalganis = Unit::GetCreature(*me, uiMalganisGUID))
+ {
+ if (Creature* pZombie = GetClosestCreatureWithEntry(pMalganis, NPC_CITY_MAN, 100.0f))
+ pZombie->UpdateEntry(NPC_ZOMBIE, 0);
+ else if (Creature* pZombie = GetClosestCreatureWithEntry(pMalganis, NPC_CITY_MAN2, 100.0f))
+ pZombie->UpdateEntry(NPC_ZOMBIE, 0);
+ else //There's no one else to transform
+ uiStep++;
+ }
+ else
+ uiStep++;
+ uiPhaseTimer = 500;
+ break;
+ case 38:
+ if (Creature* pMalganis = Unit::GetCreature(*me, uiMalganisGUID))
+ DoScriptText(SAY_PHASE207, pMalganis);
+ JumpToNextStep(17000);
+ break;
+ case 39:
+ if (Creature* pMalganis = Unit::GetCreature(*me, uiMalganisGUID))
+ pMalganis->SetVisibility(VISIBILITY_OFF);
+ DoScriptText(SAY_PHASE208, m_creature);
+ JumpToNextStep(7000);
+ break;
+ case 40:
+ if (Unit* pStalker = m_creature->SummonCreature(NPC_INVIS_TARGET,2081.447f,1287.770f,141.3241f,1.37f,TEMPSUMMON_TIMED_DESPAWN,10000))
+ {
+ uiStalkerGUID = pStalker->GetGUID();
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiStalkerGUID);
+ }
+ DoScriptText(SAY_PHASE209, m_creature);
+
+ uiBossEvent = DATA_MEATHOOK_EVENT;
+ if (pInstance)
+ pInstance->SetData(DATA_ARTHAS_EVENT, IN_PROGRESS);
+
+ m_creature->SetReactState(REACT_DEFENSIVE);
+ SetDespawnAtFar(false);
+ JumpToNextStep(5000);
+ break;
+ case 41: //Summon wave group
+ case 43:
+ case 45:
+ case 47:
+ case 51:
+ case 53:
+ case 55:
+ case 57:
+ if (pInstance->GetData(uiBossEvent) != DONE)
+ {
+ SpawnWaveGroup(uiWave, uiWaveGUID);
+ uiWave++;
+ }
+ JumpToNextStep(500);
+ break;
+ case 42: //Wait group to die
+ case 44:
+ case 46:
+ case 48:
+ case 52:
+ case 54:
+ case 56:
+ case 58:
+ if (pInstance->GetData(uiBossEvent) != DONE)
+ {
+ uint32 mobCounter = 0;
+ uint32 deadCounter = 0;
+ for (uint8 i = 0; i < ENCOUNTER_WAVES_MAX_SPAWNS; ++i)
+ {
+ if (uiWaveGUID[i] == 0)
+ break;
+ ++mobCounter;
+ Unit* pTemp = Unit::GetCreature(*me, uiWaveGUID[i]);
+ if (!pTemp || pTemp->isDead())
+ ++deadCounter;
+ }
+
+ if (mobCounter <= deadCounter) //If group is dead
+ JumpToNextStep(1000);
+ else
+ uiPhaseTimer = 1000;
+ }
+ else
+ JumpToNextStep(500);
+ break;
+ case 49: //Summon Boss
+ case 59:
+ if (pInstance->GetData(uiBossEvent) != DONE)
+ {
+ uint32 uiBossID = 0;
+ if (uiBossEvent == DATA_MEATHOOK_EVENT)
+ uiBossID = NPC_MEATHOOK;
+ else if (uiBossEvent == DATA_SALRAMM_EVENT)
+ uiBossID = NPC_SALRAMM;
+
+ if (Unit* pBoss = m_creature->SummonCreature(uiBossID,2232.19f,1331.933f,126.662f,3.15f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,900000))
+ {
+ uiBossGUID = pBoss->GetGUID();
+ pBoss->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ pBoss->GetMotionMaster()->MovePoint(0, 2194.110f,1332.00f,130.00f);
+ }
+ }
+ JumpToNextStep(30000);
+ break;
+ case 50: //Wait Boss death
+ case 60:
+ if (pInstance)
+ {
+ if (pInstance->GetData(uiBossEvent) == DONE)
+ {
+ JumpToNextStep(1000);
+ if (uiBossEvent == DATA_MEATHOOK_EVENT)
+ uiBossEvent = DATA_SALRAMM_EVENT;
+ else if (uiBossEvent == DATA_SALRAMM_EVENT)
+ {
+ SetHoldState(false);
+ bStepping = false;
+ uiBossEvent = DATA_EPOCH_EVENT;
+ }
+ }
+ else if (pInstance->GetData(uiBossEvent) == FAIL)
+ npc_escortAI::EnterEvadeMode();
+ else
+ uiPhaseTimer = 10000;
+ }
+ break;
+ //After Gossip 2 (waypoint 22)
+ case 61:
+ m_creature->SetReactState(REACT_AGGRESSIVE);
+ if (Creature* pDisguised0 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[0]))
+ pDisguised0->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ if (Creature* pDisguised1 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[1]))
+ pDisguised1->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ if (Creature* pDisguised2 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[2]))
+ pDisguised2->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID());
+ JumpToNextStep(1000);
+ break;
+ case 62:
+ if (Creature* pDisguised0 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[0]))
+ DoScriptText(SAY_PHASE302, pDisguised0);
+ JumpToNextStep(7000);
+ break;
+ case 63:
+ DoScriptText(SAY_PHASE303, m_creature);
+ SetHoldState(false);
+ bStepping = false;
+ JumpToNextStep(0);
+ break;
+ //After waypoint 23
+ case 64:
+ m_creature->HandleEmoteCommand(54);
+ JumpToNextStep(1000);
+ break;
+ case 65:
+ if (Creature* pDisguised0 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[0]))
+ pDisguised0->HandleEmoteCommand(11);
+ JumpToNextStep(1000);
+ break;
+ case 66:
+ DoScriptText(SAY_PHASE304,m_creature);
+ JumpToNextStep(2000);
+ break;
+ case 67:
+ if (Creature* pDisguised0 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[0]))
+ DoScriptText(SAY_PHASE305,pDisguised0);
+ JumpToNextStep(1000);
+ break;
+ case 68:
+ if (Creature* pDisguised2 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[2]))
+ {
+ pDisguised2->UpdateEntry(NPC_INFINITE_HUNTER, 0);
+ //Make them unattackable
+ pDisguised2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_UNK_9);
+ pDisguised2->SetReactState(REACT_PASSIVE);
+ }
+ JumpToNextStep(2000);
+ break;
+ case 69:
+ if (Creature* pDisguised1 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[1]))
+ {
+ pDisguised1->UpdateEntry(NPC_INFINITE_AGENT, 0);
+ //Make them unattackable
+ pDisguised1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_UNK_9);
+ pDisguised1->SetReactState(REACT_PASSIVE);
+ }
+ JumpToNextStep(2000);
+ break;
+ case 70:
+ if (Creature* pDisguised0 = Unit::GetCreature(*me, uiInfiniteDraconianGUID[0]))
+ {
+ pDisguised0->UpdateEntry(NPC_INFINITE_ADVERSARY, 0);
+ //Make them unattackable
+ pDisguised0->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_UNK_9);
+ pDisguised0->SetReactState(REACT_PASSIVE);
+ }
+ JumpToNextStep(2000);
+ break;
+ case 71:
+ //After waypoint 26,29,31
+ case 73:
+ case 75:
+ case 77:
+ //Make cratures attackable
+ for (uint32 i = 0; i< ENCOUNTER_DRACONIAN_NUMBER; ++i)
+ if (Creature* pTemp = Unit::GetCreature(*me, uiInfiniteDraconianGUID[i]))
+ {
+ pTemp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_UNK_9);
+ pTemp->SetReactState(REACT_AGGRESSIVE);
+ }
+ JumpToNextStep(5000);
+ break;
+ case 72:
+ case 74:
+ case 76:
+ if (m_creature->isInCombat())
+ uiPhaseTimer = 1000;
+ else
+ {
+ if (uiStep == 72) DoScriptText(SAY_PHASE308,m_creature);
+ if (uiStep == 74) DoScriptText(SAY_PHASE308,m_creature);
+ if (uiStep == 76) DoScriptText(SAY_PHASE310,m_creature);
+ SetHoldState(false);
+ bStepping = false;
+ SetRun(true);
+ JumpToNextStep(2000);
+ }
+ break;
+ case 78:
+ if (m_creature->isInCombat())
+ uiPhaseTimer = 1000;
+ else
+ {
+ DoScriptText(SAY_PHASE312,m_creature);
+ JumpToNextStep(5000);
+ }
+ break;
+ case 79:
+ DoScriptText(SAY_PHASE313,m_creature);
+ JumpToNextStep(1000);
+ break;
+ case 80:
+ if (pInstance)
+ if (pInstance->GetData(DATA_EPOCH_EVENT) != DONE)
+ {
+ SpawnTimeRift(17,&uiEpochGUID);
+ if (Creature* pEpoch = Unit::GetCreature(*me, uiEpochGUID))
+ DoScriptText(SAY_PHASE314,pEpoch);
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiEpochGUID);
+ }
+ JumpToNextStep(18000);
+ break;
+ case 81:
+ if (pInstance)
+ if (pInstance->GetData(DATA_EPOCH_EVENT) != DONE)
+ DoScriptText(SAY_PHASE315, m_creature);
+ JumpToNextStep(6000);
+ break;
+ case 82:
+ if (pInstance)
+ if (pInstance->GetData(DATA_EPOCH_EVENT) != DONE)
+ {
+ if (Creature* pEpoch = Unit::GetCreature(*me, uiEpochGUID))
+ {
+ //Make Epoch attackable
+ pEpoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_UNK_9);
+ pEpoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ pEpoch->SetReactState(REACT_AGGRESSIVE);
+ }
+
+ }
+ JumpToNextStep(1000);
+ break;
+ case 83:
+ if (pInstance)
+ {
+ if (pInstance->GetData(DATA_EPOCH_EVENT) == DONE)
+ {
+ uiGossipStep = 3;
+ m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ bStepping = false;
+ uiBossEvent = DATA_MAL_GANIS_EVENT;
+ JumpToNextStep(15000);
+ }
+ else if (pInstance->GetData(DATA_EPOCH_EVENT) == FAIL)
+ npc_escortAI::EnterEvadeMode();
+ else
+ uiPhaseTimer = 10000;
+ }
+ break;
+ //After Gossip 4
+ case 84:
+ DoScriptText(SAY_PHASE404,m_creature);
+ SetHoldState(false);
+ bStepping = false;
+ break;
+ //After Gossip 5
+ case 85:
+ DoScriptText(SAY_PHASE501, m_creature);
+ if(Creature* pMalganis = m_creature->SummonCreature(NPC_MAL_GANIS,2296.665f,1502.362f,128.362f,4.961f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,900000))
+ {
+ uiMalganisGUID = pMalganis->GetGUID();
+ pMalganis->SetReactState(REACT_PASSIVE);
+ }
+ if (pInstance)
+ {
+ GameObject* pGate = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_MAL_GANIS_GATE_1));
+ pGate->SetGoState(GO_STATE_ACTIVE);
+ }
+ SetHoldState(false);
+ bStepping = false;
+ JumpToNextStep(0);
+ break;
+ //After waypoint 55
+ case 86:
+ DoScriptText(SAY_PHASE502, m_creature);
+ JumpToNextStep(6000);
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiMalganisGUID);
+ break;
+ case 87:
+ if (Creature* pMalganis = Unit::GetCreature(*me, uiMalganisGUID))
+ {
+ pMalganis->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_UNK_6 | UNIT_FLAG_UNK_9 | UNIT_FLAG_UNK_15);
+ pMalganis->SetReactState(REACT_AGGRESSIVE);
+ }
+ JumpToNextStep(1000);
+ break;
+ case 88:
+ if (pInstance)
+ {
+ if (pInstance->GetData(DATA_MAL_GANIS_EVENT) == DONE)
+ {
+ SetHoldState(false);
+ JumpToNextStep(1000);
+ }
+ else if (pInstance->GetData(DATA_MAL_GANIS_EVENT) == FAIL)
+ npc_escortAI::EnterEvadeMode();
+ else
+ uiPhaseTimer = 10000;
+ }
+ break;
+ //After waypoint 56
+ case 89:
+ SetRun(true);
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, uiMalganisGUID);
+ DoScriptText(SAY_PHASE503, m_creature);
+ JumpToNextStep(7000);
+ break;
+ case 90:
+ if (pInstance)
+ {
+ pInstance->SetData(DATA_ARTHAS_EVENT, DONE); //Rewards: Achiev & Chest ;D
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, pInstance->GetData64(DATA_MAL_GANIS_GATE_2)); //Look behind
+ }
+ DoScriptText(SAY_PHASE504, m_creature);
+ bStepping = false;
+ break;
+ }
+ } else uiPhaseTimer -= diff;
+ }
+
+ //Battling skills
+ if (!m_creature->getVictim())
+ return;
+
+ if (uiExorcismTimer < diff)
+ {
+ if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
+ DoCast(target, DUNGEON_MODE(SPELL_EXORCISM_N, SPELL_EXORCISM_H));
+ uiExorcismTimer = 7300;
+ } else uiExorcismTimer -= diff;
+
+ if (HealthBelowPct(40))
+ DoCast(m_creature, SPELL_HOLY_LIGHT);
+ }
+};
+
+CreatureAI* GetAI_npc_arthas(Creature* pCreature)
+{
+ return new npc_arthasAI(pCreature);
+}
+
+#define GOSSIP_ITEM_ARTHAS_0 "I'm ready to start Culling of Stratholme."
+#define GOSSIP_ITEM_ARTHAS_1 "Yes, my Prince. We're ready."
+#define GOSSIP_ITEM_ARTHAS_2 "We're only doing what is best for Loarderon your Highness."
+#define GOSSIP_ITEM_ARTHAS_3 "I'm ready."
+#define GOSSIP_ITEM_ARTHAS_4 "For Lordaeron!"
+#define GOSSIP_ITEM_ARTHAS_5 "I'm ready to battle the dreadlord, sire."
+
+bool GossipHello_npc_arthas(Player* pPlayer, Creature* pCreature)
+{
+ npc_arthasAI* pAI = CAST_AI(npc_arthasAI,pCreature->AI());
+
+ if (pAI && pAI->bStepping == false)
+ {
+ switch (pAI->uiGossipStep)
+ {
+ case 0: //This one is a workaround since the very beggining of the script is wrong.
+ if (pPlayer->GetQuestStatus(13149) != QUEST_STATUS_COMPLETE)
+ return false;
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ pPlayer->SEND_GOSSIP_MENU(907, pCreature->GetGUID());
+ break;
+ case 1:
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ pPlayer->SEND_GOSSIP_MENU(GOSSIP_MENU_ARTHAS_1, pCreature->GetGUID());
+ break;
+ case 2:
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ pPlayer->SEND_GOSSIP_MENU(GOSSIP_MENU_ARTHAS_2, pCreature->GetGUID());
+ break;
+ case 3:
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
+ pPlayer->SEND_GOSSIP_MENU(GOSSIP_MENU_ARTHAS_3, pCreature->GetGUID());
+ break;
+ case 4:
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
+ pPlayer->SEND_GOSSIP_MENU(GOSSIP_MENU_ARTHAS_4, pCreature->GetGUID());
+ break;
+ case 5:
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ pPlayer->SEND_GOSSIP_MENU(GOSSIP_MENU_ARTHAS_5, pCreature->GetGUID());
+ break;
+ default:
+ return false;
+ }
+ }
+ return true;
+}
+
+
+bool GossipSelect_npc_arthas(Player *pPlayer, Creature *pCreature, uint32 sender, uint32 action )
+{
+ npc_arthasAI* pAI = CAST_AI(npc_arthasAI,pCreature->AI());
+
+ if (!pAI)
+ return false;
+
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF:
+ pAI->Start(true,true,pPlayer->GetGUID(),0,false,false);
+ pAI->SetDespawnAtEnd(false);
+ pAI->bStepping = false;
+ pAI->uiStep = 1;
+ break;
+ case GOSSIP_ACTION_INFO_DEF+1:
+ pAI->bStepping = true;
+ pAI->uiStep = 24;
+ break;
+ case GOSSIP_ACTION_INFO_DEF+2:
+ pAI->SetHoldState(false);
+ pAI->bStepping = false;
+ pAI->uiStep = 61;
+ break;
+ case GOSSIP_ACTION_INFO_DEF+3:
+ pAI->SetHoldState(false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF+4:
+ pAI->bStepping = true;
+ pAI->uiStep = 84;
+ break;
+ case GOSSIP_ACTION_INFO_DEF+5:
+ pAI->bStepping = true;
+ pAI->uiStep = 85;
+ break;
+ }
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pAI->SetDespawnAtFar(true);
+ pCreature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ return true;
+}
+
+void AddSC_culling_of_stratholme()
+{
+ Script *newscript;
+
+ newscript = new Script;
+ newscript->Name = "npc_arthas";
+ newscript->GetAI = &GetAI_npc_arthas;
+ newscript->pGossipHello = &GossipHello_npc_arthas;
+ newscript->pGossipSelect = &GossipSelect_npc_arthas;
+ newscript->RegisterSelf();
+}
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h
index c25a3b02e49..ed3230b7526 100644
--- a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h
@@ -25,7 +25,8 @@ enum Data
DATA_SALRAMM_EVENT,
DATA_EPOCH_EVENT,
DATA_MAL_GANIS_EVENT,
- DATA_INFINITE_EVENT
+ DATA_INFINITE_EVENT,
+ DATA_ARTHAS_EVENT
};
enum Data64
@@ -38,17 +39,20 @@ enum Data64
DATA_SHKAF_GATE,
DATA_MAL_GANIS_GATE_1,
DATA_MAL_GANIS_GATE_2,
+ DATA_EXIT_GATE,
DATA_MAL_GANIS_CHEST
};
enum Creatures
{
- NPC_MEATHOOK = 26529,
- NPC_SALRAMM = 26530,
- NPC_EPOCH = 26532,
- NPC_MAL_GANIS = 26533,
- NPC_INFINITE = 32273,
- NPC_ARTHAS = 26499
+ NPC_MEATHOOK = 26529,
+ NPC_SALRAMM = 26530,
+ NPC_EPOCH = 26532,
+ NPC_MAL_GANIS = 26533,
+ NPC_INFINITE = 32273,
+ NPC_ARTHAS = 26499,
+ NPC_JAINA = 26497,
+ NPC_UTHER = 26528
};
enum GameObjects
@@ -56,6 +60,8 @@ enum GameObjects
GO_SHKAF_GATE = 188686,
GO_MALGANIS_GATE_1 = 187711,
GO_MALGANIS_GATE_2 = 187723,
- GO_MALGANIS_CHEST = 190663
+ GO_EXIT_GATE = 191788,
+ GO_MALGANIS_CHEST_N = 190663,
+ GO_MALGANIS_CHEST_H = 193597
};
#endif
diff --git a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp
index 685af07cf2f..85561e30579 100644
--- a/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp
+++ b/src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp
@@ -42,9 +42,10 @@ struct instance_culling_of_stratholme : public ScriptedInstance
uint64 uiShkafGate;
uint64 uiMalGanisGate1;
uint64 uiMalGanisGate2;
+ uint64 uiExitGate;
uint64 uiMalGanisChest;
- uint8 m_auiEncounter[MAX_ENCOUNTER];
+ uint32 m_auiEncounter[MAX_ENCOUNTER];
std::string str_data;
bool IsEncounterInProgress() const
@@ -90,8 +91,16 @@ struct instance_culling_of_stratholme : public ScriptedInstance
case GO_MALGANIS_GATE_2:
uiMalGanisGate2 = pGo->GetGUID();
break;
- case GO_MALGANIS_CHEST:
+ case GO_EXIT_GATE:
+ uiExitGate = pGo->GetGUID();
+ if (m_auiEncounter[3] == DONE)
+ HandleGameObject(uiExitGate,true);
+ break;
+ case GO_MALGANIS_CHEST_N:
+ case GO_MALGANIS_CHEST_H:
uiMalGanisChest = pGo->GetGUID();
+ if (m_auiEncounter[3] == DONE)
+ pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_INTERACT_COND);
break;
}
}
@@ -111,9 +120,21 @@ struct instance_culling_of_stratholme : public ScriptedInstance
break;
case DATA_MAL_GANIS_EVENT:
m_auiEncounter[3] = data;
- GameObject *pGate;
- if (data == IN_PROGRESS && (pGate = instance->GetGameObject(uiMalGanisGate2)))
- pGate->SetGoState(GO_STATE_READY);
+
+ switch(m_auiEncounter[3])
+ {
+ case NOT_STARTED:
+ HandleGameObject(uiMalGanisGate2,true);
+ break;
+ case IN_PROGRESS:
+ HandleGameObject(uiMalGanisGate2,false);
+ break;
+ case DONE:
+ HandleGameObject(uiExitGate, true);
+ if (GameObject *pGo = instance->GetGameObject(uiMalGanisChest))
+ pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_INTERACT_COND);
+ break;
+ }
break;
case DATA_INFINITE_EVENT:
m_auiEncounter[4] = data;
@@ -146,8 +167,10 @@ struct instance_culling_of_stratholme : public ScriptedInstance
case DATA_EPOCH: return uiEpoch;
case DATA_MAL_GANIS: return uiMalGanis;
case DATA_INFINITE: return uiInfinite;
+ case DATA_SHKAF_GATE: return uiShkafGate;
case DATA_MAL_GANIS_GATE_1: return uiMalGanisGate1;
case DATA_MAL_GANIS_GATE_2: return uiMalGanisGate2;
+ case DATA_EXIT_GATE: return uiExitGate;
case DATA_MAL_GANIS_CHEST: return uiMalGanisChest;
}
return 0;
diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj
index 2bbfd592db7..5fec6d10e6d 100644
--- a/win/VC90/game.vcproj
+++ b/win/VC90/game.vcproj
@@ -2792,6 +2792,10 @@
>
</File>
<File
+ RelativePath="..\..\src\scripts\kalimdor\caverns_of_time\culling_of_stratholme\culling_of_stratholme.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\src\scripts\kalimdor\caverns_of_time\culling_of_stratholme\culling_of_stratholme.h"
>
</File>