Script Instance Pit of Saron.

First basic script based on proposal of Synric on trinitycore forum (submitted by Skarabex on GC).
Still WiP with lots of work. In particular, the faction based npc/mob will have to be fixed when they will be spawned in TDB.
Fixes issue #1308.

--HG--
branch : trunk
This commit is contained in:
Trazom62
2010-04-03 09:04:02 +02:00
parent c6b8602619
commit 6b6ee726dd
13 changed files with 2455 additions and 88 deletions
+61
View File
@@ -2530,6 +2530,67 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(29308,-1619027,'Your heartbeat is music to my ears.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'prince taldaram SAY_VANISH1'),
(29308,-1619028,'I am nowhere. I am everywhere. I am the watcher, unseen.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'prince taldaram SAY_VANISH2'),
-- -1 658 000 ICECROWN CITADEL: FROZEN HALLS: PIT OF SARON
-- Garfrost
(36494,-1658001,'Tiny creatures under feet, you bring Garfrost something good to eat!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16912,1,0,0,'garfrost SAY_AGGRO'),
(36494,-1658002,'Will save for snack. For later.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16913,1,0,0,'garfrost SAY_SLAY_1'),
(36494,-1658003,'That one maybe not so good to eat now. Stupid Garfrost! BAD! BAD!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16914,1,0,0,'garfrost SAY_SLAY_2'),
(36494,-1658004,'Garfrost hope giant underpants clean. Save boss great shame. For later.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16915,1,0,0,'garfrost SAY_DEATH'),
(36494,-1658005,'Axe too weak. Garfrost make better and CRUSH YOU!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16916,1,0,0,'garfrost SAY_PHASE2'),
(36494,-1658006,'Garfrost tired of puny mortals. Now your bones will freeze!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16917,1,0,0,'garfrost SAY_PHASE3'),
(36658,-1658007,'Another shall take his place. You waste your time.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16752,1,0,0,'Tyrannus SAY_TYRANNUS_DEATH'),
-- Krick
(36477,-1658010,'Our work must not be interrupted! Ick! Take care of them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16926,1,0,0,'Krick SAY_AGGRO'),
(36477,-1658011,'Ooh...We could probably use these parts!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16927,1,0,0,'Krick SAY_SLAY_1'),
(36477,-1658012,'Arms and legs are in short supply...Thanks for your contribution!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16928,1,0,0,'Krick SAY_SLAY_2'),
(36477,-1658013,'Enough moving around! Hold still while I blow them all up!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16929,1,0,0,'Krick SAY_BARRAGE_1'),
(36477,-1658014,'Krick begins rapidly conjuring explosive mines!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Krick SAY_BARRAGE_2'),
(36477,-1658015,'Quickly! Poison them all while they''re still close!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16930,1,0,0,'Krick SAY_POISON_NOVA'),
(36477,-1658016,'No! That one! That one! Get that one!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16931,1,0,0,'Krick SAY_CHASE_1'),
(36477,-1658017,'I''ve changed my mind...go get that one instead!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16932,1,0,0,'Krick SAY_CHASE_2'),
(36477,-1658018,'What are you attacking him for? The dangerous one is over there,fool!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16933,1,0,0,'Krick SAY_CHASE_3'),
-- Ick
(36476,-1658020,'Ick begins to unleash a toxic poison cloud!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Ick SAY_ICK_POISON_NOVA'),
(36476,-1658021,'Ick is chasing you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Ick SAY_ICK_CHASE_1'),
-- Krick OUTRO
(36477,-1658030,'Wait! Stop! Don''t kill me, please! I''ll tell you everything!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16934,1,0,0,'Krick SAY_KRICK_OUTRO_1'),
(36993,-1658031,'I''m not so naive as to believe your appeal for clemency, but I will listen.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16611,1,0,0,'Jaina SAY_JAINA_OUTRO_2'),
(36990,-1658032,'Why should the Banshee Queen spare your miserable life?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17033,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_2'),
(36477,-1658033,'What you seek is in the master''s lair, but you must destroy Tyrannus to gain entry. Within the Halls of Reflection you will find Frostmourne. It... it holds the truth.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16935,1,0,0,'Krick SAY_KRICK_OUTRO_3'),
(36993,-1658034,'Frostmourne lies unguarded? Impossible!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16612,1,0,0,'Jaina SAY_JAINA_OUTRO_4'),
(36990,-1658035,'Frostmourne? The Lich King is never without his blade! If you are lying to me...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17034,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_4'),
(36477,-1658036,'I swear it is true! Please, don''t kill me!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16936,1,0,0,'Krick SAY_KRICK_OUTRO_5'),
(36658,-1658037,'Worthless gnat! Death is all that awaits you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16753,1,0,0,'Tyrannus SAY_TYRANNUS_OUTRO_7'),
(36477,-1658038,'Urg... no!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16937,1,0,0,'Krick SAY_KRICK_OUTRO_8'),
(36658,-1658039,'Do not think that I shall permit you entry into my master''s sanctum so easily. Pursue me if you dare.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16754,1,0,0,'Tyrannus SAY_TYRANNUS_OUTRO_9'),
(36993,-1658040,'What a cruel end. Come, heroes. We must see if the gnome''s story is true. If we can separate Arthas from Frostmourne, we might have a chance at stopping him.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16613,1,0,0,'Jaina SAY_JAINA_OUTRO_10'),
(36990,-1658041,'A fitting end for a traitor. Come, we must free the slaves and see what is within the Lich King''s chamber for ourselves.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17035,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_10'),
-- Tyrannus
(36658,-1658050,'Your pursuit shall be in vain, adventurers, for the Lich King has placed an army of undead at my command! Behold!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16755,1,0,0,'Tyrannus SAY_AMBUSH_1'),
(36658,-1658051,'Persistent whelps! You will not reach the entrance of my lord''s lair! Soldiers, destroy them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16756,1,0,0,'Tyrannus SAY_AMBUSH_2'),
(36658,-1658052,'Rimefang! Trap them within the tunnel! Bury them alive!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16757,1,0,0,'Tyrannus SAY_GAUNTLET_START'),
(36658,-1658053,'Alas, brave, brave adventurers, your meddling has reached its end. Do you hear the clatter of bone and steel coming up the tunnel behind you? That is the sound of your impending demise.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16758,1,0,0,'Tyrannus SAY_INTRO_1'),
(36658,-1658054,'Ha, such an amusing gesture from the rabble. When I have finished with you, my master''s blade will feast upon your souls. Die!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16759,1,0,0,'Tyrannus SAY_INTRO_2'),
(36658,-1658055,'I shall not fail The Lich King! Come and meet your end!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16760,1,0,0,'Tyrannus SAY_AGGRO'),
(36658,-1658056,'Such a shameful display... You are better off dead!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16761,1,0,0,'Tyrannus SAY_SLAY_1'),
(36658,-1658057,'Perhaps you should have stayed in the mountains!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16762,1,0,0,'Tyrannus SAY_SLAY_2'),
(36658,-1658058,'Impossible! Rimefang... Warn...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16763,1,0,0,'Tyrannus SAY_DEATH'),
(36658,-1658059,'Rimefang, destroy this fool!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16764,1,0,0,'Tyrannus SAY_MARK_RIMEFANG_1'),
(36658,-1658060,'The frostwyrm Rimefang gazes at $N and readies an icy attack!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Tyrannus SAY_MARK_RIMEFANG_2'),
(36658,-1658061,'Power... overwhelming!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16765,1,0,0,'Tyrannus SAY_DARK_MIGHT_1'),
(36658,-1658062,'Scourgelord Tyrannus roars and swells with dark might!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Tyrannus SAY_DARK_MIGHT_2'),
(37592,-1658063,'Brave champions, we owe you our lives, our freedom... Though it be a tiny gesture in the face of this enormous debt, I pledge that from this day forth, all will know of your deeds, and the blazing path of light you cut through the shadow of this dark citadel.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'Gorkun SAY_GORKUN_OUTRO_1'),
(37592,-1658064,'This day will stand as a testament not only to your valor, but to the fact that no foe, not even the Lich King himself, can stand when Alliance and Horde set aside their differences and ---',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'Gorkun SAY_GORKUN_OUTRO_2'),
(36993,-1658065,'Heroes, to me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16614,1,0,0,'Jaina SAY_JAYNA_OUTRO_3'),
(36990,-1658066,'Take cover behind me! Quickly!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17037,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_3'),
(36993,-1658067,'The Frost Queen is gone. We must keep moving - our objective is near.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16615,0,0,0,'Jaina SAY_JAYNA_OUTRO_4'),
(36990,-1658068,'I thought he''d never shut up. At last, Sindragosa silenced that long-winded fool. To the Halls of Reflection, champions! Our objective is near... I can sense it.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17036,0,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_4'),
(36993,-1658069,'I... I could not save them... Damn you, Arthas! DAMN YOU!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16616,0,0,0,'Jaina SAY_JAYNA_OUTRO_5'),
-- -1 999 900+ - RANDOM
(0,-1999900,'Let the games begin.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,8280,1,0,0,'example_creature SAY_AGGRO'),
(0,-1999901,'I see endless suffering. I see torment. I see rage. I see everything.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,8831,1,0,0,'example_creature SAY_RANDOM_0'),
+25
View File
@@ -949,6 +949,31 @@ UPDATE `creature_template` SET `ScriptName`='npc_neeru_fireblade' WHERE `entry`=
UPDATE `creature_template` SET `ScriptName`='npc_shenthul' WHERE `entry`=3401;
UPDATE `creature_template` SET `ScriptName`='npc_thrall_warchief' WHERE `entry`=4949;
/* PIT OF SARON */
UPDATE `instance_template` SET `script`='instance_pit_of_saron' WHERE `map`=658;
UPDATE `creature_template` SET `Scriptname`='boss_garfrost' WHERE `entry`=36494;
UPDATE `creature_template` SET `Scriptname`='boss_ick' WHERE `entry`=36476;
UPDATE `creature_template` SET `Scriptname`='boss_krick' WHERE `entry`=36477;
UPDATE `creature_template` SET `Scriptname`='boss_tyrannus' WHERE `entry`=36658;
UPDATE `creature_template` SET `Scriptname`='boss_rimefang' WHERE `entry`=36661;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_wrathbringer' WHERE `entry`=36840;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_skycaller' WHERE `entry`=31260;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_flamebearer' WHERE `entry`=36893;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_deathbringer' WHERE `entry`=36892;
UPDATE `creature_template` SET `Scriptname`='mob_wrathbone_laborer' WHERE `entry`=36830;
UPDATE `creature_template` SET `Scriptname`='mob_wrathbone_coldwraith' WHERE `entry`=36842;
UPDATE `creature_template` SET `Scriptname`='mob_wrathbone_sorcerer' WHERE `entry`=37728;
UPDATE `creature_template` SET `Scriptname`='mob_stonespine_gargoyle' WHERE `entry`=36896;
UPDATE `creature_template` SET `Scriptname`='mob_plagueborn_horror' WHERE `entry`=36879;
UPDATE `creature_template` SET `Scriptname`='mob_iceborn_protodrake' WHERE `entry`=36891;
UPDATE `creature_template` SET `Scriptname`='mob_hungering_ghoul' WHERE `entry`=37711;
UPDATE `creature_template` SET `Scriptname`='mob_fallen_warrior' WHERE `entry`=38487;
UPDATE `creature_template` SET `Scriptname`='mob_fallen_warrior' WHERE `entry`=36841;
UPDATE `creature_template` SET `Scriptname`='mob_deathwhisper_torturer' WHERE `entry`=37713;
UPDATE `creature_template` SET `Scriptname`='mob_deathwhisper_shadowcaster' WHERE `entry`=37712;
UPDATE `creature_template` SET `Scriptname`='mob_deathwhisper_necrolyte' WHERE `entry`=36788;
UPDATE `creature_template` SET `Scriptname`='mob_geist_ambusher' WHERE `entry`=36886;
/* RAGEFIRE CHASM */
UPDATE `gameobject_template` SET `ScriptName`='go_blood_filled_orb' WHERE `entry`=182024;
+63
View File
@@ -0,0 +1,63 @@
DELETE FROM `script_texts` WHERE `entry` <= -1658000 and `entry` >= -1658999;
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
-- Garfrost
(36494,-1658001,'Tiny creatures under feet, you bring Garfrost something good to eat!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16912,1,0,0,'garfrost SAY_AGGRO'),
(36494,-1658002,'Will save for snack. For later.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16913,1,0,0,'garfrost SAY_SLAY_1'),
(36494,-1658003,'That one maybe not so good to eat now. Stupid Garfrost! BAD! BAD!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16914,1,0,0,'garfrost SAY_SLAY_2'),
(36494,-1658004,'Garfrost hope giant underpants clean. Save boss great shame. For later.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16915,1,0,0,'garfrost SAY_DEATH'),
(36494,-1658005,'Axe too weak. Garfrost make better and CRUSH YOU!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16916,1,0,0,'garfrost SAY_PHASE2'),
(36494,-1658006,'Garfrost tired of puny mortals. Now your bones will freeze!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16917,1,0,0,'garfrost SAY_PHASE3'),
(36658,-1658007,'Another shall take his place. You waste your time.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16752,1,0,0,'Tyrannus SAY_TYRANNUS_DEATH'),
-- Krick
(36477,-1658010,'Our work must not be interrupted! Ick! Take care of them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16926,1,0,0,'Krick SAY_AGGRO'),
(36477,-1658011,'Ooh...We could probably use these parts!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16927,1,0,0,'Krick SAY_SLAY_1'),
(36477,-1658012,'Arms and legs are in short supply...Thanks for your contribution!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16928,1,0,0,'Krick SAY_SLAY_2'),
(36477,-1658013,'Enough moving around! Hold still while I blow them all up!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16929,1,0,0,'Krick SAY_BARRAGE_1'),
(36477,-1658014,'Krick begins rapidly conjuring explosive mines!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Krick SAY_BARRAGE_2'),
(36477,-1658015,'Quickly! Poison them all while they''re still close!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16930,1,0,0,'Krick SAY_POISON_NOVA'),
(36477,-1658016,'No! That one! That one! Get that one!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16931,1,0,0,'Krick SAY_CHASE_1'),
(36477,-1658017,'I''ve changed my mind...go get that one instead!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16932,1,0,0,'Krick SAY_CHASE_2'),
(36477,-1658018,'What are you attacking him for? The dangerous one is over there,fool!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16933,1,0,0,'Krick SAY_CHASE_3'),
-- Ick
(36476,-1658020,'Ick begins to unleash a toxic poison cloud!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Ick SAY_ICK_POISON_NOVA'),
(36476,-1658021,'Ick is chasing you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Ick SAY_ICK_CHASE_1'),
-- Krick OUTRO
(36477,-1658030,'Wait! Stop! Don''t kill me, please! I''ll tell you everything!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16934,1,0,0,'Krick SAY_KRICK_OUTRO_1'),
(36993,-1658031,'I''m not so naive as to believe your appeal for clemency, but I will listen.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16611,1,0,0,'Jaina SAY_JAINA_OUTRO_2'),
(36990,-1658032,'Why should the Banshee Queen spare your miserable life?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17033,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_2'),
(36477,-1658033,'What you seek is in the master''s lair, but you must destroy Tyrannus to gain entry. Within the Halls of Reflection you will find Frostmourne. It... it holds the truth.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16935,1,0,0,'Krick SAY_KRICK_OUTRO_3'),
(36993,-1658034,'Frostmourne lies unguarded? Impossible!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16612,1,0,0,'Jaina SAY_JAINA_OUTRO_4'),
(36990,-1658035,'Frostmourne? The Lich King is never without his blade! If you are lying to me...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17034,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_4'),
(36477,-1658036,'I swear it is true! Please, don''t kill me!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16936,1,0,0,'Krick SAY_KRICK_OUTRO_5'),
(36658,-1658037,'Worthless gnat! Death is all that awaits you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16753,1,0,0,'Tyrannus SAY_TYRANNUS_OUTRO_7'),
(36477,-1658038,'Urg... no!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16937,1,0,0,'Krick SAY_KRICK_OUTRO_8'),
(36658,-1658039,'Do not think that I shall permit you entry into my master''s sanctum so easily. Pursue me if you dare.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16754,1,0,0,'Tyrannus SAY_TYRANNUS_OUTRO_9'),
(36993,-1658040,'What a cruel end. Come, heroes. We must see if the gnome''s story is true. If we can separate Arthas from Frostmourne, we might have a chance at stopping him.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16613,1,0,0,'Jaina SAY_JAINA_OUTRO_10'),
(36990,-1658041,'A fitting end for a traitor. Come, we must free the slaves and see what is within the Lich King''s chamber for ourselves.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17035,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_10'),
-- Tyrannus
(36658,-1658050,'Your pursuit shall be in vain, adventurers, for the Lich King has placed an army of undead at my command! Behold!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16755,1,0,0,'Tyrannus SAY_AMBUSH_1'),
(36658,-1658051,'Persistent whelps! You will not reach the entrance of my lord''s lair! Soldiers, destroy them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16756,1,0,0,'Tyrannus SAY_AMBUSH_2'),
(36658,-1658052,'Rimefang! Trap them within the tunnel! Bury them alive!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16757,1,0,0,'Tyrannus SAY_GAUNTLET_START'),
(36658,-1658053,'Alas, brave, brave adventurers, your meddling has reached its end. Do you hear the clatter of bone and steel coming up the tunnel behind you? That is the sound of your impending demise.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16758,1,0,0,'Tyrannus SAY_INTRO_1'),
(36658,-1658054,'Ha, such an amusing gesture from the rabble. When I have finished with you, my master''s blade will feast upon your souls. Die!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16759,1,0,0,'Tyrannus SAY_INTRO_2'),
(36658,-1658055,'I shall not fail The Lich King! Come and meet your end!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16760,1,0,0,'Tyrannus SAY_AGGRO'),
(36658,-1658056,'Such a shameful display... You are better off dead!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16761,1,0,0,'Tyrannus SAY_SLAY_1'),
(36658,-1658057,'Perhaps you should have stayed in the mountains!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16762,1,0,0,'Tyrannus SAY_SLAY_2'),
(36658,-1658058,'Impossible! Rimefang... Warn...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16763,1,0,0,'Tyrannus SAY_DEATH'),
(36658,-1658059,'Rimefang, destroy this fool!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16764,1,0,0,'Tyrannus SAY_MARK_RIMEFANG_1'),
(36658,-1658060,'The frostwyrm Rimefang gazes at $N and readies an icy attack!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Tyrannus SAY_MARK_RIMEFANG_2'),
(36658,-1658061,'Power... overwhelming!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16765,1,0,0,'Tyrannus SAY_DARK_MIGHT_1'),
(36658,-1658062,'Scourgelord Tyrannus roars and swells with dark might!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'Tyrannus SAY_DARK_MIGHT_2'),
(37592,-1658063,'Brave champions, we owe you our lives, our freedom... Though it be a tiny gesture in the face of this enormous debt, I pledge that from this day forth, all will know of your deeds, and the blazing path of light you cut through the shadow of this dark citadel.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'Gorkun SAY_GORKUN_OUTRO_1'),
(37592,-1658064,'This day will stand as a testament not only to your valor, but to the fact that no foe, not even the Lich King himself, can stand when Alliance and Horde set aside their differences and ---',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'Gorkun SAY_GORKUN_OUTRO_2'),
(36993,-1658065,'Heroes, to me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16614,1,0,0,'Jaina SAY_JAYNA_OUTRO_3'),
(36990,-1658066,'Take cover behind me! Quickly!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17037,1,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_3'),
(36993,-1658067,'The Frost Queen is gone. We must keep moving - our objective is near.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16615,0,0,0,'Jaina SAY_JAYNA_OUTRO_4'),
(36990,-1658068,'I thought he''d never shut up. At last, Sindragosa silenced that long-winded fool. To the Halls of Reflection, champions! Our objective is near... I can sense it.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,17036,0,0,0,'Sylvanas SAY_SYLVANAS_OUTRO_4'),
(36993,-1658069,'I... I could not save them... Damn you, Arthas! DAMN YOU!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16616,0,0,0,'Jaina SAY_JAYNA_OUTRO_5');
+23
View File
@@ -0,0 +1,23 @@
UPDATE `instance_template` SET `script`='instance_pit_of_saron' WHERE `map`=658;
UPDATE `creature_template` SET `Scriptname`='boss_garfrost' WHERE `entry`=36494;
UPDATE `creature_template` SET `Scriptname`='boss_ick' WHERE `entry`=36476;
UPDATE `creature_template` SET `Scriptname`='boss_krick' WHERE `entry`=36477;
UPDATE `creature_template` SET `Scriptname`='boss_tyrannus' WHERE `entry`=36658;
UPDATE `creature_template` SET `Scriptname`='boss_rimefang' WHERE `entry`=36661;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_wrathbringer' WHERE `entry`=36840;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_skycaller' WHERE `entry`=31260;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_flamebearer' WHERE `entry`=36893;
UPDATE `creature_template` SET `Scriptname`='mob_ymirjar_deathbringer' WHERE `entry`=36892;
UPDATE `creature_template` SET `Scriptname`='mob_wrathbone_laborer' WHERE `entry`=36830;
UPDATE `creature_template` SET `Scriptname`='mob_wrathbone_coldwraith' WHERE `entry`=36842;
UPDATE `creature_template` SET `Scriptname`='mob_wrathbone_sorcerer' WHERE `entry`=37728;
UPDATE `creature_template` SET `Scriptname`='mob_stonespine_gargoyle' WHERE `entry`=36896;
UPDATE `creature_template` SET `Scriptname`='mob_plagueborn_horror' WHERE `entry`=36879;
UPDATE `creature_template` SET `Scriptname`='mob_iceborn_protodrake' WHERE `entry`=36891;
UPDATE `creature_template` SET `Scriptname`='mob_hungering_ghoul' WHERE `entry`=37711;
UPDATE `creature_template` SET `Scriptname`='mob_fallen_warrior' WHERE `entry`=38487;
UPDATE `creature_template` SET `Scriptname`='mob_fallen_warrior' WHERE `entry`=36841;
UPDATE `creature_template` SET `Scriptname`='mob_deathwhisper_torturer' WHERE `entry`=37713;
UPDATE `creature_template` SET `Scriptname`='mob_deathwhisper_shadowcaster' WHERE `entry`=37712;
UPDATE `creature_template` SET `Scriptname`='mob_deathwhisper_necrolyte' WHERE `entry`=36788;
UPDATE `creature_template` SET `Scriptname`='mob_geist_ambusher' WHERE `entry`=36886;
+10
View File
@@ -388,6 +388,11 @@ void AddSC_boss_xevozz();
void AddSC_boss_zuramat();
void AddSC_instance_violet_hold();
void AddSC_violet_hold();
void AddSC_instance_pit_of_saron(); //Pit of Saron
void AddSC_pit_of_saron();
void AddSC_boss_garfrost();
void AddSC_boss_ick();
void AddSC_boss_tyrannus();
void AddSC_dalaran();
void AddSC_borean_tundra();
@@ -868,6 +873,11 @@ void AddScripts()
AddSC_boss_zuramat();
AddSC_instance_violet_hold();
AddSC_violet_hold();
AddSC_instance_pit_of_saron(); //Pit of Saron
AddSC_pit_of_saron();
AddSC_boss_garfrost();
AddSC_boss_ick();
AddSC_boss_tyrannus();
AddSC_dalaran();
AddSC_borean_tundra();
+4
View File
@@ -336,7 +336,11 @@ SET(scripts_STAT_SRCS
northrend/frozen_halls/forge_of_souls/forge_of_souls.h
northrend/frozen_halls/halls_of_reflection/instance_halls_of_reflection.cpp
northrend/frozen_halls/halls_of_reflection/halls_of_reflection.h
northrend/frozen_halls/pit_of_saron/boss_forgemaster_garfrost.cpp
northrend/frozen_halls/pit_of_saron/boss_krickandick.cpp
northrend/frozen_halls/pit_of_saron/boss_scourgelord_tyrannus.cpp
northrend/frozen_halls/pit_of_saron/instance_pit_of_saron.cpp
northrend/frozen_halls/pit_of_saron/pit_of_saron.cpp
northrend/frozen_halls/pit_of_saron/pit_of_saron.h
northrend/gundrak/instance_gundrak.cpp
northrend/gundrak/boss_slad_ran.cpp
@@ -0,0 +1,209 @@
/* Copyright (C) 2006 - 2010 TrinityCore <https://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 "pit_of_saron.h"
enum Yells
{
SAY_AGGRO = -1658001,
SAY_SLAY_1 = -1658002,
SAY_SLAY_2 = -1658003,
SAY_DEATH = -1658004,
SAY_PHASE2 = -1658005,
SAY_PHASE3 = -1658006,
SAY_TYRANNUS_DEATH = -1659007,
};
enum eEvents
{
EVENT_NONE,
EVENT_PERMAFROST,
EVENT_THROW_SARONITE,
EVENT_CHILLINGWAVE,
EVENT_DEEPFREEZE,
};
enum Spells
{
SPELL_PERMAFROST = 70326,
SPELL_PERMAFROST_TRIGGER = 68786, // triggered by PERMAFROST. Used to check aura
SPELL_THROW_SARONITE = 68788,
SPELL_THUNDERING_STOMP = 68771,
SPELL_CHILLING_WAVE = 68778,
H_SPELL_CHILLING_WAVE = 70333,
SPELL_DEEP_FREEZE = 70381,
H_SPELL_DEEP_FREEZE = 72930,
SPELL_FORGE_MACE = 68785,
H_SPELL_FORGE_MACE = 70335,
SPELL_FORGE_BLADE = 68774,
H_SPELL_FORGE_BLADE = 70334,
};
enum eEnums
{
EQUIP_ID_SWORD = 49345,
EQUIP_ID_MACE = 49344,
ACHIEV_DOESNT_GO_TO_ELEVEN = 4524,
};
struct boss_garfrostAI : public ScriptedAI
{
boss_garfrostAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
bool phase2;
bool phase3;
bool bAchievement;
ScriptedInstance* pInstance;
EventMap events;
void Reset()
{
events.Reset();
phase2 = false;
phase3 = false;
bAchievement = true;
if (pInstance)
pInstance->SetData(DATA_GARFROST_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
DoCast(m_creature, SPELL_PERMAFROST);
if (pInstance)
pInstance->SetData(DATA_GARFROST_EVENT, IN_PROGRESS);
events.ScheduleEvent(EVENT_THROW_SARONITE, 45000);
}
void DamageTaken(Unit* pDoneBy, uint32& uiDamage)
{
if (HealthBelowPct(66) && !phase2)
{
phase2 = true;
DoCast(m_creature, SPELL_THUNDERING_STOMP);
// TODO: should go to a forge
DoCast(m_creature, DUNGEON_MODE(SPELL_FORGE_BLADE, H_SPELL_FORGE_BLADE));
// TODO: should equip when spell completes
SetEquipmentSlots(false, EQUIP_ID_SWORD, -1, -1);
m_creature->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE);
events.ScheduleEvent(EVENT_CHILLINGWAVE, 10000);
}
if (HealthBelowPct(33) && !phase3)
{
phase3 = true;
DoCast(m_creature, SPELL_THUNDERING_STOMP);
// TODO: should go to a forge
DoCast(m_creature, DUNGEON_MODE(SPELL_FORGE_MACE, H_SPELL_FORGE_MACE));
// TODO: should equip when spell completes
SetEquipmentSlots(false, EQUIP_ID_MACE, -1, -1);
m_creature->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE);
events.CancelEvent(EVENT_CHILLINGWAVE); // cast only in phase 2.
events.ScheduleEvent(EVENT_DEEPFREEZE, 10000);
}
}
void KilledUnit(Unit *victim)
{
if (victim == m_creature)
return;
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit* killer)
{
DoScriptText(SAY_DEATH, m_creature);
if (pInstance)
{
if (Creature *pTyrannus = m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_TYRANNUS)))
DoScriptText(SAY_TYRANNUS_DEATH, pTyrannus);
pInstance->SetData(DATA_GARFROST_EVENT, DONE);
if (IsHeroic() && bAchievement)
pInstance->DoCompleteAchievement(ACHIEV_DOESNT_GO_TO_ELEVEN);
}
}
void SpellHitTarget(Unit* pTarget, const SpellEntry *spell)
{
if (spell->Id == SPELL_PERMAFROST_TRIGGER && bAchievement)
{
if (Aura *pAura = pTarget->GetAura(SPELL_PERMAFROST_TRIGGER))
if (pAura->GetStackAmount() > 10)
bAchievement = false;
}
}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
events.Update(diff);
if (m_creature->hasUnitState(UNIT_STAT_CASTING))
return;
while(uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_THROW_SARONITE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_THROW_SARONITE);
events.RescheduleEvent(EVENT_THROW_SARONITE, 35000);
return;
case EVENT_DEEPFREEZE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, DUNGEON_MODE(SPELL_DEEP_FREEZE, H_SPELL_DEEP_FREEZE));
events.RescheduleEvent(EVENT_DEEPFREEZE, 35000);
return;
case EVENT_CHILLINGWAVE:
DoCastAOE(DUNGEON_MODE(SPELL_CHILLING_WAVE, H_SPELL_CHILLING_WAVE));
events.RescheduleEvent(EVENT_CHILLINGWAVE, 40000);
return;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_garfrost(Creature* pCreature)
{
return new boss_garfrostAI (pCreature);
}
void AddSC_boss_garfrost()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_garfrost";
newscript->GetAI = &GetAI_boss_garfrost;
newscript->RegisterSelf();
}
@@ -0,0 +1,482 @@
/* Copyright (C) 2006 - 2010 TrinityCore <https://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 "pit_of_saron.h"
/*
* SDComment: Spell Explosive barrage is not working.
*/
enum Spells
{
SPELL_PURSUED = 68987,
SPELL_CONFUSION = 69029,
SPELL_EXPLOSIVE_BARRAGE = 69263,
SPELL_MIGHTY_KICK = 69021,
SPELL_POISON_NOVA = 68989,
H_SPELL_POISON_NOVA = 70434,
SPELL_SHADOW_BOLT = 69028,
SPELL_TOXIC_WASTE = 69024,
H_SPELL_TOXIC_WASTE = 70436,
};
enum Yells
{
// Krick
SAY_KRICK_AGGRO = -1658010,
SAY_KRICK_SLAY_1 = -1658011,
SAY_KRICK_SLAY_2 = -1658012,
SAY_KRICK_BARRAGE_1 = -1658013,
SAY_KRICK_BARRAGE_2 = -1658014,
SAY_KRICK_POISON_NOVA = -1658015,
SAY_KRICK_CHASE_1 = -1658016,
SAY_KRICK_CHASE_2 = -1658017,
SAY_KRICK_CHASE_3 = -1658018,
// Ick
SAY_ICK_POISON_NOVA = -1658020,
SAY_ICK_CHASE_1 = -1658021,
// OUTRO
SAY_KRICK_OUTRO_1 = -1658030,
SAY_JAYNA_OUTRO_2 = -1658031,
SAY_SYLVANAS_OUTRO_2 = -1658032,
SAY_KRICK_OUTRO_3 = -1658033,
SAY_JAYNA_OUTRO_4 = -1658034,
SAY_SYLVANAS_OUTRO_4 = -1658035,
SAY_KRICK_OUTRO_5 = -1658036,
SAY_TYRANNUS_OUTRO_7 = -1658037,
SAY_KRICK_OUTRO_8 = -1658038,
SAY_TYRANNUS_OUTRO_9 = -1658039,
SAY_JAYNA_OUTRO_10 = -1658040,
SAY_SYLVANAS_OUTRO_10 = -1658041,
};
enum Events
{
EVENT_NONE,
EVENT_PURSUE,
EVENT_MIGHTY_KICK,
EVENT_POISON_NOVA,
EVENT_EXPLOSIVE_BARRAGE,
EVENT_END_EXPLOSIVE_BARRAGE,
// Krick
EVENT_SHADOW_BOLT,
EVENT_TOXIC_WASTE,
// Krick OUTRO
EVENT_OUTRO_1,
EVENT_OUTRO_2,
EVENT_OUTRO_3,
EVENT_OUTRO_4,
EVENT_OUTRO_5,
EVENT_OUTRO_6,
EVENT_OUTRO_7,
EVENT_OUTRO_8,
EVENT_OUTRO_9,
EVENT_OUTRO_10,
EVENT_OUTRO_11,
EVENT_OUTRO_12,
EVENT_OUTRO_END,
};
enum KrickPhase
{
PHASE_COMBAT,
PHASE_OUTRO,
};
enum Actions
{
ACTION_OUTRO,
};
enum Misc
{
SEAT_KRICK = 0,
// events GCD. Shall not be 0.
GCD_1 = 1,
};
// Krick is the Gnome.
// Ick is the Mount
// Common Events are handled/triggered by Ick that "drive" Krick through DoAction.
struct boss_ickAI : public ScriptedAI
{
boss_ickAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
EventMap events;
void Reset()
{
events.Reset();
if (pInstance)
pInstance->SetData(DATA_KRICKANDICK_EVENT, NOT_STARTED);
}
Creature* GetKrick()
{
return m_creature->GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_KRICK) : 0);
}
void EnterCombat(Unit *pWho)
{
if (pInstance)
pInstance->SetData(DATA_KRICKANDICK_EVENT, IN_PROGRESS);
Creature* pKrick = GetKrick();
if (!pKrick)
pKrick = m_creature->SummonCreature(CREATURE_KRICK, *m_creature, TEMPSUMMON_MANUAL_DESPAWN);
if (pKrick)
DoScriptText(SAY_KRICK_AGGRO, pKrick);
events.ScheduleEvent(EVENT_MIGHTY_KICK, 20000, GCD_1);
events.ScheduleEvent(EVENT_PURSUE, 30000, GCD_1);
events.ScheduleEvent(EVENT_POISON_NOVA, 30000, GCD_1);
events.ScheduleEvent(EVENT_EXPLOSIVE_BARRAGE, 35000);
events.ScheduleEvent(EVENT_TOXIC_WASTE, 5000);
events.ScheduleEvent(EVENT_SHADOW_BOLT, 15000);
}
void EnterEvadeMode()
{
m_creature->GetMotionMaster()->Clear();
ScriptedAI::EnterEvadeMode();
}
void JustDied(Unit* pKiller)
{
if (Creature* pKrick = GetKrick())
{
if (pKrick->AI())
pKrick->AI()->DoAction(ACTION_OUTRO);
}
if (pInstance)
pInstance->SetData(DATA_KRICKANDICK_EVENT, DONE);
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->isInCombat())
return;
if (!m_creature->getVictim() && m_creature->getThreatManager().isThreatListEmpty())
{
EnterEvadeMode();
return;
}
events.Update(diff);
if (m_creature->hasUnitState(UNIT_STAT_CASTING))
return;
switch(events.ExecuteEvent())
{
case EVENT_PURSUE:
if (Creature* pKrick = GetKrick())
DoScriptText(RAND(SAY_KRICK_CHASE_1,SAY_KRICK_CHASE_2,SAY_KRICK_CHASE_3), pKrick);
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
m_creature->Attack(pTarget,false);
DoScriptText(SAY_ICK_CHASE_1, m_creature, pTarget);
DoCast(pTarget, SPELL_PURSUED);
}
DoCast(SPELL_CONFUSION);
events.ScheduleEvent(EVENT_PURSUE, 30000, GCD_1);
return;
case EVENT_MIGHTY_KICK:
DoCast(m_creature->getVictim(), SPELL_MIGHTY_KICK);
events.ScheduleEvent(EVENT_MIGHTY_KICK, 25000, GCD_1);
return;
case EVENT_POISON_NOVA:
if (Creature* pKrick = GetKrick())
DoScriptText(SAY_KRICK_POISON_NOVA, pKrick);
DoScriptText(SAY_ICK_POISON_NOVA, m_creature);
DoCastAOE(DUNGEON_MODE(SPELL_POISON_NOVA,H_SPELL_POISON_NOVA));
events.ScheduleEvent(EVENT_POISON_NOVA, 30000, GCD_1);
return;
case EVENT_TOXIC_WASTE:
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_TOXIC_WASTE,H_SPELL_TOXIC_WASTE));
events.ScheduleEvent(EVENT_TOXIC_WASTE, 5000);
return;
case EVENT_SHADOW_BOLT:
DoCast(m_creature->getVictim(), SPELL_SHADOW_BOLT);
events.ScheduleEvent(EVENT_SHADOW_BOLT, 15000);
return;
case EVENT_EXPLOSIVE_BARRAGE:
if (Creature *pKrick = GetKrick())
{
DoScriptText(SAY_KRICK_BARRAGE_1, pKrick);
DoScriptText(SAY_KRICK_BARRAGE_2, pKrick);
}
DoCastAOE(SPELL_EXPLOSIVE_BARRAGE);
m_creature->GetMotionMaster()->MoveIdle();
events.DelayEvents(20000, GCD_1); // 2 sec cast + 18 sec
events.ScheduleEvent(EVENT_END_EXPLOSIVE_BARRAGE, 20000);
return;
case EVENT_END_EXPLOSIVE_BARRAGE:
m_creature->GetMotionMaster()->Clear();
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
events.ScheduleEvent(EVENT_EXPLOSIVE_BARRAGE, 25000);
break;
}
DoMeleeAttackIfReady();
}
};
struct boss_krickAI : public ScriptedAI
{
boss_krickAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
EventMap events;
KrickPhase phase;
uint64 uiNpcOutroDialog;
uint64 uiTyrannus;
void Reset()
{
uiNpcOutroDialog = 0;
uiTyrannus = 0;
phase = PHASE_COMBAT;
m_creature->SetReactState(REACT_PASSIVE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->SetVisibility(VISIBILITY_OFF);
}
Creature* GetIck()
{
return m_creature->GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_ICK) : 0);
}
void KilledUnit(Unit *victim)
{
if (victim == m_creature)
return;
DoScriptText(RAND(SAY_KRICK_SLAY_1,SAY_KRICK_SLAY_2), m_creature);
}
void DamageTaken(Unit *pDoneBy, uint32 &uiDamage)
{
// if killed whatever the reason, it breaks the outro
uiDamage = 0;
}
void DoAction(const int32 actionId)
{
switch(actionId)
{
case ACTION_OUTRO:
{
Position pos;
if (Creature* pIck = GetIck())
{
// TODO: tele on Ick then run some distance.
pIck->GetNearPosition(pos, 5.0f, 3.14);
m_creature->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), 0.0f);
}
m_creature->SetVisibility(VISIBILITY_ON);
Creature* pJainaOrSylvanas = m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_JAINA_SYLVANAS_1));
if (pJainaOrSylvanas) {
Position pos;
m_creature->GetNearPosition(pos, 5.0f, 0);
pJainaOrSylvanas->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(),
pos.GetAngle(m_creature->GetPositionX(), m_creature->GetPositionY()));
}
else {
if (pInstance->GetData(DATA_TEAM_IN_INSTANCE) == TEAM_ALLIANCE)
pJainaOrSylvanas = m_creature->SummonCreature(NPC_SYLVANAS_PART1, *m_creature, TEMPSUMMON_MANUAL_DESPAWN);
else
pJainaOrSylvanas = m_creature->SummonCreature(NPC_JAINA_PART1, *m_creature, TEMPSUMMON_MANUAL_DESPAWN);
}
if (pJainaOrSylvanas)
{
pJainaOrSylvanas->SetOrientation(pJainaOrSylvanas->GetAngle(m_creature->GetPositionX(), m_creature->GetPositionY()));
m_creature->SetOrientation(m_creature->GetAngle(pJainaOrSylvanas->GetPositionX(), pJainaOrSylvanas->GetPositionY()));
uiNpcOutroDialog = pJainaOrSylvanas->GetGUID();
}
phase = PHASE_OUTRO;
events.Reset();
events.ScheduleEvent(EVENT_OUTRO_1, 1000);
break;
}
}
}
void UpdateAI(const uint32 diff)
{
if (phase == PHASE_OUTRO)
{
if (!pInstance)
return;
events.Update(diff);
switch(events.ExecuteEvent())
{
case EVENT_OUTRO_1:
{
DoScriptText(SAY_KRICK_OUTRO_1, m_creature);
events.ScheduleEvent(EVENT_OUTRO_2, 14000);
break;
}
case EVENT_OUTRO_2:
{
Creature* pNpcDialog = m_creature->GetCreature(*m_creature, uiNpcOutroDialog);
if (pNpcDialog)
{
if (pInstance->GetData(DATA_TEAM_IN_INSTANCE) == TEAM_ALLIANCE)
DoScriptText(SAY_JAYNA_OUTRO_2, pNpcDialog);
else
DoScriptText(SAY_SYLVANAS_OUTRO_2, pNpcDialog);
}
events.ScheduleEvent(EVENT_OUTRO_3, 8500);
break;
}
case EVENT_OUTRO_3:
DoScriptText(SAY_KRICK_OUTRO_3, m_creature);
events.ScheduleEvent(EVENT_OUTRO_4, 12000);
break;
case EVENT_OUTRO_4:
{
Creature* pNpcDialog = m_creature->GetCreature(*m_creature, uiNpcOutroDialog);
if (pNpcDialog)
{
if (pInstance->GetData(DATA_TEAM_IN_INSTANCE) == TEAM_ALLIANCE)
DoScriptText(SAY_JAYNA_OUTRO_4, pNpcDialog);
else
DoScriptText(SAY_SYLVANAS_OUTRO_4, pNpcDialog);
}
events.ScheduleEvent(EVENT_OUTRO_5, 8000);
break;
}
case EVENT_OUTRO_5:
DoScriptText(SAY_KRICK_OUTRO_5, m_creature);
events.ScheduleEvent(EVENT_OUTRO_6, 4000);
break;
case EVENT_OUTRO_6:
// TODO spawn Tyrannus at some distance and MovePoint near-by (flying on rimefang)
// store uiTyrannus
// Adjust timer so tyrannus has time to come
uiTyrannus = (pInstance ? pInstance->GetData64(DATA_TYRANNUS) : 0);
events.ScheduleEvent(EVENT_OUTRO_7, 1);
break;
case EVENT_OUTRO_7:
if (Creature *pTyrannus = m_creature->GetCreature(*m_creature, uiTyrannus))
DoScriptText(SAY_TYRANNUS_OUTRO_7, pTyrannus);
events.ScheduleEvent(EVENT_OUTRO_8, 7000);
break;
case EVENT_OUTRO_8:
DoScriptText(SAY_KRICK_OUTRO_8, m_creature);
// TODO: Tyrannus starts killing Krick.
// there shall be some visual spell effect
events.ScheduleEvent(EVENT_OUTRO_9, 6000);
break;
case EVENT_OUTRO_9:
// tyrannus kills krick
m_creature->SetStandState(UNIT_STAND_STATE_DEAD);
m_creature->SetHealth(0);
if (Creature *pTyrannus = m_creature->GetCreature(*m_creature, uiTyrannus))
DoScriptText(SAY_TYRANNUS_OUTRO_9, pTyrannus);
events.ScheduleEvent(EVENT_OUTRO_10, 12000);
break;
case EVENT_OUTRO_10:
{
Creature* pNpcDialog = m_creature->GetCreature(*m_creature, uiNpcOutroDialog);
if (pNpcDialog)
{
if (pInstance->GetData(DATA_TEAM_IN_INSTANCE) == TEAM_ALLIANCE)
DoScriptText(SAY_JAYNA_OUTRO_10, pNpcDialog);
else
DoScriptText(SAY_SYLVANAS_OUTRO_10, pNpcDialog);
}
// End of OUTRO. for now...
events.ScheduleEvent(EVENT_OUTRO_END, 8000);
break;
}
case EVENT_OUTRO_END:
{
Creature* pNpcDialog = m_creature->GetCreature(*m_creature, uiNpcOutroDialog);
if (pNpcDialog)
pNpcDialog->DisappearAndDie();
m_creature->DisappearAndDie();
break;
}
}
return;
}
}
};
CreatureAI* GetAI_boss_ick(Creature* pCreature)
{
return new boss_ickAI(pCreature);
}
CreatureAI* GetAI_boss_krick(Creature* pCreature)
{
return new boss_krickAI(pCreature);
}
void AddSC_boss_ick()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_ick";
newscript->GetAI = &GetAI_boss_ick;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_krick";
newscript->GetAI = &GetAI_boss_krick;
newscript->RegisterSelf();
}
@@ -0,0 +1,273 @@
/* Copyright (C) 2006 - 2010 TrinityCore <https://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 "pit_of_saron.h"
/*
* SDComment: TODO:
* - implement aura for spell Overlord Brand.
* - Intro/Outro
* - improve script of Rimefang
*/
enum Yells
{
SAY_AMBUSH_1 = -1658050,
SAY_AMBUSH_2 = -1658051,
SAY_GAUNTLET_START = -1658052,
SAY_INTRO_1 = -1658053,
SAY_INTRO_2 = -1658054,
SAY_AGGRO = -1658055,
SAY_SLAY_1 = -1658056,
SAY_SLAY_2 = -1658057,
SAY_DEATH = -1658058,
SAY_MARK_RIMEFANG_1 = -1658059,
SAY_MARK_RIMEFANG_2 = -1658060,
SAY_DARK_MIGHT_1 = -1658061,
SAY_DARK_MIGHT_2 = -1658062,
SAY_GORKUN_OUTRO_1 = -1658063,
SAY_GORKUN_OUTRO_2 = -1658064,
SAY_JAYNA_OUTRO_3 = -1658065,
SAY_SYLVANAS_OUTRO_3 = -1658066,
SAY_JAYNA_OUTRO_4 = -1658067,
SAY_SYLVANAS_OUTRO_4 = -1658068,
SAY_JAYNA_OUTRO_5 = -1658069,
};
enum Spells
{
SPELL_FORCEFUL_SMASH = 69155,
H_SPELL_FORCEFUL_SMASH = 69627,
SPELL_OVERLORDS_BRAND = 69172,
SPELL_DARK_MIGHT = 69167,
H_SPELL_DARK_MIGHT = 69629,
SPELL_HOARFROST = 69246,
SPELL_MARK_OF_RIMEFANG = 69275,
SPELL_ICY_BLAST = 69233,
H_SPELL_ICY_BLAST = 69646,
SPELL_ICY_BLAST_2 = 69238,
H_SPELL_ICY_BLAST_2 = 69628,
};
enum Events
{
EVENT_NONE,
EVENT_FORCEFUL_SMASH,
EVENT_OVERLORDS_BRAND,
EVENT_DARK_MIGHT,
// Rimefang
EVENT_MARK_OF_RIMEFANG,
EVENT_HOARFROST,
EVENT_ICY_BLAST,
EVENT_ICY_BLAST_2,
};
enum Misc
{
SEAT_TYRANNUS = 0
};
struct boss_tyrannusAI : public ScriptedAI
{
boss_tyrannusAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
EventMap events;
void Reset()
{
events.Reset();
if (pInstance)
pInstance->SetData(DATA_TYRANNUS_EVENT, NOT_STARTED);
}
Creature* GetRimefang()
{
return m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_RIMEFANG));
}
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
m_creature->ExitVehicle();
// restore health if any damage done during intro
m_creature->SetHealth(m_creature->GetMaxHealth());
if (pInstance)
pInstance->SetData(DATA_TYRANNUS_EVENT, IN_PROGRESS);
events.ScheduleEvent(EVENT_FORCEFUL_SMASH, 10000);
events.ScheduleEvent(EVENT_OVERLORDS_BRAND, 35000);
events.ScheduleEvent(EVENT_DARK_MIGHT, 40000);
}
void KilledUnit(Unit *victim)
{
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit* killer)
{
DoScriptText(SAY_DEATH, m_creature);
if (pInstance)
{
pInstance->SetData(DATA_TYRANNUS_EVENT, DONE);
if (Creature* pRimefang = GetRimefang())
pRimefang->ForcedDespawn();
}
}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
events.Update(diff);
if (m_creature->hasUnitState(UNIT_STAT_CASTING))
return;
while(uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_FORCEFUL_SMASH:
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_FORCEFUL_SMASH, H_SPELL_FORCEFUL_SMASH));
events.ScheduleEvent(EVENT_FORCEFUL_SMASH, 10000);
return;
case EVENT_OVERLORDS_BRAND:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_OVERLORDS_BRAND);
events.ScheduleEvent(EVENT_OVERLORDS_BRAND, 45000);
return;
case EVENT_DARK_MIGHT:
DoScriptText(SAY_DARK_MIGHT_1, m_creature);
DoScriptText(SAY_DARK_MIGHT_2, m_creature);
DoCast(m_creature, DUNGEON_MODE(SPELL_DARK_MIGHT, H_SPELL_DARK_MIGHT));
events.ScheduleEvent(EVENT_DARK_MIGHT, 60000);
return;
}
}
DoMeleeAttackIfReady();
}
};
struct boss_rimefangAI : public ScriptedAI
{
boss_rimefangAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
EventMap events;
void Reset()
{
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
events.Reset();
}
void EnterCombat(Unit* who)
{
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
events.ScheduleEvent(EVENT_MARK_OF_RIMEFANG, 25000);
events.ScheduleEvent(EVENT_ICY_BLAST, 35000);
}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
events.Update(diff);
if (m_creature->hasUnitState(UNIT_STAT_CASTING))
return;
while(uint32 eventId = events.ExecuteEvent())
{
switch(eventId)
{
case EVENT_MARK_OF_RIMEFANG:
DoScriptText(SAY_MARK_RIMEFANG_1, m_creature);
DoScriptText(SAY_MARK_RIMEFANG_2, m_creature);
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_MARK_OF_RIMEFANG);
events.ScheduleEvent(EVENT_HOARFROST, 5000);
return;
case EVENT_HOARFROST:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_HOARFROST);
events.ScheduleEvent(EVENT_MARK_OF_RIMEFANG, 20000);
return;
case EVENT_ICY_BLAST:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, DUNGEON_MODE(SPELL_ICY_BLAST, H_SPELL_ICY_BLAST));
events.ScheduleEvent(EVENT_ICY_BLAST_2, 5000);
return;
case EVENT_ICY_BLAST_2:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget->getVictim(), DUNGEON_MODE(SPELL_ICY_BLAST_2, H_SPELL_ICY_BLAST_2));
events.ScheduleEvent(EVENT_ICY_BLAST, 30000);
return;
}
}
}
};
CreatureAI* GetAI_boss_tyrannus(Creature* pCreature)
{
return new boss_tyrannusAI(pCreature);
}
CreatureAI* GetAI_boss_rimefang(Creature* pCreature)
{
return new boss_rimefangAI(pCreature);
}
void AddSC_boss_tyrannus()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_tyrannus";
newscript->GetAI = &GetAI_boss_tyrannus;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name="boss_rimefang";
newscript->GetAI = &GetAI_boss_rimefang;
newscript->RegisterSelf();
}
@@ -17,7 +17,7 @@
#include "ScriptedPch.h"
#include "pit_of_saron.h"
#define MAX_ENCOUNTER 3
#define MAX_ENCOUNTER 3
/* Pit of Saron encounters:
0- Forgemaster Garfrost
@@ -27,65 +27,135 @@
struct instance_pit_of_saron : public ScriptedInstance
{
instance_pit_of_saron(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
instance_pit_of_saron(Map* pMap) : ScriptedInstance(pMap) {};
uint64 uiForgemaster;
uint64 uiKrick;
uint64 uiIck;
uint64 uiGarfrost;
uint64 uiTyrannus;
uint64 uiRimefang;
uint32 m_auiEncounter[MAX_ENCOUNTER];
uint64 uiJainaOrSylvanas1;
uint64 uiJainaOrSylvanas2;
void Initialize()
{
uiForgemaster = 0;
uint32 uiTeamInInstance;
uint32 uiEncounter[MAX_ENCOUNTER];
void Initialize()
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
uiEncounter[i] = NOT_STARTED;
uiGarfrost = 0;
uiKrick = 0;
uiIck = 0;
uiTyrannus = 0;
}
bool IsEncounterInProgress() const
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
m_auiEncounter[i] = NOT_STARTED;
if (uiEncounter[i] == IN_PROGRESS)
return true;
return false;
}
void OnCreatureCreate(Creature* pCreature, bool add)
{
Map::PlayerList const &players = instance->GetPlayers();
if (!players.isEmpty())
{
if (Player* pPlayer = players.begin()->getSource())
uiTeamInInstance = pPlayer->GetTeam();
}
switch(pCreature->GetEntry())
{
case CREATURE_FORGEMASTER:
uiForgemaster = pCreature->GetGUID();
break;
case CREATURE_KRICK:
uiKrick = pCreature->GetGUID();
case CREATURE_KRICK:
uiKrick = pCreature->GetGUID();
break;
case CREATURE_ICK:
uiIck = pCreature->GetGUID();
break;
case CREATURE_TYRANNUS:
uiTyrannus = pCreature->GetGUID();
break;
case CREATURE_GARFROST:
uiGarfrost = pCreature->GetGUID();
break;
case CREATURE_TYRANNUS:
uiTyrannus = pCreature->GetGUID();
break;
case CREATURE_RIMEFANG:
uiRimefang = pCreature->GetGUID();
break;
case NPC_SYLVANAS_PART1:
if (uiTeamInInstance == ALLIANCE)
pCreature->UpdateEntry(NPC_JAINA_PART1, ALLIANCE);
uiJainaOrSylvanas1 = pCreature->GetGUID();
break;
case NPC_SYLVANAS_PART2:
if (uiTeamInInstance == ALLIANCE)
pCreature->UpdateEntry(NPC_JAINA_PART2, ALLIANCE);
uiJainaOrSylvanas2 = pCreature->GetGUID();
break;
case NPC_KILARA:
if (uiTeamInInstance == ALLIANCE)
pCreature->UpdateEntry(NPC_ELANDRA, ALLIANCE);
break;
case NPC_KORALEN:
if (uiTeamInInstance == ALLIANCE)
pCreature->UpdateEntry(NPC_KORLAEN, ALLIANCE);
break;
case NPC_CHAMPION_1_HORDE:
if (uiTeamInInstance == ALLIANCE)
pCreature->UpdateEntry(NPC_CHAMPION_1_ALLIANCE, ALLIANCE);
break;
case NPC_CHAMPION_2_HORDE:
if (uiTeamInInstance == ALLIANCE)
pCreature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE);
break;
case NPC_CHAMPION_3_HORDE: // No 3rd set for Alliance?
if (uiTeamInInstance == ALLIANCE)
pCreature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE);
break;
}
}
/*
void OnGameObjectCreate(GameObject* pGo, bool add)
uint64 GetData64(uint32 identifier)
{
switch(pGo->GetEntry())
switch(identifier)
{
case DATA_GARFROST: return uiGarfrost;
case DATA_KRICK: return uiKrick;
case DATA_ICK: return uiIck;
case DATA_TYRANNUS: return uiTyrannus;
case DATA_RIMEFANG: return uiRimefang;
case DATA_JAINA_SYLVANAS_1: return uiJainaOrSylvanas1;
case DATA_JAINA_SYLVANAS_2: return uiJainaOrSylvanas2;
}
return 0;
}
*/
void SetData(uint32 type, uint32 data)
{
switch(type)
{
case DATA_FORGEMASTER_EVENT:
m_auiEncounter[0] = data;
break;
case DATA_KRICKANDICK_EVENT:
m_auiEncounter[1] = data;
case DATA_GARFROST_EVENT:
uiEncounter[0] = data;
break;
case DATA_TYRANNUS_EVENT:
m_auiEncounter[2] = data;
break;
uiEncounter[1] = data;
break;
case DATA_KRICKANDICK_EVENT:
uiEncounter[2] = data;
break;
}
if (data == DONE)
@@ -96,32 +166,27 @@ struct instance_pit_of_saron : public ScriptedInstance
{
switch(type)
{
case DATA_FORGEMASTER_EVENT: return m_auiEncounter[0];
case DATA_KRICKANDICK_EVENT: return m_auiEncounter[1];
case DATA_TYRANNUS_EVENT: return m_auiEncounter[2];
case DATA_GARFROST_EVENT: return uiEncounter[0];
case DATA_TYRANNUS_EVENT: return uiEncounter[1];
case DATA_KRICKANDICK_EVENT: return uiEncounter[2];
}
return 0;
}
/*
uint64 GetData64(uint32 identifier)
{
switch(identifier)
{
}
return 0;
}
*/
std::string GetSaveData()
{
OUT_SAVE_INST_DATA;
std::string str_data;
std::ostringstream saveStream;
saveStream << "P S " << m_auiEncounter[0] << " " << m_auiEncounter[1] << m_auiEncounter[2];
saveStream << "P S " << uiEncounter[0] << " " << uiEncounter[1] << " " << uiEncounter[2];
str_data = saveStream.str();
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
return str_data;
}
void Load(const char* in)
@@ -142,13 +207,13 @@ struct instance_pit_of_saron : public ScriptedInstance
if (dataHead1 == 'P' && dataHead2 == 'S')
{
m_auiEncounter[0] = data0;
m_auiEncounter[1] = data1;
m_auiEncounter[2] = data2;
uiEncounter[0] = data0;
uiEncounter[1] = data1;
uiEncounter[2] = data2;
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
m_auiEncounter[i] = NOT_STARTED;
if (uiEncounter[i] == IN_PROGRESS)
uiEncounter[i] = NOT_STARTED;
} else OUT_LOAD_INST_DATA_FAIL;
@@ -161,7 +226,7 @@ InstanceData* GetInstanceData_instance_pit_of_saron(Map* pMap)
return new instance_pit_of_saron(pMap);
}
void AddSC_pit_of_saron()
void AddSC_instance_pit_of_saron()
{
Script *newscript;
newscript = new Script;
File diff suppressed because it is too large Load Diff
@@ -16,17 +16,48 @@
#ifndef DEF_PIT_OF_SARON_H
#define DEF_PIT_OF_SARON_H
enum Data
{
DATA_FORGEMASTER_EVENT,
DATA_GARFROST_EVENT,
DATA_KRICKANDICK_EVENT,
DATA_TYRANNUS_EVENT
DATA_TYRANNUS_EVENT,
DATA_TEAM_IN_INSTANCE,
};
enum Data64
{
DATA_GARFROST,
DATA_KRICK,
DATA_ICK,
DATA_TYRANNUS,
DATA_RIMEFANG,
DATA_JAINA_SYLVANAS_1, // GUID of either Jaina or Sylvanas part 1, depending on team, as it's the same spawn.
DATA_JAINA_SYLVANAS_2, // GUID of either Jaina or Sylvanas part 2, depending on team, as it's the same spawn.
};
enum Creatures
{
CREATURE_FORGEMASTER = 36494,
CREATURE_KRICK = 36477,
CREATURE_ICK = 36476,
CREATURE_TYRANNUS = 36658
CREATURE_GARFROST = 36494,
CREATURE_KRICK = 36477,
CREATURE_ICK = 36476,
CREATURE_TYRANNUS = 36658,
CREATURE_RIMEFANG = 36661,
NPC_SYLVANAS_PART1 = 36990,
NPC_SYLVANAS_PART2 = 38189,
NPC_JAINA_PART1 = 36993,
NPC_JAINA_PART2 = 38188,
NPC_KILARA = 37583,
NPC_ELANDRA = 37774,
NPC_KORALEN = 37779,
NPC_KORLAEN = 37582,
NPC_CHAMPION_1_HORDE = 37584,
NPC_CHAMPION_2_HORDE = 37587,
NPC_CHAMPION_3_HORDE = 37588,
NPC_CHAMPION_1_ALLIANCE = 37496,
NPC_CHAMPION_2_ALLIANCE = 37497,
};
#endif
+54 -34
View File
@@ -3174,44 +3174,64 @@
</File>
</Filter>
<Filter
Name="Forge of Souls"
Name="Icecrown Citadel"
>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\boss_bronjahm.cpp"
<Filter
Name="Forge of Souls"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\forge_of_souls.h"
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\boss_bronjahm.cpp"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\forge_of_souls.h"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\instance_forge_of_souls.cpp"
>
</File>
</Filter>
<Filter
Name="Halls of Reflection"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\instance_forge_of_souls.cpp"
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\halls_of_reflection\halls_of_reflection.h"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\halls_of_reflection\instance_halls_of_reflection.cpp"
>
</File>
</Filter>
<Filter
Name="Pit of Saron"
>
</File>
</Filter>
<Filter
Name="Halls of Reflection"
>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\halls_of_reflection\halls_of_reflection.h"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\halls_of_reflection\instance_halls_of_reflection.cpp"
>
</File>
</Filter>
<Filter
Name="Pit of Saron"
>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\instance_pit_of_saron.cpp"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\pit_of_saron.h"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\boss_forgemaster_garfrost.cpp"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\boss_krickandick.cpp"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\boss_scourgelord_tyrannus.cpp"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\instance_pit_of_saron.cpp"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\pit_of_saron.cpp"
>
</File>
<File
RelativePath="..\..\src\scripts\northrend\frozen_halls\pit_of_saron\pit_of_saron.h"
>
</File>
</Filter>
</Filter>
<Filter
Name="Gundrak"