@@ -23,26 +23,26 @@
|
||||
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_PHASE2 = 1,
|
||||
SAY_PHASE3 = 2,
|
||||
SAY_DEATH = 3,
|
||||
SAY_SLAY = 4,
|
||||
SAY_THROW_SARONITE = 5,
|
||||
SAY_CAST_DEEP_FREEZE = 6,
|
||||
SAY_AGGRO = 0,
|
||||
SAY_PHASE2 = 1,
|
||||
SAY_PHASE3 = 2,
|
||||
SAY_DEATH = 3,
|
||||
SAY_SLAY = 4,
|
||||
SAY_THROW_SARONITE = 5,
|
||||
SAY_CAST_DEEP_FREEZE = 6,
|
||||
|
||||
SAY_TYRANNUS_DEATH = 0
|
||||
SAY_TYRANNUS_DEATH = 0
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_PERMAFROST = 70326,
|
||||
SPELL_THROW_SARONITE = 68788,
|
||||
SPELL_THUNDERING_STOMP = 68771,
|
||||
SPELL_CHILLING_WAVE = 68778,
|
||||
SPELL_DEEP_FREEZE = 70381,
|
||||
SPELL_FORGE_MACE = 68785,
|
||||
SPELL_FORGE_BLADE = 68774,
|
||||
SPELL_PERMAFROST = 70326,
|
||||
SPELL_THROW_SARONITE = 68788,
|
||||
SPELL_THUNDERING_STOMP = 68771,
|
||||
SPELL_CHILLING_WAVE = 68778,
|
||||
SPELL_DEEP_FREEZE = 70381,
|
||||
SPELL_FORGE_MACE = 68785,
|
||||
SPELL_FORGE_BLADE = 68774
|
||||
};
|
||||
|
||||
#define SPELL_PERMAFROST_HELPER RAID_MODE<uint32>(68786, 70336)
|
||||
@@ -50,9 +50,9 @@ enum Spells
|
||||
|
||||
enum Phases
|
||||
{
|
||||
PHASE_ONE = 1,
|
||||
PHASE_TWO = 2,
|
||||
PHASE_THREE = 3
|
||||
PHASE_ONE = 1,
|
||||
PHASE_TWO = 2,
|
||||
PHASE_THREE = 3
|
||||
};
|
||||
|
||||
enum MiscData
|
||||
@@ -60,58 +60,46 @@ enum MiscData
|
||||
EQUIP_ID_SWORD = 49345,
|
||||
EQUIP_ID_MACE = 49344,
|
||||
ACHIEV_DOESNT_GO_TO_ELEVEN = 0,
|
||||
POINT_FORGE = 0,
|
||||
POINT_FORGE = 0
|
||||
};
|
||||
|
||||
Position const northForgePos = {722.5643f, -234.1615f, 527.182f, 2.16421f};
|
||||
Position const southForgePos = {639.257f, -210.1198f, 529.015f, 0.523599f};
|
||||
enum Events
|
||||
{
|
||||
EVENT_THROW_SARONITE = 1,
|
||||
EVENT_CHILLING_WAVE = 2,
|
||||
EVENT_DEEP_FREEZE = 3,
|
||||
EVENT_FORGE_JUMP = 4,
|
||||
EVENT_FORGING = 5,
|
||||
EVENT_RESUME_ATTACK = 6
|
||||
};
|
||||
|
||||
Position const northForgePos = { 722.5643f, -234.1615f, 527.182f, 2.16421f };
|
||||
Position const southForgePos = { 639.257f, -210.1198f, 529.015f, 0.523599f };
|
||||
|
||||
class boss_garfrost : public CreatureScript
|
||||
{
|
||||
enum Events
|
||||
{
|
||||
EVENT_THROW_SARONITE = 1,
|
||||
EVENT_CHILLING_WAVE = 2,
|
||||
EVENT_DEEP_FREEZE = 3,
|
||||
EVENT_JUMP = 4,
|
||||
EVENT_FORGING = 5,
|
||||
EVENT_RESUME_ATTACK = 6,
|
||||
};
|
||||
public:
|
||||
boss_garfrost() : CreatureScript("boss_garfrost") { }
|
||||
|
||||
struct boss_garfrostAI : public BossAI
|
||||
{
|
||||
boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST)
|
||||
{
|
||||
}
|
||||
|
||||
void InitializeAI() OVERRIDE
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(PoSScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST) { }
|
||||
|
||||
void Reset() OVERRIDE
|
||||
{
|
||||
events.Reset();
|
||||
_Reset();
|
||||
events.SetPhase(PHASE_ONE);
|
||||
SetEquipmentSlots(true);
|
||||
_permafrostStack = 0;
|
||||
|
||||
instance->SetBossState(DATA_GARFROST, NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) OVERRIDE
|
||||
{
|
||||
_EnterCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
DoCast(me, SPELL_PERMAFROST);
|
||||
me->CallForHelp(70.0f);
|
||||
events.ScheduleEvent(EVENT_THROW_SARONITE, 7000);
|
||||
|
||||
instance->SetBossState(DATA_GARFROST, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim) OVERRIDE
|
||||
@@ -122,12 +110,11 @@ enum Events
|
||||
|
||||
void JustDied(Unit* /*killer*/) OVERRIDE
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (Creature* tyrannus = me->GetCreature(*me, instance->GetData64(DATA_TYRANNUS)))
|
||||
tyrannus->AI()->Talk(SAY_TYRANNUS_DEATH);
|
||||
|
||||
instance->SetBossState(DATA_GARFROST, DONE);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& /*uiDamage*/) OVERRIDE
|
||||
@@ -138,7 +125,7 @@ enum Events
|
||||
Talk(SAY_PHASE2);
|
||||
events.DelayEvents(8000);
|
||||
DoCast(me, SPELL_THUNDERING_STOMP);
|
||||
events.ScheduleEvent(EVENT_JUMP, 1500);
|
||||
events.ScheduleEvent(EVENT_FORGE_JUMP, 1500);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -148,7 +135,7 @@ enum Events
|
||||
Talk(SAY_PHASE3);
|
||||
events.DelayEvents(8000);
|
||||
DoCast(me, SPELL_THUNDERING_STOMP);
|
||||
events.ScheduleEvent(EVENT_JUMP, 1500);
|
||||
events.ScheduleEvent(EVENT_FORGE_JUMP, 1500);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -220,15 +207,15 @@ enum Events
|
||||
}
|
||||
events.ScheduleEvent(EVENT_DEEP_FREEZE, 35000, 0, PHASE_THREE);
|
||||
break;
|
||||
case EVENT_JUMP:
|
||||
case EVENT_FORGE_JUMP:
|
||||
me->AttackStop();
|
||||
if (events.IsInPhase(PHASE_TWO))
|
||||
me->GetMotionMaster()->MoveJump(northForgePos.GetPositionX(), northForgePos.GetPositionY(), northForgePos.GetPositionZ(), 25.0f, 15.0f);
|
||||
me->GetMotionMaster()->MoveJump(northForgePos, 25.0f, 15.0f);
|
||||
else if (events.IsInPhase(PHASE_THREE))
|
||||
me->GetMotionMaster()->MoveJump(southForgePos.GetPositionX(), southForgePos.GetPositionY(), southForgePos.GetPositionZ(), 25.0f, 15.0f);
|
||||
me->GetMotionMaster()->MoveJump(southForgePos, 25.0f, 15.0f);
|
||||
break;
|
||||
case EVENT_RESUME_ATTACK:
|
||||
if (events.IsInPhase(PHASE_THREE))
|
||||
if (events.IsInPhase(PHASE_TWO))
|
||||
events.ScheduleEvent(EVENT_CHILLING_WAVE, 5000, 0, PHASE_TWO);
|
||||
else if (events.IsInPhase(PHASE_THREE))
|
||||
events.ScheduleEvent(EVENT_DEEP_FREEZE, 10000, 0, PHASE_THREE);
|
||||
@@ -248,7 +235,7 @@ enum Events
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_garfrostAI(creature);
|
||||
return GetPitOfSaronAI<boss_garfrostAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ enum Spells
|
||||
SPELL_STRANGULATING = 69413, //krick's selfcast in intro
|
||||
SPELL_SUICIDE = 7,
|
||||
SPELL_KRICK_KILL_CREDIT = 71308,
|
||||
SPELL_NECROMANTIC_POWER = 69753,
|
||||
SPELL_NECROMANTIC_POWER = 69753
|
||||
};
|
||||
|
||||
enum Yells
|
||||
@@ -71,7 +71,7 @@ enum Yells
|
||||
SAY_SYLVANAS_OUTRO_4 = 1,
|
||||
SAY_SYLVANAS_OUTRO_10 = 2,
|
||||
SAY_TYRANNUS_OUTRO_7 = 1,
|
||||
SAY_TYRANNUS_OUTRO_9 = 2,
|
||||
SAY_TYRANNUS_OUTRO_9 = 2
|
||||
};
|
||||
|
||||
enum Events
|
||||
@@ -98,24 +98,24 @@ enum Events
|
||||
EVENT_OUTRO_11 = 18,
|
||||
EVENT_OUTRO_12 = 19,
|
||||
EVENT_OUTRO_13 = 20,
|
||||
EVENT_OUTRO_END = 21,
|
||||
EVENT_OUTRO_END = 21
|
||||
};
|
||||
|
||||
enum KrickPhase
|
||||
{
|
||||
PHASE_COMBAT = 1,
|
||||
PHASE_OUTRO = 2,
|
||||
PHASE_OUTRO = 2
|
||||
};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
ACTION_OUTRO = 1,
|
||||
ACTION_OUTRO = 1
|
||||
};
|
||||
|
||||
enum Points
|
||||
{
|
||||
POINT_KRICK_INTRO = 364770,
|
||||
POINT_KRICK_DEATH = 364771,
|
||||
POINT_KRICK_DEATH = 364771
|
||||
};
|
||||
|
||||
static const Position outroPos[8] =
|
||||
@@ -127,7 +127,7 @@ static const Position outroPos[8] =
|
||||
{835.5887f, 139.4345f, 530.9526f, 0.0000000f}, // Tyrannus fly down Position (not sniffed)
|
||||
{828.9342f, 118.6247f, 514.5190f, 0.0000000f}, // Krick's Choke Position
|
||||
{828.9342f, 118.6247f, 509.4958f, 0.0000000f}, // Kirck's Death Position
|
||||
{914.4820f, 143.1602f, 633.3624f, 0.0000000f}, // Tyrannus fly up (not sniffed)
|
||||
{914.4820f, 143.1602f, 633.3624f, 0.0000000f} // Tyrannus fly up (not sniffed)
|
||||
};
|
||||
|
||||
class boss_ick : public CreatureScript
|
||||
@@ -142,14 +142,6 @@ class boss_ick : public CreatureScript
|
||||
ASSERT(_vehicle);
|
||||
}
|
||||
|
||||
void InitializeAI() OVERRIDE
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(PoSScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset() OVERRIDE
|
||||
{
|
||||
events.Reset();
|
||||
@@ -163,6 +155,8 @@ class boss_ick : public CreatureScript
|
||||
|
||||
void EnterCombat(Unit* /*who*/) OVERRIDE
|
||||
{
|
||||
_EnterCombat();
|
||||
|
||||
if (Creature* krick = GetKrick())
|
||||
krick->AI()->Talk(SAY_KRICK_AGGRO);
|
||||
|
||||
@@ -170,8 +164,6 @@ class boss_ick : public CreatureScript
|
||||
events.ScheduleEvent(EVENT_TOXIC_WASTE, 5000);
|
||||
events.ScheduleEvent(EVENT_SHADOW_BOLT, 10000);
|
||||
events.ScheduleEvent(EVENT_SPECIAL, urand(30000, 35000));
|
||||
|
||||
instance->SetBossState(DATA_ICK, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void EnterEvadeMode() OVERRIDE
|
||||
@@ -281,7 +273,7 @@ class boss_ick : public CreatureScript
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_ickAI(creature);
|
||||
return GetPitOfSaronAI<boss_ickAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -296,14 +288,6 @@ class boss_krick : public CreatureScript
|
||||
{
|
||||
}
|
||||
|
||||
void InitializeAI() OVERRIDE
|
||||
{
|
||||
if (!_instanceScript || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(PoSScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset() OVERRIDE
|
||||
{
|
||||
_events.Reset();
|
||||
@@ -509,7 +493,7 @@ class boss_krick : public CreatureScript
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_krickAI(creature);
|
||||
return GetPitOfSaronAI<boss_krickAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ class instance_pit_of_saron : public InstanceMapScript
|
||||
{
|
||||
instance_pit_of_saron_InstanceScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
SetBossNumber(MAX_ENCOUNTER);
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadDoorData(Doors);
|
||||
_garfrostGUID = 0;
|
||||
_krickGUID = 0;
|
||||
@@ -292,7 +292,7 @@ class instance_pit_of_saron : public InstanceMapScript
|
||||
|
||||
if (dataHead1 == 'P' && dataHead2 == 'S')
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
for (uint8 i = 0; i < EncounterCount; ++i)
|
||||
{
|
||||
uint32 tmpState;
|
||||
loadStream >> tmpState;
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
#include "Creature.h"
|
||||
|
||||
#define PoSScriptName "instance_pit_of_saron"
|
||||
#define MAX_ENCOUNTER 3
|
||||
|
||||
uint32 const EncounterCount = 3;
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
@@ -37,7 +38,7 @@ enum DataTypes
|
||||
DATA_JAINA_SYLVANAS_1 = 5, // GUID of either Jaina or Sylvanas part 1, depending on team, as it's the same spawn.
|
||||
DATA_JAINA_SYLVANAS_2 = 6, // GUID of either Jaina or Sylvanas part 2, depending on team, as it's the same spawn.
|
||||
DATA_TYRANNUS_EVENT = 7,
|
||||
DATA_TEAM_IN_INSTANCE = 8,
|
||||
DATA_TEAM_IN_INSTANCE = 8
|
||||
};
|
||||
|
||||
enum CreatureIds
|
||||
@@ -94,17 +95,13 @@ enum GameObjectIds
|
||||
{
|
||||
GO_SARONITE_ROCK = 196485,
|
||||
GO_ICE_WALL = 201885,
|
||||
GO_HALLS_OF_REFLECTION_PORTCULLIS = 201848,
|
||||
GO_HALLS_OF_REFLECTION_PORTCULLIS = 201848
|
||||
};
|
||||
|
||||
template<class AI>
|
||||
AI* GetPitOfSaronAI(Creature* creature)
|
||||
{
|
||||
if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
|
||||
if (instance->GetInstanceScript())
|
||||
if (instance->GetScriptId() == sObjectMgr->GetScriptId(PoSScriptName))
|
||||
return new AI(creature);
|
||||
return NULL;
|
||||
return GetInstanceAI<AI>(creature, PoSScriptName);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user