mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-06 00:48:39 +01:00
Core/Scripting: A few fixes for Blackrock Spire. Emberseer now setting properly after wipe and Gyth/Rend event is getting closer to complete.
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
creatureList->Respawn();
|
||||
}
|
||||
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)
|
||||
case EVENT_RESPAWN:
|
||||
{
|
||||
if (Creature* creatureList = *itr)
|
||||
creatureList->AI()->SetData(1, 1);
|
||||
// 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())
|
||||
{
|
||||
creatureList->Respawn();
|
||||
}
|
||||
creatureList->AI()->SetData(1, 2);
|
||||
}
|
||||
me->AddAura(SPELL_ENCAGED_EMBERSEER, me);
|
||||
instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED);
|
||||
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_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;
|
||||
}
|
||||
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)
|
||||
|
||||
@@ -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_PORTCULLIS:
|
||||
if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f))
|
||||
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_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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user