aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/FULL/world_script_texts.sql233
-rw-r--r--sql/FULL/world_scripts_full.sql6
-rw-r--r--sql/updates/7655_world_script_texts.sql233
-rw-r--r--sql/updates/7655_world_scriptname.sql6
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_algalon.cpp202
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp253
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp29
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp170
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_freya.cpp54
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_general_vezax.cpp11
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_hodir.cpp38
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_ignis.cpp61
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp41
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_mimiron.cpp24
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_thorim.cpp53
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_xt002.cpp798
-rw-r--r--src/scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp30
17 files changed, 1829 insertions, 413 deletions
diff --git a/sql/FULL/world_script_texts.sql b/sql/FULL/world_script_texts.sql
index 6cb7ecf418e..6a2787b9ee7 100644
--- a/sql/FULL/world_script_texts.sql
+++ b/sql/FULL/world_script_texts.sql
@@ -2059,6 +2059,239 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(28587,-1602041,'%s runs to his anvil!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'volkhan EMOTE_TO_ANVIL'),
(28587,-1602042,'%s prepares to shatter his Brittle Golems!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'volkhan EMOTE_SHATTER'),
+-- -1 603 000 ULDUAR
+-- Algalon
+ (32871,-1603000,'Your actions are illogical. All possible results for this encounter have been calculated. The Pantheon will receive the Observer''s message regardless of outcome.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15386,1,0,0,'algalon SAY_AGGRO'),
+ (32871,-1603001,'Loss of life, unavoidable.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15387,1,0,0,'algalon SAY_SLAY_1'),
+ (32871,-1603002,'I do what I must.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15388,1,0,0,'algalon SAY_SLAY_2'),
+ (32871,-1603003,'See your world through my eyes: A universe so vast as to be immeasurable - incomprehensible even to your greatest minds.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15390,1,0,0,'algalon SAY_ENGADED_FOR_FIRTS_TIME'),
+ (32871,-1603004,'Beware!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15391,1,0,0,'algalon SAY_PHASE_2'),
+ (32871,-1603005,'The stars come to my aid.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15392,1,0,0,'algalon SAY_SUMMON_COLLAPSING_STAR'),
+ (32871,-1603006,'I have seen worlds bathed in the Makers'' flames. Their denizens fading without so much as a whimper. Entire planetary systems born and raised in the time that it takes your mortal hearts to beat once. Yet all throughout, my own heart, devoid of emotion... of empathy. I... have... felt... NOTHING! A million, million lives wasted. Had they all held within them your tenacity? Had they all loved life as you do?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15393,1,0,0,'algalon SAY_DEATH_1'),
+ (32871,-1603007,'Perhaps it is your imperfection that which grants you free will. That allows you to persevere against cosmically calculated odds. You prevailed where the Titans'' own perfect creations have failed.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15401,1,0,0,'algalon SAY_DEATH_2'),
+ (32871,-1603008,'I''ve rearranged the reply code. Your planet will be spared. I cannot be certain of my own calculations anymore.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15402,1,0,0,'algalon SAY_DEATH_3'),
+ (32871,-1603009,'I lack the strength to transmit the signal. You must hurry. Find a place of power close to the skies.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15403,1,0,0,'algalon SAY_DEATH_4'),
+ (32871,-1603010,'Do not worry about my fate $N. If the signal is not transmitted in time re-origination will proceed regardless. Save. Your. World.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15404,1,0,0,'algalon SAY_DEATH_5'),
+ (32871,-1603011,'You are... out of time.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15394,1,0,0,'algalon SAY_BERSERK'),
+ (32871,-1603012,'Witness the fury of cosmos!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15396,1,0,0,'algalon SAY_BIGBANG_1'),
+ (32871,-1603013,'Behold the tools of creation!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15397,1,0,0,'algalon SAY_BIGBANG_2'),
+ (32871,-1603014,'Analysis complete. There is partial corruption in the planet''s life-support systems as well as complete corruption in most of the planet''s defense mechanisms.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15398,1,0,0,'algalon SAY_TIMER_1'),
+ (32871,-1603015,'Begin uplink: Reply Code: ''Omega''. Planetary re-origination requested.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15399,1,0,0,'algalon SAY_TIMER_2'),
+ (32871,-1603016,'Farewell, mortals. Your bravery is admirable, for such flawed creatures.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15400,1,0,0,'algalon SAY_TIMER_3'),
+ (32871,-1603017,'Trans-location complete. Commencing planetary analysis of Azeroth.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15405,1,0,0,'algalon SAY_SUMMON_1'),
+ (32871,-1603018,'Stand back, mortals. I am not here to fight you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15406,1,0,0,'algalon SAY_SUMMON_2'),
+ (32871,-1603019,'It is in the universe''s best interest to re-originate this planet should my analysis find systemic corruption. Do not interfere.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15407,1,0,0,'algalon SAY_SUMMON_3'),
+
+-- Assembly of Iron - Stellbreaker
+ (32867,-1603020,'You will not defeat the Assembly of Iron so easily, invaders!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15674,1,0,0,'steelbreaker SAY_AGGRO'),
+ (32867,-1603021,'So fragile and weak!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15675,1,0,0,'steelbreaker SAY_SLAY_1'),
+ (32867,-1603022,'Flesh... such a hindrance.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15676,1,0,0,'steelbreaker SAY_SLAY_2'),
+ (32867,-1603023,'You seek the secrets of Ulduar? Then take them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15677,1,0,0,'steelbreaker SAY_POWER'),
+ (32867,-1603024,'My death only serves to hasten your demise.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15678,1,0,0,'steelbreaker SAY_DEATH_1'),
+ (32867,-1603025,'Impossible!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15679,1,0,0,'steelbreaker SAY_DEATH_2'),
+ (32867,-1603026,'This meeting of the Assembly of Iron is adjourned!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15680,1,0,0,'steelbreaker SAY_BERSERK'),
+
+-- Assembly of Iron - Runemaster Molgeim
+ (32927,-1603030,'Nothing short of total decimation will suffice.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15657,1,0,0,'Molgeim SAY_AGGRO'),
+ (32927,-1603031,'The world suffers yet another insignificant loss.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15658,1,0,0,'Molgeim SAY_SLAY_1'),
+ (32927,-1603032,'Death is the price of your arrogance.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15659,1,0,0,'Molgeim SAY_SLAY_2'),
+ (32927,-1603033,'Decipher this!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15660,1,0,0,'Molgeim SAY_RUNE_DEATH'),
+ (32927,-1603034,'Face the lightning surge!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15661,1,0,0,'Molgeim SAY_SUMMON'),
+ (32927,-1603035,'The legacy of storms shall not be undone.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15662,1,0,0,'Molgeim SAY_DEATH_1'),
+ (32927,-1603036,'What have you gained from my defeat? You are no less doomed, mortals!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15663,1,0,0,'Molgeim SAY_DEATH_2'),
+ (32927,-1603037,'This meeting of the Assembly of Iron is adjourned!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15664,1,0,0,'Molgeim SAY_BERSERK'),
+
+-- Assembly of Iron - Stormcaller Brundir
+ (32857,-1603040,'Whether the world''s greatest gnats or the world''s greatest heroes, you''re still only mortal!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15684,1,0,0,'Brundir SAY_AGGRO'),
+ (32857,-1603041,'A merciful kill!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15685,1,0,0,'Brundir SAY_SLAY_1'),
+ (32857,-1603042,'HAH!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15686,1,0,0,'Brundir SAY_SLAY_2'),
+ (32857,-1603043,'Stand still and stare into the light!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15687,1,0,0,'Brundir SAY_SPECIAL'),
+ (32857,-1603044,'Let the storm clouds rise and rain down death from above!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15688,1,0,0,'Brundir SAY_FLIGHT'),
+ (32857,-1603045,'The power of the storm lives on...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15689,1,0,0,'Brundir SAY_DEATH_1'),
+ (32857,-1603046,'You rush headlong into the maw of madness!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15690,1,0,0,'Brundir SAY_DEATH_2'),
+ (32857,-1603047,'This meeting of the Assembly of Iron is adjourned!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15691,1,0,0,'Brundir SAY_BERSERK'),
+
+-- Auriaya
+ (33515,-1603050,'Some things are better left alone!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15473,1,0,0,'Auriaya SAY_AGGRO'),
+ (33515,-1603051,'The secret dies with you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15474,1,0,0,'Auriaya SAY_SLAY_1'),
+ (33515,-1603052,'There is no escape!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15475,1,0,0,'Auriaya SAY_SLAY_2'),
+ (33515,-1603053,'Auriaya screams in agony.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,6,0,15476,'Auriaya SAY_DEATH'),
+ (33515,-1603054,'You waste my time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15477,1,0,0,'Auriaya SAY_BERSERK'),
+
+-- Flame Leviathan
+ (33113,-1603060,'Hostile entities detected. Threat assessment protocol active. Primary target engaged. Time minus thirty seconds to re-evaluation.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15506,1,0,0,'Flame Leviathan SAY_AGGRO'),
+ (33113,-1603061,'Threat assessment routine modified. Current target threat level: zero. Acquiring new target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15521,1,0,0,'Flame Leviathan SAY_SLAY'),
+ (33113,-1603062,'Total systems failure. Defense protocols breached. Leviathan Unit shutting down.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15520,1,0,0,'Flame Leviathan SAY_DEATH'),
+ (33113,-1603063,'Threat re-evaluated. Target assessment complete. Changing course.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15507,1,0,0,'Flame Leviathan SAY_TARGET_1'),
+ (33113,-1603064,'Pursuit objective modified. Changing course.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15508,1,0,0,'Flame Leviathan SAY_TARGET_2'),
+ (33113,-1603065,'Hostile entity stratagem predicted. Rerouting battle function. Changing course.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15509,1,0,0,'Flame Leviathan SAY_TARGET_3'),
+ (33113,-1603066,'Orbital countermeasures enabled.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15510,1,0,0,'Flame Leviathan SAY_HARDMODE'),
+ (33113,-1603067,'Alert! Static defense system failure. Orbital countermeasures disabled.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15511,1,0,0,'Flame Leviathan SAY_TOWER_NONE'),
+ (33113,-1603068,'''Hodir''s Fury'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15512,1,0,0,'Flame Leviathan SAY_TOWER_FROST'),
+ (33113,-1603069,'''Mimiron''s Inferno'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15513,1,0,0,'Flame Leviathan SAY_TOWER_FLAME'),
+ (33113,-1603070,'''Freya''s Ward'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15514,1,0,0,'Flame Leviathan SAY_TOWER_NATURE'),
+ (33113,-1603071,'''Thorim''s Hammer'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15515,1,0,0,'Flame Leviathan SAY_TOWER_STORM'),
+ (33113,-1603072,'Unauthorized entity attempting circuit overload. Activating anti-personnel countermeasures.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15516,1,0,0,'Flame Leviathan SAY_PLAYER_RIDING'),
+ (33113,-1603073,'System malfunction. Diverting power to support systems.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15517,1,0,0,'Flame Leviathan SAY_OVERLOAD_1'),
+ (33113,-1603074,'Combat matrix overload. Powering do-o-o-own...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15518,1,0,0,'Flame Leviathan SAY_OVERLOAD_2'),
+ (33113,-1603075,'System restart required. Deactivating weapon systems.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15519,1,0,0,'Flame Leviathan SAY_OVERLOAD_3'),
+ -- reserve 1603076-1603179 to implement other texts related to flame leviathan encounter
+
+-- Freya
+ (32906,-1603180,'The Conservatory must be protected!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15526,1,0,0,'Freya SAY_AGGRO'),
+ (32906,-1603181,'Elders, grant me your strength!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15527,1,0,0,'Freya SAY_AGGRO_WITH_ELDER'),
+ (32906,-1603182,'Forgive me.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15529,1,0,0,'Freya SAY_SLAY_1'),
+ (32906,-1603183,'From your death springs life anew!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15530,1,0,0,'Freya SAY_SLAY_2'),
+ (32906,-1603184,'His hold on me dissipates. I can see clearly once more. Thank you, heroes.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15531,1,0,0,'Freya SAY_DEATH'),
+ (32906,-1603185,'You have strayed too far, wasted too much time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15532,1,0,0,'Freya SAY_BERSERK'),
+ (32906,-1603186,'Eonar, your servant requires aid!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15528,1,0,0,'Freya SAY_SUMMON_CONSERVATOR'),
+ (32906,-1603187,'Children, assist me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15331,1,0,0,'Freya SAY_SUMMON_TRIO'),
+ (32906,-1603188,'The swarm of the elements shall overtake you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15534,1,0,0,'Freya SAY_SUMMON_LASHERS'),
+ (32906,-1603189,'Eonar, your servant calls for your blessing!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15535,1,0,0,'Freya SAY_YS_HELP'),
+
+-- Elder Brightleaf
+ (32915,-1603190,'Matron, the Conservatory has been breached!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15483,1,0,0,'Elder Brightleaf SAY_AGGRO'),
+ (32915,-1603191,'Fertilizer.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15485,1,0,0,'Elder Brightleaf SAY_SLAY_1'),
+ (32915,-1603192,'Your corpse will nourish the soil!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15486,1,0,0,'Elder Brightleaf SAY_SLAY_2'),
+ (32915,-1603193,'Matron, one has fallen!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15487,1,0,0,'Elder Brightleaf SAY_DEATH'),
+
+-- Elder Ironbranch
+ (32913,-1603194,'Mortals have no place here!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15493,1,0,0,'Elder Ironbranch SAY_AGGRO'),
+ (32913,-1603195,'I return you whence you came!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15494,1,0,0,'Elder Ironbranch SAY_SLAY_1'),
+ (32913,-1603196,'BEGONE!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15495,1,0,0,'Elder Ironbranch SAY_SLAY_2'),
+ (32913,-1603197,'Freya! They come for you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15496,1,0,0,'Elder Ironbranch SAY_DEATH'),
+
+-- Elder Stonebark
+ (32914,-1603198,'This place will serve as your graveyard.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15500,1,0,0,'Elder Stonebark SAY_AGGRO'),
+ (32914,-1603199,'<Angry roar>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15501,1,0,0,'Elder Stonebark SAY_SLAY_1'),
+ (32914,-1603200,'Such a waste.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15502,1,0,0,'Elder Stonebark SAY_SLAY_2'),
+ (32914,-1603201,'Matron, flee! They are ruthless....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15503,1,0,0,'Elder Stonebark SAY_DEATH'),
+
+-- Hodir
+ (32845,-1603210,'You will suffer for this trespass!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15552,1,0,0,'Hodir SAY_AGGRO'),
+ (32845,-1603211,'Tragic. To come so far, only to fail.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15553,1,0,0,'Hodir SAY_SLAY_1'),
+ (32845,-1603212,'Welcome to the endless winter.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15554,1,0,0,'Hodir SAY_SLAY_2'),
+ (32845,-1603213,'Winds of the north consume you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15555,1,0,0,'Hodir SAY_FLASH_FREEZE'),
+ (32845,-1603214,'Hodir roars furious.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15556,6,0,0,'Hodir SAY_STALACTITE'),
+ (32845,-1603215,'I... I am released from his grasp... at last.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15557,1,0,0,'Hodir SAY_DEATH'),
+ (32845,-1603216,'Enough! This ends now!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15558,1,0,0,'Hodir SAY_BERSERK'),
+ (32845,-1603217,'The veil of winter will protect you, champions!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15559,1,0,0,'Hodir SAY_YS_HELP'),
+ (32845,-1603218,'Hodir shatters the Rare Cache of Hodir!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,6,0,0,'Hodir SAY_HARD_MODE_MISSED'),
+
+-- Ignis
+ (33118,-1603220,'Insolent whelps! Your blood will temper the weapons used to reclaim this world!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15564,1,0,0,'Ignis SAY_AGGRO'),
+ (33118,-1603221,'More scraps for the scrapheap!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15569,1,0,0,'Ignis SAY_SLAY_1'),
+ (33118,-1603222,'Your bones will serve as kindling!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15570,1,0,0,'Ignis SAY_SLAY_2'),
+ (33118,-1603223,'I. Have. Failed.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15572,1,0,0,'Ignis SAY_DEATH'),
+ (33118,-1603224,'Arise, soldiers of the Iron Crucible! The Makers'' will be done!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15565,1,0,0,'Ignis SAY_SUMMON'),
+ (33118,-1603225,'I will burn away your impurities!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15566,1,0,0,'Ignis SAY_SLAG_POT'),
+ (33118,-1603226,'Let the inferno consume you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15567,1,0,0,'Ignis SAY_SCORCH_1'),
+ (33118,-1603227,'BURN! Burn in the makers fire!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15568,1,0,0,'Ignis SAY_SCORCH_2'),
+ (33118,-1603228,'Let it be finished!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15571,1,0,0,'Ignis SAY_BERSERK'),
+
+-- Kologarn
+ (32930,-1603230,'None shall pass!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15586,1,0,0,'Kologarn SAY_AGGRO'),
+ (32930,-1603231,'KOL-THARISH!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15587,1,0,0,'Kologarn SAY_SLAY_1'),
+ (32930,-1603232,'YOU FAIL!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15588,1,0,0,'Kologarn SAY_SLAY_2'),
+ (32930,-1603233,'Just a scratch!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15589,1,0,0,'Kologarn SAY_LEFT_ARM_GONE'),
+ (32930,-1603234,'Only a flesh wound!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15590,1,0,0,'Kologarn SAY_RIGHT_ARM_GONE'),
+ (32930,-1603235,'OBLIVION!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15591,1,0,0,'Kologarn SAY_SHOCKWAVE'),
+ (32930,-1603236,'I will squeeze the life from you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15592,1,0,0,'Kologarn SAY_GRAB_PLAYER'),
+ (32930,-1603237,'Master, they come...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15593,1,0,0,'Kologarn SAY_DEATH'),
+ (32930,-1603238,'I am invincible!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15594,1,0,0,'Kologarn SAY_BERSERK'),
+
+-- Mimiron
+ (33350,-1603240,'Oh, my! I wasn''t expecting company! The workshop is such a mess! How embarrassing!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15611,1,0,0,'Mimiron SAY_AGGRO'),
+ (33350,-1603241,'Now why would you go and do something like that? Didn''t you see the sign that said ''DO NOT PUSH THIS BUTTON!''? How will we finish testing with the self-destruct mechanism active?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15629,1,0,0,'Mimiron SAY_HARDMODE_ON'),
+ (33350,-1603242,'We haven''t much time, friends! You''re going to help me test out my latest and greatest creation. Now, before you change your minds, remember, that you kind of owe it to me after the mess you made with the XT-002.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15612,1,0,0,'Mimiron SAY_MKII_ACTIVATE'),
+ (33350,-1603243,'MEDIC!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15613,1,0,0,'Mimiron SAY_MKII_SLAY_1'),
+ (33350,-1603244,'I can fix that... or, maybe not! Sheesh, what a mess...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15614,1,0,0,'Mimiron SAY_MKII_SLAY_2'),
+ (33350,-1603245,'WONDERFUL! Positively marvelous results! Hull integrity at 98.9 percent! Barely a dent! Moving right along.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15615,1,0,0,'Mimiron SAY_MKII_DEATH'),
+ (33350,-1603246,'Behold the VX-001 Anti-personnel Assault Cannon! You might want to take cover.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15616,1,0,0,'Mimiron SAY_VX001_ACTIVATE'),
+ (33350,-1603247,'Fascinating. I think they call that a "clean kill".',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15617,1,0,0,'Mimiron SAY_VX001_SLAY_1'),
+ (33350,-1603248,'Note to self: Cannon highly effective against flesh.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15618,1,0,0,'Mimiron SAY_VX001_SLAY_2'),
+ (33350,-1603249,'Thank you, friends! Your efforts have yielded some fantastic data! Now, where did I put-- oh, there it is!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15619,1,0,0,'Mimiron SAY_VX001_DEATH'),
+ (33350,-1603250,'Isn''t it beautiful? I call it the magnificent aerial command unit!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15620,1,0,0,'Mimiron SAY_AERIAL_ACTIVATE'),
+ (33350,-1603251,'Outplayed!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15621,1,0,0,'Mimiron SAY_AERIAL_SLAY_1'),
+ (33350,-1603252,'You can do better than that!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15622,1,0,0,'Mimiron SAY_AERIAL_SLAY_2'),
+ (33350,-1603253,'Preliminary testing phase complete. Now comes the true test!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15623,1,0,0,'Mimiron SAY_AERIAL_DEATH'),
+ (33350,-1603254,'Gaze upon its magnificence! Bask in its glorious, um, glory! I present you... V-07-TR-0N!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15624,1,0,0,'Mimiron SAY_V07TRON_ACTIVATE'),
+ (33350,-1603255,'Prognosis: Negative!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15625,1,0,0,'Mimiron SAY_V07TRON_SLAY_1'),
+ (33350,-1603256,'You''re not going to get up from that one, friend.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15626,1,0,0,'Mimiron SAY_V07TRON_SLAY_2'),
+ (33350,-1603257,'It would appear that I''ve made a slight miscalculation. I allowed my mind to be corrupted by the fiend in the prison, overriding my primary directive. All systems seem to be functional now. Clear.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15627,1,0,0,'Mimiron SAY_V07TRON_DEATH'),
+ (33350,-1603258,'Oh, my! It would seem that we are out of time, my friends!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15628,1,0,0,'Mimiron SAY_BERSERK'),
+ (33350,-1603259,'Combat matrix enhanced. Behold wonderous rapidity!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15630,1,0,0,'Mimiron SAY_YS_HELP'),
+
+-- Razorscale encounter
+ (33210,-1603260,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15647,1,0,0,'Exp. Commander SAY_INTRO'),
+ (33210,-1603261,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15648,1,0,0,'Exp. Commander SAY_GROUND'),
+
+-- Thorim
+ (33413,-1603270,'Interlopers! You mortals who dare to interfere with my sport will pay... Wait--you...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15733,1,0,0,'Thorim SAY_AGGRO_1'),
+ (33413,-1603271,'I remember you... In the mountains... But you... what is this? Where am--',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15734,1,0,0,'Thorim SAY_AGGRO_2'),
+ (33413,-1603272,'Behold the power of the storms and despair!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15735,1,0,0,'Thorim SAY_SPECIAL_1'),
+ (33413,-1603273,'Do not hold back! Destroy them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15736,1,0,0,'Thorim SAY_SPECIAL_2'),
+ (33413,-1603274,'Have you begun to regret your intrusion?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15737,1,0,0,'Thorim SAY_SPECIAL_3'),
+ (33413,-1603275,'Impertinent whelps! You dare challenge me atop my pedestal! I will crush you myself!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15738,1,0,0,'Thorim SAY_JUMPDOWN'),
+ (33413,-1603276,'Can''t you at least put up a fight!?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15739,1,0,0,'Thorim SAY_SLAY_1'),
+ (33413,-1603277,'Pathetic!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15740,1,0,0,'Thorim SAY_SLAY_2'),
+ (33413,-1603278,'My patience has reached its limit!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15741,1,0,0,'Thorim SAY_BERSERK'),
+ (33413,-1603279,'Failures! Weaklings!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15742,1,0,0,'Thorim SAY_WIPE'),
+ (33413,-1603280,'Stay your arms! I yield!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15743,1,0,0,'Thorim SAY_DEATH'),
+ (33413,-1603281,'I feel as though I am awakening from a nightmare, but the shadows in this place yet linger.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15744,1,0,0,'Thorim SAY_END_NORMAL_1'),
+ (33413,-1603282,'Sif... was Sif here? Impossible--she died by my brother''s hand. A dark nightmare indeed....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15745,1,0,0,'Thorim SAY_END_NORMAL_2'),
+ (33413,-1603283,'I need time to reflect.... I will aid your cause if you should require it. I owe you at least that much. Farewell.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15746,1,0,0,'Thorim SAY_END_NORMAL_3'),
+ (33413,-1603284,'You! Fiend! You are not my beloved! Be gone!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15747,1,0,0,'Thorim SAY_END_HARD_1'),
+ (33413,-1603285,'Behold the hand behind all the evil that has befallen Ulduar! Left my kingdom in ruins, corrupted my brother and slain my wife!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15748,1,0,0,'Thorim SAY_END_HARD_2'),
+ (33413,-1603286,'And now it falls to you, champions, to avenge us all! The task before you is great, but I will lend you my aid as I am able. You must prevail!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15749,1,0,0,'Thorim SAY_END_HARD_3'),
+ (33413,-1603287,'Golganneth, lend me your strengh! Grant my mortal allies the power of thunder!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15750,1,0,0,'Thorim SAY_YS_HELP'),
+
+-- General Vezax
+ (33271,-1603290,'Your destruction will herald a new age of suffering!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15542,1,0,0,'Vezax SAY_AGGRO'),
+ (33271,-1603291,'You thought to stand before the legions of death... and survive?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15543,1,0,0,'Vezax SAY_SLAY_1'),
+ (33271,-1603292,'Defiance... a flaw of mortality.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15544,1,0,0,'Vezax SAY_SLAY_2'),
+ (33271,-1603293,'The black blood of Yogg-Saron courses through me! I. AM. UNSTOPPABLE!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15545,1,0,0,'Vezax SAY_SURGE_DARKNESS'),
+ (33271,-1603294,'Oh, what horrors await....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15546,1,0,0,'Vezax SAY_DEATH'),
+ (33271,-1603295,'Your defeat was inevitable!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15547,1,0,0,'Vezax SAY_BERSERK'),
+ (33271,-1603296,'Behold, now! Terror, absolute!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15548,1,0,0,'Vezax SAY_HARDMODE_ON'),
+
+-- XT002
+ (33293,-1603300,'New toys? For me? I promise I won''t break them this time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15724,1,0,0,'XT002 SAY_AGGRO'),
+ (33293,-1603301,'So tired. I will rest for just a moment!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15725,1,0,0,'XT002 SAY_HEART_OPENED'),
+ (33293,-1603302,'I''m ready to play!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15726,1,0,0,'XT002 SAY_HEART_CLOSED'),
+ (33293,-1603303,'NO! NO! NO! NO! NO!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15727,1,0,0,'XT002 SAY_TYMPANIC_TANTRUM'),
+ (33293,-1603304,'I... I think I broke it.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15728,1,0,0,'XT002 SAY_SLAY_1'),
+ (33293,-1603305,'I guess it doesn''t bend that way.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15729,1,0,0,'XT002 SAY_SLAY_2'),
+ (33293,-1603306,'I''m tired of these toys. I don''t want to play anymore!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15730,1,0,0,'XT002 SAY_BERSERK'),
+ (33293,-1603307,'You are bad... Toys... Very... Baaaaad!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15731,1,0,0,'XT002 SAY_DEATH'),
+ (33293,-1603308,'Time for a new game! My old toys will fight my new toys!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15732,1,0,0,'XT002 SAY_SUMMON'),
+
+-- Sara (YS)
+ (33134,-1603310,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15771,1,0,0,'Sara SAY_PREFIGHT_1'),
+ (33134,-1603311,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15772,1,0,0,'Sara SAY_PREFIGHT_2'),
+ (33134,-1603312,'The time to strike at the head of the beast will soon be upon us! Focus your anger and hatred on his minions!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15775,1,0,0,'Sara SAY_AGGRO_1'),
+ (33134,-1603313,'Yes! YES! Show them no mercy! Give no pause to your attacks!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15773,1,0,0,'Sara SAY_AGGRO_2'),
+ (33134,-1603314,'Let hatred and rage guide your blows!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15774,1,0,0,'Sara SAY_AGGRO_3'),
+ (33134,-1603315,'Powerless to act...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15778,1,0,0,'Sara SAY_SLAY_1'),
+ (33134,-1603316,'Could they have been saved?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15779,1,0,0,'Sara SAY_SLAY_2'),
+ (33134,-1603317,'Weak-minded fools!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15780,5,0,0,'Sara WHISP_INSANITY'),
+ (33134,-1603318,'Suffocate upon your own hate!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15776,1,0,0,'Sara SAY_PHASE2_1'),
+ (33134,-1603319,'Tremble, mortals, before the coming of the end!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15777,1,0,0,'Sara SAY_PHASE2_2'),
+
+-- YoggSaron
+ (33288,-1603330,'I am the lucid dream.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15754,1,0,0,'YoggSaron SAY_PHASE2_1'), -- sound 15754 contains the 5 texts
+ (33288,-1603331,'The monster in your nightmares.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_2'),
+ (33288,-1603332,'The fiend of a thousand faces.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_3'),
+ (33288,-1603333,'Cower before my true form.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_4'),
+ (33288,-1603334,'BOW DOWN BEFORE THE GOD OF DEATH!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_5'),
+ (33288,-1603335,'Look upon the true face of death and know that your end comes soon!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15755,1,0,0,'YoggSaron SAY_PHASE3'),
+ (33288,-1603336,'MADNESS WILL CONSUME YOU!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15756,1,0,0,'YoggSaron SAY_VISION'),
+ (33288,-1603337,'Hoohehehahahaha... AHAHAHAHAHAHA!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15757,1,0,0,'YoggSaron SAY_SLAY_1'),
+ (33288,-1603338,'Eternal suffering awaits!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15758,1,0,0,'YoggSaron SAY_SLAY_2'),
+ (33288,-1603339,'Your will is no longer you own...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15759,5,0,0,'YoggSaron WHISP_INSANITY_1'),
+ (33288,-1603340,'Destroy them minion, your master commands it!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15760,5,0,0,'YoggSaron WHISP_INSANITY_2'),
+ (33288,-1603341,'Your fate is sealed. The end of days is finally upon you and ALL who inhabit this miserable little seedling. Uulwi ifis halahs gag erh''ongg w''ssh.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15761,1,0,0,'YoggSaron SAY_DEATH'),
+
-- -1 604 000 GUNDRAK
/* Moorabi */
(29305,-1604010,'We fought back da Scourge. What chance joo be thinkin'' JOO got?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'SAY_AGGRO boss_moorabi'),
diff --git a/sql/FULL/world_scripts_full.sql b/sql/FULL/world_scripts_full.sql
index 9bcf9bb14f5..d118de34ee5 100644
--- a/sql/FULL/world_scripts_full.sql
+++ b/sql/FULL/world_scripts_full.sql
@@ -1293,6 +1293,12 @@ UPDATE `creature_template` SET `ScriptName`='spell_pool_of_tar' WHERE `entry`=33
UPDATE `creature_template` SET `ScriptName`='boss_ignis' WHERE `entry`=33118;
UPDATE `creature_template` SET `ScriptName`='boss_razorscale' WHERE `entry`=33186;
UPDATE `creature_template` SET `ScriptName`='boss_xt002' WHERE `entry`=33293;
+UPDATE `creature_template` SET `ScriptName`='mob_xt002_heart' WHERE `entry`=33329;
+UPDATE `creature_template` SET `ScriptName`='mob_scrapbot' WHERE `entry`=33343;
+UPDATE `creature_template` SET `ScriptName`='mob_pummeller' WHERE `entry`=33344;
+UPDATE `creature_template` SET `ScriptName`='mob_boombot' WHERE `entry`=33346;
+UPDATE `creature_template` SET `ScriptName`='mob_void_zone' WHERE `entry`=34001;
+UPDATE `creature_template` SET `ScriptName`='mob_life_spark' WHERE `entry`=34004;
UPDATE `creature_template` SET `ScriptName`='boss_steelbreaker' WHERE `entry`=32867;
UPDATE `creature_template` SET `ScriptName`='boss_runemaster_molgeim' WHERE `entry`=32927;
UPDATE `creature_template` SET `ScriptName`='boss_stormcaller_brundir' WHERE `entry`=32857;
diff --git a/sql/updates/7655_world_script_texts.sql b/sql/updates/7655_world_script_texts.sql
new file mode 100644
index 00000000000..a7213b1e518
--- /dev/null
+++ b/sql/updates/7655_world_script_texts.sql
@@ -0,0 +1,233 @@
+DELETE FROM `script_texts` WHERE `entry` BETWEEN -1603999 AND -1603000;
+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
+-- Algalon
+(32871,-1603000,'Your actions are illogical. All possible results for this encounter have been calculated. The Pantheon will receive the Observer''s message regardless of outcome.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15386,1,0,0,'algalon SAY_AGGRO'),
+(32871,-1603001,'Loss of life, unavoidable.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15387,1,0,0,'algalon SAY_SLAY_1'),
+(32871,-1603002,'I do what I must.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15388,1,0,0,'algalon SAY_SLAY_2'),
+(32871,-1603003,'See your world through my eyes: A universe so vast as to be immeasurable - incomprehensible even to your greatest minds.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15390,1,0,0,'algalon SAY_ENGADED_FOR_FIRTS_TIME'),
+(32871,-1603004,'Beware!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15391,1,0,0,'algalon SAY_PHASE_2'),
+(32871,-1603005,'The stars come to my aid.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15392,1,0,0,'algalon SAY_SUMMON_COLLAPSING_STAR'),
+(32871,-1603006,'I have seen worlds bathed in the Makers'' flames. Their denizens fading without so much as a whimper. Entire planetary systems born and raised in the time that it takes your mortal hearts to beat once. Yet all throughout, my own heart, devoid of emotion... of empathy. I... have... felt... NOTHING! A million, million lives wasted. Had they all held within them your tenacity? Had they all loved life as you do?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15393,1,0,0,'algalon SAY_DEATH_1'),
+(32871,-1603007,'Perhaps it is your imperfection that which grants you free will. That allows you to persevere against cosmically calculated odds. You prevailed where the Titans'' own perfect creations have failed.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15401,1,0,0,'algalon SAY_DEATH_2'),
+(32871,-1603008,'I''ve rearranged the reply code. Your planet will be spared. I cannot be certain of my own calculations anymore.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15402,1,0,0,'algalon SAY_DEATH_3'),
+(32871,-1603009,'I lack the strength to transmit the signal. You must hurry. Find a place of power close to the skies.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15403,1,0,0,'algalon SAY_DEATH_4'),
+(32871,-1603010,'Do not worry about my fate $N. If the signal is not transmitted in time re-origination will proceed regardless. Save. Your. World.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15404,1,0,0,'algalon SAY_DEATH_5'),
+(32871,-1603011,'You are... out of time.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15394,1,0,0,'algalon SAY_BERSERK'),
+(32871,-1603012,'Witness the fury of cosmos!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15396,1,0,0,'algalon SAY_BIGBANG_1'),
+(32871,-1603013,'Behold the tools of creation!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15397,1,0,0,'algalon SAY_BIGBANG_2'),
+(32871,-1603014,'Analysis complete. There is partial corruption in the planet''s life-support systems as well as complete corruption in most of the planet''s defense mechanisms.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15398,1,0,0,'algalon SAY_TIMER_1'),
+(32871,-1603015,'Begin uplink: Reply Code: ''Omega''. Planetary re-origination requested.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15399,1,0,0,'algalon SAY_TIMER_2'),
+(32871,-1603016,'Farewell, mortals. Your bravery is admirable, for such flawed creatures.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15400,1,0,0,'algalon SAY_TIMER_3'),
+(32871,-1603017,'Trans-location complete. Commencing planetary analysis of Azeroth.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15405,1,0,0,'algalon SAY_SUMMON_1'),
+(32871,-1603018,'Stand back, mortals. I am not here to fight you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15406,1,0,0,'algalon SAY_SUMMON_2'),
+(32871,-1603019,'It is in the universe''s best interest to re-originate this planet should my analysis find systemic corruption. Do not interfere.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15407,1,0,0,'algalon SAY_SUMMON_3'),
+
+-- Assembly of Iron - Stellbreaker
+(32867,-1603020,'You will not defeat the Assembly of Iron so easily, invaders!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15674,1,0,0,'steelbreaker SAY_AGGRO'),
+(32867,-1603021,'So fragile and weak!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15675,1,0,0,'steelbreaker SAY_SLAY_1'),
+(32867,-1603022,'Flesh... such a hindrance.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15676,1,0,0,'steelbreaker SAY_SLAY_2'),
+(32867,-1603023,'You seek the secrets of Ulduar? Then take them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15677,1,0,0,'steelbreaker SAY_POWER'),
+(32867,-1603024,'My death only serves to hasten your demise.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15678,1,0,0,'steelbreaker SAY_DEATH_1'),
+(32867,-1603025,'Impossible!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15679,1,0,0,'steelbreaker SAY_DEATH_2'),
+(32867,-1603026,'This meeting of the Assembly of Iron is adjourned!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15680,1,0,0,'steelbreaker SAY_BERSERK'),
+
+-- Assembly of Iron - Runemaster Molgeim
+(32927,-1603030,'Nothing short of total decimation will suffice.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15657,1,0,0,'Molgeim SAY_AGGRO'),
+(32927,-1603031,'The world suffers yet another insignificant loss.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15658,1,0,0,'Molgeim SAY_SLAY_1'),
+(32927,-1603032,'Death is the price of your arrogance.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15659,1,0,0,'Molgeim SAY_SLAY_2'),
+(32927,-1603033,'Decipher this!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15660,1,0,0,'Molgeim SAY_RUNE_DEATH'),
+(32927,-1603034,'Face the lightning surge!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15661,1,0,0,'Molgeim SAY_SUMMON'),
+(32927,-1603035,'The legacy of storms shall not be undone.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15662,1,0,0,'Molgeim SAY_DEATH_1'),
+(32927,-1603036,'What have you gained from my defeat? You are no less doomed, mortals!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15663,1,0,0,'Molgeim SAY_DEATH_2'),
+(32927,-1603037,'This meeting of the Assembly of Iron is adjourned!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15664,1,0,0,'Molgeim SAY_BERSERK'),
+
+-- Assembly of Iron - Stormcaller Brundir
+(32857,-1603040,'Whether the world''s greatest gnats or the world''s greatest heroes, you''re still only mortal!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15684,1,0,0,'Brundir SAY_AGGRO'),
+(32857,-1603041,'A merciful kill!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15685,1,0,0,'Brundir SAY_SLAY_1'),
+(32857,-1603042,'HAH!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15686,1,0,0,'Brundir SAY_SLAY_2'),
+(32857,-1603043,'Stand still and stare into the light!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15687,1,0,0,'Brundir SAY_SPECIAL'),
+(32857,-1603044,'Let the storm clouds rise and rain down death from above!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15688,1,0,0,'Brundir SAY_FLIGHT'),
+(32857,-1603045,'The power of the storm lives on...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15689,1,0,0,'Brundir SAY_DEATH_1'),
+(32857,-1603046,'You rush headlong into the maw of madness!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15690,1,0,0,'Brundir SAY_DEATH_2'),
+(32857,-1603047,'This meeting of the Assembly of Iron is adjourned!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15691,1,0,0,'Brundir SAY_BERSERK'),
+
+-- Auriaya
+(33515,-1603050,'Some things are better left alone!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15473,1,0,0,'Auriaya SAY_AGGRO'),
+(33515,-1603051,'The secret dies with you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15474,1,0,0,'Auriaya SAY_SLAY_1'),
+(33515,-1603052,'There is no escape!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15475,1,0,0,'Auriaya SAY_SLAY_2'),
+(33515,-1603053,'Auriaya screams in agony.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,6,0,15476,'Auriaya SAY_DEATH'),
+(33515,-1603054,'You waste my time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15477,1,0,0,'Auriaya SAY_BERSERK'),
+
+-- Flame Leviathan
+(33113,-1603060,'Hostile entities detected. Threat assessment protocol active. Primary target engaged. Time minus thirty seconds to re-evaluation.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15506,1,0,0,'Flame Leviathan SAY_AGGRO'),
+(33113,-1603061,'Threat assessment routine modified. Current target threat level: zero. Acquiring new target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15521,1,0,0,'Flame Leviathan SAY_SLAY'),
+(33113,-1603062,'Total systems failure. Defense protocols breached. Leviathan Unit shutting down.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15520,1,0,0,'Flame Leviathan SAY_DEATH'),
+(33113,-1603063,'Threat re-evaluated. Target assessment complete. Changing course.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15507,1,0,0,'Flame Leviathan SAY_TARGET_1'),
+(33113,-1603064,'Pursuit objective modified. Changing course.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15508,1,0,0,'Flame Leviathan SAY_TARGET_2'),
+(33113,-1603065,'Hostile entity stratagem predicted. Rerouting battle function. Changing course.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15509,1,0,0,'Flame Leviathan SAY_TARGET_3'),
+(33113,-1603066,'Orbital countermeasures enabled.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15510,1,0,0,'Flame Leviathan SAY_HARDMODE'),
+(33113,-1603067,'Alert! Static defense system failure. Orbital countermeasures disabled.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15511,1,0,0,'Flame Leviathan SAY_TOWER_NONE'),
+(33113,-1603068,'''Hodir''s Fury'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15512,1,0,0,'Flame Leviathan SAY_TOWER_FROST'),
+(33113,-1603069,'''Mimiron''s Inferno'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15513,1,0,0,'Flame Leviathan SAY_TOWER_FLAME'),
+(33113,-1603070,'''Freya''s Ward'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15514,1,0,0,'Flame Leviathan SAY_TOWER_NATURE'),
+(33113,-1603071,'''Thorim''s Hammer'' online. Acquiring target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15515,1,0,0,'Flame Leviathan SAY_TOWER_STORM'),
+(33113,-1603072,'Unauthorized entity attempting circuit overload. Activating anti-personnel countermeasures.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15516,1,0,0,'Flame Leviathan SAY_PLAYER_RIDING'),
+(33113,-1603073,'System malfunction. Diverting power to support systems.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15517,1,0,0,'Flame Leviathan SAY_OVERLOAD_1'),
+(33113,-1603074,'Combat matrix overload. Powering do-o-o-own...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15518,1,0,0,'Flame Leviathan SAY_OVERLOAD_2'),
+(33113,-1603075,'System restart required. Deactivating weapon systems.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15519,1,0,0,'Flame Leviathan SAY_OVERLOAD_3'),
+-- reserve 1603076-1603179 to implement other texts related to flame leviathan encounter
+
+-- Freya
+(32906,-1603180,'The Conservatory must be protected!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15526,1,0,0,'Freya SAY_AGGRO'),
+(32906,-1603181,'Elders, grant me your strength!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15527,1,0,0,'Freya SAY_AGGRO_WITH_ELDER'),
+(32906,-1603182,'Forgive me.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15529,1,0,0,'Freya SAY_SLAY_1'),
+(32906,-1603183,'From your death springs life anew!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15530,1,0,0,'Freya SAY_SLAY_2'),
+(32906,-1603184,'His hold on me dissipates. I can see clearly once more. Thank you, heroes.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15531,1,0,0,'Freya SAY_DEATH'),
+(32906,-1603185,'You have strayed too far, wasted too much time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15532,1,0,0,'Freya SAY_BERSERK'),
+(32906,-1603186,'Eonar, your servant requires aid!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15528,1,0,0,'Freya SAY_SUMMON_CONSERVATOR'),
+(32906,-1603187,'Children, assist me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15331,1,0,0,'Freya SAY_SUMMON_TRIO'),
+(32906,-1603188,'The swarm of the elements shall overtake you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15534,1,0,0,'Freya SAY_SUMMON_LASHERS'),
+(32906,-1603189,'Eonar, your servant calls for your blessing!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15535,1,0,0,'Freya SAY_YS_HELP'),
+
+-- Elder Brightleaf
+(32915,-1603190,'Matron, the Conservatory has been breached!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15483,1,0,0,'Elder Brightleaf SAY_AGGRO'),
+(32915,-1603191,'Fertilizer.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15485,1,0,0,'Elder Brightleaf SAY_SLAY_1'),
+(32915,-1603192,'Your corpse will nourish the soil!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15486,1,0,0,'Elder Brightleaf SAY_SLAY_2'),
+(32915,-1603193,'Matron, one has fallen!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15487,1,0,0,'Elder Brightleaf SAY_DEATH'),
+
+-- Elder Ironbranch
+(32913,-1603194,'Mortals have no place here!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15493,1,0,0,'Elder Ironbranch SAY_AGGRO'),
+(32913,-1603195,'I return you whence you came!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15494,1,0,0,'Elder Ironbranch SAY_SLAY_1'),
+(32913,-1603196,'BEGONE!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15495,1,0,0,'Elder Ironbranch SAY_SLAY_2'),
+(32913,-1603197,'Freya! They come for you.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15496,1,0,0,'Elder Ironbranch SAY_DEATH'),
+
+-- Elder Stonebark
+(32914,-1603198,'This place will serve as your graveyard.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15500,1,0,0,'Elder Stonebark SAY_AGGRO'),
+(32914,-1603199,'<Angry roar>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15501,1,0,0,'Elder Stonebark SAY_SLAY_1'),
+(32914,-1603200,'Such a waste.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15502,1,0,0,'Elder Stonebark SAY_SLAY_2'),
+(32914,-1603201,'Matron, flee! They are ruthless....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15503,1,0,0,'Elder Stonebark SAY_DEATH'),
+
+-- Hodir
+(32845,-1603210,'You will suffer for this trespass!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15552,1,0,0,'Hodir SAY_AGGRO'),
+(32845,-1603211,'Tragic. To come so far, only to fail.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15553,1,0,0,'Hodir SAY_SLAY_1'),
+(32845,-1603212,'Welcome to the endless winter.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15554,1,0,0,'Hodir SAY_SLAY_2'),
+(32845,-1603213,'Winds of the north consume you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15555,1,0,0,'Hodir SAY_FLASH_FREEZE'),
+(32845,-1603214,'Hodir roars furious.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15556,6,0,0,'Hodir SAY_STALACTITE'),
+(32845,-1603215,'I... I am released from his grasp... at last.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15557,1,0,0,'Hodir SAY_DEATH'),
+(32845,-1603216,'Enough! This ends now!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15558,1,0,0,'Hodir SAY_BERSERK'),
+(32845,-1603217,'The veil of winter will protect you, champions!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15559,1,0,0,'Hodir SAY_YS_HELP'),
+(32845,-1603218,'Hodir shatters the Rare Cache of Hodir!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,6,0,0,'Hodir SAY_HARD_MODE_MISSED'),
+
+-- Ignis
+(33118,-1603220,'Insolent whelps! Your blood will temper the weapons used to reclaim this world!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15564,1,0,0,'Ignis SAY_AGGRO'),
+(33118,-1603221,'More scraps for the scrapheap!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15569,1,0,0,'Ignis SAY_SLAY_1'),
+(33118,-1603222,'Your bones will serve as kindling!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15570,1,0,0,'Ignis SAY_SLAY_2'),
+(33118,-1603223,'I. Have. Failed.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15572,1,0,0,'Ignis SAY_DEATH'),
+(33118,-1603224,'Arise, soldiers of the Iron Crucible! The Makers'' will be done!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15565,1,0,0,'Ignis SAY_SUMMON'),
+(33118,-1603225,'I will burn away your impurities!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15566,1,0,0,'Ignis SAY_SLAG_POT'),
+(33118,-1603226,'Let the inferno consume you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15567,1,0,0,'Ignis SAY_SCORCH_1'),
+(33118,-1603227,'BURN! Burn in the makers fire!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15568,1,0,0,'Ignis SAY_SCORCH_2'),
+(33118,-1603228,'Let it be finished!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15571,1,0,0,'Ignis SAY_BERSERK'),
+
+-- Kologarn
+(32930,-1603230,'None shall pass!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15586,1,0,0,'Kologarn SAY_AGGRO'),
+(32930,-1603231,'KOL-THARISH!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15587,1,0,0,'Kologarn SAY_SLAY_1'),
+(32930,-1603232,'YOU FAIL!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15588,1,0,0,'Kologarn SAY_SLAY_2'),
+(32930,-1603233,'Just a scratch!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15589,1,0,0,'Kologarn SAY_LEFT_ARM_GONE'),
+(32930,-1603234,'Only a flesh wound!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15590,1,0,0,'Kologarn SAY_RIGHT_ARM_GONE'),
+(32930,-1603235,'OBLIVION!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15591,1,0,0,'Kologarn SAY_SHOCKWAVE'),
+(32930,-1603236,'I will squeeze the life from you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15592,1,0,0,'Kologarn SAY_GRAB_PLAYER'),
+(32930,-1603237,'Master, they come...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15593,1,0,0,'Kologarn SAY_DEATH'),
+(32930,-1603238,'I am invincible!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15594,1,0,0,'Kologarn SAY_BERSERK'),
+
+-- Mimiron
+(33350,-1603240,'Oh, my! I wasn''t expecting company! The workshop is such a mess! How embarrassing!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15611,1,0,0,'Mimiron SAY_AGGRO'),
+(33350,-1603241,'Now why would you go and do something like that? Didn''t you see the sign that said ''DO NOT PUSH THIS BUTTON!''? How will we finish testing with the self-destruct mechanism active?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15629,1,0,0,'Mimiron SAY_HARDMODE_ON'),
+(33350,-1603242,'We haven''t much time, friends! You''re going to help me test out my latest and greatest creation. Now, before you change your minds, remember, that you kind of owe it to me after the mess you made with the XT-002.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15612,1,0,0,'Mimiron SAY_MKII_ACTIVATE'),
+(33350,-1603243,'MEDIC!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15613,1,0,0,'Mimiron SAY_MKII_SLAY_1'),
+(33350,-1603244,'I can fix that... or, maybe not! Sheesh, what a mess...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15614,1,0,0,'Mimiron SAY_MKII_SLAY_2'),
+(33350,-1603245,'WONDERFUL! Positively marvelous results! Hull integrity at 98.9 percent! Barely a dent! Moving right along.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15615,1,0,0,'Mimiron SAY_MKII_DEATH'),
+(33350,-1603246,'Behold the VX-001 Anti-personnel Assault Cannon! You might want to take cover.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15616,1,0,0,'Mimiron SAY_VX001_ACTIVATE'),
+(33350,-1603247,'Fascinating. I think they call that a "clean kill".',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15617,1,0,0,'Mimiron SAY_VX001_SLAY_1'),
+(33350,-1603248,'Note to self: Cannon highly effective against flesh.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15618,1,0,0,'Mimiron SAY_VX001_SLAY_2'),
+(33350,-1603249,'Thank you, friends! Your efforts have yielded some fantastic data! Now, where did I put-- oh, there it is!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15619,1,0,0,'Mimiron SAY_VX001_DEATH'),
+(33350,-1603250,'Isn''t it beautiful? I call it the magnificent aerial command unit!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15620,1,0,0,'Mimiron SAY_AERIAL_ACTIVATE'),
+(33350,-1603251,'Outplayed!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15621,1,0,0,'Mimiron SAY_AERIAL_SLAY_1'),
+(33350,-1603252,'You can do better than that!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15622,1,0,0,'Mimiron SAY_AERIAL_SLAY_2'),
+(33350,-1603253,'Preliminary testing phase complete. Now comes the true test!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15623,1,0,0,'Mimiron SAY_AERIAL_DEATH'),
+(33350,-1603254,'Gaze upon its magnificence! Bask in its glorious, um, glory! I present you... V-07-TR-0N!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15624,1,0,0,'Mimiron SAY_V07TRON_ACTIVATE'),
+(33350,-1603255,'Prognosis: Negative!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15625,1,0,0,'Mimiron SAY_V07TRON_SLAY_1'),
+(33350,-1603256,'You''re not going to get up from that one, friend.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15626,1,0,0,'Mimiron SAY_V07TRON_SLAY_2'),
+(33350,-1603257,'It would appear that I''ve made a slight miscalculation. I allowed my mind to be corrupted by the fiend in the prison, overriding my primary directive. All systems seem to be functional now. Clear.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15627,1,0,0,'Mimiron SAY_V07TRON_DEATH'),
+(33350,-1603258,'Oh, my! It would seem that we are out of time, my friends!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15628,1,0,0,'Mimiron SAY_BERSERK'),
+(33350,-1603259,'Combat matrix enhanced. Behold wonderous rapidity!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15630,1,0,0,'Mimiron SAY_YS_HELP'),
+
+-- Razorscale encounter
+(33210,-1603260,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15647,1,0,0,'Exp. Commander SAY_INTRO'),
+(33210,-1603261,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15648,1,0,0,'Exp. Commander SAY_GROUND'),
+
+-- Thorim
+(33413,-1603270,'Interlopers! You mortals who dare to interfere with my sport will pay... Wait--you...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15733,1,0,0,'Thorim SAY_AGGRO_1'),
+(33413,-1603271,'I remember you... In the mountains... But you... what is this? Where am--',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15734,1,0,0,'Thorim SAY_AGGRO_2'),
+(33413,-1603272,'Behold the power of the storms and despair!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15735,1,0,0,'Thorim SAY_SPECIAL_1'),
+(33413,-1603273,'Do not hold back! Destroy them!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15736,1,0,0,'Thorim SAY_SPECIAL_2'),
+(33413,-1603274,'Have you begun to regret your intrusion?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15737,1,0,0,'Thorim SAY_SPECIAL_3'),
+(33413,-1603275,'Impertinent whelps! You dare challenge me atop my pedestal! I will crush you myself!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15738,1,0,0,'Thorim SAY_JUMPDOWN'),
+(33413,-1603276,'Can''t you at least put up a fight!?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15739,1,0,0,'Thorim SAY_SLAY_1'),
+(33413,-1603277,'Pathetic!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15740,1,0,0,'Thorim SAY_SLAY_2'),
+(33413,-1603278,'My patience has reached its limit!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15741,1,0,0,'Thorim SAY_BERSERK'),
+(33413,-1603279,'Failures! Weaklings!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15742,1,0,0,'Thorim SAY_WIPE'),
+(33413,-1603280,'Stay your arms! I yield!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15743,1,0,0,'Thorim SAY_DEATH'),
+(33413,-1603281,'I feel as though I am awakening from a nightmare, but the shadows in this place yet linger.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15744,1,0,0,'Thorim SAY_END_NORMAL_1'),
+(33413,-1603282,'Sif... was Sif here? Impossible--she died by my brother''s hand. A dark nightmare indeed....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15745,1,0,0,'Thorim SAY_END_NORMAL_2'),
+(33413,-1603283,'I need time to reflect.... I will aid your cause if you should require it. I owe you at least that much. Farewell.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15746,1,0,0,'Thorim SAY_END_NORMAL_3'),
+(33413,-1603284,'You! Fiend! You are not my beloved! Be gone!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15747,1,0,0,'Thorim SAY_END_HARD_1'),
+(33413,-1603285,'Behold the hand behind all the evil that has befallen Ulduar! Left my kingdom in ruins, corrupted my brother and slain my wife!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15748,1,0,0,'Thorim SAY_END_HARD_2'),
+(33413,-1603286,'And now it falls to you, champions, to avenge us all! The task before you is great, but I will lend you my aid as I am able. You must prevail!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15749,1,0,0,'Thorim SAY_END_HARD_3'),
+(33413,-1603287,'Golganneth, lend me your strengh! Grant my mortal allies the power of thunder!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15750,1,0,0,'Thorim SAY_YS_HELP'),
+
+-- General Vezax
+(33271,-1603290,'Your destruction will herald a new age of suffering!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15542,1,0,0,'Vezax SAY_AGGRO'),
+(33271,-1603291,'You thought to stand before the legions of death... and survive?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15543,1,0,0,'Vezax SAY_SLAY_1'),
+(33271,-1603292,'Defiance... a flaw of mortality.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15544,1,0,0,'Vezax SAY_SLAY_2'),
+(33271,-1603293,'The black blood of Yogg-Saron courses through me! I. AM. UNSTOPPABLE!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15545,1,0,0,'Vezax SAY_SURGE_DARKNESS'),
+(33271,-1603294,'Oh, what horrors await....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15546,1,0,0,'Vezax SAY_DEATH'),
+(33271,-1603295,'Your defeat was inevitable!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15547,1,0,0,'Vezax SAY_BERSERK'),
+(33271,-1603296,'Behold, now! Terror, absolute!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15548,1,0,0,'Vezax SAY_HARDMODE_ON'),
+
+-- XT002
+(33293,-1603300,'New toys? For me? I promise I won''t break them this time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15724,1,0,0,'XT002 SAY_AGGRO'),
+(33293,-1603301,'So tired. I will rest for just a moment!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15725,1,0,0,'XT002 SAY_HEART_OPENED'),
+(33293,-1603302,'I''m ready to play!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15726,1,0,0,'XT002 SAY_HEART_CLOSED'),
+(33293,-1603303,'NO! NO! NO! NO! NO!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15727,1,0,0,'XT002 SAY_TYMPANIC_TANTRUM'),
+(33293,-1603304,'I... I think I broke it.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15728,1,0,0,'XT002 SAY_SLAY_1'),
+(33293,-1603305,'I guess it doesn''t bend that way.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15729,1,0,0,'XT002 SAY_SLAY_2'),
+(33293,-1603306,'I''m tired of these toys. I don''t want to play anymore!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15730,1,0,0,'XT002 SAY_BERSERK'),
+(33293,-1603307,'You are bad... Toys... Very... Baaaaad!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15731,1,0,0,'XT002 SAY_DEATH'),
+(33293,-1603308,'Time for a new game! My old toys will fight my new toys!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15732,1,0,0,'XT002 SAY_SUMMON'),
+
+-- Sara (YS)
+(33134,-1603310,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15771,1,0,0,'Sara SAY_PREFIGHT_1'),
+(33134,-1603311,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15772,1,0,0,'Sara SAY_PREFIGHT_2'),
+(33134,-1603312,'The time to strike at the head of the beast will soon be upon us! Focus your anger and hatred on his minions!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15775,1,0,0,'Sara SAY_AGGRO_1'),
+(33134,-1603313,'Yes! YES! Show them no mercy! Give no pause to your attacks!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15773,1,0,0,'Sara SAY_AGGRO_2'),
+(33134,-1603314,'Let hatred and rage guide your blows!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15774,1,0,0,'Sara SAY_AGGRO_3'),
+(33134,-1603315,'Powerless to act...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15778,1,0,0,'Sara SAY_SLAY_1'),
+(33134,-1603316,'Could they have been saved?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15779,1,0,0,'Sara SAY_SLAY_2'),
+(33134,-1603317,'Weak-minded fools!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15780,5,0,0,'Sara WHISP_INSANITY'),
+(33134,-1603318,'Suffocate upon your own hate!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15776,1,0,0,'Sara SAY_PHASE2_1'),
+(33134,-1603319,'Tremble, mortals, before the coming of the end!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15777,1,0,0,'Sara SAY_PHASE2_2'),
+
+-- YoggSaron
+(33288,-1603330,'I am the lucid dream.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15754,1,0,0,'YoggSaron SAY_PHASE2_1'), -- sound 15754 contains the 5 texts
+(33288,-1603331,'The monster in your nightmares.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_2'),
+(33288,-1603332,'The fiend of a thousand faces.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_3'),
+(33288,-1603333,'Cower before my true form.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_4'),
+(33288,-1603334,'BOW DOWN BEFORE THE GOD OF DEATH!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'YoggSaron SAY_PHASE2_5'),
+(33288,-1603335,'Look upon the true face of death and know that your end comes soon!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15755,1,0,0,'YoggSaron SAY_PHASE3'),
+(33288,-1603336,'MADNESS WILL CONSUME YOU!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15756,1,0,0,'YoggSaron SAY_VISION'),
+(33288,-1603337,'Hoohehehahahaha... AHAHAHAHAHAHA!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15757,1,0,0,'YoggSaron SAY_SLAY_1'),
+(33288,-1603338,'Eternal suffering awaits!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15758,1,0,0,'YoggSaron SAY_SLAY_2'),
+(33288,-1603339,'Your will is no longer you own...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15759,5,0,0,'YoggSaron WHISP_INSANITY_1'),
+(33288,-1603340,'Destroy them minion, your master commands it!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15760,5,0,0,'YoggSaron WHISP_INSANITY_2'),
+(33288,-1603341,'Your fate is sealed. The end of days is finally upon you and ALL who inhabit this miserable little seedling. Uulwi ifis halahs gag erh''ongg w''ssh.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15761,1,0,0,'YoggSaron SAY_DEATH');
diff --git a/sql/updates/7655_world_scriptname.sql b/sql/updates/7655_world_scriptname.sql
new file mode 100644
index 00000000000..12bb45c4fe2
--- /dev/null
+++ b/sql/updates/7655_world_scriptname.sql
@@ -0,0 +1,6 @@
+UPDATE `creature_template` SET `ScriptName`='mob_xt002_heart' WHERE `entry`=33329;
+UPDATE `creature_template` SET `ScriptName`='mob_scrapbot' WHERE `entry`=33343;
+UPDATE `creature_template` SET `ScriptName`='mob_pummeller' WHERE `entry`=33344;
+UPDATE `creature_template` SET `ScriptName`='mob_boombot' WHERE `entry`=33346;
+UPDATE `creature_template` SET `ScriptName`='mob_void_zone' WHERE `entry`=34001;
+UPDATE `creature_template` SET `ScriptName`='mob_life_spark' WHERE `entry`=34004;
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_algalon.cpp b/src/scripts/northrend/ulduar/ulduar/boss_algalon.cpp
index 32b5190ccf4..e8fae4512ea 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_algalon.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_algalon.cpp
@@ -58,28 +58,28 @@ enum Creatures
#define NORDRASSIL_Y -324.609222
#define NORDRASSIL_Z 417.322174
-enum Texts
+enum Yells
{
- SAY_AGGRO = -1620000,
- SAY_KILL_1 = -1620005,
- SAY_KILL_2 = -1620006,
- SAY_BIG_BANG_1 = -1620002,
- SAY_BIG_BANG_2 = -1620003,
- SAY_PHASE_2 = -1620003,
- SAY_BLACK_HOLE = -1620004,
- SAY_BERSERK = -1620007,
- SAY_SUMMON_COLLAPSING_STAR = -1620008,
- SAY_ENGADED_FOR_FIRTS_TIME = -1620001,
- SAY_SUMMON1 = -1620010,
- SAY_SUMMON2 = -1620011,
- SAY_SUMMON3 = -1620012,
- SAY_DEATH_1 = -1620013,
- SAY_DEATH_2 = -1620014,
- SAY_DEATH_3 = -1620015,
- SAY_DEATH_4 = -1620009,
- SAY_DEFEAT_1 = -1620016,
- SAY_DEFEAT_2 = -1620017,
- SAY_DEFEAT_3 = -1620018
+ SAY_AGGRO = -1603000,
+ SAY_SLAY_1 = -1603001,
+ SAY_SLAY_2 = -1603002,
+ SAY_ENGADED_FOR_FIRTS_TIME = -1603003,
+ SAY_PHASE_2 = -1603004,
+ SAY_SUMMON_COLLAPSING_STAR = -1603005,
+ SAY_DEATH_1 = -1603006,
+ SAY_DEATH_2 = -1603007,
+ SAY_DEATH_3 = -1603008,
+ SAY_DEATH_4 = -1603009,
+ SAY_DEATH_5 = -1603010,
+ SAY_BERSERK = -1603011,
+ SAY_BIG_BANG_1 = -1603012,
+ SAY_BIG_BANG_2 = -1603013,
+ SAY_TIMER_1 = -1603014,
+ SAY_TIMER_2 = -1603015,
+ SAY_TIMER_3 = -1603016,
+ SAY_SUMMON_1 = -1603017,
+ SAY_SUMMON_2 = -1603018,
+ SAY_SUMMON_3 = -1603019,
};
struct boss_algalonAI : public ScriptedAI
@@ -87,6 +87,7 @@ struct boss_algalonAI : public ScriptedAI
boss_algalonAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
+ Summon = false; // not in reset. intro speech done only once.
}
ScriptedInstance* pInstance;
@@ -107,33 +108,43 @@ struct boss_algalonAI : public ScriptedAI
uint64 BlackHoleGUID;
bool Enrage;
- bool m_bIsHeroicMode;
bool Summon;
void EnterCombat(Unit* who)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetReactState(REACT_PASSIVE);
+ if (Summon)
+ {
+ DoScriptText(SAY_AGGRO, m_creature);
+ m_creature->InterruptSpell(CURRENT_CHANNELED_SPELL);
+ DoZoneInCombat(who->ToCreature());
+ }
+ else
+ {
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetReactState(REACT_PASSIVE);
+ uiStep = 1;
+ }
+
+ if (pInstance)
+ pInstance->SetData(TYPE_ALGALON, IN_PROGRESS);
}
void KilledUnit(Unit *victim)
{
- DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me);
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void Reset()
{
Phase = 1;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- DoScriptText(SAY_DEFEAT_1, me);
- DoScriptText(SAY_DEFEAT_2, me);
- DoScriptText(SAY_DEFEAT_3, me);
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (pInstance)
pInstance->SetData(TYPE_ALGALON, NOT_STARTED);
BlackHoleGUID = 0;
+ uiPhase_timer = 0;
Ascend_Timer = 480000; //8 minutes
QuantumStrike_Timer = 4000 + rand()%10000;
Berserk_Timer = 360000; //6 minutes
@@ -141,6 +152,7 @@ struct boss_algalonAI : public ScriptedAI
BigBang_Timer = 90000;
PhasePunch_Timer = 8000;
CosmicSmash_Timer = urand(30000, 60000);
+ Enrage = false;
}
void JumpToNextStep(uint32 uiTimer)
@@ -149,21 +161,14 @@ struct boss_algalonAI : public ScriptedAI
++uiStep;
}
- void Aggro(Unit* pWho)
- {
- me->InterruptSpell(CURRENT_CHANNELED_SPELL);
- me->SetInCombatWithZone();
- if (pInstance)
- pInstance->SetData(TYPE_ALGALON, IN_PROGRESS);
- }
-
void DespawnCollapsingStar()
{
if (m_lCollapsingStarGUIDList.empty())
return;
+
for(std::list<uint64>::iterator itr = m_lCollapsingStarGUIDList.begin(); itr != m_lCollapsingStarGUIDList.end(); ++itr)
{
- if (Creature* pTemp = (Creature*)Unit::GetUnit(*me, *itr))
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, *itr))
{
if (pTemp->isAlive())
pTemp->ForcedDespawn();
@@ -177,18 +182,17 @@ struct boss_algalonAI : public ScriptedAI
if (pSummoned->GetEntry() == CREATURE_COLLAPSING_STAR)
{
Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
- if (me->getVictim())
- pSummoned->AI()->AttackStart(pTarget ? pTarget : me->getVictim());
+ if (m_creature->getVictim())
+ pSummoned->AI()->AttackStart(pTarget ? pTarget : m_creature->getVictim());
m_lCollapsingStarGUIDList.push_back(pSummoned->GetGUID());
}
}
void SummonCollapsingStar(Unit* target)
{
- DoScriptText(SAY_SUMMON_COLLAPSING_STAR, me);
- me->SummonCreature(CREATURE_COLLAPSING_STAR,target->GetPositionX()+15.0,target->GetPositionY()+15.0,target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN, 100000);
- DoScriptText(SAY_BLACK_HOLE, me);
- me->SummonCreature(CREATURE_BLACK_HOLE,target->GetPositionX()+15.0,target->GetPositionY()+15.0,target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN, 27000);
+ DoScriptText(SAY_SUMMON_COLLAPSING_STAR, m_creature);
+ m_creature->SummonCreature(CREATURE_COLLAPSING_STAR,target->GetPositionX()+15.0,target->GetPositionY()+15.0,target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN, 100000);
+ m_creature->SummonCreature(CREATURE_BLACK_HOLE,target->GetPositionX()+15.0,target->GetPositionY()+15.0,target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN, 27000);
}
void UpdateAI(const uint32 diff)
@@ -197,25 +201,29 @@ struct boss_algalonAI : public ScriptedAI
if (!UpdateVictim())
return;
- if ((me->GetHealth()*100 / me->GetMaxHealth()) < 20 && Phase == 1)
+ if (Phase == 1 && HealthBelowPct(20))
{
Phase = 2;
- DoScriptText(SAY_PHASE_2, me);
+ DoScriptText(SAY_PHASE_2, m_creature);
}
- if ((me->GetHealth()*100 / me->GetMaxHealth()) < 2)
+ if (HealthBelowPct(2))
{
- me->SummonGameObject(GAMEOBJECT_GIVE_OF_THE_OBSERVER, 1634.258667, -295.101166,417.321381,0,0,0,0,0,-10);
+ m_creature->SummonGameObject(GAMEOBJECT_GIVE_OF_THE_OBSERVER, 1634.258667, -295.101166,417.321381,0,0,0,0,0,-10);
- DoScriptText(SAY_DEATH_1, me);
- DoScriptText(SAY_DEATH_2, me);
- DoScriptText(SAY_DEATH_3, me);
- DoScriptText(SAY_DEATH_4, me);
+ // All of them. or random?
+ DoScriptText(SAY_DEATH_1, m_creature);
+ DoScriptText(SAY_DEATH_2, m_creature);
+ DoScriptText(SAY_DEATH_3, m_creature);
+ DoScriptText(SAY_DEATH_4, m_creature);
+ DoScriptText(SAY_DEATH_5, m_creature);
- me->DisappearAndDie();
+ m_creature->DisappearAndDie();
if (pInstance)
pInstance->SetData(TYPE_ALGALON, DONE);
+
+ return;
}
if (Phase == 1)
@@ -226,60 +234,76 @@ struct boss_algalonAI : public ScriptedAI
{
switch(uiStep)
{
- case 1: DoScriptText(SAY_SUMMON1, m_creature); break; JumpToNextStep(3000);
- case 2: DoScriptText(SAY_SUMMON2, m_creature); break; JumpToNextStep(3000);
- case 3: DoScriptText(SAY_SUMMON3, m_creature); break; JumpToNextStep(3000);
- case 4: DoScriptText(SAY_ENGADED_FOR_FIRTS_TIME, m_creature); break; JumpToNextStep(3000);
- case 5: DoScriptText(SAY_AGGRO, m_creature); break;
- case 6: m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); break;
- case 7: m_creature->SetReactState(REACT_AGGRESSIVE); break;
+ case 1:
+ DoScriptText(SAY_SUMMON_1, m_creature);
+ JumpToNextStep(3000);
+ break;
+ case 2:
+ DoScriptText(SAY_SUMMON_2, m_creature);
+ JumpToNextStep(3000);
+ break;
+ case 3:
+ DoScriptText(SAY_SUMMON_3, m_creature);
+ JumpToNextStep(3000);
+ break;
+ case 4:
+ DoScriptText(SAY_ENGADED_FOR_FIRTS_TIME, m_creature);
+ JumpToNextStep(3000);
+ break;
+ case 5:
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetReactState(REACT_AGGRESSIVE);
+ Summon = true;
+ break;
}
- }else uiPhase_timer -= diff;
+ } else uiPhase_timer -= diff;
+
+ return;
}
- if(QuantumStrike_Timer <= diff)
+ if (QuantumStrike_Timer <= diff)
{
- DoCast(me->getVictim(), m_bIsHeroicMode ? H_SPELL_QUANTUM_STRIKE : SPELL_QUANTUM_STRIKE, true);
+ DoCast(m_creature->getVictim(), RAID_MODE(SPELL_QUANTUM_STRIKE,H_SPELL_QUANTUM_STRIKE), true);
- QuantumStrike_Timer = 4000 + rand()%10000;
- }else QuantumStrike_Timer -= diff;
+ QuantumStrike_Timer = urand(4000, 14000);
+ } else QuantumStrike_Timer -= diff;
- if(BigBang_Timer <= diff)
+ if (BigBang_Timer <= diff)
{
- DoScriptText(RAND(SAY_BIG_BANG_1,SAY_BIG_BANG_2), me);
- DoCast(me->getVictim(), m_bIsHeroicMode ? H_SPELL_BIG_BANG : SPELL_BIG_BANG, true);
+ DoScriptText(RAND(SAY_BIG_BANG_1,SAY_BIG_BANG_2), m_creature);
+ DoCast(m_creature->getVictim(), RAID_MODE(SPELL_BIG_BANG,H_SPELL_BIG_BANG), true);
BigBang_Timer = 90000;
- }else BigBang_Timer -= diff;
+ } else BigBang_Timer -= diff;
- if(Ascend_Timer <= diff)
+ if (Ascend_Timer <= diff)
{
- DoCast(me->getVictim(),SPELL_ASCEND, true);
+ DoCast(m_creature->getVictim(),SPELL_ASCEND, true);
Ascend_Timer = 480000;
- }else Ascend_Timer -= diff;
+ } else Ascend_Timer -= diff;
- if(PhasePunch_Timer <= diff)
+ if (PhasePunch_Timer <= diff)
{
- DoCast(me->getVictim(),SPELL_PHASE_PUNCH, true);
+ DoCast(m_creature->getVictim(),SPELL_PHASE_PUNCH, true);
PhasePunch_Timer = 8000;
- }else PhasePunch_Timer -= diff;
+ } else PhasePunch_Timer -= diff;
- if(CosmicSmash_Timer <= diff)
+ if (CosmicSmash_Timer <= diff)
{
- DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), m_bIsHeroicMode ? H_SPELL_COSMIC_SMASH : SPELL_COSMIC_SMASH, true);
+ DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), RAID_MODE(SPELL_COSMIC_SMASH,H_SPELL_COSMIC_SMASH), true);
CosmicSmash_Timer = urand(30000, 60000);
- }else CosmicSmash_Timer -= diff;
+ } else CosmicSmash_Timer -= diff;
- if(Berserk_Timer <= diff)
+ if (Berserk_Timer <= diff)
{
- DoScriptText(SAY_BERSERK, me);
- DoCast(me->getVictim(),SPELL_BERSERK, true);
+ DoScriptText(SAY_BERSERK, m_creature);
+ DoCast(m_creature->getVictim(),SPELL_BERSERK, true);
Berserk_Timer = 360000;
- }else Berserk_Timer -= diff;
+ } else Berserk_Timer -= diff;
DoMeleeAttackIfReady();
@@ -292,9 +316,9 @@ struct boss_algalonAI : public ScriptedAI
{
if (Ascend_Timer <= diff)
{
- DoCast(me, SPELL_ASCEND);
- DoScriptText(SAY_BERSERK, me);
- Ascend_Timer = 360000 + rand()%5000;
+ DoCast(m_creature, SPELL_ASCEND);
+ DoScriptText(SAY_BERSERK, m_creature);
+ Ascend_Timer = urand(360000,365000);
Enrage = false;
} else Ascend_Timer -= diff;
}
@@ -303,13 +327,13 @@ struct boss_algalonAI : public ScriptedAI
DoMeleeAttackIfReady();
}
};
+
//Collapsing Star
struct mob_collapsing_starAI : public ScriptedAI
{
mob_collapsing_starAI(Creature *pCreature) : ScriptedAI(pCreature)
{
pInstance = (ScriptedInstance*)pCreature->GetInstanceData();
- Reset();
}
ScriptedInstance* pInstance;
@@ -326,11 +350,11 @@ struct mob_collapsing_starAI : public ScriptedAI
if (!UpdateVictim())
return;
- if(BlackHoleExplosion_Timer <= diff)
+ if (BlackHoleExplosion_Timer <= diff)
{
- me->CastSpell(me, SPELL_BLACK_HOLE_EXPLOSION, false);
+ m_creature->CastSpell(m_creature, SPELL_BLACK_HOLE_EXPLOSION, false);
BlackHoleExplosion_Timer = 0;
- }else BlackHoleExplosion_Timer -= diff;
+ } else BlackHoleExplosion_Timer -= diff;
}
};
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp b/src/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp
index 2bb001b06da..d792fca56da 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp
@@ -62,8 +62,9 @@ EndScriptData */
#define SPELL_LIGHTNING_TENDRILS_H 63486
#define SPELL_STORMSHIELD 64187
-enum eEnums
+enum Events
{
+ EVENT_NONE,
EVENT_ENRAGE,
// Steelbreaker
EVENT_FUSION_PUNCH,
@@ -81,8 +82,35 @@ enum eEnums
EVENT_LIGHTNING_WHIRL,
EVENT_LIGHTNING_TENDRILS,
EVENT_STORMSHIELD,
- MAX_EVENT
+};
+enum Yells
+{
+ SAY_STEELBREAKER_AGGRO = -1603020,
+ SAY_STEELBREAKER_SLAY_1 = -1603021,
+ SAY_STEELBREAKER_SLAY_2 = -1603022,
+ SAY_STEELBREAKER_POWER = -1603023,
+ SAY_STEELBREAKER_DEATH_1 = -1603024,
+ SAY_STEELBREAKER_DEATH_2 = -1603025,
+ SAY_STEELBREAKER_BERSERK = -1603026,
+
+ SAY_MOLGEIM_AGGRO = -1603030,
+ SAY_MOLGEIM_SLAY_1 = -1603031,
+ SAY_MOLGEIM_SLAY_2 = -1603032,
+ SAY_MOLGEIM_RUNE_DEATH = -1603033,
+ SAY_MOLGEIM_SUMMON = -1603034,
+ SAY_MOLGEIM_DEATH_1 = -1603035,
+ SAY_MOLGEIM_DEATH_2 = -1603036,
+ SAY_MOLGEIM_BERSERK = -1603037,
+
+ SAY_BRUNDIR_AGGRO = -1603040,
+ SAY_BRUNDIR_SLAY_1 = -1603041,
+ SAY_BRUNDIR_SLAY_2 = -1603042,
+ SAY_BRUNDIR_SPECIAL = -1603043,
+ SAY_BRUNDIR_FLIGHT = -1603044,
+ SAY_BRUNDIR_DEATH_1 = -1603045,
+ SAY_BRUNDIR_DEATH_2 = -1603046,
+ SAY_BRUNDIR_BERSERK = -1603047,
};
bool IsEncounterComplete(ScriptedInstance* pInstance, Creature* m_creature)
@@ -93,15 +121,13 @@ bool IsEncounterComplete(ScriptedInstance* pInstance, Creature* m_creature)
for (uint8 i = 0; i < 3; ++i)
{
uint64 guid = pInstance->GetData64(DATA_STEELBREAKER+i);
- if(!guid)
+ if (!guid)
return false;
- if(Creature *boss = (Unit::GetCreature((*m_creature), guid)))
+ if (Creature *boss = Unit::GetCreature(*m_creature, guid))
{
- if(boss->isAlive())
+ if (boss->isAlive())
return false;
-
- continue;
}
else
return false;
@@ -121,7 +147,7 @@ struct boss_steelbreakerAI : public ScriptedAI
events.Reset();
phase = 0;
m_creature->RemoveAllAuras();
- if(pInstance)
+ if (pInstance)
pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
}
@@ -131,6 +157,7 @@ struct boss_steelbreakerAI : public ScriptedAI
void EnterCombat(Unit *who)
{
+ DoScriptText(SAY_STEELBREAKER_AGGRO, m_creature);
DoZoneInCombat();
DoCast(m_creature, RAID_MODE(SPELL_HIGH_VOLTAGE, SPELL_HIGH_VOLTAGE_H));
events.ScheduleEvent(EVENT_ENRAGE, 900000);
@@ -142,46 +169,46 @@ struct boss_steelbreakerAI : public ScriptedAI
++phase;
events.SetPhase(phase);
events.RescheduleEvent(EVENT_FUSION_PUNCH, 15000);
- if(phase >= 2)
+ if (phase >= 2)
events.RescheduleEvent(EVENT_STATIC_DISRUPTION, 30000);
- if(phase >= 3)
+ if (phase >= 3)
events.RescheduleEvent(EVENT_OVERWHELMING_POWER, rand()%5000);
}
void DamageTaken(Unit* pKiller, uint32 &damage)
{
- if(damage >= m_creature->GetHealth())
+ if (damage >= m_creature->GetHealth())
{
- if(Creature* Brundir = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STORMCALLER_BRUNDIR) : 0))
- if(Brundir->isAlive())
- {
+ if (Creature* Brundir = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STORMCALLER_BRUNDIR) : 0))
+ if (Brundir->isAlive())
Brundir->SetHealth(Brundir->GetMaxHealth());
- }
- if(Creature* Molgeim = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM) : 0))
- if(Molgeim->isAlive())
- {
+ if (Creature* Molgeim = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM) : 0))
+ if (Molgeim->isAlive())
Molgeim->SetHealth(Molgeim->GetMaxHealth());
- }
- DoCast(SPELL_SUPERCHARGE);
+
+ DoCast(SPELL_SUPERCHARGE);
}
}
void JustDied(Unit* Killer)
{
- if(IsEncounterComplete(pInstance, m_creature) && pInstance)
+ DoScriptText(RAND(SAY_STEELBREAKER_DEATH_1,SAY_STEELBREAKER_DEATH_2), m_creature);
+ if (IsEncounterComplete(pInstance, m_creature) && pInstance)
pInstance->SetData(TYPE_ASSEMBLY, DONE);
}
void KilledUnit(Unit *who)
{
- if(phase == 3)
+ DoScriptText(RAND(SAY_STEELBREAKER_SLAY_1,SAY_STEELBREAKER_SLAY_2), m_creature);
+
+ if (phase == 3)
DoCast(m_creature, SPELL_ELECTRICAL_CHARGE);
}
void SpellHit(Unit *from, const SpellEntry *spell)
{
- if(spell->Id == SPELL_SUPERCHARGE)
+ if (spell->Id == SPELL_SUPERCHARGE)
UpdatePhase();
}
@@ -197,23 +224,23 @@ struct boss_steelbreakerAI : public ScriptedAI
switch(eventId)
{
case EVENT_ENRAGE:
+ DoScriptText(SAY_STEELBREAKER_BERSERK, m_creature);
DoCast(SPELL_BERSERK);
- break;
+ break;
case EVENT_FUSION_PUNCH:
- DoCast(me->getVictim(), RAID_MODE(SPELL_FUSION_PUNCH_H, SPELL_FUSION_PUNCH));
- events.ScheduleEvent(EVENT_FUSION_PUNCH, 13000 + (rand()%9)*1000);
- break;
+ DoCast(me->getVictim(), RAID_MODE(SPELL_FUSION_PUNCH, SPELL_FUSION_PUNCH_H));
+ events.ScheduleEvent(EVENT_FUSION_PUNCH, urand(13000, 22000));
+ break;
case EVENT_STATIC_DISRUPTION:
- {
- Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM);
- DoCast(pTarget, RAID_MODE(SPELL_STATIC_DISRUPTION_H, SPELL_STATIC_DISRUPTION));
- events.ScheduleEvent(EVENT_STATIC_DISRUPTION, 20000 + (rand()%20)*1000);
- }
- break;
+ if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM))
+ DoCast(pTarget, RAID_MODE(SPELL_STATIC_DISRUPTION, SPELL_STATIC_DISRUPTION_H));
+ events.ScheduleEvent(EVENT_STATIC_DISRUPTION, urand(20000, 40000));
+ break;
case EVENT_OVERWHELMING_POWER:
+ DoScriptText(SAY_STEELBREAKER_POWER, m_creature);
DoCast(me->getVictim(), RAID_MODE(SPELL_OVERWHELMING_POWER, SPELL_OVERWHELMING_POWER_H));
events.ScheduleEvent(EVENT_OVERWHELMING_POWER, RAID_MODE(60000, 35000));
- break;
+ break;
}
}
@@ -230,7 +257,7 @@ struct boss_runemaster_molgeimAI : public ScriptedAI
void Reset()
{
- if(pInstance)
+ if (pInstance)
pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
events.Reset();
m_creature->RemoveAllAuras();
@@ -243,6 +270,7 @@ struct boss_runemaster_molgeimAI : public ScriptedAI
void EnterCombat(Unit* who)
{
+ DoScriptText(SAY_MOLGEIM_AGGRO, m_creature);
DoZoneInCombat();
events.ScheduleEvent(EVENT_ENRAGE, 900000);
UpdatePhase();
@@ -254,40 +282,43 @@ struct boss_runemaster_molgeimAI : public ScriptedAI
events.SetPhase(phase);
events.RescheduleEvent(EVENT_SHIELD_OF_RUNES, 27000);
events.RescheduleEvent(EVENT_RUNE_OF_POWER, 60000);
- if(phase >= 2)
+ if (phase >= 2)
events.RescheduleEvent(EVENT_RUNE_OF_DEATH, 30000);
- if(phase >= 3)
- events.RescheduleEvent(EVENT_RUNE_OF_SUMMONING, 20000+(rand()%10)*1000);
+ if (phase >= 3)
+ events.RescheduleEvent(EVENT_RUNE_OF_SUMMONING, urand(20000,30000));
}
void DamageTaken(Unit* pKiller, uint32 &damage)
{
- if(damage >= m_creature->GetHealth())
+ if (damage >= m_creature->GetHealth())
{
- if(Creature* Steelbreaker = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
- if(Steelbreaker->isAlive())
- {
+ if (Creature* Steelbreaker = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
+ if (Steelbreaker->isAlive())
Steelbreaker->SetHealth(Steelbreaker->GetMaxHealth());
- }
- if(Creature* Brundir = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_STORMCALLER_BRUNDIR) : 0))
- if(Brundir->isAlive())
- {
+ if (Creature* Brundir = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_STORMCALLER_BRUNDIR) : 0))
+ if (Brundir->isAlive())
Brundir->SetHealth(Brundir->GetMaxHealth());
- }
+
DoCast(m_creature, SPELL_SUPERCHARGE);
}
}
void JustDied(Unit* Killer)
{
- if(IsEncounterComplete(pInstance, m_creature) && pInstance)
+ DoScriptText(RAND(SAY_MOLGEIM_DEATH_1,SAY_MOLGEIM_DEATH_2), m_creature);
+ if (IsEncounterComplete(pInstance, m_creature) && pInstance)
pInstance->SetData(TYPE_ASSEMBLY, DONE);
}
+ void KilledUnit(Unit *who)
+ {
+ DoScriptText(RAND(SAY_MOLGEIM_SLAY_1,SAY_MOLGEIM_SLAY_2), m_creature);
+ }
+
void SpellHit(Unit *from, const SpellEntry *spell)
{
- if(spell->Id == SPELL_SUPERCHARGE)
+ if (spell->Id == SPELL_SUPERCHARGE)
UpdatePhase();
}
@@ -303,35 +334,34 @@ struct boss_runemaster_molgeimAI : public ScriptedAI
switch(eventId)
{
case EVENT_ENRAGE:
+ DoScriptText(SAY_MOLGEIM_BERSERK, m_creature);
DoCast(SPELL_BERSERK);
- break;
+ break;
case EVENT_RUNE_OF_POWER: // Improve target selection; random alive friendly
{
- Unit *Target = DoSelectLowestHpFriendly(60);
- if(!Target || (Target && !Target->isAlive()))
- Target = m_creature;
- DoCast(Target, SPELL_RUNE_OF_POWER);
+ Unit *pTarget = DoSelectLowestHpFriendly(60);
+ if (!pTarget || (pTarget && !pTarget->isAlive()))
+ pTarget = m_creature;
+ DoCast(pTarget, SPELL_RUNE_OF_POWER);
events.ScheduleEvent(EVENT_RUNE_OF_POWER, 60000);
+ break;
}
- break;
case EVENT_SHIELD_OF_RUNES:
DoCast(m_creature, RAID_MODE(SPELL_SHIELD_OF_RUNES, SPELL_SHIELD_OF_RUNES_H));
- events.ScheduleEvent(EVENT_SHIELD_OF_RUNES, 27000+ (rand()%7)*1000);
- break;
+ events.ScheduleEvent(EVENT_SHIELD_OF_RUNES, urand(27000,34000));
+ break;
case EVENT_RUNE_OF_DEATH:
- {
- Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM);
- DoCast(pTarget, SPELL_RUNE_OF_DEATH);
- events.ScheduleEvent(EVENT_RUNE_OF_DEATH, 30000+ (rand()%10)*1000);
- }
- break;
+ DoScriptText(SAY_MOLGEIM_RUNE_DEATH, m_creature);
+ if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM))
+ DoCast(pTarget, SPELL_RUNE_OF_DEATH);
+ events.ScheduleEvent(EVENT_RUNE_OF_DEATH, urand(30000,40000));
+ break;
case EVENT_RUNE_OF_SUMMONING:
- {
- Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM);
- DoCast(pTarget, SPELL_RUNE_OF_SUMMONING);
- events.ScheduleEvent(EVENT_RUNE_OF_SUMMONING, 20000+(rand()%10)*1000);
- }
- break;
+ DoScriptText(SAY_MOLGEIM_SUMMON, m_creature);
+ if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM))
+ DoCast(pTarget, SPELL_RUNE_OF_SUMMONING);
+ events.ScheduleEvent(EVENT_RUNE_OF_SUMMONING, urand(20000,30000));
+ break;
}
}
@@ -346,29 +376,29 @@ struct mob_lightning_elementalAI : public ScriptedAI
Charge();
}
- Unit* Target;
-
void Charge()
{
- Target = m_creature->SelectNearestTarget();
- m_creature->AddThreat(Target, 5000000.0f);
- AttackStart(Target);
+ Unit* pTarget = m_creature->SelectNearestTarget();
+ m_creature->AddThreat(pTarget, 5000000.0f);
+ AttackStart(pTarget);
}
void UpdateAI(const uint32 diff)
{
- if(!m_creature->isInCombat())
+ if (!m_creature->isInCombat())
return;
- if(m_creature->IsWithinMeleeRange(Target))
+ if (!UpdateVictim())
+ return;
+
+ if (m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
- DoCast(Target, RAID_MODE(SPELL_LIGHTNING_BLAST, SPELL_LIGHTNING_BLAST_H));
+ DoCast(m_creature->getVictim(), RAID_MODE(SPELL_LIGHTNING_BLAST, SPELL_LIGHTNING_BLAST_H));
m_creature->Kill(m_creature); // hack until spell works
}
- m_creature->GetMotionMaster()->MoveChase(Target); // needed at every update?
+ m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); // needed at every update?
}
-
};
struct mob_rune_of_summoningAI : public ScriptedAI
@@ -394,7 +424,7 @@ struct boss_stormcaller_brundirAI : public ScriptedAI
void Reset()
{
- if(pInstance)
+ if (pInstance)
pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
m_creature->RemoveAllAuras();
events.Reset();
@@ -407,6 +437,7 @@ struct boss_stormcaller_brundirAI : public ScriptedAI
void EnterCombat(Unit* who)
{
+ DoScriptText(SAY_BRUNDIR_AGGRO, m_creature);
DoZoneInCombat();
events.ScheduleEvent(EVENT_ENRAGE, 900000);
UpdatePhase();
@@ -416,33 +447,28 @@ struct boss_stormcaller_brundirAI : public ScriptedAI
{
++phase;
events.SetPhase(phase);
- events.RescheduleEvent(EVENT_CHAIN_LIGHTNING, 9000+ (rand()%8)*1000);
- events.RescheduleEvent(EVENT_OVERLOAD, 60000+ (rand()%65)*1000);
- if(phase >= 2)
- events.RescheduleEvent(EVENT_LIGHTNING_WHIRL, 20000+ (rand()%20)*1000);
- if(phase >= 3)
+ events.RescheduleEvent(EVENT_CHAIN_LIGHTNING, urand(9000,17000));
+ events.RescheduleEvent(EVENT_OVERLOAD, urand(60000,125000));
+ if (phase >= 2)
+ events.RescheduleEvent(EVENT_LIGHTNING_WHIRL, urand(20000,40000));
+ if (phase >= 3)
{
DoCast(m_creature, SPELL_STORMSHIELD);
- events.RescheduleEvent(EVENT_LIGHTNING_TENDRILS, 40000+ (rand()%40)*1000);
+ events.RescheduleEvent(EVENT_LIGHTNING_TENDRILS, urand(40000,80000));
}
-
}
void DamageTaken(Unit* pKiller, uint32 &damage)
{
- if(damage >= m_creature->GetHealth())
+ if (damage >= m_creature->GetHealth())
{
- if(Creature* Steelbreaker = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
- if(Steelbreaker->isAlive())
- {
+ if (Creature* Steelbreaker = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
+ if (Steelbreaker->isAlive())
Steelbreaker->SetHealth(Steelbreaker->GetMaxHealth());
- }
- if(Creature* Molgeim = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM) : 0))
- if(Molgeim->isAlive())
- {
+ if (Creature* Molgeim = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM) : 0))
+ if (Molgeim->isAlive())
Molgeim->SetHealth(Molgeim->GetMaxHealth());
- }
DoCast(SPELL_SUPERCHARGE);
}
@@ -450,16 +476,20 @@ struct boss_stormcaller_brundirAI : public ScriptedAI
void JustDied(Unit* Killer)
{
- if(IsEncounterComplete(pInstance, m_creature) && pInstance)
+ DoScriptText(RAND(SAY_BRUNDIR_DEATH_1,SAY_BRUNDIR_DEATH_2), m_creature);
+ if (IsEncounterComplete(pInstance, m_creature) && pInstance)
pInstance->SetData(TYPE_ASSEMBLY, DONE);
}
+ void KilledUnit(Unit *who)
+ {
+ DoScriptText(RAND(SAY_BRUNDIR_SLAY_1,SAY_BRUNDIR_SLAY_2), m_creature);
+ }
+
void SpellHit(Unit *from, const SpellEntry *spell)
{
- if(spell->Id == SPELL_SUPERCHARGE)
- {
+ if (spell->Id == SPELL_SUPERCHARGE)
UpdatePhase();
- }
}
void UpdateAI(const uint32 diff)
@@ -474,28 +504,27 @@ struct boss_stormcaller_brundirAI : public ScriptedAI
switch(eventId)
{
case EVENT_ENRAGE:
+ DoScriptText(SAY_BRUNDIR_BERSERK, m_creature);
DoCast(SPELL_BERSERK);
- break;
+ break;
case EVENT_CHAIN_LIGHTNING:
- {
- Unit* Target = SelectUnit(SELECT_TARGET_RANDOM,0);
- DoCast(Target, RAID_MODE(SPELL_CHAIN_LIGHTNING_N , SPELL_CHAIN_LIGHTNING_H));
- events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 9000+ (rand()%8)*1000);
- }
- break;
+ if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
+ DoCast(pTarget, RAID_MODE(SPELL_CHAIN_LIGHTNING_N , SPELL_CHAIN_LIGHTNING_H));
+ events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, urand(9000,17000));
+ break;
case EVENT_OVERLOAD:
DoCast(RAID_MODE(SPELL_OVERLOAD , SPELL_OVERLOAD_H));
- events.ScheduleEvent(EVENT_OVERLOAD, 60000+ (rand()%65)*1000);
- break;
+ events.ScheduleEvent(EVENT_OVERLOAD, urand(60000,125000));
+ break;
case EVENT_LIGHTNING_WHIRL:
DoCast(RAID_MODE(SPELL_LIGHTNING_WHIRL , SPELL_LIGHTNING_WHIRL_H));
- events.ScheduleEvent(EVENT_LIGHTNING_WHIRL, 20000+ (rand()%20)*1000);
- break;
+ events.ScheduleEvent(EVENT_LIGHTNING_WHIRL, urand(20000,40000));
+ break;
case EVENT_LIGHTNING_TENDRILS:
DoCast(RAID_MODE(SPELL_LIGHTNING_TENDRILS, SPELL_LIGHTNING_TENDRILS_H));
events.DelayEvents(15000, 5000);
DoResetThreat();
- break;
+ break;
}
}
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp b/src/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp
index 70109eeef03..c9103d3b82d 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp
@@ -24,44 +24,47 @@
#define SPELL_SETINEL_BLAST 64679
#define SPELL_SONIC_SCREECH 64422
#define SPELL_SUMMON_SWARMING_GUARDIAN 64397
-//wrong text ids. correct are beetwen -1000000 AND -1999999
-//beetwen -2000000 and -2999999 are custom texts so wtf?
-#define SAY_AGGRO -2615016
-#define SAY_SLAY_1 -2615017
+
+enum Yells
+{
+ SAY_AGGRO = -1603050,
+ SAY_SLAY_1 = -1603051,
+ SAY_SLAY_2 = -1603052,
+ SAY_DEATH = -1603053,
+ SAY_BERSERK = -1603054,
+};
struct boss_auriaya_AI : public BossAI
{
boss_auriaya_AI(Creature *pCreature) : BossAI(pCreature, TYPE_AURIAYA)
{
- m_pInstance = pCreature->GetInstanceData();
}
- ScriptedInstance* m_pInstance;
-
uint32 TERRIFYING_SCREECH_Timer;
uint32 SONIC_SCREECH_Timer;
void Reset()
{
+ _Reset();
TERRIFYING_SCREECH_Timer = 180000;
SONIC_SCREECH_Timer = 30000;
}
void EnterCombat(Unit* who)
{
+ _EnterCombat();
DoScriptText(SAY_AGGRO,m_creature);
}
+
void KilledUnit(Unit* victim)
{
- DoScriptText(SAY_SLAY_1, m_creature);
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit *victim)
{
- DoScriptText(SAY_SLAY_1, m_creature);
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_AURIAYA, DONE);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
}
void MoveInLineOfSight(Unit* who) {}
@@ -74,7 +77,6 @@ struct boss_auriaya_AI : public BossAI
if (TERRIFYING_SCREECH_Timer <= diff)
{
DoCast(SPELL_TERRIFYING_SCREECH);
- DoScriptText(SAY_SLAY_1, m_creature);
TERRIFYING_SCREECH_Timer = 180000;
} else TERRIFYING_SCREECH_Timer -= diff;
@@ -92,6 +94,7 @@ CreatureAI* GetAI_boss_auriaya(Creature* pCreature)
{
return new boss_auriaya_AI (pCreature);
}
+
void AddSC_boss_auriaya()
{
Script *newscript;
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp b/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
index dd28fb5ff41..b167156f2d9 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
@@ -20,40 +20,38 @@
#include "ulduar.h"
#include "Vehicle.h"
-#define SPELL_PURSUED 62374
-#define SPELL_GATHERING_SPEED 62375
-#define SPELL_BATTERING_RAM 62376
-#define SPELL_FLAME_VENTS 62396
-#define SPELL_MISSILE_BARRAGE 62400
-#define SPELL_SYSTEMS_SHUTDOWN 62475
-
-#define SPELL_FLAME_CANNON 62395
-//#define SPELL_FLAME_CANNON 64692 trigger the same spell
-
-#define SPELL_OVERLOAD_CIRCUIT 62399
-
-#define SPELL_SEARING_FLAME 62402
-
-#define SPELL_BLAZE 62292
-
-#define SPELL_SMOKE_TRAIL 63575
-
-#define SPELL_MIMIRON_INFERNO 62910
-
-#define SPELL_HODIR_FURY 62297
-
-#define SPELL_ELECTROSHOCK 62522
+enum Spells
+{
+ SPELL_PURSUED = 62374,
+ SPELL_GATHERING_SPEED = 62375,
+ SPELL_BATTERING_RAM = 62376,
+ SPELL_FLAME_VENTS = 62396,
+ SPELL_MISSILE_BARRAGE = 62400,
+ SPELL_SYSTEMS_SHUTDOWN = 62475,
+
+ SPELL_FLAME_CANNON = 62395,
+// SPELL_FLAME_CANNON = 64692, trigger the same spell
+
+ SPELL_OVERLOAD_CIRCUIT = 62399,
+ SPELL_SEARING_FLAME = 62402,
+ SPELL_BLAZE = 62292,
+ SPELL_SMOKE_TRAIL = 63575,
+ SPELL_MIMIRON_INFERNO = 62910,
+ SPELL_HODIR_FURY = 62297,
+ SPELL_ELECTROSHOCK = 62522,
+};
-enum Mobs
+enum Creatures
{
- MOB_MECHANOLIFT = 33214,
- MOB_LIQUID = 33189,
- MOB_CONTAINER = 33218,
+ MOB_MECHANOLIFT = 33214,
+ MOB_LIQUID = 33189,
+ MOB_CONTAINER = 33218,
};
enum Events
{
- EVENT_PURSUE = 1,
+ EVENT_NONE,
+ EVENT_PURSUE,
EVENT_MISSILE,
EVENT_VENT,
EVENT_SPEED,
@@ -64,41 +62,59 @@ enum Events
enum Seats
{
- SEAT_PLAYER = 0,
- SEAT_TURRET = 1,
- SEAT_DEVICE = 2,
+ SEAT_PLAYER = 0,
+ SEAT_TURRET = 1,
+ SEAT_DEVICE = 2,
+};
+
+enum Yells
+{
+ SAY_AGGRO = -1603060,
+ SAY_SLAY = -1603061,
+ SAY_DEATH = -1603062,
+ SAY_TARGET_1 = -1603063,
+ SAY_TARGET_2 = -1603064,
+ SAY_TARGET_3 = -1603065,
+ SAY_HARDMODE = -1603066,
+ SAY_TOWER_NONE = -1603067,
+ SAY_TOWER_FROST = -1603068,
+ SAY_TOWER_FLAME = -1603069,
+ SAY_TOWER_NATURE = -1603070,
+ SAY_TOWER_STORM = -1603071,
+ SAY_PLAYER_RIDING = -1603072,
+ SAY_OVERLOAD_1 = -1603073,
+ SAY_OVERLOAD_2 = -1603074,
+ SAY_OVERLOAD_3 = -1603075,
};
struct boss_flame_leviathanAI : public BossAI
{
- boss_flame_leviathanAI(Creature *pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(me->GetVehicleKit())
+ boss_flame_leviathanAI(Creature *pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(pCreature->GetVehicleKit())
{
- m_pInstance = pCreature->GetInstanceData();
assert(vehicle);
}
- ScriptedInstance* m_pInstance;
-
Vehicle *vehicle;
void Reset()
{
_Reset();
- me->SetReactState(REACT_AGGRESSIVE);
+ m_creature->SetReactState(REACT_AGGRESSIVE);
}
void EnterCombat(Unit *who)
{
_EnterCombat();
- me->SetReactState(REACT_DEFENSIVE);
+ DoScriptText(SAY_AGGRO, m_creature);
+ m_creature->SetReactState(REACT_DEFENSIVE);
events.ScheduleEvent(EVENT_PURSUE, 0);
events.ScheduleEvent(EVENT_MISSILE, 1500);
events.ScheduleEvent(EVENT_VENT, 20000);
events.ScheduleEvent(EVENT_SPEED, 15000);
events.ScheduleEvent(EVENT_SUMMON, 0);
- //events.ScheduleEvent(EVENT_MIMIRON_INFERNO, 60000 + (rand()%60000)); // Not Blizzlike
- //events.ScheduleEvent(EVENT_HODIR_FURY, 60000 + (rand()%60000)); // Not Blizzlike
- if (Creature *turret = CAST_CRE(vehicle->GetPassenger(7)))
+ //events.ScheduleEvent(EVENT_MIMIRON_INFERNO, urand(60000, 120000)); // Not Blizzlike
+ //events.ScheduleEvent(EVENT_HODIR_FURY, urand(60000, 120000)); // Not Blizzlike
+ if (Creature *turret = CAST_CRE(vehicle->GetPassenger(SEAT_TURRET)))
turret->AI()->DoZoneInCombat();
}
@@ -111,8 +127,8 @@ struct boss_flame_leviathanAI : public BossAI
void JustDied(Unit *victim)
{
- if (m_pInstance)
- m_pInstance->SetData(TYPE_LEVIATHAN, DONE);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
}
void SpellHit(Unit *caster, const SpellEntry *spell)
@@ -120,15 +136,15 @@ struct boss_flame_leviathanAI : public BossAI
if(spell->Id == 62472)
vehicle->InstallAllAccessories();
else if(spell->Id == SPELL_ELECTROSHOCK)
- me->InterruptSpell(CURRENT_CHANNELED_SPELL);
+ m_creature->InterruptSpell(CURRENT_CHANNELED_SPELL);
}
void UpdateAI(const uint32 diff)
{
- if (!me->isInCombat())
+ if (!m_creature->isInCombat())
return;
- if (me->getThreatManager().isThreatListEmpty())
+ if (m_creature->getThreatManager().isThreatListEmpty())
{
EnterEvadeMode();
return;
@@ -136,11 +152,11 @@ struct boss_flame_leviathanAI : public BossAI
events.Update(diff);
- if (me->hasUnitState(UNIT_STAT_CASTING))
+ if (m_creature->hasUnitState(UNIT_STAT_CASTING))
return;
uint32 eventId = events.GetEvent();
- if (!me->getVictim())
+ if (!m_creature->getVictim())
eventId = EVENT_PURSUE;
switch(eventId)
@@ -150,13 +166,12 @@ struct boss_flame_leviathanAI : public BossAI
DoCastAOE(SPELL_PURSUED, true);
//events.RepeatEvent(35000); // this should not be used because eventId may be overriden
events.RescheduleEvent(EVENT_PURSUE, 35000);
- if(!me->getVictim()) // all siege engines and demolishers are dead
+ if(!m_creature->getVictim()) // all siege engines and demolishers are dead
UpdateVictim(); // begin to kill other things
return;
case EVENT_MISSILE:
- //TODO: without target no visual effect
- //DoCastAOE(SPELL_MISSILE_BARRAGE);
- DoCast(me->getVictim(), SPELL_MISSILE_BARRAGE);
+ if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM))
+ DoCast(pTarget, SPELL_MISSILE_BARRAGE);
events.RepeatEvent(1500);
return;
case EVENT_VENT:
@@ -169,17 +184,18 @@ struct boss_flame_leviathanAI : public BossAI
return;
case EVENT_SUMMON:
if(summons.size() < 15) // 4seat+1turret+10lift
- if(Creature *lift = DoSummonFlyer(MOB_MECHANOLIFT, me, rand()%20 + 20, 50, 0))
+ if(Creature *lift = DoSummonFlyer(MOB_MECHANOLIFT, me, urand(20,40), 50, 0))
lift->GetMotionMaster()->MoveRandom(100);
events.RepeatEvent(2000);
return;
case EVENT_MIMIRON_INFERNO: // Not Blizzlike
- DoCast(me->getVictim(), SPELL_MIMIRON_INFERNO);
- events.RepeatEvent(60000 + (rand()%60000));
+ DoCast(m_creature->getVictim(), SPELL_MIMIRON_INFERNO);
+ events.RepeatEvent(urand(60000, 120000));
return;
case EVENT_HODIR_FURY: // Not Blizzlike
- DoCast(me->getVictim(), SPELL_HODIR_FURY);
- events.RepeatEvent(60000 + (rand()%60000));
+ DoCast(m_creature->getVictim(), SPELL_HODIR_FURY);
+ events.RepeatEvent(urand(60000, 120000));
+ return;
default:
events.PopEvent();
break;
@@ -197,7 +213,7 @@ struct boss_flame_leviathan_seatAI : public PassiveAI
{
assert(vehicle);
#ifdef BOSS_DEBUG
- me->SetReactState(REACT_AGGRESSIVE);
+ m_creature->SetReactState(REACT_AGGRESSIVE);
#endif
}
@@ -214,17 +230,17 @@ struct boss_flame_leviathan_seatAI : public PassiveAI
void PassengerBoarded(Unit *who, int8 seatId, bool apply)
{
- if(!me->GetVehicle())
+ if (!m_creature->GetVehicle())
return;
- if(seatId == SEAT_PLAYER)
+ if (seatId == SEAT_PLAYER)
{
if(!apply)
return;
if(Creature *turret = CAST_CRE(vehicle->GetPassenger(SEAT_TURRET)))
{
- turret->setFaction(me->GetVehicleBase()->getFaction());
+ turret->setFaction(m_creature->GetVehicleBase()->getFaction());
turret->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable
turret->AI()->AttackStart(who);
}
@@ -234,12 +250,12 @@ struct boss_flame_leviathan_seatAI : public PassiveAI
device->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
}
- else if(seatId == SEAT_TURRET)
+ else if (seatId == SEAT_TURRET)
{
- if(apply)
+ if (apply)
return;
- if(Unit *device = vehicle->GetPassenger(SEAT_DEVICE))
+ if (Unit *device = vehicle->GetPassenger(SEAT_DEVICE))
{
device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
device->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable
@@ -254,7 +270,7 @@ struct boss_flame_leviathan_defense_turretAI : public TurretAI
void DamageTaken(Unit *who, uint32 &damage)
{
- if(!CanAIAttack(who))
+ if (!CanAIAttack(who))
damage = 0;
}
@@ -274,15 +290,15 @@ struct boss_flame_leviathan_overload_deviceAI : public PassiveAI
{
if(param == EVENT_SPELLCLICK)
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- if(me->GetVehicle())
+ m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ if(m_creature->GetVehicle())
{
- if(Unit *player = me->GetVehicle()->GetPassenger(SEAT_PLAYER))
+ if(Unit *player = m_creature->GetVehicle()->GetPassenger(SEAT_PLAYER))
{
player->ExitVehicle();
- me->GetVehicleBase()->CastSpell(player, SPELL_SMOKE_TRAIL, true);
- if(Unit *leviathan = me->GetVehicleBase()->GetVehicleBase())
+ m_creature->GetVehicleBase()->CastSpell(player, SPELL_SMOKE_TRAIL, true);
+ if(Unit *leviathan = m_creature->GetVehicleBase()->GetVehicleBase())
player->GetMotionMaster()->MoveKnockbackFrom(leviathan->GetPositionX(), leviathan->GetPositionY(), 30, 30);
}
}
@@ -296,18 +312,18 @@ struct boss_flame_leviathan_safety_containerAI : public PassiveAI
void MovementInform(uint32 type, uint32 id)
{
- if(id == me->GetEntry())
+ if(id == m_creature->GetEntry())
{
if(Creature *liquid = DoSummon(MOB_LIQUID, me, 0))
liquid->CastSpell(liquid, 62494, true);
- me->DisappearAndDie(); // this will relocate creature to sky
+ m_creature->DisappearAndDie(); // this will relocate creature to sky
}
}
void UpdateAI(const uint32 diff)
{
- if(!me->GetVehicle() && me->isSummon() && me->GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE)
- me->GetMotionMaster()->MoveFall(409.8f, me->GetEntry());
+ if(!m_creature->GetVehicle() && m_creature->isSummon() && m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE)
+ m_creature->GetMotionMaster()->MoveFall(409.8f, m_creature->GetEntry());
}
};
@@ -315,7 +331,7 @@ struct spell_pool_of_tarAI : public TriggerAI
{
spell_pool_of_tarAI(Creature *c) : TriggerAI(c)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
void DamageTaken(Unit *who, uint32 &damage)
@@ -325,8 +341,8 @@ struct spell_pool_of_tarAI : public TriggerAI
void SpellHit(Unit* caster, const SpellEntry *spell)
{
- if(spell->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !me->HasAura(SPELL_BLAZE))
- me->CastSpell(me, SPELL_BLAZE, true);
+ if(spell->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !m_creature->HasAura(SPELL_BLAZE))
+ m_creature->CastSpell(me, SPELL_BLAZE, true);
}
};
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_freya.cpp b/src/scripts/northrend/ulduar/ulduar/boss_freya.cpp
index e44cdffff66..9e5dcc1eb55 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_freya.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_freya.cpp
@@ -19,42 +19,64 @@
#include "ScriptedPch.h"
#include "ulduar.h"
-/*
-#define SAY_AGGRO -1
-#define SAY_SLAY -1
-*/
+enum Yells
+{
+ SAY_AGGRO = -1603180,
+ SAY_AGGRO_WITH_ELDER = -1603181,
+ SAY_SLAY_1 = -1603182,
+ SAY_SLAY_2 = -1603183,
+ SAY_DEATH = -1603184,
+ SAY_BERSERK = -1603185,
+ SAY_SUMMON_CONSERVATOR = -1603186,
+ SAY_SUMMON_TRIO = -1603187,
+ SAY_SUMMON_LASHERS = -1603188,
+ SAY_YS_HELP = -1603189,
+
+ // Elder Brightleaf
+ SAY_BRIGHTLEAF_AGGRO = -1603190,
+ SAY_BRIGHTLEAF_SLAY_1 = -1603191,
+ SAY_BRIGHTLEAF_SLAY_2 = -1603192,
+ SAY_BRIGHTLEAF_DEATH = -1603193,
+
+ // Elder Ironbranch
+ SAY_IRONBRANCH_AGGRO = -1603194,
+ SAY_IRONBRANCH_SLAY_1 = -1603195,
+ SAY_IRONBRANCH_SLAY_2 = -1603196,
+ SAY_IRONBRANCH_DEATH = -1603197,
+
+ // Elder Stonebark
+ SAY_STONEBARK_AGGRO = -1603198,
+ SAY_STONEBARK_SLAY_1 = -1603199,
+ SAY_STONEBARK_SLAY_2 = -1603200,
+ SAY_STONEBARK_DEATH = -1603201,
+};
struct boss_freyaAI : public BossAI
{
boss_freyaAI(Creature* pCreature) : BossAI(pCreature, TYPE_FREYA)
{
- m_pInstance = pCreature->GetInstanceData();
- Reset();
}
- ScriptedInstance* m_pInstance;
-
void Reset()
{
+ _Reset();
}
void KilledUnit(Unit *victim)
{
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit *victim)
{
- if (m_pInstance)
- m_pInstance->SetData(TYPE_FREYA, DONE);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
}
- void Aggro(Unit* pWho)
+ void EnterCombat(Unit* pWho)
{
-// DoScriptText(SAY_AGGRO, m_creature);
- m_creature->SetInCombatWithZone();
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_FREYA, IN_PROGRESS);
+ DoScriptText(SAY_AGGRO, m_creature);
+ _EnterCombat();
}
void UpdateAI(const uint32 diff)
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_general_vezax.cpp b/src/scripts/northrend/ulduar/ulduar/boss_general_vezax.cpp
index a9f1be65f2d..f84c638d3e3 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_general_vezax.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_general_vezax.cpp
@@ -18,3 +18,14 @@
#include "ScriptedPch.h"
#include "ulduar.h"
+
+enum Yells
+{
+ SAY_AGGRO = -1603290,
+ SAY_SLAY_1 = -1603291,
+ SAY_SLAY_2 = -1603292,
+ SAY_KITE = -1603293,
+ SAY_DEATH = -1603294,
+ SAY_BERSERK = -1603295,
+ SAY_HARDMODE_ON = -1603296,
+};
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_hodir.cpp b/src/scripts/northrend/ulduar/ulduar/boss_hodir.cpp
index 4bf9d4f3479..4feb2168f97 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_hodir.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_hodir.cpp
@@ -19,42 +19,45 @@
#include "ScriptedPch.h"
#include "ulduar.h"
-/*
-#define SAY_AGGRO -1
-#define SAY_SLAY -1
-*/
+enum Yells
+{
+ SAY_AGGRO = -1603210,
+ SAY_SLAY_1 = -1603211,
+ SAY_SLAY_2 = -1603212,
+ SAY_FLASH_FREEZE = -1603213,
+ SAY_STALACTITE = -1603214,
+ SAY_DEATH = -1603215,
+ SAY_BERSERK = -1603216,
+ SAY_YS_HELP = -1603217,
+ SAY_HARD_MODE_MISSED = -1603218,
+};
struct boss_hodirAI : public BossAI
{
boss_hodirAI(Creature *pCreature) : BossAI(pCreature, TYPE_HODIR)
{
- m_pInstance = pCreature->GetInstanceData();
- Reset();
}
- ScriptedInstance* m_pInstance;
-
void Reset()
{
+ _Reset();
}
void KilledUnit(Unit *victim)
{
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit *victim)
{
- if (m_pInstance)
- m_pInstance->SetData(TYPE_HODIR, DONE);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
}
- void Aggro(Unit* pWho)
+ void EnterCombat(Unit* pWho)
{
-// DoScriptText(SAY_AGGRO, m_creature);
- m_creature->SetInCombatWithZone();
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_HODIR, IN_PROGRESS);
+ DoScriptText(SAY_AGGRO, m_creature);
+ _EnterCombat();
}
void UpdateAI(const uint32 diff)
@@ -67,9 +70,7 @@ struct boss_hodirAI : public BossAI
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea(diff);
-
}
-
};
CreatureAI* GetAI_boss_hodir(Creature* pCreature)
@@ -86,4 +87,3 @@ void AddSC_boss_hodir()
newscript->RegisterSelf();
}
-
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_ignis.cpp b/src/scripts/northrend/ulduar/ulduar/boss_ignis.cpp
index 80c81e40616..3e51b7d39cc 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_ignis.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_ignis.cpp
@@ -23,37 +23,50 @@
#define SPELL_SCORCH 62546
#define SPELL_SLAG_POT 62717
-//wrong ids. not in db
-#define SAY_AGGRO -10000002
-#define SAY_SLAY -1000003
+enum Yells
+{
+ SAY_AGGRO = -1603220,
+ SAY_SLAY_1 = -1603221,
+ SAY_SLAY_2 = -1603222,
+ SAY_DEATH = -1603223,
+ SAY_SUMMON = -1603224,
+ SAY_SLAG_POT = -1603225,
+ SAY_SCORCH_1 = -1603226,
+ SAY_SCORCH_2 = -1603227,
+ SAY_BERSERK = -1603228,
+};
struct boss_ignis_AI : public BossAI
{
boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, TYPE_IGNIS) {}
- uint32 FLAME_JETS_Timer;
- uint32 SCORCH_Timer;
- uint32 SLAG_POT_Timer;
+ uint32 uiFlameJetsTimer;
+ uint32 uiScorchTimer;
+ uint32 uiSlagPotTimer;
void Reset()
{
- FLAME_JETS_Timer = 32000;
- SCORCH_Timer = 100;
- SLAG_POT_Timer = 100;
+ _Reset();
+ uiFlameJetsTimer = 32000;
+ uiScorchTimer = 100;
+ uiSlagPotTimer = 100;
}
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO,m_creature);
+ _EnterCombat();
}
+
void KilledUnit(Unit* victim)
{
- DoScriptText(SAY_SLAY, m_creature);
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit *victim)
{
- DoScriptText(SAY_SLAY, m_creature);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
}
void MoveInLineOfSight(Unit* who) {}
@@ -63,7 +76,7 @@ struct boss_ignis_AI : public BossAI
if (!UpdateVictim())
return;
- if(m_creature->GetPositionY() < 150 || m_creature->GetPositionX() < 450) // Not Blizzlike, anti-exploit to prevent players from pulling bosses to vehicles.
+ if (m_creature->GetPositionY() < 150 || m_creature->GetPositionX() < 450) // Not Blizzlike, anti-exploit to prevent players from pulling bosses to vehicles.
{
m_creature->RemoveAllAuras();
m_creature->DeleteThreatList();
@@ -71,26 +84,28 @@ struct boss_ignis_AI : public BossAI
m_creature->GetMotionMaster()->MoveTargetedHome();
}
- if (FLAME_JETS_Timer <= diff)
+ if (uiFlameJetsTimer <= diff)
{
DoCast(SPELL_FLAME_JETS);
- DoScriptText(SAY_SLAY, m_creature);
- FLAME_JETS_Timer = 25000;
- } else FLAME_JETS_Timer -= diff;
+ uiFlameJetsTimer = 25000;
+ } else uiFlameJetsTimer -= diff;
- if (SCORCH_Timer <= diff)
+ if (uiScorchTimer <= diff)
{
+ DoScriptText(RAND(SAY_SCORCH_1,SAY_SCORCH_2), m_creature);
DoCast(SPELL_SCORCH);
- SCORCH_Timer = 20000;
- } else SCORCH_Timer -= diff;
+ uiScorchTimer = 20000;
+ } else uiScorchTimer -= diff;
- if (SLAG_POT_Timer <= diff)
+ if (uiSlagPotTimer <= diff)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ {
+ DoScriptText(SAY_SLAG_POT, m_creature);
DoCast(pTarget, SPELL_SLAG_POT);
- DoScriptText(SAY_SLAY, m_creature);
- SLAG_POT_Timer = 30000;
- } else SLAG_POT_Timer -= diff;
+ }
+ uiSlagPotTimer = 30000;
+ } else uiSlagPotTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp b/src/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
index ab07e5c1327..d78916564e7 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
@@ -37,19 +37,29 @@ enum Events
EVENT_SWEEP,
};
+enum Yells
+{
+ SAY_AGGRO = -1603230,
+ SAY_SLAY_1 = -1603231,
+ SAY_SLAY_2 = -1603232,
+ SAY_LEFT_ARM_GONE = -1603233,
+ SAY_RIGHT_ARM_GONE = -1603234,
+ SAY_SHOCKWAVE = -1603235,
+ SAY_GRAB_PLAYER = -1603236,
+ SAY_DEATH = -1603237,
+ SAY_BERSERK = -1603238,
+};
+
struct boss_kologarnAI : public BossAI
{
- boss_kologarnAI(Creature *pCreature) : BossAI(pCreature, TYPE_KOLOGARN), vehicle(me->GetVehicleKit()),
+ boss_kologarnAI(Creature *pCreature) : BossAI(pCreature, TYPE_KOLOGARN), vehicle(pCreature->GetVehicleKit()),
left(false), right(false)
{
- m_pInstance = me->GetInstanceData();
assert(vehicle);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); // i think this is a hack, but there is no other way to disable his rotation
}
- ScriptedInstance* m_pInstance;
-
Vehicle *vehicle;
bool left, right;
@@ -60,17 +70,22 @@ struct boss_kologarnAI : public BossAI
void JustDied(Unit *victim)
{
- if (m_pInstance)
- m_pInstance->SetData(TYPE_KOLOGARN, DONE);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
+ }
+
+ void KilledUnit(Unit* who)
+ {
+ DoScriptText(RAND(SAY_SLAY_2,SAY_SLAY_2), m_creature);
}
void PassengerBoarded(Unit *who, int8 seatId, bool apply)
{
- if(who->GetTypeId() == TYPEID_UNIT)
+ if (who->GetTypeId() == TYPEID_UNIT)
{
- if(who->GetEntry() == 32933)
+ if (who->GetEntry() == 32933)
left = apply;
- else if(who->GetEntry() == 32934)
+ else if (who->GetEntry() == 32934)
right = apply;
who->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
CAST_CRE(who)->SetReactState(REACT_PASSIVE);
@@ -79,6 +94,7 @@ struct boss_kologarnAI : public BossAI
void EnterCombat(Unit *who)
{
+ DoScriptText(SAY_AGGRO, m_creature);
_EnterCombat();
events.ScheduleEvent(EVENT_SMASH, 5000);
events.ScheduleEvent(EVENT_SWEEP, 10000);
@@ -87,18 +103,19 @@ struct boss_kologarnAI : public BossAI
void UpdateAI(const uint32 diff)
{
- if(!UpdateVictim())
+ if (!UpdateVictim())
return;
events.Update(diff);
- if(me->hasUnitState(UNIT_STAT_CASTING))
+ if (me->hasUnitState(UNIT_STAT_CASTING))
return;
// TODO: because we are using hack, he is stunned and cannot cast, so we use triggered for every spell
switch(events.GetEvent())
{
- case EVENT_NONE: break;
+ case EVENT_NONE:
+ break;
case EVENT_SMASH:
if(left && right)
DoCastVictim(SPELL_TWO_ARM_SMASH, true);
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_mimiron.cpp b/src/scripts/northrend/ulduar/ulduar/boss_mimiron.cpp
index a9f1be65f2d..2b9994d5d9b 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_mimiron.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_mimiron.cpp
@@ -18,3 +18,27 @@
#include "ScriptedPch.h"
#include "ulduar.h"
+
+enum Yells
+{
+ SAY_AGGRO = -1603240,
+ SAY_HARDMODE_ON = -1603241,
+ SAY_MKII_ACTIVATE = -1603242,
+ SAY_MKII_SLAY_1 = -1603243,
+ SAY_MKII_SLAY_2 = -1603244,
+ SAY_MKII_DEATH = -1603245,
+ SAY_VX001_ACTIVATE = -1603246,
+ SAY_VX001_SLAY_1 = -1603247,
+ SAY_VX001_SLAY_2 = -1603248,
+ SAY_VX001_DEATH = -1603249,
+ SAY_AERIAL_ACTIVATE = -1603250,
+ SAY_AERIAL_SLAY_1 = -1603251,
+ SAY_AERIAL_SLAY_2 = -1603252,
+ SAY_AERIAL_DEATH = -1603253,
+ SAY_V07TRON_ACTIVATE = -1603254,
+ SAY_V07TRON_SLAY_1 = -1603255,
+ SAY_V07TRON_SLAY_2 = -1603256,
+ SAY_V07TRON_DEATH = -1603257,
+ SAY_BERSERK = -1603258,
+ SAY_YS_HELP = -1603259,
+};
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_thorim.cpp b/src/scripts/northrend/ulduar/ulduar/boss_thorim.cpp
index c81c9308b9f..40112eb3a3d 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_thorim.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_thorim.cpp
@@ -19,42 +19,60 @@
#include "ScriptedPch.h"
#include "ulduar.h"
-/*
-#define SAY_AGGRO -1
-#define SAY_SLAY -1
-*/
+enum Yells
+{
+ SAY_AGGRO_1 = -1603270,
+ SAY_AGGRO_2 = -1603271,
+ SAY_SPECIAL_1 = -1603272,
+ SAY_SPECIAL_2 = -1603273,
+ SAY_SPECIAL_3 = -1603274,
+ SAY_JUMPDOWN = -1603275,
+ SAY_SLAY_1 = -1603276,
+ SAY_SLAY_2 = -1603277,
+ SAY_BERSERK = -1603278,
+ SAY_WIPE = -1603279,
+ SAY_DEATH = -1603280,
+ SAY_END_NORMAL_1 = -1603281,
+ SAY_END_NORMAL_2 = -1603282,
+ SAY_END_NORMAL_3 = -1603283,
+ SAY_END_HARD_1 = -1603284,
+ SAY_END_HARD_2 = -1603285,
+ SAY_END_HARD_3 = -1603286,
+ SAY_YS_HELP = -1603287,
+};
struct boss_thorimAI : public BossAI
{
boss_thorimAI(Creature* pCreature) : BossAI(pCreature, TYPE_THORIM)
{
- m_pInstance = pCreature->GetInstanceData();
- Reset();
}
- ScriptedInstance* m_pInstance;
-
void Reset()
{
+ _Reset();
+ }
+
+ void EnterEvadeMode()
+ {
+ DoScriptText(SAY_WIPE, m_creature);
+ _EnterEvadeMode();
}
void KilledUnit(Unit *victim)
{
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit *victim)
{
- if (m_pInstance)
- m_pInstance->SetData(TYPE_THORIM, DONE);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
}
- void Aggro(Unit* pWho)
+ void EnterCombat(Unit* pWho)
{
-// DoScriptText(SAY_AGGRO, m_creature);
- m_creature->SetInCombatWithZone();
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_THORIM, IN_PROGRESS);
+ DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2), m_creature);
+ _EnterCombat();
}
void UpdateAI(const uint32 diff)
@@ -67,9 +85,7 @@ struct boss_thorimAI : public BossAI
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea(diff);
-
}
-
};
CreatureAI* GetAI_boss_thorim(Creature* pCreature)
@@ -84,5 +100,4 @@ void AddSC_boss_thorim()
newscript->Name = "boss_thorim";
newscript->GetAI = &GetAI_boss_thorim;
newscript->RegisterSelf();
-
}
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_xt002.cpp b/src/scripts/northrend/ulduar/ulduar/boss_xt002.cpp
index 82913a5ea2c..9d2c9f8d6fb 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_xt002.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_xt002.cpp
@@ -16,86 +16,788 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+/*
+ TODO:
+ Add achievments
+ Boombot explosion only hurt allies to the npc at the moment
+ Boombot explosion visual
+ Test the enrage timer
+ Fix gravity bomb - tractor beam.
+ Fix void zone spell
+ If the boss is to close to a scrap pile -> no summon
+ make the life sparks visible...
+*/
+
#include "ScriptedPch.h"
#include "ulduar.h"
-#define SPELL_SEARING_LIGHT 63018
-#define SPELL_SONIC_BOOM 38897
+enum Spells
+{
+ SPELL_TYMPANIC_TANTRUM = 62776,
+ SPELL_SEARING_LIGHT_10 = 63018,
+ SPELL_SEARING_LIGHT_25 = 65121,
+
+ SPELL_GRAVITY_BOMB_10 = 63024,
+ SPELL_GRAVITY_BOMB_25 = 63234,
+ SPELL_GRAVITY_BOMB_AURA_10 = 63025,
+ SPELL_GRAVITY_BOMB_AURA_25 = 63233,
+
+ SPELL_HEARTBREAK_10 = 65737,
+ SPELL_HEARTBREAK_25 = 64193,
+
+ SPELL_ENRAGE = 26662,
+
+ //------------------VOID ZONE--------------------
+ SPELL_VOID_ZONE_10 = 64203,
+ SPELL_VOID_ZONE_25 = 64235,
+
+ // Life Spark
+ SPELL_STATIC_CHARGED_10 = 64227,
+ SPELL_STATIC_CHARGED_25 = 64236,
+ SPELL_SHOCK = 64230,
+
+ //----------------XT-002 HEART-------------------
+ SPELL_EXPOSED_HEART = 63849,
+
+ //---------------XM-024 PUMMELLER----------------
+ SPELL_ARCING_SMASH = 8374,
+ SPELL_TRAMPLE = 5568,
+ SPELL_UPPERCUT = 10966,
+
+ //------------------BOOMBOT-----------------------
+ SPELL_BOOM = 62834,
+};
+
+enum Timers
+{
+ TIMER_TYMPANIC_TANTRUM_MIN = 32000,
+ TIMER_TYMPANIC_TANTRUM_MAX = 36000,
+ TIMER_SEARING_LIGHT = 20000,
+ TIMER_SPAWN_LIFE_SPARK = 9000,
+ TIMER_GRAVITY_BOMB = 20000,
+ TIMER_HEART_PHASE = 30000,
+ TIMER_ENRAGE = 600000,
+ TIMER_GRAVITY_BOMB_AURA = 8900,
+
+ TIMER_VOID_ZONE = 3000,
+
+ // Life Spark
+ TIMER_SHOCK = 12000,
+
+ // Pummeller
+ // Timers may be off
+ TIMER_ARCING_SMASH = 27000,
+ TIMER_TRAMPLE = 22000,
+ TIMER_UPPERCUT = 17000,
+
+ TIMER_SPAWN_ADD = 12000,
+};
+
+enum Creatures
+{
+ NPC_VOID_ZONE = 34001,
+ NPC_LIFE_SPARK = 34004,
+ NPC_XT002_HEART = 33329,
+ NPC_XS013_SCRAPBOT = 33343,
+ NPC_XM024_PUMMELLER = 33344,
+ NPC_XE321_BOOMBOT = 33346,
+};
+
+enum Actions
+{
+ ACTION_ENTER_HARD_MODE = 0,
+};
+
+enum XT002Data
+{
+ DATA_TRANSFERED_HEALTH = 0,
+};
+
+enum Yells
+{
+ SAY_AGGRO = -1603300,
+ SAY_HEART_OPENED = -1603301,
+ SAY_HEART_CLOSED = -1603302,
+ SAY_TYMPANIC_TANTRUM = -1603303,
+ SAY_SLAY_1 = -1603304,
+ SAY_SLAY_2 = -1603305,
+ SAY_BERSERK = -1603306,
+ SAY_DEATH = -1603307,
+ SAY_SUMMON = -1603308,
+};
+
+//#define GRAVITY_BOMB_DMG_MIN_10 11700
+//#define GRAVITY_BOMB_DMG_MAX_10 12300
+//#define GRAVITY_BOMB_DMG_MIN_25 14625
+//#define GRAVITY_BOMB_DMG_MAX_25 15375
+//#define GRAVITY_BOMB_RADIUS 12
+
+//#define VOID_ZONE_DMG_10 5000
+//#define VOID_ZONE_DMG_25 7500
+//#define VOID_ZONE_RADIUS
-#define SAY_AGGRO -1000000
-#define SAY_SLAY -1000001
+/************************************************
+-----------------SPAWN LOCATIONS-----------------
+************************************************/
+//Shared Z-level
+#define SPAWN_Z 412
+//Lower right
+#define LR_X 796
+#define LR_Y -94
+//Lower left
+#define LL_X 796
+#define LL_Y 57
+//Upper right
+#define UR_X 890
+#define UR_Y -82
+//Upper left
+#define UL_X 894
+#define UL_Y 62
+
+/*-------------------------------------------------------
+ *
+ * XT-002 DECONSTRUCTOR
+ *
+ *///----------------------------------------------------
struct boss_xt002_AI : public BossAI
{
boss_xt002_AI(Creature *pCreature) : BossAI(pCreature, TYPE_XT002)
{
- m_pInstance = pCreature->GetInstanceData();
}
- ScriptedInstance* m_pInstance;
+ uint32 uiSearingLightTimer;
+ uint32 uiSpawnLifeSparkTimer;
+ uint32 uiGravityBombTimer;
+ uint32 uiGravityBombAuraTimer;
+ uint32 uiTympanicTantrumTimer;
+ uint32 uiHeartPhaseTimer;
+ uint32 uiSpawnAddTimer;
+ uint32 uiEnrageTimer;
+
+ bool searing_light_active;
+ uint64 uiSearingLightTarget;
- uint32 SEARING_LIGHT_Timer;
- uint32 SONIC_BOOM_Timer;
+ bool gravity_bomb_active;
+ uint64 uiGravityBombTarget;
+
+ uint8 phase;
+ uint8 heart_exposed;
+ bool enraged;
+
+ uint32 transferHealth;
+ bool enterHardMode;
+ bool hardMode;
void Reset()
{
- SEARING_LIGHT_Timer = 100;
- SONIC_BOOM_Timer = 20;
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE);
+
+ //Makes XT-002 to cast a light bomb 10 seconds after aggro.
+ uiSearingLightTimer = TIMER_SEARING_LIGHT/2;
+ uiSpawnLifeSparkTimer = TIMER_SPAWN_LIFE_SPARK;
+ uiGravityBombTimer = TIMER_GRAVITY_BOMB;
+ uiGravityBombAuraTimer = TIMER_GRAVITY_BOMB_AURA;
+ uiHeartPhaseTimer = TIMER_HEART_PHASE;
+ uiSpawnAddTimer = TIMER_SPAWN_ADD;
+ uiEnrageTimer = TIMER_ENRAGE;
+
+ //Tantrum is casted a bit slower the first time.
+ uiTympanicTantrumTimer = urand(TIMER_TYMPANIC_TANTRUM_MIN, TIMER_TYMPANIC_TANTRUM_MAX) * 2;
+
+ searing_light_active = false;
+ gravity_bomb_active = false;
+ enraged = false;
+ hardMode = false;
+ enterHardMode = false;
+
+ phase = 1;
+ heart_exposed = 0;
}
void EnterCombat(Unit* who)
{
- DoScriptText(SAY_AGGRO,m_creature);
+ DoScriptText(SAY_AGGRO, m_creature);
+ _EnterCombat();
}
+
+ void DoAction(const int32 action)
+ {
+ switch (action)
+ {
+ case ACTION_ENTER_HARD_MODE:
+ if (!hardMode)
+ {
+ hardMode = true;
+
+ // Enter hard mode
+ enterHardMode = true;
+
+ // set max health
+ m_creature->SetHealth(m_creature->GetMaxHealth());
+
+ // Get his heartbreak buff
+ m_creature->CastSpell(m_creature, RAID_MODE(SPELL_HEARTBREAK_10, SPELL_HEARTBREAK_25), true);
+ }
+ break;
+ }
+ }
+
+ void SetData(uint32 id, uint32 value)
+ {
+ switch(id)
+ {
+ case DATA_TRANSFERED_HEALTH:
+ transferHealth = value;
+ break;
+ }
+ }
+
void KilledUnit(Unit* victim)
{
- DoScriptText(SAY_SLAY, m_creature);
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
}
void JustDied(Unit *victim)
{
- DoScriptText(SAY_SLAY, m_creature);
+ DoScriptText(SAY_DEATH, m_creature);
+ _JustDied();
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (enterHardMode)
+ {
+ SetPhaseOne();
+ enterHardMode = false;
+ }
+
+ // Handles spell casting. These spells only occur during phase 1 and hard mode
+ if (phase == 1 || hardMode)
+ {
+ if (uiSearingLightTimer <= diff)
+ {
+ if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
+ {
+ DoCast(pTarget, RAID_MODE(SPELL_SEARING_LIGHT_10, SPELL_SEARING_LIGHT_25));
+ uiSearingLightTarget = pTarget->GetGUID();
+ }
+ uiSpawnLifeSparkTimer = TIMER_SPAWN_LIFE_SPARK;
+ if (hardMode)
+ searing_light_active = true;
+ uiSearingLightTimer = TIMER_SEARING_LIGHT;
+ } else uiSearingLightTimer -= diff;
+
+ if (uiGravityBombTimer <= diff)
+ {
+ if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
+ {
+ DoCast(pTarget, RAID_MODE(SPELL_GRAVITY_BOMB_10,SPELL_GRAVITY_BOMB_25));
+ uiGravityBombTarget = pTarget->GetGUID();
+ }
+ uiGravityBombTimer = TIMER_GRAVITY_BOMB;
+ gravity_bomb_active = true;
+ } else uiGravityBombTimer -= diff;
+
+ if (uiTympanicTantrumTimer <= 0)
+ {
+ DoScriptText(SAY_TYMPANIC_TANTRUM, m_creature);
+ DoCast(SPELL_TYMPANIC_TANTRUM);
+ uiTympanicTantrumTimer = urand(TIMER_TYMPANIC_TANTRUM_MIN, TIMER_TYMPANIC_TANTRUM_MAX);
+ } else uiTympanicTantrumTimer -= diff;
+ }
+
+ if (!hardMode)
+ {
+ if (phase == 1)
+ {
+ if (HealthBelowPct(75) && heart_exposed == 0)
+ {
+ exposeHeart();
+ }
+ else if (HealthBelowPct(50) && heart_exposed == 1)
+ {
+ exposeHeart();
+ }
+ else if (HealthBelowPct(25) && heart_exposed == 2)
+ {
+ exposeHeart();
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ else
+ {
+ //Stop moving
+ m_creature->StopMoving();
+
+ //Start summoning adds
+ if (uiSpawnAddTimer <= diff)
+ {
+ DoScriptText(SAY_SUMMON, m_creature);
+
+ // Spawn Pummeller
+ switch (rand() % 4)
+ {
+ case 0: m_creature->SummonCreature(NPC_XM024_PUMMELLER, LR_X, LR_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 1: m_creature->SummonCreature(NPC_XM024_PUMMELLER, LL_X, LL_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 2: m_creature->SummonCreature(NPC_XM024_PUMMELLER, UR_X, UR_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 3: m_creature->SummonCreature(NPC_XM024_PUMMELLER, UL_X, UL_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ }
+
+ // Spawn 5 Bombs
+ for (int8 n = 0; n < 5; n++)
+ {
+ //Some randomes are added so they wont spawn in a pile
+ switch(rand() % 4)
+ {
+ case 0: m_creature->SummonCreature(NPC_XS013_SCRAPBOT, irand(LR_X - 3, LR_X + 3), irand(LR_Y - 3, LR_Y + 3), SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 1: m_creature->SummonCreature(NPC_XS013_SCRAPBOT, irand(LL_X - 3, LL_X + 3), irand(LL_Y - 3, LL_Y + 3), SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 2: m_creature->SummonCreature(NPC_XS013_SCRAPBOT, irand(UR_X - 3, UR_X + 3), irand(UR_Y - 3, UR_Y + 3), SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 3: m_creature->SummonCreature(NPC_XS013_SCRAPBOT, irand(UL_X - 3, UL_X + 3), irand(UL_Y - 3, UL_Y + 3), SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ }
+ }
+
+ //Spawn 5 Scrapbots
+ switch (rand() % 4)
+ {
+ case 0: m_creature->SummonCreature(NPC_XE321_BOOMBOT, LR_X, LR_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 1: m_creature->SummonCreature(NPC_XE321_BOOMBOT, LL_X, LL_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 2: m_creature->SummonCreature(NPC_XE321_BOOMBOT, UR_X, UR_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ case 3: m_creature->SummonCreature(NPC_XE321_BOOMBOT, UL_X, UL_Y, SPAWN_Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); break;
+ }
+
+ uiSpawnAddTimer = TIMER_SPAWN_ADD;
+ } else uiSpawnAddTimer -= diff;
+
+ // Is the phase over?
+ if (uiHeartPhaseTimer <= diff)
+ {
+ DoScriptText(SAY_HEART_CLOSED, m_creature);
+ SetPhaseOne();
+ }
+ else
+ uiHeartPhaseTimer -= diff;
+ }
+ }
+ else
+ {
+ // Adding life sparks when searing light debuff runs out if hard mode
+ if (searing_light_active)
+ {
+ if (uiSpawnLifeSparkTimer <= diff)
+ {
+ if (Unit *pSearingLightTarget = m_creature->GetUnit(*m_creature, uiSearingLightTarget))
+ pSearingLightTarget->SummonCreature(NPC_LIFE_SPARK, pSearingLightTarget->GetPositionX(), pSearingLightTarget->GetPositionY(), pSearingLightTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
+ uiSpawnLifeSparkTimer = TIMER_SPAWN_LIFE_SPARK;
+ searing_light_active = false;
+ } else uiSpawnLifeSparkTimer -= diff;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ if (gravity_bomb_active)
+ {
+ if (uiGravityBombAuraTimer <= diff)
+ {
+ if (Unit *pGravityBombTarget = m_creature->GetUnit(*m_creature, uiGravityBombTarget))
+ {
+ pGravityBombTarget->RemoveAurasDueToSpell(RAID_MODE(SPELL_GRAVITY_BOMB_10,SPELL_GRAVITY_BOMB_25));
+ if (hardMode)
+ {
+ //Remains spawned for 3 minutes
+ pGravityBombTarget->SummonCreature(NPC_VOID_ZONE, pGravityBombTarget->GetPositionX(), pGravityBombTarget->GetPositionY(), pGravityBombTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 180000);
+ }
+ }
+
+ gravity_bomb_active = false;
+ uiGravityBombAuraTimer = TIMER_GRAVITY_BOMB_AURA;
+ //gravityBomb();
+ } else uiGravityBombAuraTimer -= diff;
+ }
+
+ //Enrage stuff
+ if (!enraged)
+ if (uiEnrageTimer <= diff)
+ {
+ DoScriptText(SAY_BERSERK, m_creature);
+ DoCast(m_creature, SPELL_ENRAGE);
+ enraged = true;
+ } else uiEnrageTimer -= diff;
+ }
+
+ void exposeHeart()
+ {
+ //Make untargetable
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+
+ //Summon the heart npc
+ m_creature->SummonCreature(NPC_XT002_HEART, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ() + 7, 0, TEMPSUMMON_TIMED_DESPAWN, TIMER_HEART_PHASE);
+
+ // Start "end of phase 2 timer"
+ uiHeartPhaseTimer = TIMER_HEART_PHASE;
+
+ //Phase 2 has offically started
+ phase = 2;
+ heart_exposed++;
+
+ //Reset the add spawning timer
+ uiSpawnAddTimer = TIMER_SPAWN_ADD;
+
+ DoScriptText(SAY_HEART_OPENED, m_creature);
+ }
+
+ void SetPhaseOne()
+ {
+ uiSearingLightTimer = TIMER_SEARING_LIGHT / 2;
+ uiGravityBombTimer = TIMER_GRAVITY_BOMB;
+ uiTympanicTantrumTimer = urand(TIMER_TYMPANIC_TANTRUM_MIN, TIMER_TYMPANIC_TANTRUM_MAX);
+ uiSpawnAddTimer = TIMER_SPAWN_ADD;
+
+ if (!hardMode)
+ m_creature->ModifyHealth(-transferHealth);
+
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ phase = 1;
+ }
+
+ // TODO: put in comment and kept for reference. The spell should be fixed properly in spell system, if necessary.
+ ////Have to do this the custom way since the original spell messes up player movement
+ //void gravityBomb()
+ //{
+ // uint32 maxDamage = RAID_MODE(GRAVITY_BOMB_DMG_MAX_10, GRAVITY_BOMB_DMG_MAX_25);
+ // uint32 minDamage = RAID_MODE(GRAVITY_BOMB_DMG_MIN_10, GRAVITY_BOMB_DMG_MIN_25);
+ // uint16 range = GRAVITY_BOMB_RADIUS;
+ // Map* pMap = me->GetMap();
+ // if (pMap && pMap->IsDungeon())
+ // {
+ // Map::PlayerList const &PlayerList = pMap->GetPlayers();
+ // for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ // {
+ // //If a player is within the range of the spell
+ // if (i->getSource() && i->getSource()->GetDistance2d(pGravityBombTarget) <= range)
+ // {
+ // //Deal damage to the victim
+ // int32 damage = urand(minDamage, maxDamage);
+ // i->getSource()->ModifyHealth(-damage);
+ // m_creature->SendSpellNonMeleeDamageLog(i->getSource(), SPELL_GRAVITY_BOMB_AURA_10, damage, SPELL_SCHOOL_MASK_SHADOW, 0, 0, false, 0);
+
+ // //Replacing the tractor beam effect
+ // i->getSource()->JumpTo(pGravityBombTarget, 5);
+ // }
+ // }
+ // }
+ //}
+};
+
+CreatureAI* GetAI_boss_xt002(Creature* pCreature)
+{
+ return new boss_xt002_AI(pCreature);
+}
+
+/*-------------------------------------------------------
+ *
+ * XT-002 HEART
+ *
+ *///----------------------------------------------------
+struct mob_xt002_heartAI : public ScriptedAI
+{
+ mob_xt002_heartAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_STUNNED);
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ DoCast(m_creature, SPELL_EXPOSED_HEART);
+ }
+ ScriptedInstance* m_pInstance;
+
+ void JustDied(Unit *victim)
+ {
if (m_pInstance)
- m_pInstance->SetData(TYPE_XT002, DONE);
+ if (Creature* pXT002 = m_creature->GetCreature(*m_creature, m_pInstance->GetData64(TYPE_XT002)))
+ if (pXT002->AI())
+ pXT002->AI()->DoAction(ACTION_ENTER_HARD_MODE);
+
+ //removes the aura
+ m_creature->RemoveAurasDueToSpell(SPELL_EXPOSED_HEART);
+ }
+
+ void DamageTaken(Unit *pDone, uint32 &damage)
+ {
+ if (Creature* pXT002 = m_creature->GetCreature(*m_creature, m_pInstance->GetData64(TYPE_XT002)))
+ if (pXT002->AI())
+ {
+ uint32 health = m_creature->GetHealth();
+ health -= damage;
+ if (health < 0)
+ health = 0;
+
+ pXT002->AI()->SetData(DATA_TRANSFERED_HEALTH, m_creature->GetMaxHealth() - health);
+ }
}
+};
- void MoveInLineOfSight(Unit* who) {}
+CreatureAI* GetAI_mob_xt002_heart(Creature* pCreature)
+{
+ return new mob_xt002_heartAI(pCreature);
+}
+
+/*-------------------------------------------------------
+ *
+ * XS-013 SCRAPBOT
+ *
+ *///----------------------------------------------------
+struct mob_scrapbotAI : public ScriptedAI
+{
+ mob_scrapbotAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ m_pInstance = m_creature->GetInstanceData();
+ }
+
+ ScriptedInstance* m_pInstance;
+
+ void Reset()
+ {
+ m_creature->SetReactState(REACT_PASSIVE);
+
+ if (Creature* pXT002 = m_creature->GetCreature(*m_creature, m_pInstance->GetData64(TYPE_XT002)))
+ m_creature->GetMotionMaster()->MoveChase(pXT002);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (Creature* pXT002 = m_creature->GetCreature(*m_creature, m_pInstance->GetData64(TYPE_XT002)))
+ {
+ if (m_creature->GetDistance2d(pXT002) <= 0.5)
+ {
+ // TODO Send raid message
+
+ // Increase health with 1 percent
+ pXT002->ModifyHealth(pXT002->GetMaxHealth() * 0.01);
+
+ // Despawns the scrapbot
+ m_creature->ForcedDespawn();
+ }
+ }
+ }
+};
+
+CreatureAI* GetAI_mob_scrapbot(Creature* pCreature)
+{
+ return new mob_scrapbotAI(pCreature);
+}
+
+/*-------------------------------------------------------
+ *
+ * XM-024 PUMMELLER
+ *
+ *///----------------------------------------------------
+struct mob_pummellerAI : public ScriptedAI
+{
+ mob_pummellerAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ }
+
+ ScriptedInstance* m_pInstance;
+ int32 uiArcingSmashTimer;
+ int32 uiTrampleTimer;
+ int32 uiUppercutTimer;
+
+ void Reset()
+ {
+ uiArcingSmashTimer = TIMER_ARCING_SMASH;
+ uiTrampleTimer = TIMER_TRAMPLE;
+ uiUppercutTimer = TIMER_UPPERCUT;
+ }
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
-
- if(m_creature->GetPositionX() < 700) // Not Blizzlike, anti-exploit to prevent players from pulling bosses to vehicles.
+
+ if (m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(false);
- m_creature->GetMotionMaster()->MoveTargetedHome();
+ if (uiArcingSmashTimer <= diff)
+ {
+ DoCast(m_creature->getVictim(), SPELL_ARCING_SMASH);
+ uiArcingSmashTimer = TIMER_ARCING_SMASH;
+ } else uiArcingSmashTimer -= diff;
+
+ if (uiTrampleTimer <= diff)
+ {
+ DoCast(m_creature->getVictim(), SPELL_TRAMPLE);
+ uiTrampleTimer = TIMER_TRAMPLE;
+ } else uiTrampleTimer -= diff;
+
+ if (uiUppercutTimer <= diff)
+ {
+ DoCast(m_creature->getVictim(), SPELL_UPPERCUT);
+ uiUppercutTimer = TIMER_UPPERCUT;
+ } else uiUppercutTimer -= diff;
}
- if (SEARING_LIGHT_Timer <= diff)
+ DoMeleeAttackIfReady();
+ }
+};
+
+CreatureAI* GetAI_mob_pummeller(Creature* pCreature)
+{
+ return new mob_pummellerAI(pCreature);
+}
+
+/*-------------------------------------------------------
+ *
+ * XE-321 BOOMBOT
+ *
+ *///----------------------------------------------------
+struct mob_boombotAI : public ScriptedAI
+{
+ mob_boombotAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ }
+
+ ScriptedInstance* m_pInstance;
+
+ void Reset()
+ {
+ m_creature->SetReactState(REACT_PASSIVE);
+
+ if (Creature* pXT002 = m_creature->GetCreature(*m_creature, m_pInstance->GetData64(TYPE_XT002)))
+ m_creature->GetMotionMaster()->MoveChase(pXT002);
+ }
+
+ void JustDied(Unit *killer)
+ {
+ DoCast(SPELL_BOOM);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (Creature* pXT002 = m_creature->GetCreature(*m_creature, m_pInstance->GetData64(TYPE_XT002)))
{
- DoCast(m_creature, SPELL_SEARING_LIGHT);
- DoScriptText(SAY_SLAY, m_creature);
- SEARING_LIGHT_Timer = 50000;
- } else SEARING_LIGHT_Timer -= diff;
+ if (m_creature->GetDistance2d(pXT002) <= 0.5)
+ {
+ //Explosion
+ DoCast(m_creature, SPELL_BOOM);
+
+ //Despawns the boombot
+ m_creature->ForcedDespawn();
+ }
+ }
+ }
+};
- if (SONIC_BOOM_Timer <= diff)
+CreatureAI* GetAI_mob_boombot(Creature* pCreature)
+{
+ return new mob_boombotAI(pCreature);
+}
+
+/*-------------------------------------------------------
+ *
+ * VOID ZONE
+ *
+ *///----------------------------------------------------
+struct mob_void_zoneAI : public ScriptedAI
+{
+ mob_void_zoneAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
+ }
+
+ ScriptedInstance* m_pInstance;
+ uint32 uiVoidZoneTimer;
+
+ void Reset()
+ {
+ uiVoidZoneTimer = TIMER_VOID_ZONE;
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (uiVoidZoneTimer <= diff)
{
- DoCast(m_creature->getVictim(), SPELL_SONIC_BOOM);
- SONIC_BOOM_Timer = 20000;
- } else SONIC_BOOM_Timer -= diff;
+ //voidZone();
+ uiVoidZoneTimer = TIMER_VOID_ZONE;
+ } else uiVoidZoneTimer -= diff;
+ }
- DoMeleeAttackIfReady();
+ // TODO: put in comment and kept for reference. The spell should be fixed properly in spell system, if necessary.
+ //void voidZone()
+ //{
+ // Map* pMap = me->GetMap();
+ // if (pMap && pMap->IsDungeon())
+ // {
+ // Map::PlayerList const &PlayerList = pMap->GetPlayers();
+ // for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ // {
+ // // If a player is within the range of the spell
+ // if (i->getSource() && i->getSource()->GetDistance2d(m_creature) <= 16)
+ // {
+ // // Deal damage to the victim
+ // int32 damage = RAID_MODE(VOID_ZONE_DMG_10, VOID_ZONE_DMG_25);
+ // m_creature->DealDamage(i->getSource(), damage, NULL, SPELL_DIRECT_DAMAGE, SPELL_SCHOOL_MASK_SHADOW);
+ // }
+ // }
+ // }
+ //}
+};
+
+CreatureAI* GetAI_mob_void_zone(Creature* pCreature)
+{
+ return new mob_void_zoneAI(pCreature);
+}
+
+/*-------------------------------------------------------
+ *
+ * LIFE SPARK
+ *
+ *///----------------------------------------------------
+struct mob_life_sparkAI : public ScriptedAI
+{
+ mob_life_sparkAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ }
+
+ ScriptedInstance* m_pInstance;
+ uint32 uiShockTimer;
+
+ void Reset()
+ {
+ DoCast(m_creature, RAID_MODE(SPELL_STATIC_CHARGED_10, SPELL_STATIC_CHARGED_25));
+ uiShockTimer = 0; // first one is immediate.
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (uiShockTimer <= diff)
+ {
+ if (m_creature->IsWithinMeleeRange(m_creature->getVictim()))
+ {
+ DoCast(m_creature->getVictim(), SPELL_SHOCK);
+ uiShockTimer = TIMER_SHOCK;
+ }
+ }
+ else uiShockTimer -= diff;
}
};
-CreatureAI* GetAI_boss_xt002(Creature* pCreature)
+CreatureAI* GetAI_mob_life_spark(Creature* pCreature)
{
- return new boss_xt002_AI (pCreature);
+ return new mob_life_sparkAI(pCreature);
}
+
void AddSC_boss_xt002()
{
Script *newscript;
@@ -104,4 +806,34 @@ void AddSC_boss_xt002()
newscript->Name = "boss_xt002";
newscript->GetAI = &GetAI_boss_xt002;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_xt002_heart";
+ newscript->GetAI = &GetAI_mob_xt002_heart;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_scrapbot";
+ newscript->GetAI = &GetAI_mob_scrapbot;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_pummeller";
+ newscript->GetAI = &GetAI_mob_pummeller;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_boombot";
+ newscript->GetAI = &GetAI_mob_boombot;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_void_zone";
+ newscript->GetAI = &GetAI_mob_void_zone;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_life_spark";
+ newscript->GetAI = &GetAI_mob_life_spark;
+ newscript->RegisterSelf();
}
diff --git a/src/scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp b/src/scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp
index a9f1be65f2d..e87b6648e8e 100644
--- a/src/scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp
+++ b/src/scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp
@@ -18,3 +18,33 @@
#include "ScriptedPch.h"
#include "ulduar.h"
+
+enum Sara_Yells
+{
+ SAY_SARA_PREFIGHT_1 = -1603310,
+ SAY_SARA_PREFIGHT_2 = -1603311,
+ SAY_SARA_AGGRO_1 = -1603312,
+ SAY_SARA_AGGRO_2 = -1603313,
+ SAY_SARA_AGGRO_3 = -1603314,
+ SAY_SARA_SLAY_1 = -1603315,
+ SAY_SARA_SLAY_2 = -1603316,
+ WHISP_SARA_INSANITY = -1603317,
+ SAY_SARA_PHASE2_1 = -1603318,
+ SAY_SARA_PHASE2_2 = -1603319,
+};
+
+enum YoggSaron_Yells
+{
+ SAY_PHASE2_1 = -1603330,
+ SAY_PHASE2_2 = -1603331,
+ SAY_PHASE2_3 = -1603332,
+ SAY_PHASE2_4 = -1603333,
+ SAY_PHASE2_5 = -1603334,
+ SAY_PHASE3 = -1603335,
+ SAY_VISION = -1603336,
+ SAY_SLAY_1 = -1603337,
+ SAY_SLAY_2 = -1603338,
+ WHISP_INSANITY_1 = -1603339,
+ WHISP_INSANITY_2 = -1603340,
+ SAY_DEATH = -1603341,
+};