aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_06_30_00_world_waypoints.sql42
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp49
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp146
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp304
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp7
5 files changed, 415 insertions, 133 deletions
diff --git a/sql/updates/world/2013_06_30_00_world_waypoints.sql b/sql/updates/world/2013_06_30_00_world_waypoints.sql
new file mode 100644
index 00000000000..f2a4c58fcf8
--- /dev/null
+++ b/sql/updates/world/2013_06_30_00_world_waypoints.sql
@@ -0,0 +1,42 @@
+-- Pathing for Lord Victor Nefarius Entry: 10162
+SET @PATH := 1379670;
+DELETE FROM `waypoint_data` WHERE `id` IN (@PATH,@PATH+1,@PATH+2);
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,168.7847,-444.8676,121.9753,0,0,0,0,100,0),
+(@PATH,2,159.7806,-444.8137,121.9753,0,0,0,0,100,0),
+(@PATH+1,1,163.1683,-444.165,121.9753,0,0,0,0,100,0),
+(@PATH+1,2,163.2364,-443.4956,121.9753,0,0,0,0,100,0),
+(@PATH+1,3,163.3028,-442.0108,122.2531,1.570796,0,0,0,100,0),
+(@PATH+2,1,165.5801,-457.3273,121.9753,0,0,1,0,100,0),
+(@PATH+2,2,165.5504,-465.8904,116.8073,0,0,1,0,100,0),
+(@PATH+2,3,165.3594,-470.635,116.8296,0,0,1,0,100,0),
+(@PATH+2,4,168.4351,-473.7489,116.8424,0,0,1,0,100,0),
+(@PATH+2,5,179.0059,-473.894,116.8424,0,0,1,0,100,0);
+
+-- Pathing for Warchief Rend Blackhand Entry: 10429
+SET @PATH := 1379680;
+DELETE FROM `waypoint_data` WHERE `id` IN (@PATH);
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,165.4778,-452.2761,121.9753,0,0,0,0,100,0),
+(@PATH,2,165.5801,-457.3273,121.9753,0,0,0,0,100,0),
+(@PATH,3,165.5504,-465.8904,116.8073,0,0,0,0,100,0),
+(@PATH,4,165.3594,-470.635,116.8296,0,0,0,0,100,0),
+(@PATH,5,168.4351,-473.7489,116.8424,0,0,0,0,100,0),
+(@PATH,6,179.0059,-473.894,116.8424,0,52000,0,0,100,0),
+(@PATH,7,216.6058,-430.4544,110.9169,0,0,0,0,100,0),
+(@PATH,8,216.5664,-412.0932,110.9822,0,0,0,0,100,0),
+(@PATH,9,217.1734,-401.2561,111.0617,0,0,0,0,100,0),
+(@PATH,10,216.5286,-397.7477,111.0883,0,0,0,0,100,0),
+(@PATH,11,214.8428,-395.8612,111.1051,0,0,0,0,100,0),
+(@PATH,12,213.5363,-395.6153,111.1093,0,0,0,0,100,0);
+
+-- Pathing for Gyth Entry: 10339
+SET @PATH := 1379681;
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,211.4939,-399.5368,111.0848,0,0,1,0,100,0),
+(@PATH,2,209.2005,-409.7201,110.9367,0,0,1,0,100,0),
+(@PATH,3,201.0632,-420.6352,110.9231,0,0,1,0,100,0),
+(@PATH,4,178.1997,-420.3415,110.4723,0,0,1,0,100,0),
+(@PATH,5,154.2494,-420.948,110.4723,0,0,1,0,100,0),
+(@PATH,6,127.872,-420.4601,110.4723,0,0,1,0,100,0);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
index 75e9ad6a140..3c79a08487c 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
@@ -29,6 +29,13 @@ enum Spells
SPELL_SUMMON_REND = 16328 // Summons Rend near death
};
+enum Misc
+{
+ NEFARIUS_PATH_2 = 1379671,
+ NEFARIUS_PATH_3 = 1379672,
+ GYTH_PATH_1 = 1379681,
+};
+
enum Events
{
EVENT_CORROSIVE_ACID = 1,
@@ -67,7 +74,7 @@ public:
events.ScheduleEvent(EVENT_CORROSIVE_ACID, urand(8000, 16000));
events.ScheduleEvent(EVENT_FREEZE, urand(8000, 16000));
events.ScheduleEvent(EVENT_FLAME_BREATH, urand(8000, 16000));
- events.ScheduleEvent(EVENT_FLAME_BREATH, urand(12000, 18000));
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(12000, 18000));
}
void JustDied(Unit* /*killer*/)
@@ -75,33 +82,55 @@ public:
_JustDied();
}
- void IsSummonedBy(Unit* /*summoner*/)
+ void SetData(uint32 /*type*/, uint32 data)
{
- events.ScheduleEvent(EVENT_SUMMONED, 8000);
+ switch (data)
+ {
+ case 1:
+ events.ScheduleEvent(EVENT_SUMMONED, 1000);
+ break;
+ default:
+ break;
+ }
}
void UpdateAI(uint32 diff)
{
- if (!UpdateVictim())
- return;
if (!SummonedRend && HealthBelowPct(5))
{
- DoCast(me, SPELL_SUMMON_REND);
+ DoCast(me, SPELL_SUMMON_REND); // Rend will despawn on Gyth death. Core issue with summoned npc's all despawning after summoner dies.
me->RemoveAura(SPELL_REND_MOUNTS);
SummonedRend = true;
}
+ if (!UpdateVictim())
+ {
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SUMMONED:
+ me->AddAura(SPELL_REND_MOUNTS, me);
+ me->GetMotionMaster()->MovePath(GYTH_PATH_1, false);
+ if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 25.0f))
+ portcullis->UseDoorOrButton();
+ if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true))
+ victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_2, false);
+ break;
+ }
+ }
+ return;
+ }
+
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
- case EVENT_SUMMONED:
- DoCast(me, SPELL_REND_MOUNTS);
- // Load Path
- break;
case EVENT_CORROSIVE_ACID:
DoCast(me, SPELL_CORROSIVE_ACID);
events.ScheduleEvent(EVENT_CORROSIVE_ACID, urand(10000, 16000));
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
index 24a1fbad457..fdf3f0066ba 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
@@ -85,12 +85,10 @@ public:
events.Reset();
// Apply auras on spawn and reset
// DoCast(me, SPELL_FIRE_SHIELD_TRIGGER); // Need to find this in old DBC if possible
-
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED);
me->RemoveAura(SPELL_EMBERSEER_FULL_STRENGTH);
me->RemoveAura(SPELL_EMBERSEER_GROWING);
me->RemoveAura(SPELL_EMBERSEER_GROWING_TRIGGER);
- events.ScheduleEvent(EVENT_RESPAWN, 1000);
+ events.ScheduleEvent(EVENT_RESPAWN, 5000);
// Hack for missing trigger spell
events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000);
@@ -209,52 +207,56 @@ public:
void UpdateAI(uint32 diff)
{
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
+ if (!UpdateVictim())
{
- switch (eventId)
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- case EVENT_RESPAWN:
+ switch (eventId)
{
- // Respawn all Blackhand Incarcerators
- std::list<Creature*> creatureList;
- GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
- for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
- if (Creature* creatureList = *itr)
- {
- if (!creatureList->IsAlive())
+ case EVENT_RESPAWN:
+ {
+ // Respawn all Blackhand Incarcerators
+ std::list<Creature*> creatureList;
+ GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
+ for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
+ if (Creature* creatureList = *itr)
{
- creatureList->Respawn();
+ if (!creatureList->IsAlive())
+ {
+ creatureList->Respawn();
+ }
+ creatureList->AI()->SetData(1, 2);
}
- creatureList->AI()->SetData(1, 2);
- }
- break;
- }
- case EVENT_PRE_FIGHT_1:
- {
- // Set data on all Blackhand Incarcerators
- std::list<Creature*> creatureList;
- GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
- for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
+ me->AddAura(SPELL_ENCAGED_EMBERSEER, me);
+ instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED);
+ break;
+ }
+ case EVENT_PRE_FIGHT_1:
{
- if (Creature* creatureList = *itr)
- creatureList->AI()->SetData(1, 1);
+ // Set data on all Blackhand Incarcerators
+ std::list<Creature*> creatureList;
+ GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
+ for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
+ {
+ if (Creature* creatureList = *itr)
+ creatureList->AI()->SetData(1, 1);
+ }
+ events.ScheduleEvent(EVENT_PRE_FIGHT_2, 32000);
+ break;
}
- events.ScheduleEvent(EVENT_PRE_FIGHT_2, 32000);
- break;
- }
- case EVENT_PRE_FIGHT_2:
- me->CastSpell(me, SPELL_FREEZE_ANIM);
- me->CastSpell(me, SPELL_EMBERSEER_GROWING);
- Talk(EMOTE_ONE_STACK);
- break;
- case EVENT_FIRE_SHIELD:
- // #### Spell isn't doing any damage ??? ####
- DoCast(me, SPELL_FIRE_SHIELD);
- events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000);
- break;
- case EVENT_PLAYER_CHECK:
+ case EVENT_PRE_FIGHT_2:
+ me->CastSpell(me, SPELL_FREEZE_ANIM);
+ me->CastSpell(me, SPELL_EMBERSEER_GROWING);
+ Talk(EMOTE_ONE_STACK);
+ break;
+ case EVENT_FIRE_SHIELD:
+ // #### Spell isn't doing any damage ??? ####
+ DoCast(me, SPELL_FIRE_SHIELD);
+ events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000);
+ break;
+ case EVENT_PLAYER_CHECK:
{
// Check to see if all players in instance have aura SPELL_EMBERSEER_START before starting event
bool _hasAura = true;
@@ -269,32 +271,40 @@ public:
events.ScheduleEvent(EVENT_PRE_FIGHT_1, 1000);
instance->SetBossState(DATA_PYROGAURD_EMBERSEER, IN_PROGRESS);
}
- break;
+ break;
}
- case EVENT_ENTER_COMBAT:
- AttackStart(me->SelectNearestPlayer(30.0f));
+ case EVENT_ENTER_COMBAT:
+ AttackStart(me->SelectNearestPlayer(30.0f));
+ break;
+ default:
+ break;
+ }
+ }
+ return;
+ }
+
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_FIRE_SHIELD:
+ DoCast(me, SPELL_FIRE_SHIELD);
+ events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000);
break;
case EVENT_FIRENOVA:
- if (UpdateVictim())
- {
- DoCast(me, SPELL_FIRENOVA);
+ DoCast(me, SPELL_FIRENOVA);
events.ScheduleEvent(EVENT_FIRENOVA, 6000);
- }
break;
case EVENT_FLAMEBUFFET:
- if (UpdateVictim())
- {
- DoCast(me, SPELL_FLAMEBUFFET);
+ DoCast(me, SPELL_FLAMEBUFFET);
events.ScheduleEvent(EVENT_FLAMEBUFFET, 14000);
- }
break;
case EVENT_PYROBLAST:
- if (UpdateVictim())
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_PYROBLAST);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ DoCast(target, SPELL_PYROBLAST);
events.ScheduleEvent(EVENT_PYROBLAST, 15000);
- }
break;
default:
break;
@@ -355,7 +365,7 @@ public:
if (data == 1 && value == 2)
{
- _events.ScheduleEvent(EVENT_ENCAGED_EMBERSEER, 5000);
+ _events.ScheduleEvent(EVENT_ENCAGED_EMBERSEER, 1000);
}
}
@@ -364,18 +374,28 @@ public:
// Used to close doors
if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true))
Emberseer->AI()->SetData(1, 2);
- me->CallForHelp(60.0f);
+
+ // Had to do this because CallForHelp will ignore any npcs without LOS
+ std::list<Creature*> creatureList;
+ GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 60.0f);
+ for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
+ {
+ if (Creature* creatureList = *itr)
+ creatureList->SetInCombatWithZone(); // AI()->AttackStart(me->GetVictim());
+ }
+
_events.ScheduleEvent(EVENT_STRIKE, urand(8000, 16000));
_events.ScheduleEvent(EVENT_ENCAGE, urand(10000, 20000));
- me->CallForHelp(60.0f); // double call because not all are aggroing on first call.
}
void UpdateAI(uint32 diff)
{
- _events.Update(diff);
+
if (!UpdateVictim())
{
+ _events.Update(diff);
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
@@ -391,6 +411,8 @@ public:
return;
}
+ _events.Update(diff);
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
index 4297ac591f7..d975300c35b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
@@ -27,7 +27,7 @@ enum Spells
SPELL_CLEAVE = 15284,
SPELL_MORTAL_STRIKE = 16856,
SPELL_FRENZY = 8269,
- SPELL_KNOCKDOWN = 13360 // On spawn during Gyth fight
+ SPELL_KNOCKDOWN = 13360 // On spawn during Gyth fight
};
enum Says
@@ -37,16 +37,16 @@ enum Says
SAY_BLACKHAND_2 = 1,
EMOTE_BLACKHAND_DISMOUNT = 2,
// Victor Nefarius
- SAY_NEFARIUS_1 = 0,
- SAY_NEFARIUS_2 = 1,
- SAY_NEFARIUS_3 = 2,
- SAY_NEFARIUS_4 = 3,
- SAY_NEFARIUS_5 = 4,
- SAY_NEFARIUS_6 = 5,
- SAY_NEFARIUS_7 = 6,
- SAY_NEFARIUS_8 = 7,
- SAY_NEFARIUS_9 = 8,
- SAY_NEFARIUS_10 = 9,
+ SAY_NEFARIUS_0 = 0,
+ SAY_NEFARIUS_1 = 1,
+ SAY_NEFARIUS_2 = 2,
+ SAY_NEFARIUS_3 = 3,
+ SAY_NEFARIUS_4 = 4,
+ SAY_NEFARIUS_5 = 5,
+ SAY_NEFARIUS_6 = 6,
+ SAY_NEFARIUS_7 = 7,
+ SAY_NEFARIUS_8 = 8,
+ SAY_NEFARIUS_9 = 9,
};
enum Adds
@@ -55,6 +55,16 @@ enum Adds
NPC_CHROMATIC_DRAGONSPAWN = 10447,
NPC_BLACKHAND_DRAGON_HANDLER = 10742
};
+
+enum Misc
+{
+ NEFARIUS_PATH_1 = 1379670,
+ NEFARIUS_PATH_2 = 1379671,
+ NEFARIUS_PATH_3 = 1379672,
+ REND_PATH_1 = 1379680,
+ REND_PATH_2 = 1379681,
+};
+
/*
struct Wave
{
@@ -106,19 +116,45 @@ static Wave Wave6[]= // 27 sec
{ 10442, 212.2642f, -430.7648f, 110.9807f, 5.934119f }
};
*/
+
+Position const GythLoc = { 211.762f, -397.5885f, 111.1817f, 4.747295f };
+Position const Teleport1Loc = { 194.2993f, -474.0814f, 121.4505f, -0.01225555f };
+Position const Teleport2Loc = { 216.485f, -434.93f, 110.888f, -0.01225555f };
+
enum Events
{
- EVENT_WHIRLWIND = 1,
- EVENT_CLEAVE = 2,
- EVENT_MORTAL_STRIKE = 3,
-
- EVENT_GYTH_1 = 5,
- EVENT_GYTH_2 = 6,
- EVENT_GYTH_3 = 7,
- EVENT_GYTH_4 = 8,
- EVENT_GYTH_5 = 9,
- EVENT_GYTH_6 = 10,
- EVENT_PORTCULLIS = 11,
+ EVENT_START_1 = 1,
+ EVENT_START_2 = 2,
+ EVENT_START_3 = 3,
+ EVENT_START_4 = 4,
+ EVENT_TURN_TO_REND = 5,
+ EVENT_TURN_TO_PLAYER = 6,
+ EVENT_TURN_TO_FACING_1 = 7,
+ EVENT_TURN_TO_FACING_2 = 8,
+ EVENT_TURN_TO_FACING_3 = 9,
+ EVENT_WAVE_1 = 10,
+ EVENT_WAVE_2 = 11,
+ EVENT_WAVE_3 = 12,
+ EVENT_WAVE_4 = 13,
+ EVENT_WAVE_5 = 14,
+ EVENT_WAVE_6 = 15,
+ EVENT_WAVES_TEXT_1 = 16,
+ EVENT_WAVES_TEXT_2 = 17,
+ EVENT_WAVES_TEXT_3 = 18,
+ EVENT_WAVES_TEXT_4 = 19,
+ EVENT_WAVES_TEXT_5 = 20,
+ EVENT_WAVES_COMPLETE_TEXT_1 = 21,
+ EVENT_WAVES_COMPLETE_TEXT_2 = 22,
+ EVENT_WAVES_COMPLETE_TEXT_3 = 23,
+ EVENT_WAVES_EMOTE_1 = 24,
+ EVENT_WAVES_EMOTE_2 = 25,
+ EVENT_PATH_REND = 26,
+ EVENT_PATH_NEFARIUS = 27,
+ EVENT_TELEPORT_1 = 28,
+ EVENT_TELEPORT_2 = 29,
+ EVENT_WHIRLWIND = 30,
+ EVENT_CLEAVE = 31,
+ EVENT_MORTAL_STRIKE = 32,
};
class boss_rend_blackhand : public CreatureScript
@@ -133,9 +169,8 @@ public:
void Reset()
{
_Reset();
- _gythEvent = false;
- _victorGUID = 0;
- _portcullisGUID = 0;
+ gythEvent = false;
+ victorGUID = 0;
}
void EnterCombat(Unit* /*who*/)
@@ -156,33 +191,43 @@ public:
{
if (instance && type == AREATRIGGER && data == AREATRIGGER_BLACKROCK_STADIUM)
{
- if (!_gythEvent)
+ if (!gythEvent)
{
- _gythEvent = true;
+ gythEvent = true;
if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 5.0f, true))
- _victorGUID = victor->GetGUID();
+ victorGUID = victor->GetGUID();
if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f))
- _portcullisGUID = portcullis->GetGUID();
+ portcullisGUID = portcullis->GetGUID();
- if (Creature* victor = me->GetCreature(*me, _victorGUID))
- {
- if (Unit* player = victor->SelectNearestPlayer(40.0f))
- {
- victor->SetInFront(player);
- victor->SendMovementFlagUpdate();
- }
- }
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ events.ScheduleEvent(EVENT_START_1, 1000);
}
+ }
+ }
- events.ScheduleEvent(EVENT_GYTH_1, 1000);
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if (type == WAYPOINT_MOTION_TYPE)
+ {
+ switch (id)
+ {
+ case 5:
+ events.ScheduleEvent(EVENT_TELEPORT_1, 2000);
+ break;
+ case 11:
+ if (Creature* gyth = me->FindNearestCreature(NPC_GYTH, 10.0f, true))
+ gyth->AI()->SetData(1, 1);
+ me->DespawnOrUnsummon(1000);
+ break;
+ }
}
}
void UpdateAI(uint32 diff)
{
- if (_gythEvent)
+ if (gythEvent)
{
events.Update(diff);
@@ -190,31 +235,172 @@ public:
{
switch (eventId)
{
- case EVENT_GYTH_1:
- if (Creature* victor = me->GetCreature(*me, _victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_1);
- events.ScheduleEvent(EVENT_GYTH_2, 4000);
+ case EVENT_START_1:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_0);
+ events.ScheduleEvent(EVENT_START_2, 4000);
break;
- case EVENT_GYTH_2:
- if (Creature* victor = me->GetCreature(*me, _victorGUID))
+ case EVENT_START_2:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
- events.ScheduleEvent(EVENT_GYTH_3, 4000);
+ events.ScheduleEvent(EVENT_START_3, 4000);
break;
- case EVENT_GYTH_3:
- if (Creature* victor = me->GetCreature(*me, _victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_2);
- events.ScheduleEvent(EVENT_PORTCULLIS, 2000);
- events.ScheduleEvent(EVENT_GYTH_4, 4000);
+ case EVENT_START_3:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_1);
+ events.ScheduleEvent(EVENT_WAVE_1, 2000);
+ events.ScheduleEvent(EVENT_TURN_TO_REND, 4000);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_1, 20000);
break;
- case EVENT_GYTH_4:
- if (Creature* victor = me->GetCreature(*me, _victorGUID))
+ case EVENT_TURN_TO_REND:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
{
victor->SetInFront(me);
victor->SendMovementFlagUpdate();
+ victor->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
+ }
+ break;
+ case EVENT_TURN_TO_PLAYER:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Unit* player = victor->SelectNearestPlayer(60.0f))
+ {
+ victor->SetInFront(player);
+ victor->SendMovementFlagUpdate();
+ }
+ break;
+ case EVENT_TURN_TO_FACING_1:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ {
+ victor->SetOrientation(1.518436f);
+ victor->SendMovementFlagUpdate();
}
break;
- case EVENT_PORTCULLIS:
- if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f))
+ case EVENT_TURN_TO_FACING_2:
+ me->SetOrientation(1.658063f);
+ me->SendMovementFlagUpdate();
+ break;
+ case EVENT_TURN_TO_FACING_3:
+ me->SetOrientation(1.500983f);
+ me->SendMovementFlagUpdate();
+ break;
+ case EVENT_WAVES_EMOTE_1:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION);
+ break;
+ case EVENT_WAVES_EMOTE_2:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ break;
+ case EVENT_WAVES_TEXT_1:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_2);
+ me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
+ events.ScheduleEvent(EVENT_WAVES_EMOTE_1, 5000);
+ events.ScheduleEvent(EVENT_WAVE_2, 2000);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_2, 20000);
+ break;
+ case EVENT_WAVES_TEXT_2:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_3);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
+ events.ScheduleEvent(EVENT_WAVE_3, 2000);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_3, 20000);
+ break;
+ case EVENT_WAVES_TEXT_3:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_4);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
+ events.ScheduleEvent(EVENT_WAVE_4, 2000);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_4, 20000);
+ break;
+ case EVENT_WAVES_TEXT_4:
+ Talk(SAY_BLACKHAND_1);
+ events.ScheduleEvent(EVENT_WAVES_EMOTE_2, 4000);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_3, 8000);
+ events.ScheduleEvent(EVENT_WAVE_5, 2000);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_5, 20000);
+ break;
+ case EVENT_WAVES_TEXT_5:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_5);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
+ events.ScheduleEvent(EVENT_WAVE_6, 2000);
+ events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_1, 20000);
+ break;
+ case EVENT_WAVES_COMPLETE_TEXT_1:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_6);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
+ events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_2, 13000);
+ break;
+ case EVENT_WAVES_COMPLETE_TEXT_2:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_7);
+ Talk(SAY_BLACKHAND_2);
+ events.ScheduleEvent(EVENT_PATH_REND, 1000);
+ events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_3, 4000);
+ break;
+ case EVENT_WAVES_COMPLETE_TEXT_3:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_8);
+ events.ScheduleEvent(EVENT_PATH_NEFARIUS, 1000);
+ events.ScheduleEvent(EVENT_PATH_REND, 1000);
+ break;
+ case EVENT_PATH_NEFARIUS:
+ if (Creature* victor = me->GetCreature(*me, victorGUID))
+ victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true);
+ break;
+ case EVENT_PATH_REND:
+ // path to gyth and spawn gyth.
+ // after despawn gyth fight will start
+ me->GetMotionMaster()->MovePath(REND_PATH_1, false);
+ break;
+ case EVENT_TELEPORT_1:
+ me->NearTeleportTo(194.2993f, -474.0814f, 121.4505f, -0.01225555f);
+ events.ScheduleEvent(EVENT_TELEPORT_2, 50000);
+ break;
+ case EVENT_TELEPORT_2:
+ me->NearTeleportTo(216.485f, -434.93f, 110.888f, -0.01225555f);
+ me->SummonCreature(NPC_GYTH, 211.762f, -397.5885f, 111.1817f, 4.747295f);
+ break;
+ case EVENT_WAVE_1:
+ if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_2:
+ // spawn wave
+ if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_3:
+ // spawn wave
+ if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_4:
+ // spawn wave
+ if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_5:
+ // spawn wave
+ if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_6:
+ // spawn wave
+ if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID))
portcullis->UseDoorOrButton();
// move wave
break;
@@ -252,11 +438,11 @@ public:
}
DoMeleeAttackIfReady();
}
- private:
- bool _gythEvent;
- uint64 _victorGUID;
- uint64 _portcullisGUID;
+ private:
+ bool gythEvent;
+ uint64 victorGUID;
+ uint64 portcullisGUID;
};
CreatureAI* GetAI(Creature* creature) const
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
index 7b80f75255a..ab462319450 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
@@ -437,7 +437,10 @@ public:
{
bool _mobAlive = false;
rune = instance->GetGameObject(go_roomrunes[i]);
- if (rune && rune->GetGoState() == GO_STATE_ACTIVE)
+ if (!rune)
+ continue;
+
+ if (rune->GetGoState() == GO_STATE_ACTIVE)
{
for (uint8 ii = 0; ii < 5; ++ii)
{
@@ -559,7 +562,7 @@ public:
uint64 go_blackrockaltar;
uint64 go_roomrunes[7];
uint64 go_emberseerrunes[7];
- uint64 runecreaturelist[7] [5];
+ uint64 runecreaturelist[7][5];
};
InstanceScript* GetInstanceScript(InstanceMap* map) const