Scripts/PitOfSaron: some changes

Closes #10740
This commit is contained in:
MitchesD
2013-09-11 15:52:59 +02:00
committed by joschiwald
parent 97db57703f
commit 3420c70a47
4 changed files with 60 additions and 92 deletions
@@ -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