mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 01:15:35 +01:00
Naxxramas, Kelthuzad: Fix Chains of Keltuzhad, by Tali (implements ref #21)
Cleanup --HG-- branch : trunk
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user