diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bindings/scripts/scripts/northrend/naxxramas/boss_kelthuzad.cpp | 141 |
1 files changed, 76 insertions, 65 deletions
diff --git a/src/bindings/scripts/scripts/northrend/naxxramas/boss_kelthuzad.cpp b/src/bindings/scripts/scripts/northrend/naxxramas/boss_kelthuzad.cpp index c7a9dd4bc23..f95aa9e6e96 100644 --- a/src/bindings/scripts/scripts/northrend/naxxramas/boss_kelthuzad.cpp +++ b/src/bindings/scripts/scripts/northrend/naxxramas/boss_kelthuzad.cpp @@ -24,37 +24,39 @@ EndScriptData */ #include "precompiled.h" #include "naxxramas.h" -//when shappiron dies. dialog between kel and lich king (in this order) -#define SAY_SAPP_DIALOG1 -1533084 //not used -#define SAY_SAPP_DIALOG2_LICH -1533085 //not used -#define SAY_SAPP_DIALOG3 -1533086 //not used -#define SAY_SAPP_DIALOG4_LICH -1533087 //not used -#define SAY_SAPP_DIALOG5 -1533088 //not used - -//when cat dies -#define SAY_CAT_DIED -1533089 //not used - -//when each of the 4 wing bosses dies -#define SAY_TAUNT1 -1533090 //not used -#define SAY_TAUNT2 -1533091 //not used -#define SAY_TAUNT3 -1533092 //not used -#define SAY_TAUNT4 -1533093 //not used - -#define SAY_SUMMON_MINIONS -1533105 //start of phase 1 not used - -#define SAY_AGGRO RAND(-1533094,-1533095,-1533096) //start of phase 2 -#define SAY_SLAY RAND(-1533097,-1533098) -#define SAY_DEATH -1533099 -#define SAY_CHAIN RAND(-1533100,-1533101) -#define SAY_FROST_BLAST -1533102 -#define SAY_SPECIAL RAND(-1533106,-1533107,-1533108) - -#define SAY_REQUEST_AID -1533103 //start of phase 3 -#define SAY_ANSWER_REQUEST -1533104 //lich king answer - +enum Yells +{ + //when shappiron dies. dialog between kel and lich king (in this order) + SAY_SAPP_DIALOG1 = -1533084, //not used + SAY_SAPP_DIALOG2_LICH = -1533085, //not used + SAY_SAPP_DIALOG3 = -1533086, //not used + SAY_SAPP_DIALOG4_LICH = -1533087, //not used + SAY_SAPP_DIALOG5 = -1533088, //not used + SAY_CAT_DIED = -1533089, //when cat dies, not used + //when each of the 4 wing bosses dies + SAY_TAUNT1 = -1533090, //not used + SAY_TAUNT2 = -1533091, //not used + SAY_TAUNT3 = -1533092, //not used + SAY_TAUNT4 = -1533093, //not used + SAY_SUMMON_MINIONS = -1533105, //start of phase 1 not used + SAY_AGGRO_1 = -1533094, //start of phase 2 + SAY_AGGRO_2 = -1533095, + SAY_AGGRO_3 = -1533096, + SAY_SLAY_1 = -1533097, + SAY_SLAY_2 = -1533098, + SAY_DEATH = -1533099, + SAY_CHAIN_1 = -1533100, + SAY_CHAIN_2 = -1533101, + SAY_FROST_BLAST = -1533102, + SAY_SPECIAL_1 = -1533106, + SAY_SPECIAL_2 = -1533107, + SAY_SPECIAL_3 = -1533108, + SAY_REQUEST_AID = -1533103, //start of phase 3 + SAY_ANSWER_REQUEST = -1533104 //lich king answer +}; enum Event { - EVENT_BOLT = 1, + EVENT_BOLT, EVENT_NOVA, EVENT_CHAIN, EVENT_DETONATE, @@ -69,34 +71,42 @@ enum Event EVENT_PHASE, }; -#define SPELL_FROST_BOLT HEROIC(28478,55802) -#define SPELL_FROST_BOLT_AOE HEROIC(28479,55807) -#define SPELL_SHADOW_FISURE 27810 -#define SPELL_VOID_BLAST 27812 -#define SPELL_MANA_DETONATION 27819 -#define SPELL_FROST_BLAST 27808 -#define SPELL_CHAINS_OF_KELTHUZAD 28410 //28408 script effect -#define SPELL_BERSERK 28498 +enum Spells +{ + SPELL_FROST_BOLT = 28478, + H_SPELL_FROST_BOLT = 55802, + SPELL_FROST_BOLT_AOE = 28479, + H_SPELL_FROST_BOLT_AOE = 55807, + SPELL_SHADOW_FISURE = 27810, + SPELL_VOID_BLAST = 27812, + SPELL_MANA_DETONATION = 27819, + SPELL_FROST_BLAST = 27808, + SPELL_CHAINS_OF_KELTHUZAD = 28410, //28408 script effect + SPELL_BERSERK = 28498 +}; -#define MOB_WASTE 16427 // Soldiers of the Frozen Wastes -#define MOB_ABOMINATION 16428 // Unstoppable Abominations -#define MOB_WEAVER 16429 // Soul Weavers -#define MOB_ICECROWN 16441 // Guardians of Icecrown +enum Creatures +{ + NPC_WASTE = 16427, // Soldiers of the Frozen Wastes + NPC_ABOMINATION = 16428, // Unstoppable Abominations + NPC_WEAVER = 16429, // Soul Weavers + NPC_ICECROWN = 16441 // Guardians of Icecrown +}; const Position Pos[12] = { - {3783.272705, -5062.697266, 143.711203,3.617599},//LEFT_FAR - {3730.291260, -5027.239258,143.956909,4.461900},//LEFT_MIDDLE - {3683.868652,-5057.281250,143.183884,5.237086},//LEFT_NEAR - {3759.355225,-5174.128418,143.802383,2.170104},//RIGHT_FAR - {3700.724365,-5185.123047,143.928024,1.309310},//RIGHT_MIDDLE - {3665.121094,-5138.679199,143.183212,0.604023},//RIGHT_NEAR - {3754.431396,-5080.727734,142.036316,3.736189},//LEFT_FAR - {3724.396484, -5061.330566,142.032700, 4.564785},//LEFT_MIDDLE - {3687.158424,-5076.834473,142.017319,5.237086},//LEFT_NEAR - {3687.571777,-5126.831055,142.017807,0.604023},//RIGHT_FAR - {3707.990733,-5151.450195,142.032562,1.376855},//RIGHT_MIDDLE - {3739.500000,-5141.883989,142.0141130, 2.121412}//RIGHT_NEAR + {3783.272705, -5062.697266, 143.711203, 3.617599}, //LEFT_FAR + {3730.291260, -5027.239258, 143.956909, 4.461900}, //LEFT_MIDDLE + {3683.868652, -5057.281250, 143.183884, 5.237086}, //LEFT_NEAR + {3759.355225, -5174.128418, 143.802383, 2.170104}, //RIGHT_FAR + {3700.724365, -5185.123047, 143.928024, 1.309310}, //RIGHT_MIDDLE + {3665.121094, -5138.679199, 143.183212, 0.604023}, //RIGHT_NEAR + {3754.431396, -5080.727734, 142.036316, 3.736189}, //LEFT_FAR + {3724.396484, -5061.330566, 142.032700, 4.564785}, //LEFT_MIDDLE + {3687.158424, -5076.834473, 142.017319, 5.237086}, //LEFT_NEAR + {3687.571777, -5126.831055, 142.017807, 0.604023}, //RIGHT_FAR + {3707.990733, -5151.450195, 142.032562, 1.376855}, //RIGHT_MIDDLE + {3739.500000, -5141.883989, 142.014113, 2.121412} //RIGHT_NEAR }; struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI @@ -121,7 +131,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI void KilledUnit() { - DoScriptText(SAY_SLAY, m_creature); + DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature); } void JustDied(Unit* Killer) @@ -133,7 +143,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI void EnterCombat(Unit* who) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me); Phase=1; me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_PASSIVE); @@ -157,15 +167,15 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI switch(eventId) { case EVENT_WASTE: - DoSummon(MOB_WASTE, Pos[RAND(0,3,6,9)]); + DoSummon(NPC_WASTE, Pos[RAND(0,3,6,9)]); events.RepeatEvent(5000); break; case EVENT_ABOMIN: - DoSummon(MOB_ABOMINATION, Pos[RAND(1,4,7,10)]); + DoSummon(NPC_ABOMINATION, Pos[RAND(1,4,7,10)]); events.RepeatEvent(25000); break; case EVENT_WEAVER: - DoSummon(MOB_WEAVER, Pos[RAND(0,3,6,9)]); + DoSummon(NPC_WEAVER, Pos[RAND(0,3,6,9)]); events.RepeatEvent(20000); break; case EVENT_PHASE: @@ -177,7 +187,8 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI events.ScheduleEvent(EVENT_DETONATE, 20000); events.ScheduleEvent(EVENT_FISSURE, 25000); events.ScheduleEvent(EVENT_BLAST, urand(30000,60000)); - events.ScheduleEvent(EVENT_CHAIN, urand(30000,60000)); + if (HeroicMode) + events.ScheduleEvent(EVENT_CHAIN, urand(30000,60000)); Phase = 2; return; default: @@ -204,7 +215,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI { if (GuardiansOfIcecrown_Timer <= diff) { - DoSummon(MOB_ICECROWN, Pos[RAND(2,5,8)]); + DoSummon(NPC_ICECROWN, Pos[RAND(2,5,8)]); ++GuardiansOfIcecrown_Count; GuardiansOfIcecrown_Timer = 5000; } @@ -219,17 +230,17 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI switch(eventId) { case EVENT_BOLT: - DoCast(m_creature->getVictim(),SPELL_FROST_BOLT); + DoCastVictim(HEROIC(SPELL_FROST_BOLT,H_SPELL_FROST_BOLT)); events.RepeatEvent(urand(1000,10000)); return; case EVENT_NOVA: - DoCastAOE(SPELL_FROST_BOLT_AOE); + DoCastAOE(HEROIC(SPELL_FROST_BOLT_AOE,H_SPELL_FROST_BOLT_AOE)); events.RepeatEvent(urand(10000,20000)); return; case EVENT_CHAIN: - if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true)) + if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true)) DoCast(pTarget, SPELL_CHAINS_OF_KELTHUZAD); - DoScriptText(SAY_CHAIN, me); + DoScriptText(RAND(SAY_CHAIN_1,SAY_CHAIN_2), me); events.RepeatEvent(urand(30000,60000)); return; case EVENT_DETONATE: @@ -249,7 +260,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI std::vector<Unit*>::iterator itr = unitList.begin(); advance(itr, rand()%unitList.size()); DoCast(*itr, SPELL_MANA_DETONATION); - DoScriptText(SAY_SPECIAL, me); + DoScriptText(RAND(SAY_SPECIAL_1,SAY_SPECIAL_2,SAY_SPECIAL_3), me); } events.RepeatEvent(20000); |