fix(Core/Util): EventMap::RepeatEvent when eventId is retrieved by ExecuteEvent() call (#3426)

This commit is contained in:
Andrius Peleckas
2020-10-17 15:59:22 +03:00
committed by GitHub
parent 32da0eeb9e
commit ab5933effa
131 changed files with 558 additions and 1012 deletions
+67 -68
View File
@@ -18,7 +18,7 @@
#include <map> #include <map>
#include <ace/INET_Addr.h> #include <ace/INET_Addr.h>
// Searcher for map of structs // Searcher for map of structs
template<typename T, class S> struct Finder template<typename T, class S> struct Finder
{ {
T val_; T val_;
@@ -440,7 +440,7 @@ public:
part[0] == right.part[0] && part[0] == right.part[0] &&
part[1] == right.part[1] && part[1] == right.part[1] &&
part[2] == right.part[2] part[2] == right.part[2]
); );
} }
inline bool operator!=(flag96 const& right) const inline bool operator!=(flag96 const& right) const
@@ -541,20 +541,20 @@ bool CompareValues(ComparisionType type, T val1, T val2)
{ {
switch (type) switch (type)
{ {
case COMP_TYPE_EQ: case COMP_TYPE_EQ:
return val1 == val2; return val1 == val2;
case COMP_TYPE_HIGH: case COMP_TYPE_HIGH:
return val1 > val2; return val1 > val2;
case COMP_TYPE_LOW: case COMP_TYPE_LOW:
return val1 < val2; return val1 < val2;
case COMP_TYPE_HIGH_EQ: case COMP_TYPE_HIGH_EQ:
return val1 >= val2; return val1 >= val2;
case COMP_TYPE_LOW_EQ: case COMP_TYPE_LOW_EQ:
return val1 <= val2; return val1 <= val2;
default: default:
// incorrect parameter // incorrect parameter
ABORT(); ABORT();
return false; return false;
} }
} }
@@ -578,7 +578,7 @@ class EventMap
typedef std::multimap<uint32, uint32> EventStore; typedef std::multimap<uint32, uint32> EventStore;
public: public:
EventMap() : _time(0), _phase(0) { } EventMap() : _time(0), _phase(0), _lastEvent(0) { }
/** /**
* @name Reset * @name Reset
@@ -641,9 +641,13 @@ public:
void SetPhase(uint8 phase) void SetPhase(uint8 phase)
{ {
if (!phase) if (!phase)
{
_phase = 0; _phase = 0;
}
else if (phase <= 8) else if (phase <= 8)
{
_phase = (1 << (phase - 1)); _phase = (1 << (phase - 1));
}
} }
/** /**
@@ -654,7 +658,9 @@ public:
void AddPhase(uint8 phase) void AddPhase(uint8 phase)
{ {
if (phase && phase <= 8) if (phase && phase <= 8)
{
_phase |= (1 << (phase - 1)); _phase |= (1 << (phase - 1));
}
} }
/** /**
@@ -665,7 +671,9 @@ public:
void RemovePhase(uint8 phase) void RemovePhase(uint8 phase)
{ {
if (phase && phase <= 8) if (phase && phase <= 8)
{
_phase &= ~(1 << (phase - 1)); _phase &= ~(1 << (phase - 1));
}
} }
/** /**
@@ -679,10 +687,14 @@ public:
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint32 phase = 0) void ScheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint32 phase = 0)
{ {
if (group && group <= 8) if (group && group <= 8)
{
eventId |= (1 << (group + 15)); eventId |= (1 << (group + 15));
}
if (phase && phase <= 8) if (phase && phase <= 8)
{
eventId |= (1 << (phase + 23)); eventId |= (1 << (phase + 23));
}
_eventMap.insert(EventStore::value_type(_time + time, eventId)); _eventMap.insert(EventStore::value_type(_time + time, eventId));
} }
@@ -711,22 +723,7 @@ public:
*/ */
void RepeatEvent(uint32 time) void RepeatEvent(uint32 time)
{ {
if (Empty()) _eventMap.insert(EventStore::value_type(_time + time, _lastEvent));
return;
uint32 eventId = _eventMap.begin()->second;
_eventMap.erase(_eventMap.begin());
ScheduleEvent(eventId, time);
}
/**
* @name PopEvent
* @brief Remove the first event in the map.
*/
void PopEvent()
{
if (!Empty())
_eventMap.erase(_eventMap.begin());
} }
/** /**
@@ -741,12 +738,17 @@ public:
EventStore::iterator itr = _eventMap.begin(); EventStore::iterator itr = _eventMap.begin();
if (itr->first > _time) if (itr->first > _time)
{
return 0; return 0;
}
else if (_phase && (itr->second & 0xFF000000) && !((itr->second >> 24) & _phase)) else if (_phase && (itr->second & 0xFF000000) && !((itr->second >> 24) & _phase))
{
_eventMap.erase(itr); _eventMap.erase(itr);
}
else else
{ {
uint32 eventId = (itr->second & 0x0000FFFF); uint32 eventId = (itr->second & 0x0000FFFF);
_lastEvent = itr->second;
_eventMap.erase(itr); _eventMap.erase(itr);
return eventId; return eventId;
} }
@@ -755,28 +757,6 @@ public:
return 0; return 0;
} }
/**
* @name GetEvent
* @brief Returns the next event to execute.
* @return Id of the event to execute.
*/
uint32 GetEvent()
{
while (!Empty())
{
EventStore::iterator itr = _eventMap.begin();
if (itr->first > _time)
return 0;
else if (_phase && (itr->second & 0xFF000000) && !(itr->second & (_phase << 24)))
_eventMap.erase(itr);
else
return (itr->second & 0x0000FFFF);
}
return 0;
}
/** /**
* @name DelayEvents * @name DelayEvents
* @brief Delays all events in the map. If delay is greater than or equal internal timer, delay will be 0. * @brief Delays all events in the map. If delay is greater than or equal internal timer, delay will be 0.
@@ -796,9 +776,10 @@ public:
ScheduleEvent(itr->second, delay); ScheduleEvent(itr->second, delay);
_eventMap.erase(itr); _eventMap.erase(itr);
itr = _eventMap.begin(); itr = _eventMap.begin();
continue;
} }
else
++itr; ++itr;
} }
} }
@@ -811,7 +792,9 @@ public:
void DelayEvents(uint32 delay, uint32 group) void DelayEvents(uint32 delay, uint32 group)
{ {
if (group > 8 || Empty()) if (group > 8 || Empty())
{
return; return;
}
EventStore delayed; EventStore delayed;
@@ -820,10 +803,11 @@ public:
if (!group || (itr->second & (1 << (group + 15)))) if (!group || (itr->second & (1 << (group + 15))))
{ {
delayed.insert(EventStore::value_type(itr->first + delay, itr->second)); delayed.insert(EventStore::value_type(itr->first + delay, itr->second));
_eventMap.erase(itr++); itr = _eventMap.erase(itr);
continue;
} }
else
++itr; ++itr;
} }
_eventMap.insert(delayed.begin(), delayed.end()); _eventMap.insert(delayed.begin(), delayed.end());
@@ -837,14 +821,19 @@ public:
void CancelEvent(uint32 eventId) void CancelEvent(uint32 eventId)
{ {
if (Empty()) if (Empty())
{
return; return;
}
for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
{ {
if (eventId == (itr->second & 0x0000FFFF)) if (eventId == (itr->second & 0x0000FFFF))
_eventMap.erase(itr++); {
else itr = _eventMap.erase(itr);
++itr; continue;
}
++itr;
} }
} }
@@ -856,7 +845,9 @@ public:
void CancelEventGroup(uint32 group) void CancelEventGroup(uint32 group)
{ {
if (!group || group > 8 || Empty()) if (!group || group > 8 || Empty())
{
return; return;
}
uint32 groupMask = (1 << (group + 15)); uint32 groupMask = (1 << (group + 15));
for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
@@ -865,9 +856,10 @@ public:
{ {
_eventMap.erase(itr); _eventMap.erase(itr);
itr = _eventMap.begin(); itr = _eventMap.begin();
continue;
} }
else
++itr; ++itr;
} }
} }
@@ -880,11 +872,17 @@ public:
uint32 GetNextEventTime(uint32 eventId) const uint32 GetNextEventTime(uint32 eventId) const
{ {
if (Empty()) if (Empty())
{
return 0; return 0;
}
for (EventStore::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr) for (auto const& itr : _eventMap)
if (eventId == (itr->second & 0x0000FFFF)) {
return itr->first; if (eventId == (itr.second & 0x0000FFFF))
{
return itr.first;
}
}
return 0; return 0;
} }
@@ -912,6 +910,7 @@ public:
private: private:
uint32 _time; uint32 _time;
uint32 _phase; uint32 _phase;
uint32 _lastEvent;
EventStore _eventMap; EventStore _eventMap;
}; };
@@ -491,24 +491,21 @@ public:
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_GHOUL_MOVE_TO_PIT: case EVENT_GHOUL_MOVE_TO_PIT:
me->GetMotionMaster()->MovePoint(1, 2364.77f, -5776.14f, 151.36f); me->GetMotionMaster()->MovePoint(1, 2364.77f, -5776.14f, 151.36f);
if (Creature* gothik = ObjectAccessor::GetCreature(*me, gothikGUID)) if (Creature* gothik = ObjectAccessor::GetCreature(*me, gothikGUID))
gothik->AI()->DoAction(SAY_GOTHIK_PIT); gothik->AI()->DoAction(SAY_GOTHIK_PIT);
events.PopEvent();
break; break;
case EVENT_GHOUL_EMOTE: case EVENT_GHOUL_EMOTE:
me->CastSpell(me, SPELL_GHOUL_EMERGE, true); me->CastSpell(me, SPELL_GHOUL_EMERGE, true);
events.PopEvent();
break; break;
case EVENT_GHOUL_RESTORE_STATE: case EVENT_GHOUL_RESTORE_STATE:
me->SetReactState(REACT_DEFENSIVE); me->SetReactState(REACT_DEFENSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
if (Player* owner = me->GetCharmerOrOwnerPlayerOrPlayerItself()) if (Player* owner = me->GetCharmerOrOwnerPlayerOrPlayerItself())
me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, frand(0.0f, 2 * M_PI)); me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, frand(0.0f, 2 * M_PI));
events.PopEvent();
events.ScheduleEvent(EVENT_GHOUL_CHECK_COMBAT, 1000); events.ScheduleEvent(EVENT_GHOUL_CHECK_COMBAT, 1000);
return; return;
case EVENT_GHOUL_CHECK_COMBAT: case EVENT_GHOUL_CHECK_COMBAT:
@@ -203,7 +203,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_CHECK_PLAYER: case EVENT_CHECK_PLAYER:
{ {
@@ -218,7 +218,6 @@ public:
} }
case EVENT_SUMMON_ARCHERS: case EVENT_SUMMON_ARCHERS:
SummonArchers(); SummonArchers();
events.PopEvent();
break; break;
case EVENT_SUMMON_PEASANTS: case EVENT_SUMMON_PEASANTS:
_spoken = false; _spoken = false;
@@ -220,7 +220,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (uint32 evId = events.GetEvent()) switch (uint32 evId = events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -231,28 +231,24 @@ public:
events.RepeatEvent(5000); events.RepeatEvent(5000);
break; break;
} }
events.PopEvent();
me->setActive(false); me->setActive(false);
EnterEvadeMode(); EnterEvadeMode();
return; return;
case EVENT_SUMMON_SOLDIERS: case EVENT_SUMMON_SOLDIERS:
for (uint8 i = 0; i < SUNWELL_DEFENDER_NUM; ++i) for (uint8 i = 0; i < SUNWELL_DEFENDER_NUM; ++i)
me->SummonCreature(NPC_SUNWELL_DEFENDER, SunwellDefenderPos[i], TEMPSUMMON_TIMED_DESPAWN, 33000 + (i / 5) * 5000); me->SummonCreature(NPC_SUNWELL_DEFENDER, SunwellDefenderPos[i], TEMPSUMMON_TIMED_DESPAWN, 33000 + (i / 5) * 5000);
events.PopEvent();
break; break;
case EVENT_TALK_INTRO_0: case EVENT_TALK_INTRO_0:
case EVENT_TALK_INTRO_1: case EVENT_TALK_INTRO_1:
case EVENT_TALK_INTRO_2: case EVENT_TALK_INTRO_2:
case EVENT_TALK_INTRO_3: case EVENT_TALK_INTRO_3:
Talk(SAY_INTRO_0 + (evId - EVENT_TALK_INTRO_0)); Talk(SAY_INTRO_0 + (evId - EVENT_TALK_INTRO_0));
events.PopEvent();
break; break;
case EVENT_SALUTE: case EVENT_SALUTE:
me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
if (Creature* c = ObjectAccessor::GetCreature(*me, *itr)) if (Creature* c = ObjectAccessor::GetCreature(*me, *itr))
c->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); c->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
events.PopEvent();
break; break;
case EVENT_SOLDIERS_RUN_AWAY: case EVENT_SOLDIERS_RUN_AWAY:
{ {
@@ -276,35 +272,29 @@ public:
} }
else else
{ {
events.PopEvent();
return; return;
} }
} }
} }
} }
events.PopEvent();
break; break;
case EVENT_GO_FIGHTPOINT: case EVENT_GO_FIGHTPOINT:
me->SetWalk(true); me->SetWalk(true);
me->GetMotionMaster()->MovePoint(0, 11779.30f, -7065.43f, 24.92f); me->GetMotionMaster()->MovePoint(0, 11779.30f, -7065.43f, 24.92f);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
events.PopEvent();
break; break;
case EVENT_TALK_SPAWN_0: case EVENT_TALK_SPAWN_0:
case EVENT_TALK_SPAWN_1: case EVENT_TALK_SPAWN_1:
Talk(SAY_SPAWN_0 + (evId - EVENT_TALK_SPAWN_0)); Talk(SAY_SPAWN_0 + (evId - EVENT_TALK_SPAWN_0));
events.PopEvent();
break; break;
case EVENT_SUMMON_MORLEN: case EVENT_SUMMON_MORLEN:
if (Creature* c = me->SummonCreature(NPC_MORLEN_COLDGRIP, 11766.70f, -7050.57f, 25.17f, 5.56f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000)) if (Creature* c = me->SummonCreature(NPC_MORLEN_COLDGRIP, 11766.70f, -7050.57f, 25.17f, 5.56f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000))
morlenGUID = c->GetGUID(); morlenGUID = c->GetGUID();
events.PopEvent();
break; break;
case EVENT_TALK_MORLEN_0: case EVENT_TALK_MORLEN_0:
case EVENT_TALK_MORLEN_1: case EVENT_TALK_MORLEN_1:
if (Creature* c = ObjectAccessor::GetCreature(*me, morlenGUID)) if (Creature* c = ObjectAccessor::GetCreature(*me, morlenGUID))
c->AI()->Talk(SAY_MORLEN_0 + (evId - EVENT_TALK_MORLEN_0)); c->AI()->Talk(SAY_MORLEN_0 + (evId - EVENT_TALK_MORLEN_0));
events.PopEvent();
break; break;
case EVENT_SPAWN_WAVE_1: case EVENT_SPAWN_WAVE_1:
case EVENT_SPAWN_WAVE_2: case EVENT_SPAWN_WAVE_2:
@@ -364,7 +354,6 @@ public:
break; break;
} }
} }
events.PopEvent();
events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3000); events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3000);
break; break;
case EVENT_SUMMONS_ATTACK: case EVENT_SUMMONS_ATTACK:
@@ -378,14 +367,12 @@ public:
c->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); c->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
c->AI()->AttackStart(me); c->AI()->AttackStart(me);
} }
events.PopEvent();
break; break;
case EVENT_OUTRO_0: case EVENT_OUTRO_0:
case EVENT_OUTRO_1: case EVENT_OUTRO_1:
case EVENT_OUTRO_2: case EVENT_OUTRO_2:
case EVENT_OUTRO_3: case EVENT_OUTRO_3:
Talk(SAY_OUTRO_0 + (evId - EVENT_OUTRO_0)); Talk(SAY_OUTRO_0 + (evId - EVENT_OUTRO_0));
events.PopEvent();
if (evId == EVENT_OUTRO_3) if (evId == EVENT_OUTRO_3)
events.ScheduleEvent(EVENT_OUTRO_KNEEL, 6000); events.ScheduleEvent(EVENT_OUTRO_KNEEL, 6000);
break; break;
@@ -393,18 +380,15 @@ public:
if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID)) if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID))
p->KilledMonsterCredit(NPC_THALORIEN_KILL_CREDIT, 0); p->KilledMonsterCredit(NPC_THALORIEN_KILL_CREDIT, 0);
me->SetStandState(UNIT_STAND_STATE_KNEEL); me->SetStandState(UNIT_STAND_STATE_KNEEL);
events.PopEvent();
events.ScheduleEvent(EVENT_DISAPPEAR, 6000); events.ScheduleEvent(EVENT_DISAPPEAR, 6000);
break; break;
case EVENT_DISAPPEAR: case EVENT_DISAPPEAR:
events.PopEvent();
me->SetVisible(false); me->SetVisible(false);
me->setActive(false); me->setActive(false);
EnterEvadeMode(); EnterEvadeMode();
break; break;
case EVENT_SET_FACING: case EVENT_SET_FACING:
me->SetFacingTo(2.45f); me->SetFacingTo(2.45f);
events.PopEvent();
break; break;
case EVENT_SPELL_BLADESTORM: case EVENT_SPELL_BLADESTORM:
+3 -7
View File
@@ -212,15 +212,13 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_DIREBREW_RESPAWN1: case EVENT_DIREBREW_RESPAWN1:
SummonSister(NPC_ILSA_DIREBREW); SummonSister(NPC_ILSA_DIREBREW);
events.PopEvent();
break; break;
case EVENT_DIREBREW_RESPAWN2: case EVENT_DIREBREW_RESPAWN2:
SummonSister(NPC_URSULA_DIREBREW); SummonSister(NPC_URSULA_DIREBREW);
events.PopEvent();
break; break;
case EVENT_DIREBREW_DISARM: case EVENT_DIREBREW_DISARM:
me->CastSpell(me->GetVictim(), SPELL_DIREBREW_DISARM, false); me->CastSpell(me->GetVictim(), SPELL_DIREBREW_DISARM, false);
@@ -235,7 +233,6 @@ public:
} }
if (me->GetHealthPct() < 35 && phase == 1) if (me->GetHealthPct() < 35 && phase == 1)
{ {
events.PopEvent();
SummonSister(NPC_URSULA_DIREBREW); SummonSister(NPC_URSULA_DIREBREW);
return; return;
} }
@@ -325,7 +322,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SISTERS_BARREL: case EVENT_SISTERS_BARREL:
me->CastSpell(me->GetVictim(), SPELL_BARRELED, false); me->CastSpell(me->GetVictim(), SPELL_BARRELED, false);
@@ -703,7 +700,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_CHECK_HOUR: case EVENT_CHECK_HOUR:
{ {
@@ -744,7 +741,6 @@ public:
{ {
events.CancelEvent(EVENT_SPAWN_MOLE_MACHINE); events.CancelEvent(EVENT_SPAWN_MOLE_MACHINE);
events.ScheduleEvent(EVENT_FINISH_ATTACK, 20000); events.ScheduleEvent(EVENT_FINISH_ATTACK, 20000);
events.PopEvent();
break; break;
} }
case EVENT_FINISH_ATTACK: case EVENT_FINISH_ATTACK:
+2 -8
View File
@@ -679,18 +679,16 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 1: case 1:
me->MonsterYell("Prepare yourselves, the bells have tolled! Shelter your weak, your young and your old! Each of you shall pay the final sum! Cry for mercy; the reckoning has come!", LANG_UNIVERSAL, 0); me->MonsterYell("Prepare yourselves, the bells have tolled! Shelter your weak, your young and your old! Each of you shall pay the final sum! Cry for mercy; the reckoning has come!", LANG_UNIVERSAL, 0);
me->PlayDirectSound(11966); me->PlayDirectSound(11966);
events.PopEvent();
break; break;
case 2: case 2:
{ {
if (Unit* trigger = getTrigger()) if (Unit* trigger = getTrigger())
me->CastSpell(trigger, SPELL_START_FIRE, true); me->CastSpell(trigger, SPELL_START_FIRE, true);
events.PopEvent();
break; break;
} }
case 3: case 3:
@@ -710,7 +708,6 @@ public:
} }
FinishEvent(failed); FinishEvent(failed);
events.PopEvent();
} }
return; return;
} }
@@ -1103,7 +1100,7 @@ public:
if (inFight && !UpdateVictim()) if (inFight && !UpdateVictim())
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_HH_PLAYER_TALK: case EVENT_HH_PLAYER_TALK:
{ {
@@ -1132,7 +1129,6 @@ public:
case 4: case 4:
me->CastSpell(me, SPELL_SHAKE_CAMERA_MEDIUM, true); me->CastSpell(me, SPELL_SHAKE_CAMERA_MEDIUM, true);
player->MonsterSay("Now, know demise!", LANG_UNIVERSAL, 0); player->MonsterSay("Now, know demise!", LANG_UNIVERSAL, 0);
events.PopEvent();
talkCount = 0; talkCount = 0;
return; // pop and return, skip repeat return; // pop and return, skip repeat
} }
@@ -1147,7 +1143,6 @@ public:
AttackStart(player); AttackStart(player);
me->GetMotionMaster()->MoveChase(player); me->GetMotionMaster()->MoveChase(player);
} }
events.PopEvent();
break; break;
} }
case EVENT_HORSEMAN_CLEAVE: case EVENT_HORSEMAN_CLEAVE:
@@ -1173,7 +1168,6 @@ public:
if (me->GetHealth() == me->GetMaxHealth()) if (me->GetHealth() == me->GetMaxHealth())
{ {
me->CastSpell(me, SPELL_BODY_RESTORED_INFO, true); me->CastSpell(me, SPELL_BODY_RESTORED_INFO, true);
events.PopEvent();
return; return;
} }
+4 -5
View File
@@ -371,20 +371,20 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_CALL_BAXTER: case EVENT_CALL_BAXTER:
{ {
EntryCheckPredicate pred(NPC_APOTHECARY_BAXTER); EntryCheckPredicate pred(NPC_APOTHECARY_BAXTER);
summons.DoAction(ACTION_RELEASE_HELPER, pred); summons.DoAction(ACTION_RELEASE_HELPER, pred);
events.PopEvent();
break; break;
} }
case EVENT_CALL_FRYE: case EVENT_CALL_FRYE:
{ {
EntryCheckPredicate pred(NPC_APOTHECARY_FRYE); EntryCheckPredicate pred(NPC_APOTHECARY_FRYE);
summons.DoAction(ACTION_RELEASE_HELPER, pred); summons.DoAction(ACTION_RELEASE_HELPER, pred);
events.PopEvent();
break; break;
} }
case EVENT_SPELL_PERFUME_SPRAY: case EVENT_SPELL_PERFUME_SPRAY:
@@ -455,7 +455,6 @@ public:
void JustDied(Unit* ) { me->MonsterSay("...please don't think less of me.", LANG_UNIVERSAL, 0); } void JustDied(Unit* ) { me->MonsterSay("...please don't think less of me.", LANG_UNIVERSAL, 0); }
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
if (!UpdateVictim()) if (!UpdateVictim())
@@ -465,7 +464,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_PERFUME_SPRAY: case EVENT_SPELL_PERFUME_SPRAY:
me->CastSpell(me->GetVictim(), SPELL_COLOGNE_SPRAY, false); me->CastSpell(me->GetVictim(), SPELL_COLOGNE_SPRAY, false);
@@ -98,7 +98,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_CURSE_OF_EXERTION: case EVENT_SPELL_CURSE_OF_EXERTION:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
@@ -122,7 +122,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_VOID_STRIKE: case EVENT_SPELL_VOID_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_VOID_STRIKE, false); me->CastSpell(me->GetVictim(), SPELL_VOID_STRIKE, false);
@@ -129,7 +129,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_CARRION_SWARM: case EVENT_SPELL_CARRION_SWARM:
me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_CARRION_SWARM_N, SPELL_CARRION_SWARM_H), false); me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_CARRION_SWARM_N, SPELL_CARRION_SWARM_H), false);
@@ -81,7 +81,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_DISEASE_EXPULSION: case EVENT_SPELL_DISEASE_EXPULSION:
me->CastSpell(me, DUNGEON_MODE(SPELL_DISEASE_EXPULSION_N, SPELL_DISEASE_EXPULSION_H), false); me->CastSpell(me, DUNGEON_MODE(SPELL_DISEASE_EXPULSION_N, SPELL_DISEASE_EXPULSION_H), false);
@@ -112,7 +112,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_SHADOW_BOLT: case EVENT_SPELL_SHADOW_BOLT:
me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false); me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false);
@@ -659,7 +659,7 @@ public:
if (eventInRun) if (eventInRun)
{ {
actionEvents.Update(diff); actionEvents.Update(diff);
switch (uint32 currentEvent = actionEvents.GetEvent()) switch (uint32 currentEvent = actionEvents.ExecuteEvent())
{ {
case EVENT_ACTION_PHASE1: case EVENT_ACTION_PHASE1:
SetRun(false); SetRun(false);
@@ -815,7 +815,7 @@ public:
SetEscortPaused(false); SetEscortPaused(false);
eventInRun = false; eventInRun = false;
me->SetTarget(0); me->SetTarget(0);
actionEvents.PopEvent(); // dont schedule next, do it in gossip select! // dont schedule next, do it in gossip select!
break; break;
//After Gossip 1 (waypoint 8) //After Gossip 1 (waypoint 8)
case EVENT_ACTION_PHASE2: case EVENT_ACTION_PHASE2:
@@ -910,7 +910,6 @@ public:
pInstance->SetData(DATA_START_WAVES, 1); pInstance->SetData(DATA_START_WAVES, 1);
SummonNextWave(); SummonNextWave();
actionEvents.PopEvent();
break; break;
case EVENT_ACTION_PHASE2+9: case EVENT_ACTION_PHASE2+9:
if (pInstance) if (pInstance)
@@ -919,7 +918,6 @@ public:
Talk(SAY_PHASE210); Talk(SAY_PHASE210);
eventInRun = false; eventInRun = false;
SetEscortPaused(false); SetEscortPaused(false);
actionEvents.PopEvent();
break; break;
// After waypoint 22 // After waypoint 22
case EVENT_ACTION_PHASE3: case EVENT_ACTION_PHASE3:
@@ -1110,7 +1108,6 @@ public:
pInstance->SetData(DATA_ARTHAS_EVENT, COS_PROGRESS_KILLED_EPOCH); pInstance->SetData(DATA_ARTHAS_EVENT, COS_PROGRESS_KILLED_EPOCH);
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
actionEvents.PopEvent();
eventInRun = false; eventInRun = false;
break; break;
case EVENT_ACTION_PHASE5: case EVENT_ACTION_PHASE5:
@@ -1122,7 +1119,6 @@ public:
cr->AddThreat(me, 0.0f); cr->AddThreat(me, 0.0f);
AttackStart(cr); AttackStart(cr);
} }
actionEvents.PopEvent();
eventInRun = false; eventInRun = false;
SetEscortPaused(true); SetEscortPaused(true);
break; break;
@@ -1150,7 +1146,6 @@ public:
case EVENT_ACTION_PHASE5+3: case EVENT_ACTION_PHASE5+3:
eventInRun = false; eventInRun = false;
me->SetVisible(false); me->SetVisible(false);
actionEvents.PopEvent();
break; break;
} }
} }
@@ -1163,7 +1158,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (combatEvents.GetEvent()) switch (combatEvents.ExecuteEvent())
{ {
case EVENT_COMBAT_EXORCISM: case EVENT_COMBAT_EXORCISM:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -1202,7 +1197,6 @@ Creature* npc_arthas::npc_arthasAI::GetEventNpc(uint32 entry)
void npc_arthas::npc_arthasAI::ScheduleNextEvent(uint32 currentEvent, uint32 time) void npc_arthas::npc_arthasAI::ScheduleNextEvent(uint32 currentEvent, uint32 time)
{ {
actionEvents.PopEvent();
actionEvents.ScheduleEvent(currentEvent + 1, time); actionEvents.ScheduleEvent(currentEvent + 1, time);
} }
@@ -323,7 +323,7 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -358,7 +358,6 @@ public:
me->StopMoving(); me->StopMoving();
DoResetThreat(); DoResetThreat();
me->GetMotionMaster()->MovePoint(10, OnyxiaMoveData[0].x, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z); me->GetMotionMaster()->MovePoint(10, OnyxiaMoveData[0].x, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z);
events.PopEvent();
} }
break; break;
case EVENT_LIFTOFF: case EVENT_LIFTOFF:
@@ -374,19 +373,18 @@ public:
me->SendMovementFlagUpdate(); me->SendMovementFlagUpdate();
me->GetMotionMaster()->MoveTakeoff(11, OnyxiaMoveData[1].x + 1.0f, OnyxiaMoveData[1].y, OnyxiaMoveData[1].z, 12.0f); me->GetMotionMaster()->MoveTakeoff(11, OnyxiaMoveData[1].x + 1.0f, OnyxiaMoveData[1].y, OnyxiaMoveData[1].z, 12.0f);
bManyWhelpsAvailable = true; bManyWhelpsAvailable = true;
events.PopEvent();
events.RescheduleEvent(EVENT_END_MANY_WHELPS_TIME, 10000); events.RescheduleEvent(EVENT_END_MANY_WHELPS_TIME, 10000);
} }
break; break;
case EVENT_END_MANY_WHELPS_TIME: case EVENT_END_MANY_WHELPS_TIME:
bManyWhelpsAvailable = false; bManyWhelpsAvailable = false;
events.PopEvent();
break; break;
case EVENT_FLY_S_TO_N: case EVENT_FLY_S_TO_N:
{ {
me->SetSpeed(MOVE_RUN, 2.95f, false); me->SetSpeed(MOVE_RUN, 2.95f, false);
me->GetMotionMaster()->MovePoint(5, OnyxiaMoveData[5].x, OnyxiaMoveData[5].y, OnyxiaMoveData[5].z); me->GetMotionMaster()->MovePoint(5, OnyxiaMoveData[5].x, OnyxiaMoveData[5].y, OnyxiaMoveData[5].z);
events.PopEvent();
whelpSpam = true; whelpSpam = true;
events.ScheduleEvent(EVENT_WHELP_SPAM, 90000); events.ScheduleEvent(EVENT_WHELP_SPAM, 90000);
events.ScheduleEvent(EVENT_SUMMON_LAIR_GUARD, 30000); events.ScheduleEvent(EVENT_SUMMON_LAIR_GUARD, 30000);
@@ -409,7 +407,6 @@ public:
Talk(SAY_PHASE_3_TRANS); Talk(SAY_PHASE_3_TRANS);
me->SendMeleeAttackStop(me->GetVictim()); me->SendMeleeAttackStop(me->GetVictim());
me->GetMotionMaster()->MoveLand(13, OnyxiaMoveData[0].x + 1.0f, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z, 12.0f); me->GetMotionMaster()->MoveLand(13, OnyxiaMoveData[0].x + 1.0f, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z, 12.0f);
events.PopEvent();
DoResetThreat(); DoResetThreat();
} }
break; break;
@@ -420,7 +417,7 @@ public:
me->SetFacingToObject(v); me->SetFacingToObject(v);
me->CastSpell(v, SPELL_FIREBALL, false); me->CastSpell(v, SPELL_FIREBALL, false);
} }
events.PopEvent();
events.ScheduleEvent(EVENT_SPELL_FIREBALL_SECOND, 4000); events.ScheduleEvent(EVENT_SPELL_FIREBALL_SECOND, 4000);
} }
break; break;
@@ -431,7 +428,6 @@ public:
me->SetFacingToObject(v); me->SetFacingToObject(v);
me->CastSpell(v, SPELL_FIREBALL, false); me->CastSpell(v, SPELL_FIREBALL, false);
} }
events.PopEvent();
uint8 rand = urand(0, 99); uint8 rand = urand(0, 99);
if( rand < 33 ) if( rand < 33 )
@@ -448,7 +444,6 @@ public:
if( newWP > 8 ) if( newWP > 8 )
newWP = 1; newWP = 1;
me->GetMotionMaster()->MovePoint(newWP, OnyxiaMoveData[newWP].x, OnyxiaMoveData[newWP].y, OnyxiaMoveData[newWP].z); me->GetMotionMaster()->MovePoint(newWP, OnyxiaMoveData[newWP].x, OnyxiaMoveData[newWP].y, OnyxiaMoveData[newWP].z);
events.PopEvent();
} }
break; break;
case EVENT_PHASE_2_STEP_ACW: case EVENT_PHASE_2_STEP_ACW:
@@ -457,7 +452,6 @@ public:
if( newWP < 1 ) if( newWP < 1 )
newWP = 8; newWP = 8;
me->GetMotionMaster()->MovePoint(newWP, OnyxiaMoveData[newWP].x, OnyxiaMoveData[newWP].y, OnyxiaMoveData[newWP].z); me->GetMotionMaster()->MovePoint(newWP, OnyxiaMoveData[newWP].x, OnyxiaMoveData[newWP].y, OnyxiaMoveData[newWP].z);
events.PopEvent();
} }
break; break;
case EVENT_PHASE_2_STEP_ACROSS: case EVENT_PHASE_2_STEP_ACROSS:
@@ -465,7 +459,7 @@ public:
me->SetFacingTo(OnyxiaMoveData[CurrentWP].o); me->SetFacingTo(OnyxiaMoveData[CurrentWP].o);
me->MonsterTextEmote("Onyxia takes in a deep breath...", 0, true); me->MonsterTextEmote("Onyxia takes in a deep breath...", 0, true);
me->CastSpell(me, OnyxiaMoveData[CurrentWP].spellId, false); me->CastSpell(me, OnyxiaMoveData[CurrentWP].spellId, false);
events.PopEvent();
events.ScheduleEvent(EVENT_SPELL_BREATH, 8250); events.ScheduleEvent(EVENT_SPELL_BREATH, 8250);
} }
break; break;
@@ -474,20 +468,16 @@ public:
uint8 newWP = OnyxiaMoveData[CurrentWP].DestId; uint8 newWP = OnyxiaMoveData[CurrentWP].DestId;
me->SetSpeed(MOVE_RUN, 2.95f, false); me->SetSpeed(MOVE_RUN, 2.95f, false);
me->GetMotionMaster()->MovePoint(newWP, OnyxiaMoveData[newWP].x, OnyxiaMoveData[newWP].y, OnyxiaMoveData[newWP].z); me->GetMotionMaster()->MovePoint(newWP, OnyxiaMoveData[newWP].x, OnyxiaMoveData[newWP].y, OnyxiaMoveData[newWP].z);
events.PopEvent();
} }
break; break;
case EVENT_START_PHASE_3: case EVENT_START_PHASE_3:
{ {
me->SetSpeed(MOVE_RUN, 2.95f, false); me->SetSpeed(MOVE_RUN, 2.95f, false);
me->GetMotionMaster()->MovePoint(12, OnyxiaMoveData[1].x, OnyxiaMoveData[1].y, OnyxiaMoveData[1].z); me->GetMotionMaster()->MovePoint(12, OnyxiaMoveData[1].x, OnyxiaMoveData[1].y, OnyxiaMoveData[1].z);
events.PopEvent();
} }
break; break;
case EVENT_PHASE_3_ATTACK: case EVENT_PHASE_3_ATTACK:
{ {
events.PopEvent();
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
AttackStart(SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 0, false)); AttackStart(SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 0, false));
me->CastSpell(me, SPELL_BELLOWINGROAR, false); me->CastSpell(me, SPELL_BELLOWINGROAR, false);
@@ -512,8 +502,6 @@ public:
{ {
if( Creature* trigger = me->SummonCreature(12758, *me, TEMPSUMMON_TIMED_DESPAWN, 1000) ) if( Creature* trigger = me->SummonCreature(12758, *me, TEMPSUMMON_TIMED_DESPAWN, 1000) )
trigger->CastSpell(trigger, 17731, false); trigger->CastSpell(trigger, 17731, false);
events.PopEvent();
} }
break; break;
case EVENT_SUMMON_WHELP: case EVENT_SUMMON_WHELP:
@@ -577,7 +565,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -156,7 +156,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
uint32 eventId = events.GetEvent(); uint32 eventId = events.ExecuteEvent();
if (eventId == EVENT_CHECK_PLAYER) if (eventId == EVENT_CHECK_PLAYER)
{ {
Player* player = ObjectAccessor::GetPlayer(*me, playerGUID); Player* player = ObjectAccessor::GetPlayer(*me, playerGUID);
@@ -181,7 +181,6 @@ public:
case EVENT_KRIK_HEALTH_CHECK: case EVENT_KRIK_HEALTH_CHECK:
if (HealthBelowPct(10)) if (HealthBelowPct(10))
{ {
events.PopEvent();
me->CastSpell(me, SPELL_FRENZY, true); me->CastSpell(me, SPELL_FRENZY, true);
break; break;
} }
@@ -120,7 +120,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_AMANITAR_SPAWN: case EVENT_AMANITAR_SPAWN:
{ {
@@ -161,7 +161,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch ( events.GetEvent() ) switch ( events.ExecuteEvent() )
{ {
case EVENT_CHECK_HEALTH: case EVENT_CHECK_HEALTH:
{ {
@@ -177,7 +177,6 @@ public:
{ {
Talk(EMOTE_HATCHES, me); Talk(EMOTE_HATCHES, me);
SummonHelpers(false); SummonHelpers(false);
events.PopEvent();
break; break;
} }
case EVENT_BROOD_RAGE: case EVENT_BROOD_RAGE:
@@ -208,7 +207,6 @@ public:
if (me->GetPositionZ() < 24) if (me->GetPositionZ() < 24)
{ {
me->CastSpell(me, SPELL_ENRAGE, true); me->CastSpell(me, SPELL_ENRAGE, true);
events.PopEvent();
break; break;
} }
@@ -238,7 +238,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_HERALD_HEALTH: case EVENT_HERALD_HEALTH:
{ {
@@ -335,7 +335,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_JEDOGA_CYCLONE: case EVENT_JEDOGA_CYCLONE:
{ {
@@ -361,7 +361,6 @@ public:
} }
case EVENT_JEDOGA_MOVE_UP: case EVENT_JEDOGA_MOVE_UP:
{ {
events.PopEvent();
if (!summons.HasEntry(NPC_INITIATE)) if (!summons.HasEntry(NPC_INITIATE))
break; break;
@@ -383,7 +382,6 @@ public:
Talk(TEXT_SACRIFICE_2); Talk(TEXT_SACRIFICE_2);
summons.DespawnEntry(NPC_JEDOGA_CONTROLLER); summons.DespawnEntry(NPC_JEDOGA_CONTROLLER);
MoveDown(); MoveDown();
events.PopEvent();
break; break;
} }
} }
@@ -145,7 +145,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_PRINCE_BLOODTHIRST: case EVENT_PRINCE_BLOODTHIRST:
{ {
@@ -174,7 +174,6 @@ public:
} }
case EVENT_PRINCE_VANISH: case EVENT_PRINCE_VANISH:
{ {
events.PopEvent();
//Count alive players //Count alive players
uint8 count = 0; uint8 count = 0;
Unit* pTarget; Unit* pTarget;
@@ -208,13 +207,11 @@ public:
me->RemoveAura(SPELL_VANISH); me->RemoveAura(SPELL_VANISH);
} }
events.PopEvent();
events.ScheduleEvent(EVENT_PRINCE_RESCHEDULE, 20000); events.ScheduleEvent(EVENT_PRINCE_RESCHEDULE, 20000);
break; break;
} }
case EVENT_PRINCE_RESCHEDULE: case EVENT_PRINCE_RESCHEDULE:
{ {
events.PopEvent();
ScheduleEvents(); ScheduleEvents();
break; break;
} }
@@ -1,4 +1,4 @@
/* /*
* Originally written by Xinef - Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 * Originally written by Xinef - Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
*/ */
@@ -424,7 +424,7 @@ public:
events.Update(diff); events.Update(diff);
// Special events which needs to be fired immidiately // Special events which needs to be fired immidiately
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case EVENT_SARTHARION_BOUNDARY: case EVENT_SARTHARION_BOUNDARY:
if (me->GetPositionX() < 3218.86f || me->GetPositionX() > 3275.69f || me->GetPositionY() < 484.68f || me->GetPositionY() > 572.4f) // https://github.com/TrinityCore/TrinityCore/blob/3.3.5/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp#L31 if (me->GetPositionX() < 3218.86f || me->GetPositionX() > 3275.69f || me->GetPositionY() < 484.68f || me->GetPositionY() > 572.4f) // https://github.com/TrinityCore/TrinityCore/blob/3.3.5/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp#L31
@@ -441,11 +441,11 @@ public:
return; return;
case EVENT_SARTHARION_START_LAVA: case EVENT_SARTHARION_START_LAVA:
SendLavaWaves(true); SendLavaWaves(true);
events.PopEvent();
return; return;
case EVENT_SARTHARION_FINISH_LAVA: case EVENT_SARTHARION_FINISH_LAVA:
SendLavaWaves(false); SendLavaWaves(false);
events.PopEvent();
return; return;
} }
@@ -463,7 +463,7 @@ public:
void boss_sartharion::boss_sartharionAI::HandleSartharionAbilities() void boss_sartharion::boss_sartharionAI::HandleSartharionAbilities()
{ {
// Handling of Sartharion Events // Handling of Sartharion Events
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SARTHARION_CAST_CLEAVE: case EVENT_SARTHARION_CAST_CLEAVE:
me->CastSpell(me->GetVictim(), SPELL_SARTHARION_CLEAVE, false); me->CastSpell(me->GetVictim(), SPELL_SARTHARION_CLEAVE, false);
@@ -523,14 +523,14 @@ void boss_sartharion::boss_sartharionAI::HandleSartharionAbilities()
cr->CastSpell(cr, SPELL_CYCLONE_AURA_PERIODIC, true); cr->CastSpell(cr, SPELL_CYCLONE_AURA_PERIODIC, true);
} }
Talk(SAY_SARTHARION_BERSERK); Talk(SAY_SARTHARION_BERSERK);
events.PopEvent();
break; break;
} }
events.RepeatEvent(2000); events.RepeatEvent(2000);
break; break;
case EVENT_SARTHARION_BERSERK: case EVENT_SARTHARION_BERSERK:
summons.DespawnEntry(NPC_SAFE_AREA_TRIGGER); summons.DespawnEntry(NPC_SAFE_AREA_TRIGGER);
events.PopEvent();
break; break;
} }
} }
@@ -538,26 +538,26 @@ void boss_sartharion::boss_sartharionAI::HandleSartharionAbilities()
void boss_sartharion::boss_sartharionAI::HandleDrakeAbilities() void boss_sartharion::boss_sartharionAI::HandleDrakeAbilities()
{ {
// Handling of Drakes Events // Handling of Drakes Events
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
// Dragon Calls // Dragon Calls
case EVENT_SARTHARION_CALL_TENEBRON: case EVENT_SARTHARION_CALL_TENEBRON:
Talk(SAY_SARTHARION_CALL_TENEBRON); Talk(SAY_SARTHARION_CALL_TENEBRON);
if (Creature* tenebron = ObjectAccessor::GetCreature(*me, dragons[DRAGON_TENEBRON])) if (Creature* tenebron = ObjectAccessor::GetCreature(*me, dragons[DRAGON_TENEBRON]))
tenebron->AI()->DoAction(ACTION_CALL_DRAGON); tenebron->AI()->DoAction(ACTION_CALL_DRAGON);
events.PopEvent();
break; break;
case EVENT_SARTHARION_CALL_SHADRON: case EVENT_SARTHARION_CALL_SHADRON:
Talk(SAY_SARTHARION_CALL_SHADRON); Talk(SAY_SARTHARION_CALL_SHADRON);
if (Creature* shadron = ObjectAccessor::GetCreature(*me, dragons[DRAGON_SHADRON])) if (Creature* shadron = ObjectAccessor::GetCreature(*me, dragons[DRAGON_SHADRON]))
shadron->AI()->DoAction(ACTION_CALL_DRAGON); shadron->AI()->DoAction(ACTION_CALL_DRAGON);
events.PopEvent();
break; break;
case EVENT_SARTHARION_CALL_VESPERON: case EVENT_SARTHARION_CALL_VESPERON:
Talk(SAY_SARTHARION_CALL_VESPERON); Talk(SAY_SARTHARION_CALL_VESPERON);
if (Creature* vesperon = ObjectAccessor::GetCreature(*me, dragons[DRAGON_VESPERON])) if (Creature* vesperon = ObjectAccessor::GetCreature(*me, dragons[DRAGON_VESPERON]))
vesperon->AI()->DoAction(ACTION_CALL_DRAGON); vesperon->AI()->DoAction(ACTION_CALL_DRAGON);
events.PopEvent();
break; break;
} }
} }
@@ -733,7 +733,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_MINIBOSS_SHADOW_BREATH: case EVENT_MINIBOSS_SHADOW_BREATH:
if (!urand(0, 10)) if (!urand(0, 10))
@@ -776,7 +776,6 @@ public:
} }
events.ScheduleEvent(EVENT_MINIBOSS_HATCH_EGGS, 25000); events.ScheduleEvent(EVENT_MINIBOSS_HATCH_EGGS, 25000);
events.PopEvent();
break; break;
} }
case EVENT_MINIBOSS_HATCH_EGGS: case EVENT_MINIBOSS_HATCH_EGGS:
@@ -810,7 +809,6 @@ public:
EntryCheckPredicate pred(NPC_TWILIGHT_EGG); EntryCheckPredicate pred(NPC_TWILIGHT_EGG);
summons.DoAction(ACTION_SWITCH_PHASE, pred); summons.DoAction(ACTION_SWITCH_PHASE, pred);
events.PopEvent();
break; break;
} }
} }
@@ -1005,7 +1003,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_MINIBOSS_SHADOW_BREATH: case EVENT_MINIBOSS_SHADOW_BREATH:
if (!urand(0, 10)) if (!urand(0, 10))
@@ -1030,7 +1028,7 @@ public:
pInstance->SetData(DATA_ADD_PORTAL, 0); pInstance->SetData(DATA_ADD_PORTAL, 0);
events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2000); events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2000);
events.PopEvent();
break; break;
case EVENT_MINIBOSS_SPAWN_HELPERS: case EVENT_MINIBOSS_SPAWN_HELPERS:
Talk(WHISPER_SUMMON_DICIPLE); Talk(WHISPER_SUMMON_DICIPLE);
@@ -1041,7 +1039,7 @@ public:
cr->SetPhaseMask(16, true); cr->SetPhaseMask(16, true);
} }
events.PopEvent();
break; break;
} }
@@ -1235,7 +1233,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_MINIBOSS_SHADOW_BREATH: case EVENT_MINIBOSS_SHADOW_BREATH:
if (!urand(0, 10)) if (!urand(0, 10))
@@ -1260,7 +1258,7 @@ public:
pInstance->SetData(DATA_ADD_PORTAL, 0); pInstance->SetData(DATA_ADD_PORTAL, 0);
events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2000); events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2000);
events.PopEvent();
break; break;
case EVENT_MINIBOSS_SPAWN_HELPERS: case EVENT_MINIBOSS_SPAWN_HELPERS:
Talk(WHISPER_SUMMON_DICIPLE); Talk(WHISPER_SUMMON_DICIPLE);
@@ -1271,7 +1269,7 @@ public:
cr->SetPhaseMask(16, true); cr->SetPhaseMask(16, true);
} }
events.PopEvent();
break; break;
} }
@@ -162,7 +162,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -340,7 +340,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -357,7 +357,6 @@ public:
case EVENT_SPELL_RENEW: case EVENT_SPELL_RENEW:
if( !MemoryGUID ) if( !MemoryGUID )
{ {
events.PopEvent();
break; break;
} }
if( urand(0, 1) ) if( urand(0, 1) )
@@ -417,14 +416,14 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_MEMORY_SCALE: case EVENT_MEMORY_SCALE:
me->SetObjectScale(1.0f); me->SetObjectScale(1.0f);
events.ScheduleEvent(EVENT_MEMORY_START_ATTACK, 5000); events.ScheduleEvent(EVENT_MEMORY_START_ATTACK, 5000);
events.PopEvent();
break; break;
case EVENT_MEMORY_START_ATTACK: case EVENT_MEMORY_START_ATTACK:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -437,7 +436,6 @@ public:
events.ScheduleEvent(EVENT_SPELL_OLD_WOUNDS, 8000); events.ScheduleEvent(EVENT_SPELL_OLD_WOUNDS, 8000);
events.ScheduleEvent(EVENT_SPELL_SHADOWS_PAST, 4000); events.ScheduleEvent(EVENT_SPELL_SHADOWS_PAST, 4000);
events.ScheduleEvent(EVENT_SPELL_WAKING_NIGHTMARE, urand(20000, 30000)); events.ScheduleEvent(EVENT_SPELL_WAKING_NIGHTMARE, urand(20000, 30000));
events.PopEvent();
break; break;
case EVENT_SPELL_OLD_WOUNDS: case EVENT_SPELL_OLD_WOUNDS:
if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 10.0f, true) ) if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 10.0f, true) )
@@ -655,7 +653,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -231,7 +231,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -239,7 +239,7 @@ public:
if( pInstance && !summons.empty() ) if( pInstance && !summons.empty() )
if( Creature* ghoul = pInstance->instance->GetCreature(*summons.begin()) ) if( Creature* ghoul = pInstance->instance->GetCreature(*summons.begin()) )
ghoul->MonsterYell("[Zombie] .... . Brains ....", LANG_UNIVERSAL, 0); ghoul->MonsterYell("[Zombie] .... . Brains ....", LANG_UNIVERSAL, 0);
events.PopEvent();
break; break;
case EVENT_SPELL_PLAGUE_STRIKE: case EVENT_SPELL_PLAGUE_STRIKE:
if( me->GetVictim() ) if( me->GetVictim() )
@@ -440,7 +440,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -449,7 +449,7 @@ public:
if (me->GetDistance(target) > 5.0f && me->GetDistance(target) < 30.0f) if (me->GetDistance(target) > 5.0f && me->GetDistance(target) < 30.0f)
{ {
me->CastSpell(target, SPELL_LEAP, false); me->CastSpell(target, SPELL_LEAP, false);
events.PopEvent();
break; break;
} }
events.RepeatEvent(1000); events.RepeatEvent(1000);
@@ -257,7 +257,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -655,7 +655,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) || ((me->GetEntry() == NPC_JACOB || me->GetEntry() == NPC_MOKRA) && me->HasAura(SPELL_BLADESTORM)) ) if( me->HasUnitState(UNIT_STATE_CASTING) || ((me->GetEntry() == NPC_JACOB || me->GetEntry() == NPC_MOKRA) && me->HasAura(SPELL_BLADESTORM)) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -711,9 +711,7 @@ public:
me->GetMotionMaster()->MovePoint(7, *mount); me->GetMotionMaster()->MovePoint(7, *mount);
events.RepeatEvent(200); events.RepeatEvent(200);
break; break;
} }
events.PopEvent();
} }
break; break;
case EVENT_MOUNT_CHARGE: case EVENT_MOUNT_CHARGE:
@@ -831,7 +829,7 @@ public:
/****************** HUNTER ******************/ /****************** HUNTER ******************/
case EVENT_HUNTER_SPELL_DISENGAGE: case EVENT_HUNTER_SPELL_DISENGAGE:
events.PopEvent();
break; break;
case EVENT_HUNTER_SPELL_LIGHTNING_ARROWS: case EVENT_HUNTER_SPELL_LIGHTNING_ARROWS:
me->CastSpell((Unit*)NULL, SPELL_LIGHTNING_ARROWS, false); me->CastSpell((Unit*)NULL, SPELL_LIGHTNING_ARROWS, false);
@@ -920,7 +918,7 @@ public:
} }
break; break;
case EVENT_WARRIOR_SPELL_ROLLING_THROW: case EVENT_WARRIOR_SPELL_ROLLING_THROW:
events.PopEvent();
break; break;
/*************** WARRIOR END ****************/ /*************** WARRIOR END ****************/
} }
@@ -759,7 +759,7 @@ public:
void Update(uint32 diff) void Update(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case EVENT_NULL: case EVENT_NULL:
break; break;
@@ -776,7 +776,6 @@ public:
DoSummonGrandChampion(temp1, 0); DoSummonGrandChampion(temp1, 0);
HandleGameObject(GO_MainGateGUID, true); HandleGameObject(GO_MainGateGUID, true);
events.ScheduleEvent(EVENT_CLOSE_GATE, 6000); events.ScheduleEvent(EVENT_CLOSE_GATE, 6000);
events.PopEvent();
} }
break; break;
case EVENT_SUMMON_GRAND_CHAMPION_2: case EVENT_SUMMON_GRAND_CHAMPION_2:
@@ -786,7 +785,6 @@ public:
DoSummonGrandChampion(temp2, 1); DoSummonGrandChampion(temp2, 1);
HandleGameObject(GO_MainGateGUID, true); HandleGameObject(GO_MainGateGUID, true);
events.ScheduleEvent(EVENT_CLOSE_GATE, 6000); events.ScheduleEvent(EVENT_CLOSE_GATE, 6000);
events.PopEvent();
} }
break; break;
case EVENT_SUMMON_GRAND_CHAMPION_3: case EVENT_SUMMON_GRAND_CHAMPION_3:
@@ -797,23 +795,23 @@ public:
DoSummonGrandChampion(number, 2); DoSummonGrandChampion(number, 2);
HandleGameObject(GO_MainGateGUID, true); HandleGameObject(GO_MainGateGUID, true);
events.ScheduleEvent(EVENT_CLOSE_GATE, 6000); events.ScheduleEvent(EVENT_CLOSE_GATE, 6000);
events.PopEvent();
} }
break; break;
case EVENT_CLOSE_GATE: case EVENT_CLOSE_GATE:
{ {
HandleGameObject(GO_MainGateGUID, false); HandleGameObject(GO_MainGateGUID, false);
events.PopEvent();
} }
break; break;
case EVENT_YELL_WELCOME_2: case EVENT_YELL_WELCOME_2:
{ {
if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) ) if (Creature* tirion = instance->GetCreature(NPC_TirionGUID))
{
tirion->AI()->Talk(TEXT_WELCOME_2); tirion->AI()->Talk(TEXT_WELCOME_2);
}
events.RescheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_1, 8000); events.RescheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_1, 8000);
events.PopEvent(); break;
} }
break;
case EVENT_GRAND_GROUP_1_MOVE_MIDDLE: case EVENT_GRAND_GROUP_1_MOVE_MIDDLE:
{ {
if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) ) if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) )
@@ -831,7 +829,6 @@ public:
} }
events.ScheduleEvent(EVENT_GRAND_GROUP_1_ATTACK, 3000); events.ScheduleEvent(EVENT_GRAND_GROUP_1_ATTACK, 3000);
events.PopEvent();
} }
break; break;
case EVENT_GRAND_GROUP_1_ATTACK: case EVENT_GRAND_GROUP_1_ATTACK:
@@ -846,7 +843,6 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
} }
Counter = 0; Counter = 0;
events.PopEvent();
} }
break; break;
case EVENT_GRAND_GROUP_2_MOVE_MIDDLE: case EVENT_GRAND_GROUP_2_MOVE_MIDDLE:
@@ -859,7 +855,6 @@ public:
} }
events.ScheduleEvent(EVENT_GRAND_GROUP_2_ATTACK, 3000); events.ScheduleEvent(EVENT_GRAND_GROUP_2_ATTACK, 3000);
events.PopEvent();
} }
break; break;
case EVENT_GRAND_GROUP_2_ATTACK: case EVENT_GRAND_GROUP_2_ATTACK:
@@ -873,7 +868,6 @@ public:
c->AI()->AttackStart(target); c->AI()->AttackStart(target);
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
} }
events.PopEvent();
} }
break; break;
case EVENT_GRAND_GROUP_3_MOVE_MIDDLE: case EVENT_GRAND_GROUP_3_MOVE_MIDDLE:
@@ -886,7 +880,6 @@ public:
} }
events.ScheduleEvent(EVENT_GRAND_GROUP_3_ATTACK, 3000); events.ScheduleEvent(EVENT_GRAND_GROUP_3_ATTACK, 3000);
events.PopEvent();
} }
break; break;
case EVENT_GRAND_GROUP_3_ATTACK: case EVENT_GRAND_GROUP_3_ATTACK:
@@ -900,7 +893,6 @@ public:
c->AI()->AttackStart(target); c->AI()->AttackStart(target);
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
} }
events.PopEvent();
} }
break; break;
case EVENT_GRAND_CHAMPIONS_MOVE_MIDDLE: case EVENT_GRAND_CHAMPIONS_MOVE_MIDDLE:
@@ -913,7 +905,6 @@ public:
} }
events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOUNTS_ATTACK, 3000); events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOUNTS_ATTACK, 3000);
events.PopEvent();
} }
break; break;
case EVENT_GRAND_CHAMPIONS_MOUNTS_ATTACK: case EVENT_GRAND_CHAMPIONS_MOUNTS_ATTACK:
@@ -928,7 +919,6 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
c->CastSpell(c, 67865, true); // SPELL_TRAMPLE_AURA c->CastSpell(c, 67865, true); // SPELL_TRAMPLE_AURA
} }
events.PopEvent();
} }
break; break;
case EVENT_GRAND_CHAMPIONS_MOVE_SIDE: case EVENT_GRAND_CHAMPIONS_MOVE_SIDE:
@@ -952,7 +942,6 @@ public:
} }
events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_ATTACK, 15000); events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_ATTACK, 15000);
events.PopEvent();
} }
break; break;
case EVENT_GRAND_CHAMPIONS_ATTACK: case EVENT_GRAND_CHAMPIONS_ATTACK:
@@ -967,14 +956,13 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
c->AI()->DoAction(2); c->AI()->DoAction(2);
} }
events.PopEvent();
} }
break; break;
case EVENT_GRATZ_SLAIN_CHAMPIONS: case EVENT_GRATZ_SLAIN_CHAMPIONS:
{ {
if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) ) if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) )
tirion->AI()->Talk(TEXT_GRATZ_SLAIN_CHAMPIONS); tirion->AI()->Talk(TEXT_GRATZ_SLAIN_CHAMPIONS);
events.PopEvent();
HandleGameObject(GO_EnterGateGUID, true); HandleGameObject(GO_EnterGateGUID, true);
} }
break; break;
@@ -982,7 +970,6 @@ public:
{ {
if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) ) if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) )
announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
events.PopEvent();
} }
break; break;
case EVENT_START_ARGENT_CHALLENGE_INTRO: case EVENT_START_ARGENT_CHALLENGE_INTRO:
@@ -1032,7 +1019,6 @@ public:
} }
} }
events.ScheduleEvent(EVENT_SUMMON_ARGENT_CHALLENGE, 4000); events.ScheduleEvent(EVENT_SUMMON_ARGENT_CHALLENGE, 4000);
events.PopEvent();
} }
break; break;
case EVENT_SUMMON_ARGENT_CHALLENGE: case EVENT_SUMMON_ARGENT_CHALLENGE:
@@ -1044,7 +1030,6 @@ public:
events.ScheduleEvent(EVENT_CLOSE_GATE, 5000); events.ScheduleEvent(EVENT_CLOSE_GATE, 5000);
events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_1, 4000); events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_1, 4000);
events.ScheduleEvent(EVENT_ARGENT_SOLDIER_GROUP_ATTACK, 12500); events.ScheduleEvent(EVENT_ARGENT_SOLDIER_GROUP_ATTACK, 12500);
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_CHALLENGE_SAY_1: case EVENT_ARGENT_CHALLENGE_SAY_1:
@@ -1053,14 +1038,12 @@ public:
ac->AI()->Talk(Counter ? TEXT_EADRIC_SAY_1 : TEXT_PALETRESS_SAY_1); ac->AI()->Talk(Counter ? TEXT_EADRIC_SAY_1 : TEXT_PALETRESS_SAY_1);
if( !Counter ) if( !Counter )
events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_2, 6000); events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_2, 6000);
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_CHALLENGE_SAY_2: case EVENT_ARGENT_CHALLENGE_SAY_2:
{ {
if( Creature* ac = instance->GetCreature(NPC_ArgentChampionGUID) ) if( Creature* ac = instance->GetCreature(NPC_ArgentChampionGUID) )
ac->AI()->Talk(TEXT_PALETRESS_SAY_2); ac->AI()->Talk(TEXT_PALETRESS_SAY_2);
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_SOLDIER_GROUP_ATTACK: case EVENT_ARGENT_SOLDIER_GROUP_ATTACK:
@@ -1076,7 +1059,6 @@ public:
} }
if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) ) if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) )
tirion->AI()->Talk(TEXT_YOU_MAY_BEGIN); tirion->AI()->Talk(TEXT_YOU_MAY_BEGIN);
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_CHALLENGE_MOVE_FORWARD: case EVENT_ARGENT_CHALLENGE_MOVE_FORWARD:
@@ -1086,7 +1068,6 @@ public:
boss->GetMotionMaster()->MovePoint(0, 746.881f, 635.263f, 411.7f); boss->GetMotionMaster()->MovePoint(0, 746.881f, 635.263f, 411.7f);
} }
events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_ATTACK, 3000); events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_ATTACK, 3000);
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_CHALLENGE_ATTACK: case EVENT_ARGENT_CHALLENGE_ATTACK:
@@ -1099,7 +1080,6 @@ public:
boss->AI()->AttackStart(target); boss->AI()->AttackStart(target);
boss->AI()->DoZoneInCombat(); boss->AI()->DoZoneInCombat();
} }
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_CHALLENGE_RUN_MIDDLE: case EVENT_ARGENT_CHALLENGE_RUN_MIDDLE:
@@ -1109,7 +1089,6 @@ public:
boss->GetMotionMaster()->MovePoint(1, 747.13f, 628.037f, 411.2f); boss->GetMotionMaster()->MovePoint(1, 747.13f, 628.037f, 411.2f);
events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_LEAVE_CHEST, 6000); events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_LEAVE_CHEST, 6000);
} }
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_CHALLENGE_LEAVE_CHEST: case EVENT_ARGENT_CHALLENGE_LEAVE_CHEST:
@@ -1128,7 +1107,6 @@ public:
events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_DISAPPEAR, 4000); events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_DISAPPEAR, 4000);
events.ScheduleEvent(EVENT_RESTORE_ANNOUNCER_GOSSIP, 15000); events.ScheduleEvent(EVENT_RESTORE_ANNOUNCER_GOSSIP, 15000);
events.PopEvent();
} }
break; break;
case EVENT_ARGENT_CHALLENGE_DISAPPEAR: case EVENT_ARGENT_CHALLENGE_DISAPPEAR:
@@ -1138,7 +1116,6 @@ public:
boss->GetMotionMaster()->MovePoint(0, SpawnPosition); boss->GetMotionMaster()->MovePoint(0, SpawnPosition);
boss->DespawnOrUnsummon(3000); boss->DespawnOrUnsummon(3000);
} }
events.PopEvent();
} }
break; break;
case EVENT_SUMMON_BLACK_KNIGHT: case EVENT_SUMMON_BLACK_KNIGHT:
@@ -1161,7 +1138,6 @@ public:
announcer->SetFacingToObject(bk_vehicle); announcer->SetFacingToObject(bk_vehicle);
announcer->AI()->Talk(TEXT_BK_RAFTERS); announcer->AI()->Talk(TEXT_BK_RAFTERS);
} }
events.PopEvent();
} }
break; break;
case EVENT_START_BLACK_KNIGHT_SCENE: case EVENT_START_BLACK_KNIGHT_SCENE:
@@ -1174,7 +1150,6 @@ public:
bk->AI()->Talk(TEXT_BK_SPOILED); bk->AI()->Talk(TEXT_BK_SPOILED);
} }
events.ScheduleEvent(EVENT_BLACK_KNIGHT_CAST_ANNOUNCER, 2000); events.ScheduleEvent(EVENT_BLACK_KNIGHT_CAST_ANNOUNCER, 2000);
events.PopEvent();
} }
break; break;
case EVENT_BLACK_KNIGHT_CAST_ANNOUNCER: case EVENT_BLACK_KNIGHT_CAST_ANNOUNCER:
@@ -1194,7 +1169,6 @@ public:
} }
} }
events.ScheduleEvent(EVENT_BLACK_KNIGHT_KILL_ANNOUNCER, 1000); events.ScheduleEvent(EVENT_BLACK_KNIGHT_KILL_ANNOUNCER, 1000);
events.PopEvent();
} }
break; break;
case EVENT_BLACK_KNIGHT_KILL_ANNOUNCER: case EVENT_BLACK_KNIGHT_KILL_ANNOUNCER:
@@ -1203,7 +1177,6 @@ public:
bk_vehicle->AI()->DoAction(1); bk_vehicle->AI()->DoAction(1);
events.ScheduleEvent(EVENT_BLACK_KNIGHT_MOVE_FORWARD, 4000); events.ScheduleEvent(EVENT_BLACK_KNIGHT_MOVE_FORWARD, 4000);
events.PopEvent();
} }
break; break;
case EVENT_BLACK_KNIGHT_MOVE_FORWARD: case EVENT_BLACK_KNIGHT_MOVE_FORWARD:
@@ -1218,7 +1191,6 @@ public:
if (announcer->IsAlive()) if (announcer->IsAlive())
Unit::Kill(announcer, announcer); Unit::Kill(announcer, announcer);
events.ScheduleEvent(EVENT_BLACK_KNIGHT_SAY_TASK, 14000); events.ScheduleEvent(EVENT_BLACK_KNIGHT_SAY_TASK, 14000);
events.PopEvent();
} }
break; break;
case EVENT_BLACK_KNIGHT_SAY_TASK: case EVENT_BLACK_KNIGHT_SAY_TASK:
@@ -1229,7 +1201,6 @@ public:
bk->AI()->Talk(TEXT_BK_TASK); bk->AI()->Talk(TEXT_BK_TASK);
} }
events.ScheduleEvent(EVENT_BLACK_KNIGHT_ATTACK, 5000); events.ScheduleEvent(EVENT_BLACK_KNIGHT_ATTACK, 5000);
events.PopEvent();
} }
break; break;
case EVENT_BLACK_KNIGHT_ATTACK: case EVENT_BLACK_KNIGHT_ATTACK:
@@ -1243,7 +1214,6 @@ public:
bk->AI()->DoZoneInCombat(); bk->AI()->DoZoneInCombat();
bk->AI()->DoAction(1); bk->AI()->DoAction(1);
} }
events.PopEvent();
} }
break; break;
} }
@@ -252,14 +252,13 @@ public:
return; return;
} }
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_ENRAGE: case EVENT_ENRAGE:
{ {
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
} }
break; break;
case EVENT_RESPAWN_SPHERE: case EVENT_RESPAWN_SPHERE:
@@ -315,7 +314,6 @@ public:
events.RescheduleEvent(EVENT_EMERGE, EMERGE_INTERVAL); events.RescheduleEvent(EVENT_EMERGE, EMERGE_INTERVAL);
events.RescheduleEvent(EVENT_SPELL_SUMMON_SPIKE, 2500); events.RescheduleEvent(EVENT_SPELL_SUMMON_SPIKE, 2500);
events.RescheduleEvent(EVENT_SUMMON_SCARAB, 3000); events.RescheduleEvent(EVENT_SUMMON_SCARAB, 3000);
events.PopEvent();
} }
break; break;
case EVENT_SUMMON_SCARAB: case EVENT_SUMMON_SCARAB:
@@ -332,7 +330,6 @@ public:
summons.DespawnEntry(NPC_SPIKE); summons.DespawnEntry(NPC_SPIKE);
events.CancelEvent(EVENT_SUMMON_SCARAB); events.CancelEvent(EVENT_SUMMON_SCARAB);
events.RescheduleEvent(EVENT_EMERGE_2, 2000); events.RescheduleEvent(EVENT_EMERGE_2, 2000);
events.PopEvent();
} }
break; break;
case EVENT_EMERGE_2: case EVENT_EMERGE_2:
@@ -346,12 +343,10 @@ public:
events.RescheduleEvent(EVENT_SPELL_FREEZING_SLASH, urand(7000, 15000)); events.RescheduleEvent(EVENT_SPELL_FREEZING_SLASH, urand(7000, 15000));
events.RescheduleEvent(EVENT_SPELL_PENETRATING_COLD, urand(15000, 20000)); events.RescheduleEvent(EVENT_SPELL_PENETRATING_COLD, urand(15000, 20000));
events.RescheduleEvent(EVENT_SUBMERGE, SUBMERGE_INTERVAL); events.RescheduleEvent(EVENT_SUBMERGE, SUBMERGE_INTERVAL);
events.PopEvent();
} }
break; break;
case EVENT_SPELL_SUMMON_SPIKE: case EVENT_SPELL_SUMMON_SPIKE:
me->CastSpell(me, SPELL_SUMMON_SPIKE, true); me->CastSpell(me, SPELL_SUMMON_SPIKE, true);
events.PopEvent();
break; break;
} }
@@ -374,7 +369,6 @@ public:
if( pInstance ) if( pInstance )
pInstance->SetData(TYPE_ANUBARAK, DONE); pInstance->SetData(TYPE_ANUBARAK, DONE);
Player* plr = nullptr; Player* plr = nullptr;
if( !pInstance->instance->GetPlayers().isEmpty() ) if( !pInstance->instance->GetPlayers().isEmpty() )
plr = pInstance->instance->GetPlayers().begin()->GetSource(); plr = pInstance->instance->GetPlayers().begin()->GetSource();
@@ -679,7 +673,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -697,7 +691,7 @@ public:
me->CastSpell(me, SPELL_EXPOSE_WEAKNESS, true); me->CastSpell(me, SPELL_EXPOSE_WEAKNESS, true);
me->CastSpell(me, SPELL_SPIDER_FRENZY, true); me->CastSpell(me, SPELL_SPIDER_FRENZY, true);
me->CastSpell(me, SPELL_SUBMERGE, false); me->CastSpell(me, SPELL_SUBMERGE, false);
events.PopEvent();
events.DelayEvents(15000); events.DelayEvents(15000);
events.RescheduleEvent(EVENT_EMERGE, 10000); events.RescheduleEvent(EVENT_EMERGE, 10000);
} }
@@ -710,7 +704,7 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->CastSpell(me, SPELL_EMERGE, false); me->CastSpell(me, SPELL_EMERGE, false);
me->RemoveAura(SPELL_SUBMERGE); me->RemoveAura(SPELL_SUBMERGE);
events.PopEvent();
events.RescheduleEvent(EVENT_SUBMERGE, 30000); events.RescheduleEvent(EVENT_SUBMERGE, 30000);
break; break;
} }
@@ -813,18 +807,18 @@ public:
events.Update(diff); events.Update(diff);
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case 1: case 1:
me->CastSpell(me, SPELL_SPIKE_SPEED2, true); me->CastSpell(me, SPELL_SPIKE_SPEED2, true);
events.PopEvent();
events.RescheduleEvent(2, 7000); events.RescheduleEvent(2, 7000);
break; break;
case 2: case 2:
me->CastSpell(me, SPELL_SPIKE_SPEED3, true); me->CastSpell(me, SPELL_SPIKE_SPEED3, true);
events.PopEvent();
break; break;
case 3: case 3:
Reset(); Reset();
@@ -293,7 +293,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -422,7 +422,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -545,7 +545,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -678,7 +678,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -801,7 +801,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -961,13 +961,13 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_SPELL_SUMMON_FELHUNTER: case EVENT_SPELL_SUMMON_FELHUNTER:
DoSummon(35465, *me); DoSummon(35465, *me);
events.PopEvent();
break; break;
case EVENT_SPELL_HELLFIRE: case EVENT_SPELL_HELLFIRE:
if( EnemiesInRange(9.0f) >= 3 ) if( EnemiesInRange(9.0f) >= 3 )
@@ -1098,7 +1098,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -1252,13 +1252,13 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_SPELL_CALL_PET: case EVENT_SPELL_CALL_PET:
DoSummon(35610, *me); DoSummon(35610, *me);
events.PopEvent();
break; break;
case EVENT_SPELL_AIMED_SHOT: case EVENT_SPELL_AIMED_SHOT:
if( me->GetVictim() ) if( me->GetVictim() )
@@ -1405,7 +1405,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -1544,7 +1544,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -1736,7 +1736,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -1893,7 +1893,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -2052,7 +2052,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -2191,7 +2191,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -2336,7 +2336,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -2411,7 +2411,7 @@ public:
if( !myCanCast() ) if( !myCanCast() )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -189,7 +189,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -234,14 +234,14 @@ public:
Talk(EMOTE_NETHER_PORTAL); Talk(EMOTE_NETHER_PORTAL);
Talk(SAY_MISTRESS_OF_PAIN); Talk(SAY_MISTRESS_OF_PAIN);
me->CastSpell((Unit*)NULL, SPELL_SUMMON_NETHER_PORTAL, false); me->CastSpell((Unit*)NULL, SPELL_SUMMON_NETHER_PORTAL, false);
events.PopEvent();
events.RescheduleEvent(EVENT_SUMMON_VOLCANO, 60000); events.RescheduleEvent(EVENT_SUMMON_VOLCANO, 60000);
break; break;
case EVENT_SUMMON_VOLCANO: case EVENT_SUMMON_VOLCANO:
Talk(EMOTE_INFERNAL_ERUPTION); Talk(EMOTE_INFERNAL_ERUPTION);
Talk(SAY_INFERNAL_ERUPTION); Talk(SAY_INFERNAL_ERUPTION);
me->CastSpell((Unit*)NULL, SPELL_SUMMON_VOLCANO, false); me->CastSpell((Unit*)NULL, SPELL_SUMMON_VOLCANO, false);
events.PopEvent();
events.RescheduleEvent(EVENT_SUMMON_NETHER_PORTAL, 60000); events.RescheduleEvent(EVENT_SUMMON_NETHER_PORTAL, 60000);
break; break;
} }
@@ -317,7 +317,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -397,7 +397,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -143,14 +143,14 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_SPELL_SNOBOLLED: case EVENT_SPELL_SNOBOLLED:
if( t->GetTypeId() == TYPEID_PLAYER ) if( t->GetTypeId() == TYPEID_PLAYER )
me->CastSpell((Unit*)NULL, SPELL_SNOBOLLED, true); me->CastSpell((Unit*)NULL, SPELL_SNOBOLLED, true);
events.PopEvent();
break; break;
case EVENT_SPELL_BATTER: case EVENT_SPELL_BATTER:
if( t->GetTypeId() == TYPEID_PLAYER ) if( t->GetTypeId() == TYPEID_PLAYER )
@@ -275,7 +275,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -359,7 +359,6 @@ public:
} }
} }
PlayerGUID = 0; PlayerGUID = 0;
events.PopEvent();
} }
break; break;
} }
@@ -550,7 +549,7 @@ struct boss_jormungarAI : public ScriptedAI
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -583,7 +582,7 @@ struct boss_jormungarAI : public ScriptedAI
me->UpdatePosition(Locs[LOC_CENTER].GetPositionX() + cos(angle)*dist, Locs[LOC_CENTER].GetPositionY() + sin(angle)*dist, me->GetPositionZ(), me->GetOrientation(), true); me->UpdatePosition(Locs[LOC_CENTER].GetPositionX() + cos(angle)*dist, Locs[LOC_CENTER].GetPositionY() + sin(angle)*dist, me->GetPositionZ(), me->GetOrientation(), true);
me->StopMovingOnCurrentPos(); me->StopMovingOnCurrentPos();
DoResetThreat(); DoResetThreat();
events.PopEvent();
events.RescheduleEvent(EVENT_EMERGE, 6000); events.RescheduleEvent(EVENT_EMERGE, 6000);
} }
break; break;
@@ -861,7 +860,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -893,7 +892,7 @@ public:
case EVENT_SPELL_MASSIVE_CRASH: case EVENT_SPELL_MASSIVE_CRASH:
me->GetMotionMaster()->Clear(); me->GetMotionMaster()->Clear();
me->CastSpell((Unit*)NULL, SPELL_MASSIVE_CRASH, false); me->CastSpell((Unit*)NULL, SPELL_MASSIVE_CRASH, false);
events.PopEvent();
events.RescheduleEvent(EVENT_GAZE, 2000); events.RescheduleEvent(EVENT_GAZE, 2000);
break; break;
case EVENT_GAZE: case EVENT_GAZE:
@@ -915,7 +914,7 @@ public:
me->GetMotionMaster()->MovementExpired(); me->GetMotionMaster()->MovementExpired();
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
} }
events.PopEvent();
break; break;
case EVENT_JUMP_BACK: case EVENT_JUMP_BACK:
{ {
@@ -935,7 +934,6 @@ public:
me->StopMoving(); me->StopMoving();
me->GetMotionMaster()->MoveJump(Locs[LOC_CENTER].GetPositionX() + cos(jumpangle) * 35.0f, Locs[LOC_CENTER].GetPositionY() + sin(jumpangle) * 35.0f, Locs[LOC_CENTER].GetPositionZ() + 1.0f, 40.0f, 12.0f); me->GetMotionMaster()->MoveJump(Locs[LOC_CENTER].GetPositionX() + cos(jumpangle) * 35.0f, Locs[LOC_CENTER].GetPositionY() + sin(jumpangle) * 35.0f, Locs[LOC_CENTER].GetPositionZ() + 1.0f, 40.0f, 12.0f);
events.PopEvent();
events.RescheduleEvent(EVENT_TRAMPLE, 1500); events.RescheduleEvent(EVENT_TRAMPLE, 1500);
if( pInstance ) if( pInstance )
@@ -965,7 +963,7 @@ public:
me->GetMotionMaster()->MoveCharge(destX, destY, destZ + 1.0f, 65.0f); me->GetMotionMaster()->MoveCharge(destX, destY, destZ + 1.0f, 65.0f);
me->SetUInt64Value(UNIT_FIELD_TARGET, 0); me->SetUInt64Value(UNIT_FIELD_TARGET, 0);
events.RescheduleEvent(EVENT_CHECK_TRAMPLE_PLAYERS, 100); events.RescheduleEvent(EVENT_CHECK_TRAMPLE_PLAYERS, 100);
events.PopEvent();
break; break;
case EVENT_CHECK_TRAMPLE_PLAYERS: case EVENT_CHECK_TRAMPLE_PLAYERS:
if( DoTrampleIfValid() ) if( DoTrampleIfValid() )
@@ -984,7 +982,7 @@ public:
break; break;
case EVENT_REFRESH_POSITION: case EVENT_REFRESH_POSITION:
//me->SetFacingTo(me->GetOrientation()); //me->SetFacingTo(me->GetOrientation());
events.PopEvent();
break; break;
} }
@@ -276,7 +276,7 @@ struct boss_twin_valkyrAI : public ScriptedAI
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -288,13 +288,13 @@ struct boss_twin_valkyrAI : public ScriptedAI
twin->CastSpell(twin, SPELL_BERSERK, true); twin->CastSpell(twin, SPELL_BERSERK, true);
twin->AI()->Talk(SAY_BERSERK); twin->AI()->Talk(SAY_BERSERK);
} }
events.PopEvent();
break; break;
case EVENT_SUMMON_BALLS_1: case EVENT_SUMMON_BALLS_1:
case EVENT_SUMMON_BALLS_2: case EVENT_SUMMON_BALLS_2:
case EVENT_SUMMON_BALLS_3: case EVENT_SUMMON_BALLS_3:
{ {
uint8 eventId = events.GetEvent(); uint8 eventId = events.ExecuteEvent();
uint8 count = 0; uint8 count = 0;
if( IsHeroic() ) if( IsHeroic() )
count = eventId == EVENT_SUMMON_BALLS_3 ? 36 : 6; count = eventId == EVENT_SUMMON_BALLS_3 ? 36 : 6;
@@ -306,7 +306,7 @@ struct boss_twin_valkyrAI : public ScriptedAI
if( Creature* ball = me->SummonCreature((i % 2) ? NPC_CONCENTRATED_DARK : NPC_CONCENTRATED_LIGHT, Locs[LOC_CENTER].GetPositionX() + cos(angle) * 47.0f, Locs[LOC_CENTER].GetPositionY() + sin(angle) * 47.0f, Locs[LOC_CENTER].GetPositionZ() + 1.5f, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1500) ) if( Creature* ball = me->SummonCreature((i % 2) ? NPC_CONCENTRATED_DARK : NPC_CONCENTRATED_LIGHT, Locs[LOC_CENTER].GetPositionX() + cos(angle) * 47.0f, Locs[LOC_CENTER].GetPositionY() + sin(angle) * 47.0f, Locs[LOC_CENTER].GetPositionZ() + 1.5f, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1500) )
boss_twin_valkyrAI::JustSummoned(ball); boss_twin_valkyrAI::JustSummoned(ball);
} }
events.PopEvent();
switch( eventId ) switch( eventId )
{ {
case EVENT_SUMMON_BALLS_1: case EVENT_SUMMON_BALLS_1:
@@ -448,7 +448,7 @@ struct boss_twin_valkyrAI : public ScriptedAI
break; break;
case EVENT_REMOVE_DUAL_WIELD: case EVENT_REMOVE_DUAL_WIELD:
me->SetCanDualWield(false); me->SetCanDualWield(false);
events.PopEvent();
break; break;
} }
@@ -572,7 +572,7 @@ public:
void Update(uint32 diff) void Update(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -590,20 +590,18 @@ public:
case EVENT_OPEN_GATE: case EVENT_OPEN_GATE:
{ {
HandleGameObject(GO_MainGateGUID, true); HandleGameObject(GO_MainGateGUID, true);
events.PopEvent(); break;
} }
break;
case EVENT_CLOSE_GATE: case EVENT_CLOSE_GATE:
{ {
HandleGameObject(GO_MainGateGUID, false); HandleGameObject(GO_MainGateGUID, false);
events.PopEvent();
} }
break; break;
case EVENT_SCENE_001: case EVENT_SCENE_001:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_0_01); c->AI()->Talk(SAY_STAGE_0_01);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_002, 22000); events.RescheduleEvent(EVENT_SCENE_002, 22000);
} }
break; break;
@@ -611,7 +609,7 @@ public:
{ {
if( Creature* c = instance->GetCreature(NPC_VarianGUID) ) if( Creature* c = instance->GetCreature(NPC_VarianGUID) )
c->AI()->Talk(SAY_STAGE_0_03a); c->AI()->Talk(SAY_STAGE_0_03a);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_003, 5000); events.RescheduleEvent(EVENT_SCENE_003, 5000);
} }
break; break;
@@ -619,7 +617,7 @@ public:
{ {
if( Creature* c = instance->GetCreature(NPC_GarroshGUID) ) if( Creature* c = instance->GetCreature(NPC_GarroshGUID) )
c->AI()->Talk(SAY_STAGE_0_03h); c->AI()->Talk(SAY_STAGE_0_03h);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_004, 8000); events.RescheduleEvent(EVENT_SCENE_004, 8000);
} }
break; break;
@@ -632,7 +630,7 @@ public:
c->AI()->Talk(SAY_STAGE_0_02); c->AI()->Talk(SAY_STAGE_0_02);
HandleGameObject(GO_MainGateGUID, true); HandleGameObject(GO_MainGateGUID, true);
HandleGameObject(GO_EnterGateGUID, false); HandleGameObject(GO_EnterGateGUID, false);
events.PopEvent();
events.RescheduleEvent(EVENT_SUMMON_GORMOK, 1000); events.RescheduleEvent(EVENT_SUMMON_GORMOK, 1000);
if (instance->IsHeroic()) if (instance->IsHeroic())
{ {
@@ -655,14 +653,14 @@ public:
if( Creature* c = instance->GetCreature(NPC_IcehowlGUID) ) if( Creature* c = instance->GetCreature(NPC_IcehowlGUID) )
if (c->IsAlive()) if (c->IsAlive())
c->CastSpell(c, 26662, true); c->CastSpell(c, 26662, true);
events.PopEvent();
break; break;
case EVENT_SUMMON_GORMOK: case EVENT_SUMMON_GORMOK:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
if( Creature* gormok = c->SummonCreature(NPC_GORMOK, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000) ) if( Creature* gormok = c->SummonCreature(NPC_GORMOK, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000) )
gormok->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ()); gormok->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ());
events.PopEvent();
events.RescheduleEvent(EVENT_GORMOK_ATTACK, 10000); events.RescheduleEvent(EVENT_GORMOK_ATTACK, 10000);
events.RescheduleEvent(EVENT_CLOSE_GATE, 6000); events.RescheduleEvent(EVENT_CLOSE_GATE, 6000);
} }
@@ -681,19 +679,18 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
} }
} }
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_005: case EVENT_SCENE_005:
{ {
northrendBeastsMask |= 16; northrendBeastsMask |= 16;
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_0_04); c->AI()->Talk(SAY_STAGE_0_04);
events.PopEvent();
events.RescheduleEvent(EVENT_OPEN_GATE, 3000); events.RescheduleEvent(EVENT_OPEN_GATE, 3000);
events.RescheduleEvent(EVENT_SUMMON_ACIDMAW_AND_DREADSCALE, 4000); events.RescheduleEvent(EVENT_SUMMON_ACIDMAW_AND_DREADSCALE, 4000);
break;
} }
break;
case EVENT_SUMMON_ACIDMAW_AND_DREADSCALE: case EVENT_SUMMON_ACIDMAW_AND_DREADSCALE:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
@@ -703,18 +700,19 @@ public:
if( Creature* acidmaw = c->SummonCreature(NPC_ACIDMAW, Locs[LOC_ACIDMAW].GetPositionX(), Locs[LOC_ACIDMAW].GetPositionY(), Locs[LOC_ACIDMAW].GetPositionZ(), Locs[LOC_ACIDMAW].GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN) ) if( Creature* acidmaw = c->SummonCreature(NPC_ACIDMAW, Locs[LOC_ACIDMAW].GetPositionX(), Locs[LOC_ACIDMAW].GetPositionY(), Locs[LOC_ACIDMAW].GetPositionZ(), Locs[LOC_ACIDMAW].GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN) )
acidmaw->AddAura(53421, acidmaw); acidmaw->AddAura(53421, acidmaw);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_005_2, 4000); events.RescheduleEvent(EVENT_SCENE_005_2, 4000);
break;
} }
break;
case EVENT_SCENE_005_2: case EVENT_SCENE_005_2:
{ {
if( Creature* dreadscale = instance->GetCreature(NPC_DreadscaleGUID) ) if( Creature* dreadscale = instance->GetCreature(NPC_DreadscaleGUID) )
dreadscale->GetMotionMaster()->MovePoint(0, Locs[LOC_DREADSCALE].GetPositionX(), Locs[LOC_DREADSCALE].GetPositionY(), Locs[LOC_DREADSCALE].GetPositionZ()); dreadscale->GetMotionMaster()->MovePoint(0, Locs[LOC_DREADSCALE].GetPositionX(), Locs[LOC_DREADSCALE].GetPositionY(), Locs[LOC_DREADSCALE].GetPositionZ());
events.PopEvent();
events.RescheduleEvent(EVENT_ACIDMAW_AND_DREADSCALE_ATTACK, 7000); events.RescheduleEvent(EVENT_ACIDMAW_AND_DREADSCALE_ATTACK, 7000);
break;
} }
break;
case EVENT_ACIDMAW_AND_DREADSCALE_ATTACK: case EVENT_ACIDMAW_AND_DREADSCALE_ATTACK:
{ {
HandleGameObject(GO_MainGateGUID, false); HandleGameObject(GO_MainGateGUID, false);
@@ -742,29 +740,28 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
} }
} }
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_006: case EVENT_SCENE_006:
{ {
northrendBeastsMask |= 32; northrendBeastsMask |= 32;
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_0_05); c->AI()->Talk(SAY_STAGE_0_05);
events.PopEvent();
events.RescheduleEvent(EVENT_OPEN_GATE, 2000); events.RescheduleEvent(EVENT_OPEN_GATE, 2000);
events.RescheduleEvent(EVENT_SUMMON_ICEHOWL, 3000); events.RescheduleEvent(EVENT_SUMMON_ICEHOWL, 3000);
break;
} }
break;
case EVENT_SUMMON_ICEHOWL: case EVENT_SUMMON_ICEHOWL:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
if( Creature* icehowl = c->SummonCreature(NPC_ICEHOWL, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000) ) if( Creature* icehowl = c->SummonCreature(NPC_ICEHOWL, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000) )
icehowl->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ()); icehowl->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ());
events.PopEvent();
events.RescheduleEvent(EVENT_ICEHOWL_ATTACK, 10000); events.RescheduleEvent(EVENT_ICEHOWL_ATTACK, 10000);
events.RescheduleEvent(EVENT_CLOSE_GATE, 6000); events.RescheduleEvent(EVENT_CLOSE_GATE, 6000);
break;
} }
break;
case EVENT_ICEHOWL_ATTACK: case EVENT_ICEHOWL_ATTACK:
{ {
if( Creature* c = instance->GetCreature(NPC_IcehowlGUID) ) if( Creature* c = instance->GetCreature(NPC_IcehowlGUID) )
@@ -778,18 +775,16 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
} }
} }
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_BEASTS_DONE: case EVENT_SCENE_BEASTS_DONE:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_0_06); c->AI()->Talk(SAY_STAGE_0_06);
if( Creature* c = instance->GetCreature(NPC_BarrettGUID) ) if( Creature* c = instance->GetCreature(NPC_BarrettGUID) )
c->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); c->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_101: case EVENT_SCENE_101:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
@@ -811,18 +806,17 @@ public:
icehowl->DestroyForNearbyPlayers(); icehowl->DestroyForNearbyPlayers();
} }
} }
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_102: case EVENT_SCENE_102:
{ {
HandleGameObject(GO_MainGateGUID, false); HandleGameObject(GO_MainGateGUID, false);
if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) ) if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) )
c->AI()->Talk(SAY_STAGE_1_02); c->AI()->Talk(SAY_STAGE_1_02);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_103, 11000); events.RescheduleEvent(EVENT_SCENE_103, 11000);
break;
} }
break;
case EVENT_SCENE_103: case EVENT_SCENE_103:
{ {
if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) ) if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) )
@@ -832,10 +826,10 @@ public:
if( Creature* trigger = c->SummonCreature(NPC_PURPLE_GROUND, Locs[LOC_CENTER].GetPositionX(), Locs[LOC_CENTER].GetPositionY(), Locs[LOC_CENTER].GetPositionZ(), Locs[LOC_CENTER].GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN) ) if( Creature* trigger = c->SummonCreature(NPC_PURPLE_GROUND, Locs[LOC_CENTER].GetPositionX(), Locs[LOC_CENTER].GetPositionY(), Locs[LOC_CENTER].GetPositionZ(), Locs[LOC_CENTER].GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN) )
NPC_PurpleGroundGUID = trigger->GetGUID(); NPC_PurpleGroundGUID = trigger->GetGUID();
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_104, 5000); events.RescheduleEvent(EVENT_SCENE_104, 5000);
break;
} }
break;
case EVENT_SCENE_104: case EVENT_SCENE_104:
{ {
if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) ) if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) )
@@ -849,10 +843,10 @@ public:
} }
c->HandleEmoteCommand(EMOTE_STATE_SPELL_PRECAST); c->HandleEmoteCommand(EMOTE_STATE_SPELL_PRECAST);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SUMMON_JARAXXUS, 5000); events.RescheduleEvent(EVENT_SUMMON_JARAXXUS, 5000);
break;
} }
break;
case EVENT_SUMMON_JARAXXUS: case EVENT_SUMMON_JARAXXUS:
{ {
if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) ) if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) )
@@ -862,10 +856,10 @@ public:
c->HandleEmoteCommand(EMOTE_STATE_NONE); c->HandleEmoteCommand(EMOTE_STATE_NONE);
c->AI()->Talk(SAY_STAGE_1_04); c->AI()->Talk(SAY_STAGE_1_04);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_105, 3000); events.RescheduleEvent(EVENT_SCENE_105, 3000);
break;
} }
break;
case EVENT_SCENE_105: case EVENT_SCENE_105:
{ {
if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) ) if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) )
@@ -876,26 +870,26 @@ public:
if( Creature* c = instance->GetCreature(NPC_PortalGUID) ) if( Creature* c = instance->GetCreature(NPC_PortalGUID) )
c->DespawnOrUnsummon(); c->DespawnOrUnsummon();
NPC_PortalGUID = 0; NPC_PortalGUID = 0;
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_106, 10000); events.RescheduleEvent(EVENT_SCENE_106, 10000);
break;
} }
break;
case EVENT_SCENE_106: case EVENT_SCENE_106:
{ {
if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) ) if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) )
c->AI()->Talk(SAY_STAGE_1_05); c->AI()->Talk(SAY_STAGE_1_05);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_107, 5000); events.RescheduleEvent(EVENT_SCENE_107, 5000);
break;
} }
break;
case EVENT_SCENE_107: case EVENT_SCENE_107:
{ {
if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) ) if( Creature* c = instance->GetCreature(NPC_FizzlebangGUID) )
c->AI()->Talk(SAY_STAGE_1_06); c->AI()->Talk(SAY_STAGE_1_06);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_108, 800); events.RescheduleEvent(EVENT_SCENE_108, 800);
break;
} }
break;
case EVENT_SCENE_108: case EVENT_SCENE_108:
{ {
if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) ) if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) )
@@ -908,20 +902,20 @@ public:
Unit::Kill(f, f); Unit::Kill(f, f);
} }
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_109, 5000); events.RescheduleEvent(EVENT_SCENE_109, 5000);
break;
} }
break;
case EVENT_SCENE_109: case EVENT_SCENE_109:
{ {
if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) ) if( Creature* c = instance->GetCreature(NPC_JaraxxusGUID) )
c->SetFacingTo(3 * M_PI / 2); c->SetFacingTo(3 * M_PI / 2);
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_1_07); c->AI()->Talk(SAY_STAGE_1_07);
events.PopEvent();
events.RescheduleEvent(EVENT_JARAXXUS_ATTACK, 6000); events.RescheduleEvent(EVENT_JARAXXUS_ATTACK, 6000);
break;
} }
break;
case EVENT_JARAXXUS_ATTACK: case EVENT_JARAXXUS_ATTACK:
{ {
InstanceProgress = INSTANCE_PROGRESS_JARAXXUS_INTRO_DONE; InstanceProgress = INSTANCE_PROGRESS_JARAXXUS_INTRO_DONE;
@@ -936,42 +930,40 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
} }
} }
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_110: case EVENT_SCENE_110:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_1_08); c->AI()->Talk(SAY_STAGE_1_08);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_111, 18000); events.RescheduleEvent(EVENT_SCENE_111, 18000);
break;
} }
break;
case EVENT_SCENE_111: case EVENT_SCENE_111:
{ {
if( Creature* c = instance->GetCreature(NPC_GarroshGUID) ) if( Creature* c = instance->GetCreature(NPC_GarroshGUID) )
c->AI()->Talk(SAY_STAGE_1_09); c->AI()->Talk(SAY_STAGE_1_09);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_112, 9000); events.RescheduleEvent(EVENT_SCENE_112, 9000);
break;
} }
break;
case EVENT_SCENE_112: case EVENT_SCENE_112:
{ {
if( Creature* c = instance->GetCreature(NPC_VarianGUID) ) if( Creature* c = instance->GetCreature(NPC_VarianGUID) )
c->AI()->Talk(SAY_STAGE_1_10); c->AI()->Talk(SAY_STAGE_1_10);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_113, 5000); events.RescheduleEvent(EVENT_SCENE_113, 5000);
break;
} }
break;
case EVENT_SCENE_113: case EVENT_SCENE_113:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_1_11); c->AI()->Talk(SAY_STAGE_1_11);
if( Creature* c = instance->GetCreature(NPC_BarrettGUID) ) if( Creature* c = instance->GetCreature(NPC_BarrettGUID) )
c->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); c->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_201: case EVENT_SCENE_201:
{ {
// move Jaraxxus to side, can't remove corpse because of loot! // move Jaraxxus to side, can't remove corpse because of loot!
@@ -984,10 +976,10 @@ public:
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_2_01); c->AI()->Talk(SAY_STAGE_2_01);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_202, 9000); events.RescheduleEvent(EVENT_SCENE_202, 9000);
break;
} }
break;
case EVENT_SCENE_202: case EVENT_SCENE_202:
{ {
Map::PlayerList const& pl = instance->GetPlayers(); Map::PlayerList const& pl = instance->GetPlayers();
@@ -1011,17 +1003,16 @@ public:
c->AI()->Talk(SAY_STAGE_2_02a); c->AI()->Talk(SAY_STAGE_2_02a);
events.RescheduleEvent(EVENT_SCENE_203, 18000); events.RescheduleEvent(EVENT_SCENE_203, 18000);
} }
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_203: case EVENT_SCENE_203:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_2_03); c->AI()->Talk(SAY_STAGE_2_03);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_204, 5000); events.RescheduleEvent(EVENT_SCENE_204, 5000);
break;
} }
break;
case EVENT_SCENE_204: case EVENT_SCENE_204:
{ {
if( TeamIdInInstance == TEAM_ALLIANCE ) if( TeamIdInInstance == TEAM_ALLIANCE )
@@ -1036,17 +1027,17 @@ public:
c->AI()->Talk(SAY_STAGE_2_04a); c->AI()->Talk(SAY_STAGE_2_04a);
events.RescheduleEvent(EVENT_SCENE_205, 5000); events.RescheduleEvent(EVENT_SCENE_205, 5000);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SUMMON_CHAMPIONS, 2500); events.RescheduleEvent(EVENT_SUMMON_CHAMPIONS, 2500);
break;
} }
break;
case EVENT_SCENE_205: case EVENT_SCENE_205:
{ {
if( Creature* c = instance->GetCreature(TeamIdInInstance == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID) ) if( Creature* c = instance->GetCreature(TeamIdInInstance == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID) )
c->AI()->Talk(TeamIdInInstance == TEAM_ALLIANCE ? SAY_STAGE_2_05a : SAY_STAGE_2_05h); c->AI()->Talk(TeamIdInInstance == TEAM_ALLIANCE ? SAY_STAGE_2_05a : SAY_STAGE_2_05h);
events.PopEvent();
break;
} }
break;
case EVENT_SUMMON_CHAMPIONS: case EVENT_SUMMON_CHAMPIONS:
{ {
std::vector<uint32> vHealerEntries; std::vector<uint32> vHealerEntries;
@@ -1119,10 +1110,9 @@ public:
} }
HandleGameObject(GO_EnterGateGUID, false); HandleGameObject(GO_EnterGateGUID, false);
events.PopEvent();
events.RescheduleEvent(EVENT_CHAMPIONS_ATTACK, 4000); events.RescheduleEvent(EVENT_CHAMPIONS_ATTACK, 4000);
break;
} }
break;
case EVENT_CHAMPIONS_ATTACK: case EVENT_CHAMPIONS_ATTACK:
{ {
for( std::vector<uint64>::iterator itr = NPC_ChampionGUIDs.begin(); itr != NPC_ChampionGUIDs.end(); ++itr ) for( std::vector<uint64>::iterator itr = NPC_ChampionGUIDs.begin(); itr != NPC_ChampionGUIDs.end(); ++itr )
@@ -1138,34 +1128,32 @@ public:
for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
itr->GetSource()->AddToNotify(NOTIFY_AI_RELOCATION); itr->GetSource()->AddToNotify(NOTIFY_AI_RELOCATION);
EncounterStatus = IN_PROGRESS; EncounterStatus = IN_PROGRESS;
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_FACTION_CHAMPIONS_DEAD: case EVENT_SCENE_FACTION_CHAMPIONS_DEAD:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_2_06); c->AI()->Talk(SAY_STAGE_2_06);
if( Creature* c = instance->GetCreature(NPC_BarrettGUID) ) if( Creature* c = instance->GetCreature(NPC_BarrettGUID) )
c->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); c->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_301: case EVENT_SCENE_301:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_3_01); c->AI()->Talk(SAY_STAGE_3_01);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_302, 13000); events.RescheduleEvent(EVENT_SCENE_302, 13000);
break;
} }
break;
case EVENT_SCENE_302: case EVENT_SCENE_302:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_3_02); c->AI()->Talk(SAY_STAGE_3_02);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_303, 3000); events.RescheduleEvent(EVENT_SCENE_303, 3000);
break;
} }
break;
case EVENT_SCENE_303: case EVENT_SCENE_303:
{ {
HandleGameObject(GO_EnterGateGUID, false); HandleGameObject(GO_EnterGateGUID, false);
@@ -1177,10 +1165,10 @@ public:
if( Creature* t = c->SummonCreature(NPC_DARKBANE, Locs[LOC_VALKYR_LEFT].GetPositionX(), Locs[LOC_VALKYR_LEFT].GetPositionY(), Locs[LOC_VALKYR_LEFT].GetPositionZ(), Locs[LOC_VALKYR_LEFT].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000) ) if( Creature* t = c->SummonCreature(NPC_DARKBANE, Locs[LOC_VALKYR_LEFT].GetPositionX(), Locs[LOC_VALKYR_LEFT].GetPositionY(), Locs[LOC_VALKYR_LEFT].GetPositionZ(), Locs[LOC_VALKYR_LEFT].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000) )
t->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionZ()); t->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionZ());
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_304, 6250); events.RescheduleEvent(EVENT_SCENE_304, 6250);
break;
} }
break;
case EVENT_SCENE_304: case EVENT_SCENE_304:
{ {
HandleGameObject(GO_MainGateGUID, false); HandleGameObject(GO_MainGateGUID, false);
@@ -1189,10 +1177,10 @@ public:
c->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionZ()); c->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionZ());
if( Creature* c = instance->GetCreature(NPC_DarkbaneGUID) ) if( Creature* c = instance->GetCreature(NPC_DarkbaneGUID) )
c->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionZ()); c->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionZ());
events.PopEvent();
events.RescheduleEvent(EVENT_VALKYRIES_ATTACK, 3250); events.RescheduleEvent(EVENT_VALKYRIES_ATTACK, 3250);
break;
} }
break;
case EVENT_VALKYRIES_ATTACK: case EVENT_VALKYRIES_ATTACK:
{ {
if( Creature* c = instance->GetCreature(NPC_LightbaneGUID) ) if( Creature* c = instance->GetCreature(NPC_LightbaneGUID) )
@@ -1215,9 +1203,8 @@ public:
c->AI()->DoZoneInCombat(); c->AI()->DoZoneInCombat();
}*/ }*/
} }
events.PopEvent(); break;
} }
break;
case EVENT_SCENE_VALKYR_DEAD: case EVENT_SCENE_VALKYR_DEAD:
{ {
if (TeamIdInInstance == TEAM_NEUTRAL) if (TeamIdInInstance == TEAM_NEUTRAL)
@@ -1233,18 +1220,18 @@ public:
} }
if( Creature* c = instance->GetCreature(TeamIdInInstance == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID) ) if( Creature* c = instance->GetCreature(TeamIdInInstance == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID) )
c->AI()->Talk((TeamIdInInstance == TEAM_ALLIANCE ? SAY_STAGE_3_03a : SAY_STAGE_3_03h)); c->AI()->Talk((TeamIdInInstance == TEAM_ALLIANCE ? SAY_STAGE_3_03a : SAY_STAGE_3_03h));
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_401, 60000); events.RescheduleEvent(EVENT_SCENE_401, 60000);
break;
} }
break;
case EVENT_SCENE_401: case EVENT_SCENE_401:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_4_01); c->AI()->Talk(SAY_STAGE_4_01);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_402, 20000); events.RescheduleEvent(EVENT_SCENE_402, 20000);
break;
} }
break;
case EVENT_SCENE_402: case EVENT_SCENE_402:
{ {
HandleGameObject(GO_EnterGateGUID, false); HandleGameObject(GO_EnterGateGUID, false);
@@ -1258,10 +1245,10 @@ public:
t->AI()->Talk(SAY_STAGE_4_02); t->AI()->Talk(SAY_STAGE_4_02);
t->SetVisible(false); t->SetVisible(false);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_403, 2000); events.RescheduleEvent(EVENT_SCENE_403, 2000);
break;
} }
break;
case EVENT_SCENE_403: case EVENT_SCENE_403:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
@@ -1270,10 +1257,10 @@ public:
t->SetReactState(REACT_PASSIVE); t->SetReactState(REACT_PASSIVE);
t->CastSpell(t, 51807, true); t->CastSpell(t, 51807, true);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_404, 2000); events.RescheduleEvent(EVENT_SCENE_404, 2000);
break;
} }
break;
case EVENT_SCENE_404: case EVENT_SCENE_404:
{ {
if( Creature* c = instance->GetCreature(NPC_LichKingGUID) ) if( Creature* c = instance->GetCreature(NPC_LichKingGUID) )
@@ -1282,18 +1269,18 @@ public:
c->SetVisible(true); c->SetVisible(true);
c->GetMotionMaster()->MovePoint(0, Locs[LOC_ARTHAS]); c->GetMotionMaster()->MovePoint(0, Locs[LOC_ARTHAS]);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_405, 3000); events.RescheduleEvent(EVENT_SCENE_405, 3000);
break;
} }
break;
case EVENT_SCENE_405: case EVENT_SCENE_405:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
c->AI()->Talk(SAY_STAGE_4_03); c->AI()->Talk(SAY_STAGE_4_03);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_406, 7000); events.RescheduleEvent(EVENT_SCENE_406, 7000);
break;
} }
break;
case EVENT_SCENE_406: case EVENT_SCENE_406:
{ {
if( Creature* c = instance->GetCreature(NPC_LichKingGUID) ) if( Creature* c = instance->GetCreature(NPC_LichKingGUID) )
@@ -1301,36 +1288,39 @@ public:
c->AI()->Talk(SAY_STAGE_4_04); c->AI()->Talk(SAY_STAGE_4_04);
c->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); c->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_406_2, 2500); events.RescheduleEvent(EVENT_SCENE_406_2, 2500);
events.RescheduleEvent(EVENT_SCENE_407, 12000); events.RescheduleEvent(EVENT_SCENE_407, 12000);
break;
} }
break;
case EVENT_SCENE_406_2: case EVENT_SCENE_406_2:
{ {
if( Creature* c = instance->GetCreature(NPC_LichKingGUID) ) if( Creature* c = instance->GetCreature(NPC_LichKingGUID) )
{
c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK); c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
events.PopEvent(); }
break;
} }
break;
case EVENT_SCENE_407: case EVENT_SCENE_407:
{ {
if( Creature* c = instance->GetCreature(NPC_LichKingGUID) ) if( Creature* c = instance->GetCreature(NPC_LichKingGUID) )
c->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); c->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_408, 4000); events.RescheduleEvent(EVENT_SCENE_408, 4000);
break;
} }
break;
case EVENT_SCENE_408: case EVENT_SCENE_408:
{ {
if( Creature* c = instance->GetCreature(NPC_LichKingGUID) ) if( Creature* c = instance->GetCreature(NPC_LichKingGUID) )
{ {
c->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); c->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_409, 1500); events.RescheduleEvent(EVENT_SCENE_409, 1500);
break;
} }
break;
case EVENT_SCENE_409: case EVENT_SCENE_409:
{ {
if( Creature* c = instance->GetCreature(NPC_LichKingGUID) ) if( Creature* c = instance->GetCreature(NPC_LichKingGUID) )
@@ -1346,10 +1336,10 @@ public:
InstanceProgress = INSTANCE_PROGRESS_ANUB_ARAK; InstanceProgress = INSTANCE_PROGRESS_ANUB_ARAK;
SpawnAnubArak(); SpawnAnubArak();
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_410, 2000); events.RescheduleEvent(EVENT_SCENE_410, 2000);
break;
} }
break;
case EVENT_SCENE_410: case EVENT_SCENE_410:
{ {
if( Creature* c = instance->GetCreature(NPC_LichKingGUID) ) if( Creature* c = instance->GetCreature(NPC_LichKingGUID) )
@@ -1358,9 +1348,9 @@ public:
c->AI()->Talk(SAY_STAGE_4_05); c->AI()->Talk(SAY_STAGE_4_05);
c->DespawnOrUnsummon(0); c->DespawnOrUnsummon(0);
} }
events.PopEvent();
break;
} }
break;
case EVENT_SCENE_501: case EVENT_SCENE_501:
{ {
if( Creature* c = instance->GetCreature(NPC_TirionGUID) ) if( Creature* c = instance->GetCreature(NPC_TirionGUID) )
@@ -1369,10 +1359,10 @@ public:
c->SummonCreature(NPC_ARGENT_MAGE, Locs[LOC_MAGE].GetPositionX(), Locs[LOC_MAGE].GetPositionY(), Locs[LOC_MAGE].GetPositionZ(), Locs[LOC_MAGE].GetOrientation()); c->SummonCreature(NPC_ARGENT_MAGE, Locs[LOC_MAGE].GetPositionX(), Locs[LOC_MAGE].GetPositionY(), Locs[LOC_MAGE].GetPositionZ(), Locs[LOC_MAGE].GetOrientation());
c->SummonGameObject(195682, 668.15f, 134.57f, 142.12f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 630000000); c->SummonGameObject(195682, 668.15f, 134.57f, 142.12f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 630000000);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SCENE_502, 20000); events.RescheduleEvent(EVENT_SCENE_502, 20000);
break;
} }
break;
case EVENT_SCENE_502: case EVENT_SCENE_502:
{ {
if( instance->IsHeroic() ) if( instance->IsHeroic() )
@@ -1420,10 +1410,9 @@ public:
} }
} }
} }
break;
events.PopEvent();
} }
break;
} }
} }
@@ -128,7 +128,7 @@ public:
if (me->isAttackReady()) if (me->isAttackReady())
me->SetFacingToObject(me->GetVictim()); me->SetFacingToObject(me->GetVictim());
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -159,7 +159,7 @@ public:
me->CastSpell(me, SPELL_SOULSTORM, false); me->CastSpell(me, SPELL_SOULSTORM, false);
me->CastSpell(me, SPELL_TELEPORT_VISUAL, true); me->CastSpell(me, SPELL_TELEPORT_VISUAL, true);
me->CastSpell(me, SPELL_SOULSTORM_VISUAL, true); me->CastSpell(me, SPELL_SOULSTORM_VISUAL, true);
events.PopEvent();
break; break;
} }
@@ -164,7 +164,7 @@ public:
if (Spell* s = me->GetCurrentSpell(CURRENT_CHANNELED_SPELL)) if (Spell* s = me->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
if (s->m_spellInfo->Id == SPELL_MIRRORED_SOUL) if (s->m_spellInfo->Id == SPELL_MIRRORED_SOUL)
{ {
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -190,7 +190,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -67,12 +67,12 @@ public:
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
{ {
events.Update(diff); events.Update(diff);
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
case 1: case 1:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_1); Talk(SAY_JAINA_INTRO_1);
@@ -85,7 +85,7 @@ public:
} }
break; break;
case 2: case 2:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_2); Talk(SAY_JAINA_INTRO_2);
@@ -98,7 +98,7 @@ public:
} }
break; break;
case 3: case 3:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_3); Talk(SAY_JAINA_INTRO_3);
@@ -111,7 +111,7 @@ public:
} }
break; break;
case 4: case 4:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_4); Talk(SAY_JAINA_INTRO_4);
@@ -124,7 +124,7 @@ public:
} }
break; break;
case 5: case 5:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_5); Talk(SAY_JAINA_INTRO_5);
@@ -137,7 +137,7 @@ public:
} }
break; break;
case 6: case 6:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_6); Talk(SAY_JAINA_INTRO_6);
@@ -149,7 +149,7 @@ public:
} }
break; break;
case 7: case 7:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_7); Talk(SAY_JAINA_INTRO_7);
@@ -157,7 +157,7 @@ public:
} }
break; break;
case 8: case 8:
events.PopEvent();
if (me->GetEntry() == NPC_JAINA_PART1) if (me->GetEntry() == NPC_JAINA_PART1)
{ {
Talk(SAY_JAINA_INTRO_8); Talk(SAY_JAINA_INTRO_8);
@@ -223,7 +223,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -244,7 +244,7 @@ public:
me->GetMotionMaster()->MoveJump(northForgePos.GetPositionX(), northForgePos.GetPositionY(), northForgePos.GetPositionZ(), 25.0f, 15.0f, 0); me->GetMotionMaster()->MoveJump(northForgePos.GetPositionX(), northForgePos.GetPositionY(), northForgePos.GetPositionZ(), 25.0f, 15.0f, 0);
else if (phase == 2) else if (phase == 2)
me->GetMotionMaster()->MoveJump(southForgePos.GetPositionX(), southForgePos.GetPositionY(), southForgePos.GetPositionZ(), 25.0f, 15.0f, 0); me->GetMotionMaster()->MoveJump(southForgePos.GetPositionX(), southForgePos.GetPositionY(), southForgePos.GetPositionZ(), 25.0f, 15.0f, 0);
events.PopEvent();
break; break;
case EVENT_SPELL_CHILLING_WAVE: case EVENT_SPELL_CHILLING_WAVE:
me->CastSpell(me->GetVictim(), SPELL_CHILLING_WAVE, false); me->CastSpell(me->GetVictim(), SPELL_CHILLING_WAVE, false);
@@ -168,7 +168,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED)) if (me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -202,7 +202,7 @@ public:
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
events.PopEvent();
break; break;
case EVENT_SPECIAL: case EVENT_SPECIAL:
switch(urand(0, 2)) switch(urand(0, 2))
@@ -298,7 +298,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -315,7 +315,7 @@ public:
c->AI()->Reset(); c->AI()->Reset();
} }
} }
events.PopEvent();
events.RescheduleEvent(1, 3000); events.RescheduleEvent(1, 3000);
break; break;
case 1: case 1:
@@ -335,7 +335,7 @@ public:
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_GUARD_1_GUID + i))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_GUARD_1_GUID + i)))
c->DespawnOrUnsummon(); c->DespawnOrUnsummon();
} }
events.PopEvent();
events.RescheduleEvent(2, 7000); events.RescheduleEvent(2, 7000);
break; break;
case 2: case 2:
@@ -350,12 +350,12 @@ public:
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_LEADER_FIRST_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_LEADER_FIRST_GUID)))
c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_1 : SAY_SYLVANAS_KRICK_1); c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_1 : SAY_SYLVANAS_KRICK_1);
} }
events.PopEvent();
events.RescheduleEvent(3, 6500); events.RescheduleEvent(3, 6500);
break; break;
case 3: case 3:
Talk(SAY_OUTRO_KRICK_2); Talk(SAY_OUTRO_KRICK_2);
events.PopEvent();
events.RescheduleEvent(4, 17000); events.RescheduleEvent(4, 17000);
break; break;
case 4: case 4:
@@ -366,12 +366,12 @@ public:
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_LEADER_FIRST_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_LEADER_FIRST_GUID)))
c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_2 : SAY_SYLVANAS_KRICK_2); c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_2 : SAY_SYLVANAS_KRICK_2);
} }
events.PopEvent();
events.RescheduleEvent(5, 6500); events.RescheduleEvent(5, 6500);
break; break;
case 5: case 5:
Talk(SAY_OUTRO_KRICK_3); Talk(SAY_OUTRO_KRICK_3);
events.PopEvent();
events.RescheduleEvent(6, 6500); events.RescheduleEvent(6, 6500);
break; break;
case 6: case 6:
@@ -381,7 +381,7 @@ public:
c->SetFacingToObject(me); c->SetFacingToObject(me);
c->AI()->Talk(SAY_TYRANNUS_KRICK_1); c->AI()->Talk(SAY_TYRANNUS_KRICK_1);
} }
events.PopEvent();
events.RescheduleEvent(7, 4000); events.RescheduleEvent(7, 4000);
break; break;
case 7: case 7:
@@ -392,12 +392,12 @@ public:
me->SendMovementFlagUpdate(); me->SendMovementFlagUpdate();
me->GetMotionMaster()->MoveTakeoff(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 9.0f, 0.5f * 7.0f); me->GetMotionMaster()->MoveTakeoff(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 9.0f, 0.5f * 7.0f);
events.PopEvent();
events.RescheduleEvent(8, 2000); events.RescheduleEvent(8, 2000);
break; break;
case 8: case 8:
Talk(SAY_OUTRO_KRICK_4); Talk(SAY_OUTRO_KRICK_4);
events.PopEvent();
events.RescheduleEvent(9, 1500); events.RescheduleEvent(9, 1500);
break; break;
case 9: case 9:
@@ -415,14 +415,14 @@ public:
me->RemoveAllAuras(); me->RemoveAllAuras();
me->GetMotionMaster()->MoveFall(0, true); me->GetMotionMaster()->MoveFall(0, true);
events.PopEvent();
events.RescheduleEvent(10, 5000); events.RescheduleEvent(10, 5000);
break; break;
case 10: case 10:
if (pInstance) if (pInstance)
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID)))
c->AI()->Talk(SAY_TYRANNUS_KRICK_2); c->AI()->Talk(SAY_TYRANNUS_KRICK_2);
events.PopEvent();
events.RescheduleEvent(11, 9000); events.RescheduleEvent(11, 9000);
break; break;
case 11: case 11:
@@ -438,7 +438,7 @@ public:
} }
me->setActive(false); me->setActive(false);
Unit::Kill(me, me); Unit::Kill(me, me);
events.PopEvent();
break; break;
} }
} }
@@ -138,7 +138,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -146,7 +146,7 @@ public:
if (me->IsWithinMeleeRange(me->GetVictim())) if (me->IsWithinMeleeRange(me->GetVictim()))
{ {
me->CastSpell(me->GetVictim(), SPELL_FORCEFUL_SMASH, false); me->CastSpell(me->GetVictim(), SPELL_FORCEFUL_SMASH, false);
events.PopEvent();
events.RescheduleEvent(EVENT_SPELL_UNHOLY_POWER, 1000); events.RescheduleEvent(EVENT_SPELL_UNHOLY_POWER, 1000);
break; break;
} }
@@ -156,7 +156,7 @@ public:
Talk(SAY_SMASH); Talk(SAY_SMASH);
Talk(EMOTE_SMASH); Talk(EMOTE_SMASH);
me->CastSpell(me, SPELL_UNHOLY_POWER, false); me->CastSpell(me, SPELL_UNHOLY_POWER, false);
events.PopEvent();
events.ScheduleEvent(EVENT_SPELL_FORCEFUL_SMASH, urand(40000, 48000)); events.ScheduleEvent(EVENT_SPELL_FORCEFUL_SMASH, urand(40000, 48000));
break; break;
case EVENT_SPELL_OVERLORDS_BRAND: case EVENT_SPELL_OVERLORDS_BRAND:
@@ -58,7 +58,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -88,7 +88,7 @@ public:
} }
else else
{ {
events.PopEvent();
events.RescheduleEvent(2, 2500); events.RescheduleEvent(2, 2500);
} }
} }
@@ -100,14 +100,14 @@ public:
c->setActive(true); c->setActive(true);
c->AI()->Talk(SAY_TYRANNUS_INTRO_1); c->AI()->Talk(SAY_TYRANNUS_INTRO_1);
} }
events.PopEvent();
events.RescheduleEvent(3, 7000); events.RescheduleEvent(3, 7000);
break; break;
case 3: case 3:
if (pInstance) if (pInstance)
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID)))
c->AI()->Talk(SAY_TYRANNUS_INTRO_2); c->AI()->Talk(SAY_TYRANNUS_INTRO_2);
events.PopEvent();
events.RescheduleEvent(4, 14000); events.RescheduleEvent(4, 14000);
break; break;
case 4: case 4:
@@ -148,19 +148,19 @@ public:
} }
} }
} }
events.PopEvent();
events.RescheduleEvent(5, 1); events.RescheduleEvent(5, 1);
break; break;
case 5: case 5:
Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_1 : SAY_SYLVANAS_INTRO_1); Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_1 : SAY_SYLVANAS_INTRO_1);
events.PopEvent();
events.RescheduleEvent(6, 1000); events.RescheduleEvent(6, 1000);
break; break;
case 6: case 6:
if (pInstance) if (pInstance)
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID)))
c->AI()->Talk(SAY_TYRANNUS_INTRO_3); c->AI()->Talk(SAY_TYRANNUS_INTRO_3);
events.PopEvent();
events.RescheduleEvent(7, 5000); events.RescheduleEvent(7, 5000);
break; break;
case 7: case 7:
@@ -190,14 +190,14 @@ public:
c->GetMotionMaster()->MoveTakeoff(0, c->GetPositionX() + dist * cos(angle), c->GetPositionY() + dist * sin(angle), c->GetPositionZ() + 6.0f + (float)urand(0, 4), 1.5f + frand(0.0f, 1.5f)); c->GetMotionMaster()->MoveTakeoff(0, c->GetPositionX() + dist * cos(angle), c->GetPositionY() + dist * sin(angle), c->GetPositionZ() + 6.0f + (float)urand(0, 4), 1.5f + frand(0.0f, 1.5f));
} }
} }
events.PopEvent();
events.RescheduleEvent(8, 7000); events.RescheduleEvent(8, 7000);
break; break;
case 8: case 8:
if (pInstance) if (pInstance)
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TYRANNUS_EVENT_GUID)))
c->CastSpell(c, 69753, false); c->CastSpell(c, 69753, false);
events.PopEvent();
events.RescheduleEvent(9, 400); events.RescheduleEvent(9, 400);
break; break;
case 9: case 9:
@@ -211,12 +211,12 @@ public:
c->RemoveAllAuras(); c->RemoveAllAuras();
c->GetMotionMaster()->MoveFall(0, true); c->GetMotionMaster()->MoveFall(0, true);
} }
events.PopEvent();
events.RescheduleEvent(10, 1000); events.RescheduleEvent(10, 1000);
break; break;
case 10: case 10:
Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_2 : SAY_SYLVANAS_INTRO_2); Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_2 : SAY_SYLVANAS_INTRO_2);
events.PopEvent();
events.RescheduleEvent(11, 1000); events.RescheduleEvent(11, 1000);
break; break;
case 11: case 11:
@@ -232,7 +232,7 @@ public:
c->SendMovementFlagUpdate(); c->SendMovementFlagUpdate();
c->CastSpell(c, 69350, true); c->CastSpell(c, 69350, true);
} }
events.PopEvent();
events.RescheduleEvent(12, 2000); events.RescheduleEvent(12, 2000);
break; break;
case 12: case 12:
@@ -253,7 +253,7 @@ public:
c->SetReactState(REACT_PASSIVE); c->SetReactState(REACT_PASSIVE);
} }
} }
events.PopEvent();
events.RescheduleEvent(13, 3000); events.RescheduleEvent(13, 3000);
break; break;
case 13: case 13:
@@ -273,7 +273,7 @@ public:
c->SetHomePosition(me->GetPositionX() + dist * cos(angle), me->GetPositionY() + dist * sin(angle), me->GetPositionZ(), 0.0f); c->SetHomePosition(me->GetPositionX() + dist * cos(angle), me->GetPositionY() + dist * sin(angle), me->GetPositionZ(), 0.0f);
} }
} }
events.PopEvent();
events.RescheduleEvent(14, 2000); events.RescheduleEvent(14, 2000);
break; break;
case 14: case 14:
@@ -292,7 +292,7 @@ public:
c->CastSpell(c, 70513, false); c->CastSpell(c, 70513, false);
} }
} }
events.PopEvent();
events.RescheduleEvent(15, 2000); events.RescheduleEvent(15, 2000);
break; break;
case 15: case 15:
@@ -308,7 +308,7 @@ public:
c->CastSpell(c, 70464, false); c->CastSpell(c, 70464, false);
} }
} }
events.PopEvent();
events.RescheduleEvent(16, 3000); events.RescheduleEvent(16, 3000);
break; break;
case 16: case 16:
@@ -333,13 +333,13 @@ public:
} }
pInstance->SetData(DATA_INSTANCE_PROGRESS, INSTANCE_PROGRESS_FINISHED_INTRO); pInstance->SetData(DATA_INSTANCE_PROGRESS, INSTANCE_PROGRESS_FINISHED_INTRO);
} }
events.PopEvent();
events.RescheduleEvent(17, 5000); events.RescheduleEvent(17, 5000);
break; break;
case 17: case 17:
me->setActive(false); me->setActive(false);
Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_5 : SAY_SYLVANAS_INTRO_4); Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_5 : SAY_SYLVANAS_INTRO_4);
events.PopEvent();
break; break;
} }
@@ -457,7 +457,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -520,7 +520,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -542,19 +542,18 @@ public:
c->GetMotionMaster()->MovePath(FBSData[i].pathId, false); c->GetMotionMaster()->MovePath(FBSData[i].pathId, false);
++i; ++i;
} }
events.PopEvent();
events.RescheduleEvent(2, 3000); events.RescheduleEvent(2, 3000);
break; break;
} }
case 2: case 2:
if (Creature* c = me->SummonCreature(NPC_TYRANNUS_VOICE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() - 10.0f, me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 1)) if (Creature* c = me->SummonCreature(NPC_TYRANNUS_VOICE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() - 10.0f, me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 1))
c->AI()->Talk(SAY_TYRANNUS_GARFROST); c->AI()->Talk(SAY_TYRANNUS_GARFROST);
events.PopEvent();
events.RescheduleEvent(3, 4000); events.RescheduleEvent(3, 4000);
break; break;
case 3: case 3:
Talk(SAY_GENERAL_GARFROST); Talk(SAY_GENERAL_GARFROST);
events.PopEvent();
break; break;
} }
} }
@@ -1210,7 +1209,7 @@ public:
{ {
events.Update(diff); events.Update(diff);
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -1223,26 +1222,26 @@ public:
c->SetHover(true); c->SetHover(true);
c->GetMotionMaster()->MovePoint(0, TSSindragosaPos2); c->GetMotionMaster()->MovePoint(0, TSSindragosaPos2);
} }
events.PopEvent();
break; break;
case 2: case 2:
if (pInstance) if (pInstance)
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_MARTIN_OR_GORKUN_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_MARTIN_OR_GORKUN_GUID)))
c->AI()->Talk(SAY_GENERAL_OUTRO_2); c->AI()->Talk(SAY_GENERAL_OUTRO_2);
events.PopEvent();
events.RescheduleEvent(3, me->GetEntry() == NPC_JAINA_PART2 ? 7000 : 8000); events.RescheduleEvent(3, me->GetEntry() == NPC_JAINA_PART2 ? 7000 : 8000);
break; break;
case 3: case 3:
Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_OUTRO_1 : SAY_SYLVANAS_OUTRO_1); Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_OUTRO_1 : SAY_SYLVANAS_OUTRO_1);
me->CastSpell(me, me->GetEntry() == NPC_JAINA_PART2 ? SPELL_TELEPORT_JAINA_VISUAL : SPELL_TELEPORT_SYLVANAS_VISUAL, true); me->CastSpell(me, me->GetEntry() == NPC_JAINA_PART2 ? SPELL_TELEPORT_JAINA_VISUAL : SPELL_TELEPORT_SYLVANAS_VISUAL, true);
events.PopEvent();
events.RescheduleEvent(4, 2000); events.RescheduleEvent(4, 2000);
break; break;
case 4: case 4:
me->CastSpell(me, me->GetEntry() == NPC_JAINA_PART2 ? SPELL_TELEPORT_JAINA : SPELL_TELEPORT_SYLVANAS, true); me->CastSpell(me, me->GetEntry() == NPC_JAINA_PART2 ? SPELL_TELEPORT_JAINA : SPELL_TELEPORT_SYLVANAS, true);
if (GameObject* barrier = me->SummonGameObject(203005, 1055.49f, 115.03f, 628.15f, 2.08f, 0.0f, 0.0f, 0.0f, 0.0f, 86400, false)) if (GameObject* barrier = me->SummonGameObject(203005, 1055.49f, 115.03f, 628.15f, 2.08f, 0.0f, 0.0f, 0.0f, 0.0f, 86400, false))
barrierGUID = barrier->GetGUID(); barrierGUID = barrier->GetGUID();
events.PopEvent();
events.RescheduleEvent(5, 1500); events.RescheduleEvent(5, 1500);
break; break;
case 5: case 5:
@@ -1252,7 +1251,7 @@ public:
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_SINDRAGOSA_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_SINDRAGOSA_GUID)))
c->CastSpell(x->GetPositionX(), x->GetPositionY(), x->GetPositionZ(), SPELL_SINDRAGOSA_FROST_BOMB_POS, true); c->CastSpell(x->GetPositionX(), x->GetPositionY(), x->GetPositionZ(), SPELL_SINDRAGOSA_FROST_BOMB_POS, true);
} }
events.PopEvent();
events.RescheduleEvent(6, 5000); events.RescheduleEvent(6, 5000);
events.RescheduleEvent(10, 2000); events.RescheduleEvent(10, 2000);
break; break;
@@ -1260,7 +1259,7 @@ public:
if (pInstance) if (pInstance)
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_SINDRAGOSA_GUID))) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_SINDRAGOSA_GUID)))
c->GetMotionMaster()->MovePoint(0, TSSindragosaPos1); c->GetMotionMaster()->MovePoint(0, TSSindragosaPos1);
events.PopEvent();
events.RescheduleEvent(7, 4500); events.RescheduleEvent(7, 4500);
break; break;
case 7: case 7:
@@ -1270,17 +1269,16 @@ public:
if (GameObject* barrier = pInstance->instance->GetGameObject(barrierGUID)) if (GameObject* barrier = pInstance->instance->GetGameObject(barrierGUID))
barrier->Delete(); barrier->Delete();
barrierGUID = 0; barrierGUID = 0;
events.PopEvent();
events.RescheduleEvent(8, 2000); events.RescheduleEvent(8, 2000);
break; break;
case 8: case 8:
me->GetMotionMaster()->MovePath(me->GetEntry() == NPC_JAINA_PART2 ? PATH_BEGIN_VALUE + 16 : PATH_BEGIN_VALUE + 17, false); me->GetMotionMaster()->MovePath(me->GetEntry() == NPC_JAINA_PART2 ? PATH_BEGIN_VALUE + 16 : PATH_BEGIN_VALUE + 17, false);
events.PopEvent();
break; break;
case 10: case 10:
if (Creature* x = pInstance->instance->GetCreature(pInstance->GetData64(DATA_MARTIN_OR_GORKUN_GUID))) if (Creature* x = pInstance->instance->GetCreature(pInstance->GetData64(DATA_MARTIN_OR_GORKUN_GUID)))
x->AI()->DoAction(3); x->AI()->DoAction(3);
events.PopEvent();
break; break;
} }
} }
@@ -1448,7 +1446,6 @@ public:
class spell_pos_rimefang_frost_novaSpellScript : public SpellScript class spell_pos_rimefang_frost_novaSpellScript : public SpellScript
{ {
PrepareSpellScript(spell_pos_rimefang_frost_novaSpellScript); PrepareSpellScript(spell_pos_rimefang_frost_novaSpellScript);
void HandleDummy(SpellEffIndex /*effIndex*/) void HandleDummy(SpellEffIndex /*effIndex*/)
@@ -325,38 +325,31 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING) && !(events.GetPhaseMask() & PHASE_INTRO_MASK)) if (me->HasUnitState(UNIT_STATE_CASTING) && !(events.GetPhaseMask() & PHASE_INTRO_MASK))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
case EVENT_INTRO_2: case EVENT_INTRO_2:
Talk(SAY_INTRO_2); Talk(SAY_INTRO_2);
events.PopEvent();
break; break;
case EVENT_INTRO_3: case EVENT_INTRO_3:
Talk(SAY_INTRO_3); Talk(SAY_INTRO_3);
events.PopEvent();
break; break;
case EVENT_INTRO_4: case EVENT_INTRO_4:
Talk(SAY_INTRO_4); Talk(SAY_INTRO_4);
events.PopEvent();
break; break;
case EVENT_INTRO_5: case EVENT_INTRO_5:
Talk(SAY_INTRO_5); Talk(SAY_INTRO_5);
events.PopEvent();
break; break;
case EVENT_INTRO_6: case EVENT_INTRO_6:
Talk(SAY_INTRO_6); Talk(SAY_INTRO_6);
events.PopEvent();
break; break;
case EVENT_INTRO_7: case EVENT_INTRO_7:
Talk(SAY_INTRO_7); Talk(SAY_INTRO_7);
events.PopEvent();
break; break;
case EVENT_BERSERK: case EVENT_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
Talk(SAY_BERSERK); Talk(SAY_BERSERK);
events.PopEvent();
break; break;
case EVENT_SPELL_DEATH_AND_DECAY: case EVENT_SPELL_DEATH_AND_DECAY:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
@@ -723,7 +716,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_FANATIC_NECROTIC_STRIKE: case EVENT_SPELL_FANATIC_NECROTIC_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_NECROTIC_STRIKE, false); me->CastSpell(me->GetVictim(), SPELL_NECROTIC_STRIKE, false);
@@ -749,7 +742,6 @@ public:
if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_LADY_DEATHWHISPER))) if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_LADY_DEATHWHISPER)))
ladyDeathwhisper->AI()->Talk(SAY_ANIMATE_DEAD); ladyDeathwhisper->AI()->Talk(SAY_ANIMATE_DEAD);
events.PopEvent();
break; break;
case EVENT_SPELL_CULTIST_DARK_MARTYRDOM: case EVENT_SPELL_CULTIST_DARK_MARTYRDOM:
me->CastSpell(me, SPELL_PERMANENT_FEIGN_DEATH, true); me->CastSpell(me, SPELL_PERMANENT_FEIGN_DEATH, true);
@@ -761,8 +753,6 @@ public:
Reset(); Reset();
events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000); events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000);
break; break;
default:
break;
} }
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -839,7 +829,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_ADHERENT_FROST_FEVER: case EVENT_SPELL_ADHERENT_FROST_FEVER:
me->CastSpell(me->GetVictim(), SPELL_FROST_FEVER, false); me->CastSpell(me->GetVictim(), SPELL_FROST_FEVER, false);
@@ -873,7 +863,6 @@ public:
if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_LADY_DEATHWHISPER))) if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_LADY_DEATHWHISPER)))
ladyDeathwhisper->AI()->Talk(SAY_ANIMATE_DEAD); ladyDeathwhisper->AI()->Talk(SAY_ANIMATE_DEAD);
events.PopEvent();
break; break;
case EVENT_SPELL_CULTIST_DARK_MARTYRDOM: case EVENT_SPELL_CULTIST_DARK_MARTYRDOM:
me->CastSpell(me, SPELL_PERMANENT_FEIGN_DEATH, true); me->CastSpell(me, SPELL_PERMANENT_FEIGN_DEATH, true);
@@ -1072,7 +1061,7 @@ public:
return; return;
} }
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_DARNAVAN_BLADESTORM: case EVENT_DARNAVAN_BLADESTORM:
me->CastSpell((Unit*)nullptr, SPELL_BLADESTORM, false); me->CastSpell((Unit*)nullptr, SPELL_BLADESTORM, false);
@@ -1080,7 +1069,6 @@ public:
break; break;
case EVENT_DARNAVAN_CHARGE: case EVENT_DARNAVAN_CHARGE:
_canCharge = true; _canCharge = true;
events.PopEvent();
break; break;
case EVENT_DARNAVAN_INTIMIDATING_SHOUT: case EVENT_DARNAVAN_INTIMIDATING_SHOUT:
me->CastSpell((Unit*)nullptr, SPELL_INTIMIDATING_SHOUT, false); me->CastSpell((Unit*)nullptr, SPELL_INTIMIDATING_SHOUT, false);
@@ -1092,7 +1080,6 @@ public:
break; break;
case EVENT_DARNAVAN_SHATTERING_THROW: case EVENT_DARNAVAN_SHATTERING_THROW:
_canShatter = true; _canShatter = true;
events.PopEvent();
break; break;
case EVENT_DARNAVAN_SUNDER_ARMOR: case EVENT_DARNAVAN_SUNDER_ARMOR:
me->CastSpell(me->GetVictim(), SPELL_SUNDER_ARMOR, false); me->CastSpell(me->GetVictim(), SPELL_SUNDER_ARMOR, false);
@@ -154,13 +154,12 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
case EVENT_ENABLE_BONE_SLICE: case EVENT_ENABLE_BONE_SLICE:
_boneSlice = true; _boneSlice = true;
events.PopEvent();
break; break;
case EVENT_SPELL_BONE_SPIKE_GRAVEYARD: case EVENT_SPELL_BONE_SPIKE_GRAVEYARD:
{ {
@@ -177,7 +176,6 @@ public:
break; break;
case EVENT_SPELL_COLDFLAME_BONE_STORM: case EVENT_SPELL_COLDFLAME_BONE_STORM:
me->CastSpell(me, SPELL_COLDFLAME_BONE_STORM, false); me->CastSpell(me, SPELL_COLDFLAME_BONE_STORM, false);
events.PopEvent();
break; break;
case EVENT_WARN_BONE_STORM: case EVENT_WARN_BONE_STORM:
_boneSlice = false; _boneSlice = false;
@@ -196,7 +194,6 @@ public:
uint32 _boneStormDuration = RAID_MODE<uint32>(20000, 30000, 20000, 30000); uint32 _boneStormDuration = RAID_MODE<uint32>(20000, 30000, 20000, 30000);
if (Aura* pStorm = me->GetAura(SPELL_BONE_STORM)) if (Aura* pStorm = me->GetAura(SPELL_BONE_STORM))
pStorm->SetDuration(int32(_boneStormDuration)); pStorm->SetDuration(int32(_boneStormDuration));
events.PopEvent();
events.ScheduleEvent(EVENT_BONE_STORM_MOVE, 0); events.ScheduleEvent(EVENT_BONE_STORM_MOVE, 0);
events.ScheduleEvent(EVENT_END_BONE_STORM, _boneStormDuration + 1); events.ScheduleEvent(EVENT_END_BONE_STORM, _boneStormDuration + 1);
} }
@@ -229,7 +226,6 @@ public:
me->GetMotionMaster()->MovementExpired(); me->GetMotionMaster()->MovementExpired();
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
DoStartMovement(me->GetVictim()); DoStartMovement(me->GetVictim());
events.PopEvent();
events.CancelEvent(EVENT_BONE_STORM_MOVE); events.CancelEvent(EVENT_BONE_STORM_MOVE);
events.ScheduleEvent(EVENT_ENABLE_BONE_SLICE, 10000); events.ScheduleEvent(EVENT_ENABLE_BONE_SLICE, 10000);
if (!IsHeroic()) if (!IsHeroic())
@@ -238,7 +234,6 @@ public:
case EVENT_ENRAGE: case EVENT_ENRAGE:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
Talk(SAY_BERSERK); Talk(SAY_BERSERK);
events.PopEvent();
break; break;
} }
@@ -327,7 +322,7 @@ public:
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -340,7 +335,6 @@ public:
float ny = me->GetPositionY() + 5.0f * sin(me->GetOrientation()); float ny = me->GetPositionY() + 5.0f * sin(me->GetOrientation());
if (!me->IsWithinLOS(nx, ny, 42.5f)) if (!me->IsWithinLOS(nx, ny, 42.5f))
{ {
events.PopEvent();
break; break;
} }
me->NearTeleportTo(nx, ny, 42.5f, me->GetOrientation()); me->NearTeleportTo(nx, ny, 42.5f, me->GetOrientation());
@@ -1686,7 +1686,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING) || me->isFeared() || me->isFrozen() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitState(UNIT_STATE_CONFUSED) || ((me->GetEntry() == NPC_YMIRJAR_DEATHBRINGER || me->GetEntry() == NPC_YMIRJAR_FROSTBINDER) && me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED))) if (me->HasUnitState(UNIT_STATE_CASTING) || me->isFeared() || me->isFrozen() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitState(UNIT_STATE_CONFUSED) || ((me->GetEntry() == NPC_YMIRJAR_DEATHBRINGER || me->GetEntry() == NPC_YMIRJAR_FROSTBINDER) && me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -1712,7 +1712,6 @@ public:
break; break;
case 4: // Summon Warhawk case 4: // Summon Warhawk
me->CastSpell(me, 71705, false); me->CastSpell(me, 71705, false);
events.PopEvent();
break; break;
case 11: // Whirlwind case 11: // Whirlwind
me->CastSpell(me->GetVictim(), 41056, false); me->CastSpell(me->GetVictim(), 41056, false);
@@ -1728,7 +1727,6 @@ public:
break; break;
case 31: // Arctic Chill case 31: // Arctic Chill
me->CastSpell(me, 71270, true); me->CastSpell(me, 71270, true);
events.PopEvent();
break; break;
case 32: // Frozen Orb case 32: // Frozen Orb
if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0, 30.0f, true)) if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0, 30.0f, true))
@@ -1748,7 +1746,6 @@ public:
events.RepeatEvent(45000); events.RepeatEvent(45000);
break; break;
default: default:
events.PopEvent();
break; break;
} }
@@ -2582,7 +2579,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -2647,7 +2644,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -2702,7 +2699,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -2764,7 +2761,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -2883,7 +2880,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -3006,7 +3003,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
if (uint32 e = events.GetEvent()) if (uint32 e = events.ExecuteEvent())
{ {
Unit* target = nullptr; Unit* target = nullptr;
if (sesi_spells[e - 1].targetType == 1) if (sesi_spells[e - 1].targetType == 1)
@@ -3105,7 +3102,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 1: case 1:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
@@ -3255,7 +3252,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 1: case 1:
if (me->GetVictim() && !me->GetVictim()->HasAura(71163) && me->GetVictim()->GetDistance(me) > 5.0f && me->GetVictim()->GetDistance(me) < 30.0f) if (me->GetVictim() && !me->GetVictim()->HasAura(71163) && me->GetVictim()->GetDistance(me) > 5.0f && me->GetVictim()->GetDistance(me) < 30.0f)
@@ -3396,7 +3393,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -171,7 +171,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_IMPALE: case EVENT_SPELL_IMPALE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -190,7 +190,7 @@ public:
} }
case EVENT_SPELL_BERSERK: case EVENT_SPELL_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
} }
@@ -140,7 +140,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_POISON_BOLT: case EVENT_SPELL_POISON_BOLT:
if (!me->HasAura(SPELL_WIDOWS_EMBRACE)) if (!me->HasAura(SPELL_WIDOWS_EMBRACE))
@@ -301,7 +301,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_MARK_CAST: case EVENT_SPELL_MARK_CAST:
me->CastSpell(me, TABLE_SPELL_MARK[horsemanId], false); me->CastSpell(me, TABLE_SPELL_MARK[horsemanId], false);
@@ -310,7 +310,7 @@ public:
case EVENT_BERSERK: case EVENT_BERSERK:
Talk(SAY_SPECIAL); Talk(SAY_SPECIAL);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
return; return;
case EVENT_SPELL_PRIMARY: case EVENT_SPELL_PRIMARY:
Talk(SAY_TAUNT); Talk(SAY_TAUNT);
@@ -162,11 +162,11 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_BERSERK: case EVENT_SPELL_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
case EVENT_SPELL_ENRAGE: case EVENT_SPELL_ENRAGE:
Talk(EMOTE_ENRAGE); Talk(EMOTE_ENRAGE);
@@ -385,19 +385,19 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_INTRO_2: case EVENT_INTRO_2:
Talk(SAY_INTRO_2); Talk(SAY_INTRO_2);
events.PopEvent();
break; break;
case EVENT_INTRO_3: case EVENT_INTRO_3:
Talk(SAY_INTRO_3); Talk(SAY_INTRO_3);
events.PopEvent();
break; break;
case EVENT_INTRO_4: case EVENT_INTRO_4:
Talk(SAY_INTRO_4); Talk(SAY_INTRO_4);
events.PopEvent();
break; break;
case EVENT_SPELL_SHADOW_BOLT: case EVENT_SPELL_SHADOW_BOLT:
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SHADOW_BOLT_10, SPELL_SHADOW_BOLT_25), false); me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SHADOW_BOLT_10, SPELL_SHADOW_BOLT_25), false);
@@ -429,7 +429,7 @@ public:
go->SetGoState(GO_STATE_ACTIVE); go->SetGoState(GO_STATE_ACTIVE);
events.CancelEvent(EVENT_TELEPORT); events.CancelEvent(EVENT_TELEPORT);
events.PopEvent();
break; break;
} }
events.RepeatEvent(1000); events.RepeatEvent(1000);
@@ -455,7 +455,7 @@ public:
events.ScheduleEvent(EVENT_SPELL_HARVEST_SOUL, urand(5000, 15000)); events.ScheduleEvent(EVENT_SPELL_HARVEST_SOUL, urand(5000, 15000));
events.ScheduleEvent(EVENT_TELEPORT, 20000); events.ScheduleEvent(EVENT_TELEPORT, 20000);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
events.PopEvent();
} }
waveCount++; waveCount++;
@@ -471,7 +471,7 @@ public:
gateOpened = true; gateOpened = true;
Talk(EMOTE_GATE_OPENED); Talk(EMOTE_GATE_OPENED);
} }
events.PopEvent();
break; break;
} }
@@ -583,7 +583,7 @@ public:
if (me->GetUnitState() == UNIT_STATE_CASTING) if (me->GetUnitState() == UNIT_STATE_CASTING)
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_DEATH_PLAGUE: case EVENT_SPELL_DEATH_PLAGUE:
me->CastSpell(me->GetVictim(), SPELL_DEATH_PLAGUE, false); me->CastSpell(me->GetVictim(), SPELL_DEATH_PLAGUE, false);
@@ -659,7 +659,6 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
}; };
}; };
class spell_gothik_shadow_bolt_volley : public SpellScriptLoader class spell_gothik_shadow_bolt_volley : public SpellScriptLoader
@@ -140,7 +140,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_POISON_CLOUD: case EVENT_SPELL_POISON_CLOUD:
me->CastSpell(me, SPELL_POISON_CLOUD, true); me->CastSpell(me, SPELL_POISON_CLOUD, true);
@@ -148,7 +148,7 @@ public:
break; break;
case EVENT_SPELL_BERSERK: case EVENT_SPELL_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
case EVENT_SPELL_SLIME_SPRAY: case EVENT_SPELL_SLIME_SPRAY:
Talk(EMOTE_SLIME); Talk(EMOTE_SLIME);
@@ -162,7 +162,7 @@ public:
//if (me->HasUnitState(UNIT_STATE_CASTING)) //if (me->HasUnitState(UNIT_STATE_CASTING))
// return; // return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_SPELL_DISRUPTION: case EVENT_SPELL_SPELL_DISRUPTION:
me->CastSpell(me, SPELL_SPELL_DISRUPTION, false); me->CastSpell(me, SPELL_SPELL_DISRUPTION, false);
@@ -208,7 +208,6 @@ public:
{ {
if (IsInRoom(itr.GetSource()) && !itr.GetSource()->IsAlive()) if (IsInRoom(itr.GetSource()) && !itr.GetSource()->IsAlive())
{ {
events.PopEvent();
pInstance->SetData(DATA_DANCE_FAIL, 0); pInstance->SetData(DATA_DANCE_FAIL, 0);
pInstance->SetData(DATA_IMMORTAL_FAIL, 0); pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
return; return;
@@ -265,7 +265,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_FLOOR_CHANGE: case EVENT_FLOOR_CHANGE:
if (pInstance) if (pInstance)
@@ -277,7 +277,7 @@ public:
go->SetPhaseMask(2, true); go->SetPhaseMask(2, true);
} }
} }
events.PopEvent();
break; break;
case EVENT_SUMMON_SOLDIER: case EVENT_SUMMON_SOLDIER:
if (Creature* cr = me->SummonCreature(NPC_SOLDIER_OF_THE_FROZEN_WASTES, SummonPositions[urand(0, 5)], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000)) if (Creature* cr = me->SummonCreature(NPC_SOLDIER_OF_THE_FROZEN_WASTES, SummonPositions[urand(0, 5)], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000))
@@ -386,7 +386,6 @@ public:
case EVENT_SECOND_PHASE_HEALTH_CHECK: case EVENT_SECOND_PHASE_HEALTH_CHECK:
if (me->HealthBelowPct(45)) if (me->HealthBelowPct(45))
{ {
events.PopEvent();
Talk(SAY_REQUEST_AID); Talk(SAY_REQUEST_AID);
events.DelayEvents(5500); events.DelayEvents(5500);
events.ScheduleEvent(EVENT_THIRD_PHASE_LICH_KING_SAY, 5000); events.ScheduleEvent(EVENT_THIRD_PHASE_LICH_KING_SAY, 5000);
@@ -401,7 +400,7 @@ public:
for (uint8 i = 0 ; i < RAID_MODE(2, 4); ++i) for (uint8 i = 0 ; i < RAID_MODE(2, 4); ++i)
events.ScheduleEvent(EVENT_SUMMON_GUARDIAN_OF_ICECROWN, 10000 + (i * 5000)); events.ScheduleEvent(EVENT_SUMMON_GUARDIAN_OF_ICECROWN, 10000 + (i * 5000));
events.PopEvent();
break; break;
case EVENT_SUMMON_GUARDIAN_OF_ICECROWN: case EVENT_SUMMON_GUARDIAN_OF_ICECROWN:
if (Creature* cr = me->SummonCreature(NPC_GUARDIAN_OF_ICECROWN, SummonPositions[RAND(0, 1, 3, 4)])) if (Creature* cr = me->SummonCreature(NPC_GUARDIAN_OF_ICECROWN, SummonPositions[RAND(0, 1, 3, 4)]))
@@ -410,7 +409,6 @@ public:
cr->AI()->AttackStart(me->GetVictim()); cr->AI()->AttackStart(me->GetVictim());
} }
events.PopEvent();
break; break;
} }
@@ -519,7 +517,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_MINION_SPELL_MORTAL_WOUND: case EVENT_MINION_SPELL_MORTAL_WOUND:
me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false);
@@ -529,7 +527,7 @@ public:
if (me->HealthBelowPct(35)) if (me->HealthBelowPct(35))
{ {
me->CastSpell(me, SPELL_FRENZY, true); me->CastSpell(me, SPELL_FRENZY, true);
events.PopEvent();
break; break;
} }
events.RepeatEvent(1000); events.RepeatEvent(1000);
@@ -120,7 +120,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SUMMON_SPORE: case EVENT_SUMMON_SPORE:
me->CastSpell(me, SPELL_SUMMON_SPORE, true); me->CastSpell(me, SPELL_SUMMON_SPORE, true);
@@ -140,7 +140,7 @@ public:
break; break;
case EVENT_SPELL_BERSERK: case EVENT_SPELL_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
} }
@@ -144,7 +144,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_WEB_SPRAY: case EVENT_SPELL_WEB_SPRAY:
Talk(EMOTE_WEB_SPRAY); Talk(EMOTE_WEB_SPRAY);
@@ -169,7 +169,7 @@ public:
if (me->GetHealthPct() < 30) if (me->GetHealthPct() < 30)
{ {
me->CastSpell(me, RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25), true); me->CastSpell(me, RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25), true);
events.PopEvent();
break; break;
} }
@@ -185,7 +185,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
// GROUND // GROUND
case EVENT_SPELL_CURSE: case EVENT_SPELL_CURSE:
@@ -202,13 +202,12 @@ public:
case EVENT_SUMMON_PLAGUED_WARRIOR_REAL: case EVENT_SUMMON_PLAGUED_WARRIOR_REAL:
me->CastSpell(me, SPELL_SUMMON_PLAGUED_WARRIORS, true); me->CastSpell(me, SPELL_SUMMON_PLAGUED_WARRIORS, true);
SummonHelper(NPC_PLAGUED_WARRIOR, RAID_MODE(2, 3)); SummonHelper(NPC_PLAGUED_WARRIOR, RAID_MODE(2, 3));
events.PopEvent();
break; break;
case EVENT_MOVE_TO_BALCONY: case EVENT_MOVE_TO_BALCONY:
Talk(EMOTE_TELEPORT_BALCONY); Talk(EMOTE_TELEPORT_BALCONY);
me->CastSpell(me, SPELL_TELEPORT, true); me->CastSpell(me, SPELL_TELEPORT, true);
StartBalconyPhase(); StartBalconyPhase();
//events.PopEvent(); events.Reset()!! // events.Reset()!!
break; break;
case EVENT_SPELL_BLINK: case EVENT_SPELL_BLINK:
DoResetThreat(); DoResetThreat();
@@ -234,7 +233,6 @@ public:
} }
else else
SummonHelper(NPC_PLAGUED_GUARDIAN, RAID_MODE(2, 4)); SummonHelper(NPC_PLAGUED_GUARDIAN, RAID_MODE(2, 4));
events.PopEvent();
break; break;
case EVENT_MOVE_TO_GROUND: case EVENT_MOVE_TO_GROUND:
Talk(EMOTE_TELEPORT_BACK); Talk(EMOTE_TELEPORT_BACK);
@@ -106,7 +106,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_HATEFUL_STRIKE: case EVENT_SPELL_HATEFUL_STRIKE:
{ {
@@ -157,7 +157,7 @@ public:
Talk(EMOTE_BERSERK); Talk(EMOTE_BERSERK);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.ScheduleEvent(EVENT_SPELL_SLIME_BOLT, 2000); events.ScheduleEvent(EVENT_SPELL_SLIME_BOLT, 2000);
events.PopEvent();
break; break;
case EVENT_SPELL_SLIME_BOLT: case EVENT_SPELL_SLIME_BOLT:
me->CastSpell(me, SPELL_SLIME_BOLT, false); me->CastSpell(me, SPELL_SLIME_BOLT, false);
@@ -168,7 +168,7 @@ public:
{ {
Talk(EMOTE_ENRAGE); Talk(EMOTE_ENRAGE);
me->CastSpell(me, SPELL_FRENZY, true); me->CastSpell(me, SPELL_FRENZY, true);
events.PopEvent();
break; break;
} }
events.RepeatEvent(1000); events.RepeatEvent(1000);
@@ -135,7 +135,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_UNBALANCING_STRIKE: case EVENT_SPELL_UNBALANCING_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE, false); me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE, false);
@@ -214,7 +214,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING) || me->IsCharmed()) if (me->HasUnitState(UNIT_STATE_CASTING) || me->IsCharmed())
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_MINION_BLOOD_STRIKE: case EVENT_MINION_BLOOD_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_BLOOD_STRIKE, false); me->CastSpell(me->GetVictim(), SPELL_BLOOD_STRIKE, false);
@@ -234,12 +234,11 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BERSERK: case EVENT_BERSERK:
Talk(EMOTE_ENRAGE); Talk(EMOTE_ENRAGE);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
return; return;
case EVENT_SPELL_CLEAVE: case EVENT_SPELL_CLEAVE:
me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false);
@@ -269,7 +268,7 @@ public:
case EVENT_FLIGHT_START: case EVENT_FLIGHT_START:
if (me->HealthBelowPct(11)) if (me->HealthBelowPct(11))
{ {
events.PopEvent();
return; return;
} }
events.RepeatEvent(45000); events.RepeatEvent(45000);
@@ -287,13 +286,11 @@ public:
me->SetDisableGravity(true); me->SetDisableGravity(true);
me->SetHover(true); me->SetHover(true);
currentTarget = 0; currentTarget = 0;
events.PopEvent();
events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, 3000); events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, 3000);
iceboltCount = RAID_MODE(2, 3); iceboltCount = RAID_MODE(2, 3);
return; return;
case EVENT_FLIGHT_ICEBOLT: case EVENT_FLIGHT_ICEBOLT:
{ {
events.PopEvent();
if (currentTarget) if (currentTarget)
if (Unit* target = ObjectAccessor::GetUnit(*me, currentTarget)) if (Unit* target = ObjectAccessor::GetUnit(*me, currentTarget))
me->SummonGameObject(GO_ICE_BLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0); me->SummonGameObject(GO_ICE_BLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0);
@@ -335,11 +332,9 @@ public:
Talk(EMOTE_BREATH); Talk(EMOTE_BREATH);
me->CastSpell(me, SPELL_FROST_MISSILE, false); me->CastSpell(me, SPELL_FROST_MISSILE, false);
events.ScheduleEvent(EVENT_FLIGHT_SPELL_EXPLOSION, 8500); events.ScheduleEvent(EVENT_FLIGHT_SPELL_EXPLOSION, 8500);
events.PopEvent();
return; return;
case EVENT_FLIGHT_SPELL_EXPLOSION: case EVENT_FLIGHT_SPELL_EXPLOSION:
me->CastSpell(me, SPELL_FROST_EXPLOSION, true); me->CastSpell(me, SPELL_FROST_EXPLOSION, true);
events.PopEvent();
events.ScheduleEvent(EVENT_FLIGHT_START_LAND, 3000); events.ScheduleEvent(EVENT_FLIGHT_START_LAND, 3000);
return; return;
case EVENT_FLIGHT_START_LAND: case EVENT_FLIGHT_START_LAND:
@@ -351,20 +346,18 @@ public:
blockList.clear(); blockList.clear();
me->RemoveAllGameObjects(); me->RemoveAllGameObjects();
events.ScheduleEvent(EVENT_LAND, 1000); events.ScheduleEvent(EVENT_LAND, 1000);
events.PopEvent();
return; return;
case EVENT_LAND: case EVENT_LAND:
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
me->SetDisableGravity(false); me->SetDisableGravity(false);
me->SetHover(false); me->SetHover(false);
events.PopEvent();
events.ScheduleEvent(EVENT_GROUND, 1500); events.ScheduleEvent(EVENT_GROUND, 1500);
return; return;
case EVENT_GROUND: case EVENT_GROUND:
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
events.PopEvent();
return; return;
case EVENT_HUNDRED_CLUB: case EVENT_HUNDRED_CLUB:
{ {
@@ -373,7 +366,6 @@ public:
{ {
if (itr.GetSource()->GetResistance(SPELL_SCHOOL_FROST) > 100 && pInstance) if (itr.GetSource()->GetResistance(SPELL_SCHOOL_FROST) > 100 && pInstance)
{ {
events.PopEvent();
pInstance->SetData(DATA_HUNDRED_CLUB, 0); pInstance->SetData(DATA_HUNDRED_CLUB, 0);
return; return;
} }
@@ -256,14 +256,13 @@ public:
} }
} }
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_THADDIUS_START: case EVENT_THADDIUS_START:
StartEvent(); StartEvent();
events.PopEvent();
break; break;
case EVENT_THADDIUS_START_2: case EVENT_THADDIUS_START_2:
events.PopEvent();
Talk(SAY_AGGRO); Talk(SAY_AGGRO);
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
me->SetControlled(false, UNIT_STATE_STUNNED); me->SetControlled(false, UNIT_STATE_STUNNED);
@@ -277,7 +276,7 @@ public:
return; return;
case EVENT_THADDIUS_SPELL_BERSERK: case EVENT_THADDIUS_SPELL_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
case EVENT_THADDIUS_SPELL_CHAIN_LIGHTNING: case EVENT_THADDIUS_SPELL_CHAIN_LIGHTNING:
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false); me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false);
@@ -289,7 +288,7 @@ public:
break; break;
case EVENT_ACTIVATE_BALL_LIGHTNING: case EVENT_ACTIVATE_BALL_LIGHTNING:
ballLightningEnabled = true; ballLightningEnabled = true;
events.PopEvent();
break; break;
} }
@@ -454,7 +453,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_MINION_SPELL_POWER_SURGE: case EVENT_MINION_SPELL_POWER_SURGE:
me->CastSpell(me, RAID_MODE(SPELL_POWER_SURGE_10, SPELL_POWER_SURGE_25), false); me->CastSpell(me, RAID_MODE(SPELL_POWER_SURGE_10, SPELL_POWER_SURGE_25), false);
@@ -822,7 +822,7 @@ public:
if (Creature* kelthuzad = instance->GetCreature(_kelthuzadGUID)) if (Creature* kelthuzad = instance->GetCreature(_kelthuzadGUID))
kelthuzad->AI()->Talk(_currentWingTaunt); kelthuzad->AI()->Talk(_currentWingTaunt);
++_currentWingTaunt; ++_currentWingTaunt;
events.PopEvent();
break; break;
} }
} }
@@ -371,14 +371,14 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
case EVENT_BERSERK: case EVENT_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
Talk(EMOTE_BERSERK); Talk(EMOTE_BERSERK);
events.PopEvent();
break; break;
case EVENT_INTRO_MOVE_CENTER: case EVENT_INTRO_MOVE_CENTER:
{ {
@@ -393,15 +393,13 @@ public:
float z = FourSidesPos[0].GetPositionZ(); float z = FourSidesPos[0].GetPositionZ();
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
me->GetMotionMaster()->MovePoint(MI_POINT_INTRO_CENTER_AIR, x, y, z); me->GetMotionMaster()->MovePoint(MI_POINT_INTRO_CENTER_AIR, x, y, z);
events.PopEvent(); break;
} }
break;
case EVENT_INTRO_LAND: case EVENT_INTRO_LAND:
{ {
me->GetMotionMaster()->MoveLand(MI_POINT_INTRO_LAND, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), 7.0f); me->GetMotionMaster()->MoveLand(MI_POINT_INTRO_LAND, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), 7.0f);
events.PopEvent(); break;
} }
break;
case EVENT_START_FIGHT: case EVENT_START_FIGHT:
{ {
if (pInstance) if (pInstance)
@@ -415,7 +413,6 @@ public:
AttackStart(target); AttackStart(target);
me->GetMotionMaster()->MoveChase(target); me->GetMotionMaster()->MoveChase(target);
} }
events.PopEvent();
events.SetPhase(PHASE_ONE); events.SetPhase(PHASE_ONE);
events.RescheduleEvent(EVENT_BERSERK, 600000, 0); events.RescheduleEvent(EVENT_BERSERK, 600000, 0);
@@ -423,9 +420,8 @@ public:
events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, urand(2000, 5000), 1); events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, urand(2000, 5000), 1);
events.RescheduleEvent(EVENT_SUMMON_POWER_SPARK, urand(10000, 15000), 1); events.RescheduleEvent(EVENT_SUMMON_POWER_SPARK, urand(10000, 15000), 1);
events.RescheduleEvent(EVENT_START_VORTEX_0, 30000, 1); events.RescheduleEvent(EVENT_START_VORTEX_0, 30000, 1);
break;
} }
break;
case EVENT_SPELL_ARCANE_BREATH: case EVENT_SPELL_ARCANE_BREATH:
me->CastSpell(me->GetVictim(), SPELL_ARCANE_BREATH, false); me->CastSpell(me->GetVictim(), SPELL_ARCANE_BREATH, false);
events.RepeatEvent(urand(12000, 15000)); events.RepeatEvent(urand(12000, 15000));
@@ -467,20 +463,18 @@ public:
me->SendMovementFlagUpdate(); me->SendMovementFlagUpdate();
me->GetMotionMaster()->MoveTakeoff(MI_POINT_VORTEX_TAKEOFF, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ() + 20.0f, 7.0f); me->GetMotionMaster()->MoveTakeoff(MI_POINT_VORTEX_TAKEOFF, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ() + 20.0f, 7.0f);
events.PopEvent();
events.DelayEvents(25000, 1); // don't delay berserk (group 0) events.DelayEvents(25000, 1); // don't delay berserk (group 0)
} }
break; break;
case EVENT_VORTEX_FLY_TO_CENTER: case EVENT_VORTEX_FLY_TO_CENTER:
me->GetMotionMaster()->MovePoint(MI_POINT_VORTEX_CENTER, CenterPos.GetPositionX(), CenterPos.GetPositionY(), CenterPos.GetPositionZ() + 20.0f); me->GetMotionMaster()->MovePoint(MI_POINT_VORTEX_CENTER, CenterPos.GetPositionX(), CenterPos.GetPositionY(), CenterPos.GetPositionZ() + 20.0f);
events.PopEvent();
break; break;
case EVENT_START_VORTEX_REAL: case EVENT_START_VORTEX_REAL:
me->SendMeleeAttackStop(me->GetVictim());
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_01);
me->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01);
{ {
me->SendMeleeAttackStop(me->GetVictim());
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_01);
me->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01);
Position pos; Position pos;
float angle = (me->GetOrientation() >= M_PI / 4 ? me->GetOrientation() - M_PI / 4 : 7 * M_PI / 4 + me->GetOrientation()); float angle = (me->GetOrientation() >= M_PI / 4 ? me->GetOrientation() - M_PI / 4 : 7 * M_PI / 4 + me->GetOrientation());
pos.m_positionX = CenterPos.GetPositionX() + cos(angle) * 40.0f; pos.m_positionX = CenterPos.GetPositionX() + cos(angle) * 40.0f;
@@ -537,13 +531,13 @@ public:
} }
} }
} }
events.RescheduleEvent(EVENT_VORTEX_LAND_0, 11000, 1);
break;
} }
events.PopEvent();
events.RescheduleEvent(EVENT_VORTEX_LAND_0, 11000, 1);
break;
case EVENT_VORTEX_LAND_0: case EVENT_VORTEX_LAND_0:
me->GetMotionMaster()->MoveLand(MI_POINT_VORTEX_LAND, CenterPos, 7.0f); me->GetMotionMaster()->MoveLand(MI_POINT_VORTEX_LAND, CenterPos, 7.0f);
events.PopEvent();
break; break;
case EVENT_VORTEX_LAND_1: case EVENT_VORTEX_LAND_1:
{ {
@@ -556,7 +550,6 @@ public:
AttackStart(target); AttackStart(target);
me->GetMotionMaster()->MoveChase(target); me->GetMotionMaster()->MoveChase(target);
} }
events.PopEvent();
events.RescheduleEvent(EVENT_START_VORTEX_0, 60000, 1); events.RescheduleEvent(EVENT_START_VORTEX_0, 60000, 1);
break; break;
} }
@@ -581,7 +574,6 @@ public:
//me->SetHover(true); //me->SetHover(true);
me->SendMovementFlagUpdate(); me->SendMovementFlagUpdate();
me->GetMotionMaster()->MoveTakeoff(MI_POINT_CENTER_AIR_PH_2, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 32.0f, 7.0f); me->GetMotionMaster()->MoveTakeoff(MI_POINT_CENTER_AIR_PH_2, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 32.0f, 7.0f);
events.PopEvent();
events.RescheduleEvent(EVENT_START_PHASE_2_MOVE_TO_SIDE, 22500, 1); events.RescheduleEvent(EVENT_START_PHASE_2_MOVE_TO_SIDE, 22500, 1);
break; break;
} }
@@ -617,7 +609,6 @@ public:
} }
} }
events.PopEvent();
break; break;
case EVENT_SPELL_ARCANE_OVERLOAD: case EVENT_SPELL_ARCANE_OVERLOAD:
{ {
@@ -640,7 +631,6 @@ public:
float newangle = angle + 0.5f; float newangle = angle + 0.5f;
if (newangle >= 2 * M_PI) newangle -= 2 * M_PI; if (newangle >= 2 * M_PI) newangle -= 2 * M_PI;
me->GetMotionMaster()->MovePoint(MI_POINT_CIRCLE_OUTSIDE_PH_2, CenterPos.GetPositionX() + cos(newangle)*dist, CenterPos.GetPositionY() + sin(newangle)*dist, Phase2NorthPos.GetPositionZ()); me->GetMotionMaster()->MovePoint(MI_POINT_CIRCLE_OUTSIDE_PH_2, CenterPos.GetPositionX() + cos(newangle)*dist, CenterPos.GetPositionY() + sin(newangle)*dist, Phase2NorthPos.GetPositionZ());
events.PopEvent();
} }
break; break;
case EVENT_MOVE_TO_SURGE_OF_POWER: case EVENT_MOVE_TO_SURGE_OF_POWER:
@@ -655,13 +645,11 @@ public:
break; break;
case EVENT_SURGE_OF_POWER_WARNING: case EVENT_SURGE_OF_POWER_WARNING:
Talk(EMOTE_SURGE_OF_POWER_WARNING_P2); Talk(EMOTE_SURGE_OF_POWER_WARNING_P2);
events.PopEvent();
events.RescheduleEvent(EVENT_SPELL_SURGE_OF_POWER, 1500, 1); events.RescheduleEvent(EVENT_SPELL_SURGE_OF_POWER, 1500, 1);
break; break;
case EVENT_SPELL_SURGE_OF_POWER: case EVENT_SPELL_SURGE_OF_POWER:
if (Creature* c = me->SummonCreature(NPC_SURGE_OF_POWER, CenterPos, TEMPSUMMON_TIMED_DESPAWN, 10000)) if (Creature* c = me->SummonCreature(NPC_SURGE_OF_POWER, CenterPos, TEMPSUMMON_TIMED_DESPAWN, 10000))
me->CastSpell(c, SPELL_SURGE_OF_POWER, false); me->CastSpell(c, SPELL_SURGE_OF_POWER, false);
events.PopEvent();
Talk(SAY_SURGE_OF_POWER); Talk(SAY_SURGE_OF_POWER);
events.RescheduleEvent(EVENT_CLEAR_TARGET, 10000, 1); events.RescheduleEvent(EVENT_CLEAR_TARGET, 10000, 1);
events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 10000, 1); events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 10000, 1);
@@ -673,7 +661,6 @@ public:
case EVENT_CLEAR_TARGET: case EVENT_CLEAR_TARGET:
me->SendMeleeAttackStop(); me->SendMeleeAttackStop();
me->SetTarget(0); me->SetTarget(0);
events.PopEvent();
break; break;
case EVENT_CHECK_TRASH_DEAD: case EVENT_CHECK_TRASH_DEAD:
{ {
@@ -698,7 +685,6 @@ public:
break; break;
case EVENT_LIGHT_DIMENSION_CHANGE: case EVENT_LIGHT_DIMENSION_CHANGE:
me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_CHANGE_DIMENSIONS, 2 * IN_MILLISECONDS); me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_CHANGE_DIMENSIONS, 2 * IN_MILLISECONDS);
events.PopEvent();
break; break;
case EVENT_DESTROY_PLATFORM_0: case EVENT_DESTROY_PLATFORM_0:
if (Creature* c = me->SummonCreature(NPC_WORLD_TRIGGER_LAOI, CenterPos, TEMPSUMMON_TIMED_DESPAWN, 3000)) if (Creature* c = me->SummonCreature(NPC_WORLD_TRIGGER_LAOI, CenterPos, TEMPSUMMON_TIMED_DESPAWN, 3000))
@@ -708,7 +694,6 @@ public:
c->CastSpell(c, SPELL_DESTROY_PLATFORM_EFFECT, false); c->CastSpell(c, SPELL_DESTROY_PLATFORM_EFFECT, false);
} }
me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_OBSCURE_SPACE, 1 * IN_MILLISECONDS); me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_OBSCURE_SPACE, 1 * IN_MILLISECONDS);
events.PopEvent();
events.RescheduleEvent(EVENT_MOVE_TO_PHASE_3_POSITION, 2000, 1); events.RescheduleEvent(EVENT_MOVE_TO_PHASE_3_POSITION, 2000, 1);
break; break;
case EVENT_MOVE_TO_PHASE_3_POSITION: case EVENT_MOVE_TO_PHASE_3_POSITION:
@@ -736,16 +721,13 @@ public:
} }
} }
events.PopEvent();
events.RescheduleEvent(EVENT_SAY_PHASE_3_INTRO, 3000, 1); events.RescheduleEvent(EVENT_SAY_PHASE_3_INTRO, 3000, 1);
} }
break; break;
case EVENT_SAY_PHASE_3_INTRO: case EVENT_SAY_PHASE_3_INTRO:
Talk(SAY_INTRO_PHASE_3); Talk(SAY_INTRO_PHASE_3);
events.PopEvent();
break; break;
case EVENT_START_PHASE_3: case EVENT_START_PHASE_3:
events.PopEvent();
events.SetPhase(PHASE_THREE); events.SetPhase(PHASE_THREE);
me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_OBSCURE_ARCANE_RUNES, 1 * IN_MILLISECONDS); me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_OBSCURE_ARCANE_RUNES, 1 * IN_MILLISECONDS);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -1125,13 +1107,12 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
case EVENT_TELEPORT_VISUAL: case EVENT_TELEPORT_VISUAL:
me->CastSpell(me, SPELL_TELEPORT_VISUAL, true); me->CastSpell(me, SPELL_TELEPORT_VISUAL, true);
events.PopEvent();
break; break;
case EVENT_NEXUS_LORD_ARCANE_SHOCK: case EVENT_NEXUS_LORD_ARCANE_SHOCK:
if (Unit* victim = me->GetVictim()) if (Unit* victim = me->GetVictim())
@@ -1187,13 +1168,12 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
case EVENT_TELEPORT_VISUAL: case EVENT_TELEPORT_VISUAL:
me->CastSpell(me, SPELL_TELEPORT_VISUAL, true); me->CastSpell(me, SPELL_TELEPORT_VISUAL, true);
events.PopEvent();
break; break;
case EVENT_SCION_OF_ETERNITY_ARCANE_BARRAGE: case EVENT_SCION_OF_ETERNITY_ARCANE_BARRAGE:
{ {
@@ -1359,13 +1339,12 @@ public:
{ {
events.Update(diff); events.Update(diff);
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
case EVENT_DISK_MOVE_NEXT_POINT: case EVENT_DISK_MOVE_NEXT_POINT:
DoAction(1); DoAction(1);
events.PopEvent();
break; break;
} }
} }
@@ -1402,7 +1381,7 @@ public:
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
{ {
events.Update(diff); events.Update(diff);
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -1412,22 +1391,18 @@ public:
me->SummonGameObject(HEART_OF_MAGIC, 773.98f, 1275.97f, 266.254f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0); me->SummonGameObject(HEART_OF_MAGIC, 773.98f, 1275.97f, 266.254f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0);
Talk(SAY_ALEXSTRASZA_ONE); Talk(SAY_ALEXSTRASZA_ONE);
events.PopEvent();
events.RescheduleEvent(2, 6000); events.RescheduleEvent(2, 6000);
break; break;
case 2: case 2:
Talk(SAY_ALEXSTRASZA_TWO); Talk(SAY_ALEXSTRASZA_TWO);
events.PopEvent();
events.RescheduleEvent(3, 5000); events.RescheduleEvent(3, 5000);
break; break;
case 3: case 3:
Talk(SAY_ALEXSTRASZA_THREE); Talk(SAY_ALEXSTRASZA_THREE);
events.PopEvent();
events.RescheduleEvent(4, 22000); events.RescheduleEvent(4, 22000);
break; break;
case 4: case 4:
Talk(SAY_ALEXSTRASZA_FOUR); Talk(SAY_ALEXSTRASZA_FOUR);
events.PopEvent();
break; break;
} }
} }
@@ -123,7 +123,7 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -161,7 +161,7 @@ public:
float angle = rand_norm() * 2 * M_PI; float angle = rand_norm() * 2 * M_PI;
me->SummonCreature(NPC_UNSTABLE_SPHERE, me->GetPositionX() + 5.0f * cos(angle), me->GetPositionY() + 5.0f * sin(angle), me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 18000); me->SummonCreature(NPC_UNSTABLE_SPHERE, me->GetPositionX() + 5.0f * cos(angle), me->GetPositionY() + 5.0f * sin(angle), me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 18000);
} }
events.PopEvent();
break; break;
} }
} }
@@ -174,7 +174,7 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -203,7 +203,6 @@ public:
float y = rand_norm() * 50.0f - 25.0f; float y = rand_norm() * 50.0f - 25.0f;
float z = rand_norm() * 50.0f - 25.0f; float z = rand_norm() * 50.0f - 25.0f;
me->SummonCreature(NPC_LEY_GUARDIAN_WHELP, me->GetPositionX() + x, me->GetPositionY() + y, me->GetPositionZ() + z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(NPC_LEY_GUARDIAN_WHELP, me->GetPositionX() + x, me->GetPositionY() + y, me->GetPositionZ() + z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
events.PopEvent();
} }
break; break;
case EVENT_SPELL_PLANAR_SHIFT: case EVENT_SPELL_PLANAR_SHIFT:
@@ -228,7 +227,6 @@ public:
pa->GetMotionMaster()->MoveChase(t, 0.01f); pa->GetMotionMaster()->MoveChase(t, 0.01f);
} }
} }
events.PopEvent();
break; break;
} }
} }
@@ -308,7 +308,7 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -339,7 +339,7 @@ public:
me->SetControlled(false, UNIT_STATE_ROOT); me->SetControlled(false, UNIT_STATE_ROOT);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->GetMotionMaster()->MoveChase(me->GetVictim()); me->GetMotionMaster()->MoveChase(me->GetVictim());
events.PopEvent();
break; break;
} }
} }
@@ -154,7 +154,7 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -172,7 +172,7 @@ public:
{ {
Talk(SAY_AZURE); Talk(SAY_AZURE);
Talk(SAY_AZURE_EMOTE); Talk(SAY_AZURE_EMOTE);
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case EVENT_CALL_AZURE_RING_CAPTAIN_1: case EVENT_CALL_AZURE_RING_CAPTAIN_1:
me->CastSpell(me, SPELL_CALL_AZURE_RING_CAPTAIN_1, true); me->CastSpell(me, SPELL_CALL_AZURE_RING_CAPTAIN_1, true);
@@ -201,7 +201,6 @@ public:
trigger->CastSpell(me, SPELL_ARCANE_BEAM_PERIODIC_DAMAGE, true); trigger->CastSpell(me, SPELL_ARCANE_BEAM_PERIODIC_DAMAGE, true);
} }
} }
events.PopEvent();
} }
break; break;
case EVENT_ENERGIZE_CORES_THIN: case EVENT_ENERGIZE_CORES_THIN:
@@ -210,7 +209,6 @@ public:
me->DisableRotate(false); me->DisableRotate(false);
me->SetOrientation(ZapAngle); me->SetOrientation(ZapAngle);
me->CastSpell(me, SPELL_ENERGIZE_CORES_THIN, true); me->CastSpell(me, SPELL_ENERGIZE_CORES_THIN, true);
events.PopEvent();
events.ScheduleEvent(EVENT_ENERGIZE_CORES_DAMAGE, 4500); events.ScheduleEvent(EVENT_ENERGIZE_CORES_DAMAGE, 4500);
} }
break; break;
@@ -225,7 +223,6 @@ public:
ZapAngle += M_PI / 2; ZapAngle += M_PI / 2;
if( ZapAngle >= 2 * M_PI ) if( ZapAngle >= 2 * M_PI )
ZapAngle -= 2 * M_PI; ZapAngle -= 2 * M_PI;
events.PopEvent();
events.ScheduleEvent(EVENT_ENERGIZE_CORES_THIN, 2000); events.ScheduleEvent(EVENT_ENERGIZE_CORES_THIN, 2000);
} }
break; break;
@@ -292,7 +292,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BJARNGRIM_CHANGE_STANCE: case EVENT_BJARNGRIM_CHANGE_STANCE:
// roll new stance // roll new stance
@@ -399,7 +399,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_ARC_WELD: case EVENT_ARC_WELD:
me->CastSpell(me->GetVictim(), SPELL_ARC_WELD, true); me->CastSpell(me->GetVictim(), SPELL_ARC_WELD, true);
@@ -171,7 +171,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BALL_LIGHTNING: case EVENT_BALL_LIGHTNING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
@@ -195,14 +195,12 @@ public:
{ {
EntryCheckPredicate pred(NPC_SPARK_OF_IONAR); EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
summons.DoAction(ACTION_CALLBACK, pred); summons.DoAction(ACTION_CALLBACK, pred);
events.PopEvent();
events.ScheduleEvent(EVENT_RESTORE, 2000, 0, 2); events.ScheduleEvent(EVENT_RESTORE, 2000, 0, 2);
return; return;
} }
case EVENT_RESTORE: case EVENT_RESTORE:
EntryCheckPredicate pred(NPC_SPARK_OF_IONAR); EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
summons.DoAction(ACTION_SPARK_DESPAWN, pred); summons.DoAction(ACTION_SPARK_DESPAWN, pred);
events.PopEvent();
me->SetVisible(true); me->SetVisible(true);
me->SetControlled(false, UNIT_STATE_STUNNED); me->SetControlled(false, UNIT_STATE_STUNNED);
@@ -200,7 +200,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_CHECK_HEALTH: case EVENT_CHECK_HEALTH:
if (HealthBelowPct(HealthCheck)) if (HealthBelowPct(HealthCheck))
@@ -223,7 +223,6 @@ public:
break; break;
case EVENT_SHOCKWAVE: case EVENT_SHOCKWAVE:
me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_PULSING_SHOCKWAVE_H : SPELL_PULSING_SHOCKWAVE_N, false); me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_PULSING_SHOCKWAVE_H : SPELL_PULSING_SHOCKWAVE_N, false);
events.PopEvent();
break; break;
case EVENT_ARC_LIGHTNING: case EVENT_ARC_LIGHTNING:
if (Unit* target = SelectTargetFromPlayerList(100, SPELL_ARC_LIGHTNING)) if (Unit* target = SelectTargetFromPlayerList(100, SPELL_ARC_LIGHTNING))
@@ -233,7 +232,6 @@ public:
break; break;
case EVENT_AURA_REMOVE: case EVENT_AURA_REMOVE:
me->RemoveAura(SPELL_LIGHTNING_NOVA_THUNDERS); me->RemoveAura(SPELL_LIGHTNING_NOVA_THUNDERS);
events.PopEvent();
break; break;
} }
@@ -270,7 +270,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_HEAT: case EVENT_HEAT:
me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_HEAT_H : SPELL_HEAT_N, true); me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_HEAT_H : SPELL_HEAT_N, true);
@@ -291,7 +291,6 @@ public:
case EVENT_MOVE_TO_ANVIL: case EVENT_MOVE_TO_ANVIL:
GetNextPos(); GetNextPos();
me->GetMotionMaster()->MovePoint(PointID, x, y, z); me->GetMotionMaster()->MovePoint(PointID, x, y, z);
events.PopEvent();
return; return;
case EVENT_POSITION: case EVENT_POSITION:
if (me->GetDistance(1331.9f, -106, 56) > 95) if (me->GetDistance(1331.9f, -106, 56) > 95)
@@ -381,7 +380,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BLAST: case EVENT_BLAST:
me->CastSpell(me, SPELL_BLAST_WAVE, false); me->CastSpell(me, SPELL_BLAST_WAVE, false);
@@ -506,11 +505,10 @@ public:
return; return;
events.Update(diff); events.Update(diff);
uint32 eventId = events.GetEvent(); uint32 eventId = events.ExecuteEvent();
if (eventId == EVENT_UNFREEZE) if (eventId == EVENT_UNFREEZE)
{ {
events.PopEvent();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->CastSpell(me, SPELL_AWAKEN, true); me->CastSpell(me, SPELL_AWAKEN, true);
me->RemoveAllAuras(); me->RemoveAllAuras();
@@ -104,7 +104,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BOULDER: case EVENT_BOULDER:
{ {
@@ -139,13 +139,11 @@ public:
me->CastSpell((Unit*)NULL, DUNGEON_MODE(SHATTER, SHATTER_H), false); me->CastSpell((Unit*)NULL, DUNGEON_MODE(SHATTER, SHATTER_H), false);
Talk(SAY_SHATTER); Talk(SAY_SHATTER);
events.RescheduleEvent(EVENT_REMOVE_STONED, 1500); events.RescheduleEvent(EVENT_REMOVE_STONED, 1500);
events.PopEvent();
break; break;
} }
case EVENT_REMOVE_STONED: case EVENT_REMOVE_STONED:
{ {
RemoveStonedEffect(); RemoveStonedEffect();
events.PopEvent();
break; break;
} }
} }
@@ -238,4 +236,4 @@ void AddSC_boss_krystallus()
new boss_krystallus(); new boss_krystallus();
new spell_krystallus_shatter(); new spell_krystallus_shatter();
new spell_krystallus_shatter_effect(); new spell_krystallus_shatter_effect();
} }
@@ -87,7 +87,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case EVENT_STORM: case EVENT_STORM:
{ {
@@ -193,7 +193,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_CHECK_HEALTH: case EVENT_CHECK_HEALTH:
{ {
@@ -224,7 +224,6 @@ public:
events.CancelEvent(EVENT_SUMMON); events.CancelEvent(EVENT_SUMMON);
events.ScheduleEvent(EVENT_SUMMON, 0); events.ScheduleEvent(EVENT_SUMMON, 0);
events.PopEvent();
break; break;
} }
@@ -268,7 +267,6 @@ public:
brann->PlayDirectSound(14275); brann->PlayDirectSound(14275);
} }
events.PopEvent();
break; break;
} }
case EVENT_SUMMON: case EVENT_SUMMON:
@@ -298,7 +296,6 @@ public:
case PHASE_SUMMON_FRIENDLY_DWARFES: case PHASE_SUMMON_FRIENDLY_DWARFES:
{ {
SummonDwarfes(true); SummonDwarfes(true);
events.PopEvent();
break; break;
} }
} }
@@ -438,7 +435,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
// Every 5 seconds // Every 5 seconds
case EVENT_TOXIC_VOLLEY: case EVENT_TOXIC_VOLLEY:
@@ -482,7 +479,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_MALFORMED_OOZE_CHECK: case EVENT_MALFORMED_OOZE_CHECK:
{ {
@@ -512,4 +509,4 @@ void AddSC_boss_sjonnir()
new boss_sjonnir_dwarf(); new boss_sjonnir_dwarf();
new boss_sjonnir_malformed_ooze(); new boss_sjonnir_malformed_ooze();
new boss_sjonnir_iron_sludge(); new boss_sjonnir_iron_sludge();
} }
@@ -390,24 +390,21 @@ public:
void UpdateEscortAI(uint32 diff) override void UpdateEscortAI(uint32 diff) override
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_KADDRAK_VISUAL: case EVENT_KADDRAK_VISUAL:
{ {
SwitchHeadVisaul(0x1, true); SwitchHeadVisaul(0x1, true);
events.PopEvent();
break; break;
} }
case EVENT_MARNAK_VISUAL: case EVENT_MARNAK_VISUAL:
{ {
SwitchHeadVisaul(0x2, true); SwitchHeadVisaul(0x2, true);
events.PopEvent();
break; break;
} }
case EVENT_ABEDNEUM_VISUAL: case EVENT_ABEDNEUM_VISUAL:
{ {
SwitchHeadVisaul(0x4, true); SwitchHeadVisaul(0x4, true);
events.PopEvent();
break; break;
} }
case EVENT_KADDRAK_HEAD: // First case EVENT_KADDRAK_HEAD: // First
@@ -434,7 +431,6 @@ public:
kaddrak->StopMovingOnCurrentPos(); kaddrak->StopMovingOnCurrentPos();
} }
events.PopEvent();
break; break;
} }
case EVENT_MARNAK_HEAD: // Second case EVENT_MARNAK_HEAD: // Second
@@ -727,7 +723,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_DRP_CHARGE: case EVENT_DRP_CHARGE:
{ {
@@ -785,7 +781,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_DRS_LIGHTNING_BOLD: case EVENT_DRS_LIGHTNING_BOLD:
{ {
@@ -839,7 +835,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_IGC_CRUSH: case EVENT_IGC_CRUSH:
{ {
@@ -606,21 +606,18 @@ public:
if (!(events.GetPhaseMask() & PHASE_MASK_NO_CAST_CHECK) && me->HasUnitState(UNIT_STATE_CASTING)) if (!(events.GetPhaseMask() & PHASE_MASK_NO_CAST_CHECK) && me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_INTRO_1: case EVENT_INTRO_1:
me->RemoveAurasDueToSpell(SPELL_RIDE_THE_LIGHTNING); me->RemoveAurasDueToSpell(SPELL_RIDE_THE_LIGHTNING);
Talk(SAY_ALGALON_INTRO_1); Talk(SAY_ALGALON_INTRO_1);
events.PopEvent();
break; break;
case EVENT_INTRO_2: case EVENT_INTRO_2:
me->CastSpell((Unit*)NULL, SPELL_SUMMON_AZEROTH, true); me->CastSpell((Unit*)NULL, SPELL_SUMMON_AZEROTH, true);
Talk(SAY_ALGALON_INTRO_2); Talk(SAY_ALGALON_INTRO_2);
events.PopEvent();
break; break;
case EVENT_INTRO_3: case EVENT_INTRO_3:
Talk(SAY_ALGALON_INTRO_3); Talk(SAY_ALGALON_INTRO_3);
events.PopEvent();
break; break;
case EVENT_INTRO_FINISH: case EVENT_INTRO_FINISH:
events.Reset(); events.Reset();
@@ -631,12 +628,10 @@ public:
case EVENT_START_COMBAT: case EVENT_START_COMBAT:
m_pInstance->SetData(TYPE_ALGALON, IN_PROGRESS); m_pInstance->SetData(TYPE_ALGALON, IN_PROGRESS);
Talk(SAY_ALGALON_AGGRO); Talk(SAY_ALGALON_AGGRO);
events.PopEvent();
break; break;
case EVENT_REMOVE_UNNATTACKABLE: case EVENT_REMOVE_UNNATTACKABLE:
me->SetSheath(SHEATH_STATE_MELEE); me->SetSheath(SHEATH_STATE_MELEE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
events.PopEvent();
break; break;
case EVENT_INTRO_TIMER_DONE: case EVENT_INTRO_TIMER_DONE:
events.SetPhase(PHASE_NORMAL); events.SetPhase(PHASE_NORMAL);
@@ -647,7 +642,6 @@ public:
if (Player* target = SelectTargetFromPlayerList(150.0f)) if (Player* target = SelectTargetFromPlayerList(150.0f))
AttackStart(target); AttackStart(target);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
events.PopEvent();
for (uint32 i = 0; i < LIVING_CONSTELLATION_COUNT; ++i) for (uint32 i = 0; i < LIVING_CONSTELLATION_COUNT; ++i)
me->SummonCreature(NPC_LIVING_CONSTELLATION, ConstellationPos[i], TEMPSUMMON_DEAD_DESPAWN); me->SummonCreature(NPC_LIVING_CONSTELLATION, ConstellationPos[i], TEMPSUMMON_DEAD_DESPAWN);
@@ -700,7 +694,6 @@ public:
Talk(SAY_ALGALON_ASCEND); Talk(SAY_ALGALON_ASCEND);
me->CastSpell((Unit*)NULL, SPELL_ASCEND_TO_THE_HEAVENS, false); me->CastSpell((Unit*)NULL, SPELL_ASCEND_TO_THE_HEAVENS, false);
events.ScheduleEvent(EVENT_EVADE, 2500); events.ScheduleEvent(EVENT_EVADE, 2500);
events.PopEvent();
break; break;
case EVENT_EVADE: case EVENT_EVADE:
events.Reset(); events.Reset();
@@ -712,88 +705,69 @@ public:
m_pInstance->SetData(TYPE_ALGALON, DONE); m_pInstance->SetData(TYPE_ALGALON, DONE);
m_pInstance->SetData(DATA_ALGALON_DEFEATED, 1); m_pInstance->SetData(DATA_ALGALON_DEFEATED, 1);
} }
events.PopEvent();
break; break;
case EVENT_OUTRO_1: case EVENT_OUTRO_1:
me->RemoveAllAuras(); me->RemoveAllAuras();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_RENAME); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_RENAME);
events.PopEvent();
break; break;
case EVENT_OUTRO_2: case EVENT_OUTRO_2:
_EnterEvadeMode(); _EnterEvadeMode();
me->GetMotionMaster()->MovePoint(POINT_ALGALON_OUTRO, AlgalonOutroPos); me->GetMotionMaster()->MovePoint(POINT_ALGALON_OUTRO, AlgalonOutroPos);
events.PopEvent();
break; break;
case EVENT_OUTRO_3: case EVENT_OUTRO_3:
me->CastSpell((Unit*)NULL, SPELL_KILL_CREDIT); me->CastSpell((Unit*)NULL, SPELL_KILL_CREDIT);
// Summon Chest // Summon Chest
if (GameObject* go = me->SummonGameObject(RAID_MODE(GO_ALGALON_CHEST, GO_ALGALON_CHEST_HERO), 1632.1f, -306.561f, 417.321f, 4.69494f, 0, 0, 0, 1, 0)) if (GameObject* go = me->SummonGameObject(RAID_MODE(GO_ALGALON_CHEST, GO_ALGALON_CHEST_HERO), 1632.1f, -306.561f, 417.321f, 4.69494f, 0, 0, 0, 1, 0))
go->SetUInt32Value(GAMEOBJECT_FLAGS, 0); go->SetUInt32Value(GAMEOBJECT_FLAGS, 0);
events.PopEvent();
break; break;
case EVENT_OUTRO_4: case EVENT_OUTRO_4:
me->CastSpell((Unit*)NULL, SPELL_SUPERMASSIVE_FAIL); me->CastSpell((Unit*)NULL, SPELL_SUPERMASSIVE_FAIL);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
events.PopEvent();
break; break;
case EVENT_OUTRO_5: case EVENT_OUTRO_5:
if (Creature* brann = me->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannOutroPos[0], TEMPSUMMON_TIMED_DESPAWN, 131500)) if (Creature* brann = me->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannOutroPos[0], TEMPSUMMON_TIMED_DESPAWN, 131500))
brann->AI()->DoAction(ACTION_OUTRO); brann->AI()->DoAction(ACTION_OUTRO);
events.PopEvent();
break; break;
case EVENT_OUTRO_6: case EVENT_OUTRO_6:
Talk(SAY_ALGALON_OUTRO_1); Talk(SAY_ALGALON_OUTRO_1);
me->SetStandState(UNIT_STAND_STATE_KNEEL); me->SetStandState(UNIT_STAND_STATE_KNEEL);
events.PopEvent();
break; break;
case EVENT_OUTRO_7: case EVENT_OUTRO_7:
Talk(SAY_ALGALON_OUTRO_2); Talk(SAY_ALGALON_OUTRO_2);
events.PopEvent();
break; break;
case EVENT_OUTRO_8: case EVENT_OUTRO_8:
Talk(SAY_ALGALON_OUTRO_3); Talk(SAY_ALGALON_OUTRO_3);
events.PopEvent();
break; break;
case EVENT_OUTRO_9: case EVENT_OUTRO_9:
Talk(SAY_ALGALON_OUTRO_4); Talk(SAY_ALGALON_OUTRO_4);
events.PopEvent();
break; break;
case EVENT_OUTRO_10: case EVENT_OUTRO_10:
Talk(SAY_ALGALON_OUTRO_5); Talk(SAY_ALGALON_OUTRO_5);
events.PopEvent();
break; break;
case EVENT_OUTRO_11: case EVENT_OUTRO_11:
me->SetStandState(UNIT_STAND_STATE_STAND); me->SetStandState(UNIT_STAND_STATE_STAND);
me->CastSpell(me, SPELL_TELEPORT, false); me->CastSpell(me, SPELL_TELEPORT, false);
me->DespawnOrUnsummon(3000); me->DespawnOrUnsummon(3000);
events.PopEvent();
break; break;
case EVENT_DESPAWN_ALGALON_1: case EVENT_DESPAWN_ALGALON_1:
Talk(SAY_ALGALON_DESPAWN_1); Talk(SAY_ALGALON_DESPAWN_1);
events.PopEvent();
break; break;
case EVENT_DESPAWN_ALGALON_2: case EVENT_DESPAWN_ALGALON_2:
Talk(SAY_ALGALON_DESPAWN_2); Talk(SAY_ALGALON_DESPAWN_2);
events.PopEvent();
break; break;
case EVENT_DESPAWN_ALGALON_3: case EVENT_DESPAWN_ALGALON_3:
Talk(SAY_ALGALON_DESPAWN_3); Talk(SAY_ALGALON_DESPAWN_3);
events.PopEvent();
break; break;
case EVENT_DESPAWN_ALGALON_4: case EVENT_DESPAWN_ALGALON_4:
me->CastSpell((Unit*)NULL, SPELL_ASCEND_TO_THE_HEAVENS, false); me->CastSpell((Unit*)NULL, SPELL_ASCEND_TO_THE_HEAVENS, false);
events.PopEvent();
break; break;
case EVENT_DESPAWN_ALGALON_5: case EVENT_DESPAWN_ALGALON_5:
me->SetStandState(UNIT_STAND_STATE_STAND); me->SetStandState(UNIT_STAND_STATE_STAND);
me->CastSpell(me, SPELL_TELEPORT, false); me->CastSpell(me, SPELL_TELEPORT, false);
me->DespawnOrUnsummon(3000); me->DespawnOrUnsummon(3000);
events.PopEvent();
break; break;
case EVENT_CHECK_HERALD_ITEMS: case EVENT_CHECK_HERALD_ITEMS:
if (DoCheckHeraldOfTheTitans()) if (!DoCheckHeraldOfTheTitans())
events.PopEvent();
else
events.RepeatEvent(5000); events.RepeatEvent(5000);
break; break;
} }
@@ -879,10 +853,9 @@ public:
UpdateVictim(); UpdateVictim();
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BRANN_MOVE_INTRO: case EVENT_BRANN_MOVE_INTRO:
events.PopEvent();
if (_currentPoint < MAX_BRANN_WAYPOINTS_INTRO) if (_currentPoint < MAX_BRANN_WAYPOINTS_INTRO)
me->GetMotionMaster()->MovePoint(_currentPoint, BrannIntroWaypoint[_currentPoint]); me->GetMotionMaster()->MovePoint(_currentPoint, BrannIntroWaypoint[_currentPoint]);
break; break;
@@ -890,15 +863,12 @@ public:
if (me->GetInstanceScript() && !me->GetInstanceScript()->GetData64(TYPE_ALGALON)) if (me->GetInstanceScript() && !me->GetInstanceScript()->GetData64(TYPE_ALGALON))
if (Creature* algalon = me->GetMap()->SummonCreature(NPC_ALGALON, AlgalonSummonPos)) if (Creature* algalon = me->GetMap()->SummonCreature(NPC_ALGALON, AlgalonSummonPos))
algalon->AI()->DoAction(ACTION_START_INTRO); algalon->AI()->DoAction(ACTION_START_INTRO);
events.PopEvent();
break; break;
case EVENT_BRANN_OUTRO_1: case EVENT_BRANN_OUTRO_1:
Talk(SAY_BRANN_ALGALON_OUTRO); Talk(SAY_BRANN_ALGALON_OUTRO);
events.PopEvent();
break; break;
case EVENT_BRANN_OUTRO_2: case EVENT_BRANN_OUTRO_2:
me->GetMotionMaster()->MovePoint(POINT_BRANN_OUTRO_END, BrannOutroPos[2]); me->GetMotionMaster()->MovePoint(POINT_BRANN_OUTRO_END, BrannOutroPos[2]);
events.PopEvent();
break; break;
} }
} }
@@ -1018,7 +988,7 @@ public:
return; return;
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_ARCANE_BARRAGE: case EVENT_ARCANE_BARRAGE:
me->CastCustomSpell(SPELL_ARCANE_BARRAGE, SPELLVALUE_MAX_TARGETS, 1, (Unit*)NULL, true); me->CastCustomSpell(SPELL_ARCANE_BARRAGE, SPELLVALUE_MAX_TARGETS, 1, (Unit*)NULL, true);
@@ -1026,7 +996,6 @@ public:
break; break;
case EVENT_RESUME_UPDATING: case EVENT_RESUME_UPDATING:
events.SetPhase(0); events.SetPhase(0);
events.PopEvent();
break; break;
} }
} }
@@ -1140,11 +1109,10 @@ public:
return; return;
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_DESPAWN_CONSOLE: case EVENT_DESPAWN_CONSOLE:
go->Delete(); go->Delete();
events.PopEvent();
break; break;
} }
} }
@@ -327,7 +327,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case EVENT_FUSION_PUNCH: case EVENT_FUSION_PUNCH:
me->CastSpell(me->GetVictim(), SPELL_FUSION_PUNCH, false); me->CastSpell(me->GetVictim(), SPELL_FUSION_PUNCH, false);
@@ -347,7 +347,6 @@ public:
case EVENT_ENRAGE: case EVENT_ENRAGE:
Talk(SAY_STEELBREAKER_BERSERK); Talk(SAY_STEELBREAKER_BERSERK);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
} }
@@ -497,7 +496,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case EVENT_RUNE_OF_POWER: case EVENT_RUNE_OF_POWER:
{ {
@@ -529,7 +528,6 @@ public:
case EVENT_ENRAGE: case EVENT_ENRAGE:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
Talk(SAY_MOLGEIM_BERSERK); Talk(SAY_MOLGEIM_BERSERK);
events.PopEvent();
break; break;
} }
@@ -762,7 +760,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_CHAIN_LIGHTNING: case EVENT_CHAIN_LIGHTNING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -772,7 +770,6 @@ public:
break; break;
case EVENT_IMMUNE: case EVENT_IMMUNE:
me->ApplySpellImmune(1, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); me->ApplySpellImmune(1, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
events.PopEvent();
break; break;
case EVENT_OVERLOAD: case EVENT_OVERLOAD:
me->ApplySpellImmune(1, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, true); me->ApplySpellImmune(1, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, true);
@@ -818,7 +815,6 @@ public:
me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed); me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed);
_flyPhase = false; _flyPhase = false;
events.ScheduleEvent(EVENT_LAND_LAND, 1000); events.ScheduleEvent(EVENT_LAND_LAND, 1000);
events.PopEvent();
break; break;
} }
case EVENT_LAND_LAND: case EVENT_LAND_LAND:
@@ -833,13 +829,11 @@ public:
me->RemoveAura(SPELL_LIGHTNING_TENDRILS); me->RemoveAura(SPELL_LIGHTNING_TENDRILS);
me->RemoveAura(61883); me->RemoveAura(61883);
DoResetThreat(); DoResetThreat();
events.PopEvent();
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
break; break;
case EVENT_ENRAGE: case EVENT_ENRAGE:
Talk(SAY_BRUNDIR_BERSERK); Talk(SAY_BRUNDIR_BERSERK);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
} }
@@ -224,17 +224,15 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SUMMON_FERAL_DEFENDER: case EVENT_SUMMON_FERAL_DEFENDER:
me->MonsterTextEmote("Auriaya begins to activate Feral Defender.", 0, true); me->MonsterTextEmote("Auriaya begins to activate Feral Defender.", 0, true);
me->CastSpell(me, SPELL_ACTIVATE_FERAL_DEFENDER, true); me->CastSpell(me, SPELL_ACTIVATE_FERAL_DEFENDER, true);
events.PopEvent();
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, true);
events.ScheduleEvent(EVENT_REMOVE_IMMUNE, 3000); events.ScheduleEvent(EVENT_REMOVE_IMMUNE, 3000);
break; break;
case EVENT_REMOVE_IMMUNE: case EVENT_REMOVE_IMMUNE:
events.PopEvent();
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
break; break;
case EVENT_TERRIFYING_SCREECH: case EVENT_TERRIFYING_SCREECH:
@@ -259,14 +257,12 @@ public:
{ {
EntryCheckPredicate pred(NPC_FERAL_DEFENDER); EntryCheckPredicate pred(NPC_FERAL_DEFENDER);
summons.DoAction(ACTION_FERAL_RESPAWN, pred); summons.DoAction(ACTION_FERAL_RESPAWN, pred);
events.PopEvent();
break; break;
} }
case EVENT_ENRAGE: case EVENT_ENRAGE:
me->MonsterTextEmote("You waste my time!", 0); me->MonsterTextEmote("You waste my time!", 0);
me->PlayDirectSound(SOUND_BERSERK); me->PlayDirectSound(SOUND_BERSERK);
me->CastSpell(me, SPELL_ENRAGE, true); me->CastSpell(me, SPELL_ENRAGE, true);
events.PopEvent();
break; break;
} }
@@ -384,7 +384,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_POSITION_CHECK: case EVENT_POSITION_CHECK:
if (me->GetPositionX() > 450 || me->GetPositionX() < 120) if (me->GetPositionX() > 450 || me->GetPositionX() < 120)
@@ -423,10 +423,8 @@ public:
Talk(FLAME_LEVIATHAN_SAY_HARDMODE); Talk(FLAME_LEVIATHAN_SAY_HARDMODE);
else else
Talk(FLAME_LEVIATHAN_SAY_TOWER_NONE); Talk(FLAME_LEVIATHAN_SAY_TOWER_NONE);
events.PopEvent();
return; return;
case EVENT_REINSTALL: case EVENT_REINSTALL:
events.PopEvent();
for (uint8 i = RAID_MODE(0, 2); i < 4; ++i) for (uint8 i = RAID_MODE(0, 2); i < 4; ++i)
if (Unit* seat = vehicle->GetPassenger(i)) if (Unit* seat = vehicle->GetPassenger(i))
if (seat->GetTypeId() == TYPEID_UNIT) if (seat->GetTypeId() == TYPEID_UNIT)
@@ -441,19 +439,16 @@ public:
return; return;
case EVENT_FREYA: case EVENT_FREYA:
SummonTowerHelpers(TOWER_OF_LIFE); SummonTowerHelpers(TOWER_OF_LIFE);
events.PopEvent();
me->MonsterTextEmote("Flame Leviathan activates Freya's Ward.", 0, true); me->MonsterTextEmote("Flame Leviathan activates Freya's Ward.", 0, true);
Talk(FLAME_LEVIATHAN_SAY_TOWER_NATURE); Talk(FLAME_LEVIATHAN_SAY_TOWER_NATURE);
return; return;
case EVENT_MIMIRONS_INFERNO: case EVENT_MIMIRONS_INFERNO:
SummonTowerHelpers(TOWER_OF_FLAMES); SummonTowerHelpers(TOWER_OF_FLAMES);
events.PopEvent();
me->MonsterTextEmote("Flame Leviathan activates Mimiron's Inferno.", 0, true); me->MonsterTextEmote("Flame Leviathan activates Mimiron's Inferno.", 0, true);
Talk(FLAME_LEVIATHAN_SAY_TOWER_FLAME); Talk(FLAME_LEVIATHAN_SAY_TOWER_FLAME);
return; return;
case EVENT_HODIRS_FURY: case EVENT_HODIRS_FURY:
SummonTowerHelpers(TOWER_OF_FROST); SummonTowerHelpers(TOWER_OF_FROST);
events.PopEvent();
me->MonsterTextEmote("Flame Leviathan activates Hodir's Fury.", 0, true); me->MonsterTextEmote("Flame Leviathan activates Hodir's Fury.", 0, true);
Talk(FLAME_LEVIATHAN_SAY_TOWER_FROST); Talk(FLAME_LEVIATHAN_SAY_TOWER_FROST);
return; return;
@@ -558,7 +558,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_FREYA_ADDS_SPAM: case EVENT_FREYA_ADDS_SPAM:
if (_spawnedAmount < 6) if (_spawnedAmount < 6)
@@ -568,7 +568,6 @@ public:
me->RemoveAura(SPELL_ATTUNED_TO_NATURE); me->RemoveAura(SPELL_ATTUNED_TO_NATURE);
events.ScheduleEvent(EVENT_FREYA_NATURE_BOMB, 5000); events.ScheduleEvent(EVENT_FREYA_NATURE_BOMB, 5000);
events.SetPhase(EVENT_PHASE_FINAL); events.SetPhase(EVENT_PHASE_FINAL);
events.PopEvent();
return; return;
} }
_spawnedAmount++; _spawnedAmount++;
@@ -599,7 +598,6 @@ public:
events.RepeatEvent(15000 + urand(0, 5000)); events.RepeatEvent(15000 + urand(0, 5000));
break; break;
case EVENT_FREYA_RESPAWN_TRIO: case EVENT_FREYA_RESPAWN_TRIO:
events.PopEvent();
_deforestation = 0; _deforestation = 0;
_respawningTrio = false; _respawningTrio = false;
if (_trioKilled < 3) if (_trioKilled < 3)
@@ -628,7 +626,6 @@ public:
me->MonsterYell("You have strayed too far, wasted too much time!", LANG_UNIVERSAL, 0); me->MonsterYell("You have strayed too far, wasted too much time!", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_BERSERK); me->PlayDirectSound(SOUND_BERSERK);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
case EVENT_FREYA_GROUND_TREMOR: case EVENT_FREYA_GROUND_TREMOR:
me->CastSpell(me, SPELL_GROUND_TREMOR_FREYA, false); me->CastSpell(me, SPELL_GROUND_TREMOR_FREYA, false);
@@ -742,7 +739,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_STONEBARK_FISTS_OF_STONE: case EVENT_STONEBARK_FISTS_OF_STONE:
me->CastSpell(me, SPELL_FISTS_OF_STONE, false); me->CastSpell(me, SPELL_FISTS_OF_STONE, false);
@@ -839,7 +836,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BRIGHTLEAF_FLUX: case EVENT_BRIGHTLEAF_FLUX:
if (Aura* aur = me->AddAura(SPELL_BRIGHTLEAF_FLUX, me)) if (Aura* aur = me->AddAura(SPELL_BRIGHTLEAF_FLUX, me))
@@ -880,7 +877,6 @@ public:
} }
summons.DespawnAll(); summons.DespawnAll();
events.PopEvent();
break; break;
} }
@@ -961,7 +957,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_IRONBRANCH_IMPALE: case EVENT_IRONBRANCH_IMPALE:
me->CastSpell(me->GetVictim(), SPELL_IMPALE, false); me->CastSpell(me->GetVictim(), SPELL_IMPALE, false);
@@ -1193,7 +1189,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_ANCIENT_CONSERVATOR_NATURE_FURY: case EVENT_ANCIENT_CONSERVATOR_NATURE_FURY:
me->CastSpell(me->GetVictim(), SPELL_NATURE_FURY, false); me->CastSpell(me->GetVictim(), SPELL_NATURE_FURY, false);
@@ -1207,7 +1203,6 @@ public:
break; break;
case EVENT_WATER_SPIRIT_DAMAGE: case EVENT_WATER_SPIRIT_DAMAGE:
me->CastSpell(me, SPELL_TIDAL_WAVE_DAMAGE, false); me->CastSpell(me, SPELL_TIDAL_WAVE_DAMAGE, false);
events.PopEvent();
break; break;
case EVENT_STORM_LASHER_LIGHTNING_LASH: case EVENT_STORM_LASHER_LIGHTNING_LASH:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -207,7 +207,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -216,7 +216,6 @@ public:
me->CastSpell(me, SPELL_VEZAX_BERSERK, true); me->CastSpell(me, SPELL_VEZAX_BERSERK, true);
me->MonsterYell(TEXT_VEZAX_BERSERK, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_VEZAX_BERSERK, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_VEZAX_BERSERK, 0); me->PlayDirectSound(SOUND_VEZAX_BERSERK, 0);
events.PopEvent();
break; break;
case EVENT_SPELL_VEZAX_SHADOW_CRASH: case EVENT_SPELL_VEZAX_SHADOW_CRASH:
{ {
@@ -243,7 +242,6 @@ public:
case EVENT_RESTORE_TARGET: case EVENT_RESTORE_TARGET:
if (me->GetVictim()) if (me->GetVictim())
me->SetUInt64Value(UNIT_FIELD_TARGET, me->GetVictim()->GetGUID()); me->SetUInt64Value(UNIT_FIELD_TARGET, me->GetVictim()->GetGUID());
events.PopEvent();
break; break;
case EVENT_SPELL_SEARING_FLAMES: case EVENT_SPELL_SEARING_FLAMES:
if(!me->HasAura(SPELL_SARONITE_BARRIER)) if(!me->HasAura(SPELL_SARONITE_BARRIER))
@@ -302,7 +300,6 @@ public:
sv->GetMotionMaster()->MoveCharge(1852.78f, 81.38f, 342.461f, 28.0f); sv->GetMotionMaster()->MoveCharge(1852.78f, 81.38f, 342.461f, 28.0f);
} }
events.PopEvent();
events.DelayEvents(12000, 0); events.DelayEvents(12000, 0);
events.DelayEvents(12000, 1); events.DelayEvents(12000, 1);
events.ScheduleEvent(EVENT_SARONITE_VAPORS_SWIRL, 6000); events.ScheduleEvent(EVENT_SARONITE_VAPORS_SWIRL, 6000);
@@ -316,11 +313,9 @@ public:
if( Creature* sv = ObjectAccessor::GetCreature(*me, *(summons.begin())) ) if( Creature* sv = ObjectAccessor::GetCreature(*me, *(summons.begin())) )
sv->CastSpell(sv, SPELL_SARONITE_ANIMUS_FORMATION_VISUAL, true); sv->CastSpell(sv, SPELL_SARONITE_ANIMUS_FORMATION_VISUAL, true);
events.PopEvent();
events.ScheduleEvent(EVENT_SPELL_SUMMON_SARONITE_ANIMUS, 2000); events.ScheduleEvent(EVENT_SPELL_SUMMON_SARONITE_ANIMUS, 2000);
break; break;
} }
events.PopEvent();
break; break;
case EVENT_SPELL_SUMMON_SARONITE_ANIMUS: case EVENT_SPELL_SUMMON_SARONITE_ANIMUS:
if (summons.size()) if (summons.size())
@@ -333,15 +328,12 @@ public:
if( Creature* sv = ObjectAccessor::GetCreature(*me, *(summons.begin())) ) if( Creature* sv = ObjectAccessor::GetCreature(*me, *(summons.begin())) )
sv->CastSpell(sv, SPELL_SUMMON_SARONITE_ANIMUS, true); sv->CastSpell(sv, SPELL_SUMMON_SARONITE_ANIMUS, true);
events.PopEvent();
events.ScheduleEvent(EVENT_DESPAWN_SARONITE_VAPORS, 2500); events.ScheduleEvent(EVENT_DESPAWN_SARONITE_VAPORS, 2500);
break; break;
} }
events.PopEvent();
break; break;
case EVENT_DESPAWN_SARONITE_VAPORS: case EVENT_DESPAWN_SARONITE_VAPORS:
summons.DespawnEntry(NPC_SARONITE_VAPORS); summons.DespawnEntry(NPC_SARONITE_VAPORS);
events.PopEvent();
break; break;
} }
@@ -396,7 +396,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -406,14 +406,12 @@ public:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
me->MonsterYell(TEXT_HODIR_BERSERK, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_HODIR_BERSERK, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_HODIR_BERSERK, 0); me->PlayDirectSound(SOUND_HODIR_BERSERK, 0);
events.PopEvent();
} }
break; break;
case EVENT_HARD_MODE_MISSED: case EVENT_HARD_MODE_MISSED:
{ {
hardmode = false; hardmode = false;
me->MonsterTextEmote(TEXTEMOTE_HODIR_HARD_MODE_MISSED, 0); me->MonsterTextEmote(TEXTEMOTE_HODIR_HARD_MODE_MISSED, 0);
events.PopEvent();
} }
break; break;
case EVENT_FLASH_FREEZE: case EVENT_FLASH_FREEZE:
@@ -447,7 +445,6 @@ public:
case EVENT_SMALL_ICICLES_ENABLE: case EVENT_SMALL_ICICLES_ENABLE:
{ {
SmallIcicles(true); SmallIcicles(true);
events.PopEvent();
} }
break; break;
case EVENT_FROZEN_BLOWS: case EVENT_FROZEN_BLOWS:
@@ -456,7 +453,6 @@ public:
me->MonsterTextEmote(TEXTEMOTE_HODIR_FROZEN_BLOWS, 0); me->MonsterTextEmote(TEXTEMOTE_HODIR_FROZEN_BLOWS, 0);
me->PlayDirectSound(SOUND_HODIR_FROZEN_BLOWS, 0); me->PlayDirectSound(SOUND_HODIR_FROZEN_BLOWS, 0);
me->CastSpell(me, SPELL_FROZEN_BLOWS, true); me->CastSpell(me, SPELL_FROZEN_BLOWS, true);
events.PopEvent();
} }
break; break;
case EVENT_FREEZE: case EVENT_FREEZE:
@@ -789,7 +785,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -801,7 +797,6 @@ public:
if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) ) if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) )
{ {
AttackStart(hodir); AttackStart(hodir);
events.PopEvent();
ScheduleAbilities(); ScheduleAbilities();
break; break;
} }
@@ -886,7 +881,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -898,7 +893,6 @@ public:
if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) ) if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) )
{ {
AttackStart(hodir); AttackStart(hodir);
events.PopEvent();
ScheduleAbilities(); ScheduleAbilities();
break; break;
} }
@@ -991,7 +985,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -1003,7 +997,6 @@ public:
if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) ) if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) )
{ {
AttackStart(hodir); AttackStart(hodir);
events.PopEvent();
ScheduleAbilities(); ScheduleAbilities();
break; break;
} }
@@ -1086,7 +1079,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -1098,7 +1091,6 @@ public:
if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) ) if( Creature* hodir = ObjectAccessor::GetCreature(*me, g) )
{ {
AttackStart(hodir); AttackStart(hodir);
events.PopEvent();
ScheduleAbilities(); ScheduleAbilities();
break; break;
} }
@@ -336,7 +336,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -347,7 +347,6 @@ public:
me->MonsterYell(TEXT_BERSERK, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_BERSERK, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_BERSERK); me->PlayDirectSound(SOUND_BERSERK);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
break; break;
} }
events.RepeatEvent(RAID_MODE(40000, 30000)); events.RepeatEvent(RAID_MODE(40000, 30000));
@@ -373,7 +372,6 @@ public:
case EVENT_ENABLE_ROTATE: case EVENT_ENABLE_ROTATE:
me->SetControlled(false, UNIT_STATE_ROOT); me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false); me->DisableRotate(false);
events.PopEvent();
break; break;
case EVENT_SPELL_FLAME_JETS: case EVENT_SPELL_FLAME_JETS:
me->MonsterTextEmote(TEXT_FLAME_JETS, 0, true); me->MonsterTextEmote(TEXT_FLAME_JETS, 0, true);
@@ -391,7 +391,6 @@ public:
case EVENT_STONE_SHOUT: case EVENT_STONE_SHOUT:
if (_left || _right) if (_left || _right)
{ {
events.PopEvent();
return; return;
} }
@@ -463,12 +462,10 @@ public:
} }
case EVENT_RESTORE_ARM_LEFT: case EVENT_RESTORE_ARM_LEFT:
// shouldn't happen // shouldn't happen
events.PopEvent();
AttachLeftArm(); AttachLeftArm();
return; return;
case EVENT_RESTORE_ARM_RIGHT: case EVENT_RESTORE_ARM_RIGHT:
// shouldn't happen // shouldn't happen
events.PopEvent();
AttachRightArm(); AttachRightArm();
return; return;
} }
@@ -429,24 +429,21 @@ public:
events.Update(diff); events.Update(diff);
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_COMPUTER_SAY_INITIATED: case EVENT_COMPUTER_SAY_INITIATED:
if( Creature* computer = me->SummonCreature(NPC_COMPUTER, 2790.0f, 2569.44f, 364.31f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000) ) if( Creature* computer = me->SummonCreature(NPC_COMPUTER, 2790.0f, 2569.44f, 364.31f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000) )
computer->AI()->Talk(TALK_COMPUTER_INITIATED); computer->AI()->Talk(TALK_COMPUTER_INITIATED);
events.PopEvent();
break; break;
case EVENT_COMPUTER_SAY_MINUTES: case EVENT_COMPUTER_SAY_MINUTES:
if( Creature* computer = me->SummonCreature(NPC_COMPUTER, 2790.0f, 2569.44f, 364.31f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000) ) if( Creature* computer = me->SummonCreature(NPC_COMPUTER, 2790.0f, 2569.44f, 364.31f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000) )
computer->AI()->Talk(minutesTalkNum++); computer->AI()->Talk(minutesTalkNum++);
events.PopEvent();
break; break;
case EVENT_MIMIRON_SAY_HARDMODE: case EVENT_MIMIRON_SAY_HARDMODE:
me->MonsterYell(TEXT_HARDMODE, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_HARDMODE, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_TANK_HARD_INTRO); me->PlayDirectSound(SOUND_TANK_HARD_INTRO);
events.PopEvent();
events.ScheduleEvent(EVENT_SPAWN_FLAMES_INITIAL, 0); events.ScheduleEvent(EVENT_SPAWN_FLAMES_INITIAL, 0);
events.ScheduleEvent(EVENT_SIT_LMK2, 4000); events.ScheduleEvent(EVENT_SIT_LMK2, 4000);
break; break;
@@ -484,7 +481,6 @@ public:
me->PlayDirectSound(SOUND_BERSERK); me->PlayDirectSound(SOUND_BERSERK);
if( hardmode ) if( hardmode )
me->SummonCreature(33576, 2744.78f, 2569.47f, 364.32f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 120000); me->SummonCreature(33576, 2744.78f, 2569.47f, 364.32f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 120000);
events.PopEvent();
events.ScheduleEvent(EVENT_BERSERK_2, 0); events.ScheduleEvent(EVENT_BERSERK_2, 0);
break; break;
case EVENT_BERSERK_2: case EVENT_BERSERK_2:
@@ -505,7 +501,6 @@ public:
if(Creature* LMK2 = GetLMK2()) if(Creature* LMK2 = GetLMK2())
{ {
me->EnterVehicle(LMK2, 6); me->EnterVehicle(LMK2, 6);
events.PopEvent();
events.ScheduleEvent(EVENT_SIT_LMK2_INTERVAL, 2000); events.ScheduleEvent(EVENT_SIT_LMK2_INTERVAL, 2000);
break; break;
} }
@@ -522,7 +517,6 @@ public:
cannon->CastSpell(cannon, SPELL_EMERGENCY_MODE, true); cannon->CastSpell(cannon, SPELL_EMERGENCY_MODE, true);
} }
LMK2->AI()->SetData(1, 1); LMK2->AI()->SetData(1, 1);
events.PopEvent();
break; break;
} }
EnterEvadeMode(); EnterEvadeMode();
@@ -534,7 +528,6 @@ public:
me->MonsterYell(TEXT_LMK2_DEATH, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_LMK2_DEATH, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_TANK_DEATH); me->PlayDirectSound(SOUND_TANK_DEATH);
LMK2->SetFacingTo(3.58f); LMK2->SetFacingTo(3.58f);
events.PopEvent();
events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_0, 6000); events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_0, 6000);
break; break;
} }
@@ -547,7 +540,6 @@ public:
elevator->UseDoorOrButton(0, false); elevator->UseDoorOrButton(0, false);
elevator->EnableCollision(false); elevator->EnableCollision(false);
} }
events.PopEvent();
events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_1, 6000); events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_1, 6000);
break; break;
case EVENT_ELEVATOR_INTERVAL_1: case EVENT_ELEVATOR_INTERVAL_1:
@@ -559,7 +551,6 @@ public:
elevator->UseDoorOrButton(0, true); elevator->UseDoorOrButton(0, true);
elevator->EnableCollision(false); elevator->EnableCollision(false);
} }
events.PopEvent();
events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_2, 18000); events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_2, 18000);
break; break;
} }
@@ -569,7 +560,6 @@ public:
if (Creature* VX001 = GetVX001()) if (Creature* VX001 = GetVX001())
{ {
me->EnterVehicle(VX001, 0); me->EnterVehicle(VX001, 0);
events.PopEvent();
events.ScheduleEvent(EVENT_SITTING_ON_VX001, 4000); events.ScheduleEvent(EVENT_SITTING_ON_VX001, 4000);
break; break;
} }
@@ -578,14 +568,12 @@ public:
case EVENT_SITTING_ON_VX001: case EVENT_SITTING_ON_VX001:
me->MonsterYell(TEXT_VX001_ACTIVATE, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_VX001_ACTIVATE, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_TORSO_ACTIVE); me->PlayDirectSound(SOUND_TORSO_ACTIVE);
events.PopEvent();
events.ScheduleEvent(EVENT_ENTER_VX001, 5000); events.ScheduleEvent(EVENT_ENTER_VX001, 5000);
break; break;
case EVENT_ENTER_VX001: case EVENT_ENTER_VX001:
if( Creature* VX001 = GetVX001() ) if( Creature* VX001 = GetVX001() )
{ {
me->EnterVehicle(VX001, 1); me->EnterVehicle(VX001, 1);
events.PopEvent();
events.ScheduleEvent(EVENT_EMOTE_VX001, 2000); events.ScheduleEvent(EVENT_EMOTE_VX001, 2000);
break; break;
} }
@@ -595,7 +583,6 @@ public:
if( Creature* VX001 = GetVX001() ) if( Creature* VX001 = GetVX001() )
{ {
VX001->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); VX001->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
events.PopEvent();
events.ScheduleEvent(EVENT_VX001_START_FIGHT, 1750); events.ScheduleEvent(EVENT_VX001_START_FIGHT, 1750);
break; break;
} }
@@ -608,7 +595,6 @@ public:
VX001->CastSpell(VX001, SPELL_EMERGENCY_MODE, true); VX001->CastSpell(VX001, SPELL_EMERGENCY_MODE, true);
VX001->AI()->SetData(1, 2); VX001->AI()->SetData(1, 2);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
events.PopEvent();
break; break;
} }
EnterEvadeMode(); EnterEvadeMode();
@@ -618,7 +604,6 @@ public:
{ {
VX001->HandleEmoteCommand(EMOTE_STATE_DROWNED); VX001->HandleEmoteCommand(EMOTE_STATE_DROWNED);
VX001->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DROWNED); VX001->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DROWNED);
events.PopEvent();
events.ScheduleEvent(EVENT_GET_OUT_VX001, 2500); events.ScheduleEvent(EVENT_GET_OUT_VX001, 2500);
break; break;
} }
@@ -632,7 +617,6 @@ public:
float speed = ACU->GetDistance(2737.75f, 2574.22f, 381.34f) / 2.0f; float speed = ACU->GetDistance(2737.75f, 2574.22f, 381.34f) / 2.0f;
ACU->MonsterMoveWithSpeed(2737.75f, 2574.22f, 381.34f, speed); ACU->MonsterMoveWithSpeed(2737.75f, 2574.22f, 381.34f, speed);
ACU->SetPosition(2737.75f, 2574.22f, 381.34f, M_PI); ACU->SetPosition(2737.75f, 2574.22f, 381.34f, M_PI);
events.PopEvent();
events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2000); events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2000);
break; break;
} }
@@ -642,14 +626,12 @@ public:
changeAllowedFlameSpreadTime = true; changeAllowedFlameSpreadTime = true;
me->MonsterYell(TEXT_VX001_DEATH, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_VX001_DEATH, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_TORSO_DEATH); me->PlayDirectSound(SOUND_TORSO_DEATH);
events.PopEvent();
events.ScheduleEvent(EVENT_ENTER_ACU, 7000); events.ScheduleEvent(EVENT_ENTER_ACU, 7000);
break; break;
case EVENT_ENTER_ACU: case EVENT_ENTER_ACU:
if( Creature* ACU = GetACU() ) if( Creature* ACU = GetACU() )
{ {
me->EnterVehicle(ACU, 0); me->EnterVehicle(ACU, 0);
events.PopEvent();
events.ScheduleEvent(EVENT_SAY_ACU_ACTIVATE, 6000); events.ScheduleEvent(EVENT_SAY_ACU_ACTIVATE, 6000);
break; break;
} }
@@ -658,7 +640,6 @@ public:
case EVENT_SAY_ACU_ACTIVATE: case EVENT_SAY_ACU_ACTIVATE:
me->MonsterYell(TEXT_ACU_ACTIVATE, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_ACU_ACTIVATE, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_HEAD_ACTIVE); me->PlayDirectSound(SOUND_HEAD_ACTIVE);
events.PopEvent();
events.ScheduleEvent(EVENT_ACU_START_ATTACK, 4000); events.ScheduleEvent(EVENT_ACU_START_ATTACK, 4000);
break; break;
case EVENT_ACU_START_ATTACK: case EVENT_ACU_START_ATTACK:
@@ -668,7 +649,6 @@ public:
ACU->CastSpell(ACU, SPELL_EMERGENCY_MODE, true); ACU->CastSpell(ACU, SPELL_EMERGENCY_MODE, true);
ACU->AI()->SetData(1, 3); ACU->AI()->SetData(1, 3);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
events.PopEvent();
break; break;
} }
EnterEvadeMode(); EnterEvadeMode();
@@ -676,14 +656,12 @@ public:
case EVENT_SAY_ACU_DEAD: case EVENT_SAY_ACU_DEAD:
me->MonsterYell(TEXT_ACU_DEATH, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_ACU_DEATH, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_HEAD_DEATH); me->PlayDirectSound(SOUND_HEAD_DEATH);
events.PopEvent();
events.ScheduleEvent(EVENT_LEVIATHAN_COME_CLOSER, 5000); events.ScheduleEvent(EVENT_LEVIATHAN_COME_CLOSER, 5000);
break; break;
case EVENT_LEVIATHAN_COME_CLOSER: case EVENT_LEVIATHAN_COME_CLOSER:
if (Creature* LMK2 = GetLMK2()) if (Creature* LMK2 = GetLMK2())
{ {
LMK2->GetMotionMaster()->MoveCharge(2755.77f, 2574.95f, 364.31f, 21.0f); LMK2->GetMotionMaster()->MoveCharge(2755.77f, 2574.95f, 364.31f, 21.0f);
events.PopEvent();
events.ScheduleEvent(EVENT_VX001_EMOTE_JUMP, 4000); events.ScheduleEvent(EVENT_VX001_EMOTE_JUMP, 4000);
break; break;
} }
@@ -702,7 +680,6 @@ public:
VX001->SendMeleeAttackStop(); VX001->SendMeleeAttackStop();
VX001->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_CUSTOM_SPELL_02); VX001->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_CUSTOM_SPELL_02);
VX001->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_02); VX001->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_02);
events.PopEvent();
events.ScheduleEvent(EVENT_LEVIATHAN_RIDE_MIDDLE, 4800); events.ScheduleEvent(EVENT_LEVIATHAN_RIDE_MIDDLE, 4800);
} }
break; break;
@@ -722,7 +699,6 @@ public:
VX001->EnterVehicle(LMK2, 3); VX001->EnterVehicle(LMK2, 3);
LMK2->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_01); LMK2->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_01);
LMK2->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01); LMK2->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01);
events.PopEvent();
events.ScheduleEvent(EVENT_JOIN_TOGETHER, 3000); events.ScheduleEvent(EVENT_JOIN_TOGETHER, 3000);
} }
break; break;
@@ -740,7 +716,6 @@ public:
me->EnterVehicle(VX001, 1); me->EnterVehicle(VX001, 1);
me->MonsterYell(TEXT_VOLTRON_ACTIVATE, LANG_UNIVERSAL, 0); me->MonsterYell(TEXT_VOLTRON_ACTIVATE, LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_VOLTRON_ACTIVE); me->PlayDirectSound(SOUND_VOLTRON_ACTIVE);
events.PopEvent();
events.ScheduleEvent(EVENT_START_PHASE4, 10000); events.ScheduleEvent(EVENT_START_PHASE4, 10000);
} }
break; break;
@@ -768,7 +743,6 @@ public:
ACU->CastSpell(ACU, SPELL_EMERGENCY_MODE, true); ACU->CastSpell(ACU, SPELL_EMERGENCY_MODE, true);
} }
me->SetInCombatWithZone(); me->SetInCombatWithZone();
events.PopEvent();
} }
break; break;
case EVENT_FINISH: case EVENT_FINISH:
@@ -841,7 +815,6 @@ public:
if( uint32 chestId = (hardmode ? RAID_MODE(GO_MIMIRON_CHEST_HARD, GO_MIMIRON_CHEST_HERO_HARD) : RAID_MODE(GO_MIMIRON_CHEST, GO_MIMIRON_CHEST_HERO)) ) if( uint32 chestId = (hardmode ? RAID_MODE(GO_MIMIRON_CHEST_HARD, GO_MIMIRON_CHEST_HERO_HARD) : RAID_MODE(GO_MIMIRON_CHEST, GO_MIMIRON_CHEST_HERO)) )
if( GameObject* go = me->SummonGameObject(chestId, 2744.65f, 2569.46f, 364.397f, 0, 0, 0, 0, 0, 0) ) if( GameObject* go = me->SummonGameObject(chestId, 2744.65f, 2569.46f, 364.397f, 0, 0, 0, 0, 0, 0) )
go->SetUInt32Value(GAMEOBJECT_FLAGS, 0); go->SetUInt32Value(GAMEOBJECT_FLAGS, 0);
events.PopEvent();
events.ScheduleEvent(EVENT_DISAPPEAR, 15000); events.ScheduleEvent(EVENT_DISAPPEAR, 15000);
break; break;
case EVENT_DISAPPEAR: case EVENT_DISAPPEAR:
@@ -849,7 +822,6 @@ public:
pInstance->SetData(TYPE_MIMIRON, DONE); pInstance->SetData(TYPE_MIMIRON, DONE);
summons.DespawnAll(); summons.DespawnAll();
me->DespawnOrUnsummon(); me->DespawnOrUnsummon();
events.PopEvent();
break; break;
} }
} }
@@ -1158,7 +1130,7 @@ public:
if (!cannon || cannon->HasUnitState(UNIT_STATE_CASTING) || me->HasUnitState(UNIT_STATE_CASTING) || me->HasAuraType(SPELL_AURA_MOD_SILENCE)) if (!cannon || cannon->HasUnitState(UNIT_STATE_CASTING) || me->HasUnitState(UNIT_STATE_CASTING) || me->HasAuraType(SPELL_AURA_MOD_SILENCE))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -1211,13 +1183,10 @@ public:
if( Creature* pmNPC = me->SummonCreature(NPC_PROXIMITY_MINE, x + v_xmin, y + v_ymin, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 40000) ) if( Creature* pmNPC = me->SummonCreature(NPC_PROXIMITY_MINE, x + v_xmin, y + v_ymin, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 40000) )
pmNPC->KnockbackFrom(x, y, 6.0f, 25.0f); pmNPC->KnockbackFrom(x, y, 6.0f, 25.0f);
} }
events.PopEvent();
} }
break; break;
case EVENT_FLAME_SUPPRESSION_50000: case EVENT_FLAME_SUPPRESSION_50000:
me->CastSpell(me, SPELL_FLAME_SUPPRESSANT_50000yd, false); me->CastSpell(me, SPELL_FLAME_SUPPRESSANT_50000yd, false);
events.PopEvent();
break; break;
} }
} }
@@ -1471,7 +1440,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -1514,7 +1483,6 @@ public:
if (!me->HandleSpellClick(accessory, i)) if (!me->HandleSpellClick(accessory, i))
accessory->UnSummon(); accessory->UnSummon();
} }
events.PopEvent();
break; break;
case EVENT_SPELL_RAPID_BURST: case EVENT_SPELL_RAPID_BURST:
if (Player* p = SelectTargetFromPlayerList(80.0f)) if (Player* p = SelectTargetFromPlayerList(80.0f))
@@ -1828,7 +1796,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -1883,19 +1851,16 @@ public:
me->CastSpell(me, SPELL_SPINNING, true); me->CastSpell(me, SPELL_SPINNING, true);
me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetExactDist(me->GetPositionX(), me->GetPositionY(), 365.34f)); me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetExactDist(me->GetPositionX(), me->GetPositionY(), 365.34f));
me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetOrientation(), false); me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetOrientation(), false);
events.PopEvent();
events.ScheduleEvent(EVENT_MAGNETIC_CORE_FREE, 20000); events.ScheduleEvent(EVENT_MAGNETIC_CORE_FREE, 20000);
break; break;
case EVENT_MAGNETIC_CORE_FREE: case EVENT_MAGNETIC_CORE_FREE:
me->RemoveAura(SPELL_SPINNING); me->RemoveAura(SPELL_SPINNING);
me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetDistance(me->GetPositionX(), me->GetPositionY(), 381.34f)); me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetDistance(me->GetPositionX(), me->GetPositionY(), 381.34f));
me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetOrientation(), false); me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetOrientation(), false);
events.PopEvent();
events.ScheduleEvent(EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE, 1000); events.ScheduleEvent(EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE, 1000);
break; break;
case EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE: case EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE:
immobilized = false; immobilized = false;
events.PopEvent();
break; break;
} }
} }
@@ -2379,7 +2344,7 @@ public:
events.Update(diff); events.Update(diff);
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -2395,7 +2360,6 @@ public:
if (Creature* mimiron = GetMimiron()) if (Creature* mimiron = GetMimiron())
if (CreateTime < mimiron->AI()->GetData(10)) if (CreateTime < mimiron->AI()->GetData(10))
{ {
events.PopEvent();
break; break;
} }
@@ -2503,7 +2467,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -2521,7 +2485,6 @@ public:
break; break;
case EVENT_EMERGENCY_BOT_ATTACK: case EVENT_EMERGENCY_BOT_ATTACK:
me->CastSpell((Unit*)NULL, SPELL_WATER_SPRAY, false); me->CastSpell((Unit*)NULL, SPELL_WATER_SPRAY, false);
events.PopEvent();
events.RescheduleEvent(EVENT_EMERGENCY_BOT_CHECK, 5000); events.RescheduleEvent(EVENT_EMERGENCY_BOT_CHECK, 5000);
break; break;
} }
@@ -324,7 +324,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -335,7 +335,6 @@ public:
case EVENT_COMMANDER_SAY_AGGRO: case EVENT_COMMANDER_SAY_AGGRO:
if (Creature* commander = ObjectAccessor::GetCreature(*me, CommanderGUID)) if (Creature* commander = ObjectAccessor::GetCreature(*me, CommanderGUID))
commander->AI()->Talk(SAY_COMMANDER_AGGRO); commander->AI()->Talk(SAY_COMMANDER_AGGRO);
events.PopEvent();
break; break;
case EVENT_EE_SAY_MOVE_OUT: case EVENT_EE_SAY_MOVE_OUT:
for (uint8 i = 0; i < 3; ++i) for (uint8 i = 0; i < 3; ++i)
@@ -345,7 +344,6 @@ public:
c->MonsterYell(TEXT_EE_MOVE_OUT, LANG_UNIVERSAL, 0); c->MonsterYell(TEXT_EE_MOVE_OUT, LANG_UNIVERSAL, 0);
c->AI()->SetData(1, 0); // start repairing c->AI()->SetData(1, 0); // start repairing
} }
events.PopEvent();
break; break;
case EVENT_SPELL_FIREBALL: case EVENT_SPELL_FIREBALL:
if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true) ) if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true) )
@@ -436,17 +434,14 @@ public:
} }
} }
events.PopEvent();
break; break;
case EVENT_WARN_DEEP_BREATH: case EVENT_WARN_DEEP_BREATH:
me->MonsterTextEmote(TEXT_DEEP_BREATH, 0, true); me->MonsterTextEmote(TEXT_DEEP_BREATH, 0, true);
me->RemoveAura(62794); me->RemoveAura(62794);
events.PopEvent();
events.ScheduleEvent(EVENT_PHASE2_FLAME_BREATH, 2500); events.ScheduleEvent(EVENT_PHASE2_FLAME_BREATH, 2500);
break; break;
case EVENT_PHASE2_FLAME_BREATH: case EVENT_PHASE2_FLAME_BREATH:
me->CastSpell(me, S_FLAMEBREATH, true); me->CastSpell(me, S_FLAMEBREATH, true);
events.PopEvent();
events.ScheduleEvent(EVENT_FLY_UP, 2000); events.ScheduleEvent(EVENT_FLY_UP, 2000);
break; break;
case EVENT_FLY_UP: case EVENT_FLY_UP:
@@ -484,7 +479,6 @@ public:
me->GetMotionMaster()->MoveChase(target); me->GetMotionMaster()->MoveChase(target);
} }
bGroundPhase = true; bGroundPhase = true;
events.PopEvent();
events.CancelEvent(EVENT_SPELL_FIREBALL); events.CancelEvent(EVENT_SPELL_FIREBALL);
events.CancelEvent(EVENT_SPELL_DEVOURING_FLAME); events.CancelEvent(EVENT_SPELL_DEVOURING_FLAME);
events.CancelEvent(EVENT_SUMMON_MOLE_MACHINES); events.CancelEvent(EVENT_SUMMON_MOLE_MACHINES);
@@ -512,7 +506,6 @@ public:
events.ScheduleEvent(EVENT_RESUME_FIXING, 22000); events.ScheduleEvent(EVENT_RESUME_FIXING, 22000);
} }
events.PopEvent();
break; break;
case EVENT_RESUME_FIXING: case EVENT_RESUME_FIXING:
for (uint8 i = 0; i < 3; ++i) for (uint8 i = 0; i < 3; ++i)
@@ -522,7 +515,6 @@ public:
c->MonsterYell(TEXT_EE_FIRES_OUT, LANG_UNIVERSAL, 0); c->MonsterYell(TEXT_EE_FIRES_OUT, LANG_UNIVERSAL, 0);
c->AI()->SetData(1, 0); // start repairing c->AI()->SetData(1, 0); // start repairing
} }
events.PopEvent();
break; break;
case EVENT_SPELL_FLAME_BREATH: case EVENT_SPELL_FLAME_BREATH:
me->CastSpell(me->GetVictim(), S_FLAMEBREATH, false); me->CastSpell(me->GetVictim(), S_FLAMEBREATH, false);
@@ -668,13 +668,12 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_THORIM_AGGRO: case EVENT_THORIM_AGGRO:
me->MonsterYell("Interlopers! You mortals who dare to interfere with my sport will pay... Wait--you...", LANG_UNIVERSAL, 0); me->MonsterYell("Interlopers! You mortals who dare to interfere with my sport will pay... Wait--you...", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_AGGRO1); me->PlayDirectSound(SOUND_AGGRO1);
events.ScheduleEvent(EVENT_THORIM_AGGRO2, 9000); events.ScheduleEvent(EVENT_THORIM_AGGRO2, 9000);
events.PopEvent();
if (GameObject* go = GetThorimObject(DATA_THORIM_FENCE)) if (GameObject* go = GetThorimObject(DATA_THORIM_FENCE))
go->SetGoState(GO_STATE_READY); go->SetGoState(GO_STATE_READY);
@@ -684,7 +683,6 @@ public:
{ {
me->MonsterYell("I remember you... In the mountains... But you... what is this? Where am--", LANG_UNIVERSAL, 0); me->MonsterYell("I remember you... In the mountains... But you... what is this? Where am--", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_AGGRO2); me->PlayDirectSound(SOUND_AGGRO2);
events.PopEvent();
EntryCheckPredicate pred(NPC_SIF); EntryCheckPredicate pred(NPC_SIF);
summons.DoAction(ACTION_SIF_START_TALK, pred); summons.DoAction(ACTION_SIF_START_TALK, pred);
@@ -692,7 +690,6 @@ public:
} }
case EVENT_THORIM_START_PHASE1: case EVENT_THORIM_START_PHASE1:
{ {
events.PopEvent();
events.ScheduleEvent(EVENT_THORIM_STORMHAMMER, 8000, 0, EVENT_PHASE_START); events.ScheduleEvent(EVENT_THORIM_STORMHAMMER, 8000, 0, EVENT_PHASE_START);
events.ScheduleEvent(EVENT_THORIM_CHARGE_ORB, 14000, 0, EVENT_PHASE_START); events.ScheduleEvent(EVENT_THORIM_CHARGE_ORB, 14000, 0, EVENT_PHASE_START);
events.ScheduleEvent(EVENT_THORIM_FILL_ARENA, 0, 0, EVENT_PHASE_START); events.ScheduleEvent(EVENT_THORIM_FILL_ARENA, 0, 0, EVENT_PHASE_START);
@@ -728,13 +725,11 @@ public:
me->SummonCreature(NPC_LIGHTNING_ORB, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); me->SummonCreature(NPC_LIGHTNING_ORB, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
_isArenaEmpty = true; _isArenaEmpty = true;
events.PopEvent();
events.CancelEvent(EVENT_THORIM_NOT_REACH_IN_TIME); events.CancelEvent(EVENT_THORIM_NOT_REACH_IN_TIME);
break; break;
} }
case EVENT_THORIM_NOT_REACH_IN_TIME: case EVENT_THORIM_NOT_REACH_IN_TIME:
_isArenaEmpty = true; _isArenaEmpty = true;
events.PopEvent();
events.CancelEvent(EVENT_THORIM_LIGHTNING_ORB); events.CancelEvent(EVENT_THORIM_LIGHTNING_ORB);
me->CastSpell(me, SPELL_BERSERK_FRIENDS, true); me->CastSpell(me, SPELL_BERSERK_FRIENDS, true);
me->SummonCreature(NPC_LIGHTNING_ORB, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); me->SummonCreature(NPC_LIGHTNING_ORB, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
@@ -750,7 +745,6 @@ public:
break; break;
case EVENT_THORIM_LIGHTNING_CHARGE: case EVENT_THORIM_LIGHTNING_CHARGE:
me->CastSpell(me, SPELL_LIGHTNING_PILLAR_P2, true); me->CastSpell(me, SPELL_LIGHTNING_PILLAR_P2, true);
events.PopEvent();
break; break;
case EVENT_THORIM_CHAIN_LIGHTNING: case EVENT_THORIM_CHAIN_LIGHTNING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -759,12 +753,10 @@ public:
break; break;
case EVENT_THORIM_BERSERK: case EVENT_THORIM_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.PopEvent();
me->MonsterYell("My patience has reached its limit!", LANG_UNIVERSAL, 0); me->MonsterYell("My patience has reached its limit!", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_BERSERK); me->PlayDirectSound(SOUND_BERSERK);
break; break;
case EVENT_THORIM_OUTRO1: case EVENT_THORIM_OUTRO1:
events.PopEvent();
if (_hardMode) if (_hardMode)
{ {
me->MonsterYell("You! Fiend! You are not my beloved! Be gone!", LANG_UNIVERSAL, 0); me->MonsterYell("You! Fiend! You are not my beloved! Be gone!", LANG_UNIVERSAL, 0);
@@ -781,7 +773,6 @@ public:
} }
break; break;
case EVENT_THORIM_OUTRO2: case EVENT_THORIM_OUTRO2:
events.PopEvent();
if (_hardMode) if (_hardMode)
{ {
me->MonsterYell("Behold the hand behind all the evil that has befallen Ulduar! Left my kingdom in ruins, corrupted my brother and slain my wife!", LANG_UNIVERSAL, 0); me->MonsterYell("Behold the hand behind all the evil that has befallen Ulduar! Left my kingdom in ruins, corrupted my brother and slain my wife!", LANG_UNIVERSAL, 0);
@@ -796,7 +787,6 @@ public:
} }
break; break;
case EVENT_THORIM_OUTRO3: case EVENT_THORIM_OUTRO3:
events.PopEvent();
if (_hardMode) if (_hardMode)
{ {
me->MonsterYell("And now it falls to you, champions, to avenge us all! The task before you is great, but I will lend you my aid as I am able. You must prevail!", LANG_UNIVERSAL, 0); me->MonsterYell("And now it falls to you, champions, to avenge us all! The task before you is great, but I will lend you my aid as I am able. You must prevail!", LANG_UNIVERSAL, 0);
@@ -883,23 +873,20 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SIF_FINISH_DOMINION: case EVENT_SIF_FINISH_DOMINION:
events.PopEvent();
me->PlayDirectSound(SOUND_SIF_DESPAWN); me->PlayDirectSound(SOUND_SIF_DESPAWN);
me->MonsterYell("This pathetic morons are harmless. Relive my station, dispose of them!", LANG_UNIVERSAL, 0); me->MonsterYell("This pathetic morons are harmless. Relive my station, dispose of them!", LANG_UNIVERSAL, 0);
me->DespawnOrUnsummon(5000); me->DespawnOrUnsummon(5000);
break; break;
case EVENT_SIF_START_TALK: case EVENT_SIF_START_TALK:
events.PopEvent();
me->MonsterYell("Thorim, my lord, why else would these invaders have come into your sanctum but to slay you? They must be stopped!", LANG_UNIVERSAL, 0); me->MonsterYell("Thorim, my lord, why else would these invaders have come into your sanctum but to slay you? They must be stopped!", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_SIF_START); me->PlayDirectSound(SOUND_SIF_START);
break; break;
case EVENT_SIF_JOIN_TALK: case EVENT_SIF_JOIN_TALK:
me->PlayDirectSound(SOUND_SIF_EVENT); me->PlayDirectSound(SOUND_SIF_EVENT);
me->MonsterYell("Impossible! Lord Thorim, I will bring your foes a frigid death!", LANG_UNIVERSAL, 0); me->MonsterYell("Impossible! Lord Thorim, I will bring your foes a frigid death!", LANG_UNIVERSAL, 0);
events.PopEvent();
events.ScheduleEvent(EVENT_SIF_FROST_NOVA_START, 1000); events.ScheduleEvent(EVENT_SIF_FROST_NOVA_START, 1000);
events.ScheduleEvent(EVENT_SIF_FROSTBOLT_VALLEY, 11000); events.ScheduleEvent(EVENT_SIF_FROSTBOLT_VALLEY, 11000);
events.ScheduleEvent(EVENT_SIF_BLIZZARD, 15000); events.ScheduleEvent(EVENT_SIF_BLIZZARD, 15000);
@@ -922,7 +909,6 @@ public:
case EVENT_SIF_FROST_NOVA_CAST: case EVENT_SIF_FROST_NOVA_CAST:
_allowCast = true; _allowCast = true;
me->CastSpell(me, SPELL_FROST_NOVA, false); me->CastSpell(me, SPELL_FROST_NOVA, false);
events.PopEvent();
return; return;
} }
@@ -1210,7 +1196,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_DR_ACOLYTE_GH: case EVENT_DR_ACOLYTE_GH:
if (HealthBelowPct(60)) if (HealthBelowPct(60))
@@ -1327,7 +1313,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_IR_GUARD_IMPALE: case EVENT_IR_GUARD_IMPALE:
me->CastSpell(me->GetVictim(), SPELL_IMPALE, false); me->CastSpell(me->GetVictim(), SPELL_IMPALE, false);
@@ -1470,13 +1456,11 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_RC_RUNIC_SMASH_TRIGGER: case EVENT_RC_RUNIC_SMASH_TRIGGER:
_nextTriggerPos += 16.0f; _nextTriggerPos += 16.0f;
if (_nextTriggerPos > -260.0f) if (!(_nextTriggerPos > -260.0f))
events.PopEvent();
else
events.RescheduleEvent(EVENT_RC_RUNIC_SMASH_TRIGGER, 500); events.RescheduleEvent(EVENT_RC_RUNIC_SMASH_TRIGGER, 500);
RunRunicSmash(true); RunRunicSmash(true);
@@ -1573,7 +1557,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_ARG_RD: case EVENT_ARG_RD:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -1691,7 +1675,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_DR_WARBRINGER_RS: case EVENT_DR_WARBRINGER_RS:
me->CastSpell(me->GetVictim(), SPELL_RUNIC_STRIKE, false); me->CastSpell(me->GetVictim(), SPELL_RUNIC_STRIKE, false);
@@ -303,13 +303,12 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
// Control events // Control events
case EVENT_HEALTH_CHECK: case EVENT_HEALTH_CHECK:
if (_hardMode) if (_hardMode)
{ {
events.PopEvent();
return; return;
} }
@@ -338,12 +337,10 @@ public:
// Abilities events // Abilities events
case EVENT_GRAVITY_BOMB: case EVENT_GRAVITY_BOMB:
me->CastCustomSpell(SPELL_GRAVITY_BOMB, SPELLVALUE_MAX_TARGETS, 1, me, true); me->CastCustomSpell(SPELL_GRAVITY_BOMB, SPELLVALUE_MAX_TARGETS, 1, me, true);
events.PopEvent();
events.ScheduleEvent(EVENT_SEARING_LIGHT, 10000, 1); events.ScheduleEvent(EVENT_SEARING_LIGHT, 10000, 1);
break; break;
case EVENT_SEARING_LIGHT: case EVENT_SEARING_LIGHT:
me->CastCustomSpell(SPELL_SEARING_LIGHT, SPELLVALUE_MAX_TARGETS, 1, me, true); me->CastCustomSpell(SPELL_SEARING_LIGHT, SPELLVALUE_MAX_TARGETS, 1, me, true);
events.PopEvent();
events.ScheduleEvent(EVENT_GRAVITY_BOMB, 10000, 1); events.ScheduleEvent(EVENT_GRAVITY_BOMB, 10000, 1);
break; break;
case EVENT_TYMPANIC_TANTARUM: case EVENT_TYMPANIC_TANTARUM:
@@ -357,7 +354,6 @@ public:
me->MonsterYell("I'm tired of these toys. I don't want to play anymore!", LANG_UNIVERSAL, 0); me->MonsterYell("I'm tired of these toys. I don't want to play anymore!", LANG_UNIVERSAL, 0);
me->PlayDirectSound(XT_SOUND_SUMMON); me->PlayDirectSound(XT_SOUND_SUMMON);
me->CastSpell(me, SPELL_XT002_ENRAGE, true); me->CastSpell(me, SPELL_XT002_ENRAGE, true);
events.PopEvent();
break; break;
// Animation events // Animation events
@@ -368,13 +364,11 @@ public:
heart->GetAI()->DoAction(ACTION_AWAKEN_HEART); heart->GetAI()->DoAction(ACTION_AWAKEN_HEART);
events.ScheduleEvent(EVENT_RESTORE, 30000); events.ScheduleEvent(EVENT_RESTORE, 30000);
events.PopEvent();
return; return;
// Restore from heartbreak // Restore from heartbreak
case EVENT_RESTORE: case EVENT_RESTORE:
if (_hardMode) if (_hardMode)
{ {
events.PopEvent();
return; return;
} }
@@ -387,14 +381,12 @@ public:
heart->GetAI()->DoAction(ACTION_HIDE_HEART); heart->GetAI()->DoAction(ACTION_HIDE_HEART);
events.ScheduleEvent(EVENT_REMOVE_EMOTE, 4000); events.ScheduleEvent(EVENT_REMOVE_EMOTE, 4000);
events.PopEvent();
return; return;
case EVENT_REMOVE_EMOTE: case EVENT_REMOVE_EMOTE:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED); me->SetControlled(false, UNIT_STATE_STUNNED);
RescheduleEvents(); RescheduleEvents();
events.PopEvent();
return; return;
} }
@@ -740,7 +740,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case EVENT_SARA_P1_DOORS_CLOSE: case EVENT_SARA_P1_DOORS_CLOSE:
// Whispers of YS // Whispers of YS
@@ -751,7 +751,6 @@ public:
go->SetGoState(GO_STATE_READY); go->SetGoState(GO_STATE_READY);
events.ScheduleEvent(EVENT_SARA_P1_SPELLS, 0, 1, EVENT_PHASE_ONE); events.ScheduleEvent(EVENT_SARA_P1_SPELLS, 0, 1, EVENT_PHASE_ONE);
events.PopEvent();
break; break;
case EVENT_SARA_P1_SUMMON: case EVENT_SARA_P1_SUMMON:
events.RepeatEvent(20000 - (std::min(_summonedGuardiansCount, (uint8)5) * 2000)); events.RepeatEvent(20000 - (std::min(_summonedGuardiansCount, (uint8)5) * 2000));
@@ -768,7 +767,6 @@ public:
} }
case EVENT_SARA_P2_START: case EVENT_SARA_P2_START:
{ {
events.PopEvent();
EntryCheckPredicate pred(NPC_YOGG_SARON); EntryCheckPredicate pred(NPC_YOGG_SARON);
summons.DoAction(ACTION_YOGG_SARON_APPEAR, pred); summons.DoAction(ACTION_YOGG_SARON_APPEAR, pred);
events.RescheduleEvent(EVENT_SARA_P2_SPAWN_START_TENTACLES, 500, 0, EVENT_PHASE_TWO); events.RescheduleEvent(EVENT_SARA_P2_SPAWN_START_TENTACLES, 500, 0, EVENT_PHASE_TWO);
@@ -817,13 +815,10 @@ public:
case EVENT_SARA_P2_REMOVE_STUN: case EVENT_SARA_P2_REMOVE_STUN:
{ {
me->RemoveAura(SPELL_SHATTERED_ILLUSION); me->RemoveAura(SPELL_SHATTERED_ILLUSION);
events.PopEvent();
summons.DoAction(ACTION_REMOVE_STUN); summons.DoAction(ACTION_REMOVE_STUN);
break; break;
} }
case EVENT_SARA_P2_SPAWN_START_TENTACLES: case EVENT_SARA_P2_SPAWN_START_TENTACLES:
events.PopEvent();
me->SetOrientation(M_PI); me->SetOrientation(M_PI);
me->SetDisplayId(SARA_TRANSFORM_MODEL); me->SetDisplayId(SARA_TRANSFORM_MODEL);
@@ -1148,7 +1143,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_YS_LUNATIC_GAZE: case EVENT_YS_LUNATIC_GAZE:
me->MonsterYell("Hoohehehahahaha... AHAHAHAHAHAHA!", LANG_UNIVERSAL, 0); me->MonsterYell("Hoohehehahahaha... AHAHAHAHAHAHA!", LANG_UNIVERSAL, 0);
@@ -2235,11 +2230,10 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 40: case 40:
{ {
events.PopEvent();
uint64 _guid = _targets.at(_current); uint64 _guid = _targets.at(_current);
++_current; ++_current;
@@ -995,12 +995,11 @@ public:
return; return;
_events.Update(diff); _events.Update(diff);
switch (_events.GetEvent()) switch (_events.ExecuteEvent())
{ {
case EVENT_UPDATE_ALGALON_TIMER: case EVENT_UPDATE_ALGALON_TIMER:
if (m_algalonTimer == TIMER_ALGALON_DEFEATED) if (m_algalonTimer == TIMER_ALGALON_DEFEATED)
{ {
_events.PopEvent();
return; return;
} }
@@ -1012,7 +1011,6 @@ public:
return; return;
} }
_events.PopEvent();
SetData(DATA_ALGALON_DEFEATED, 1); SetData(DATA_ALGALON_DEFEATED, 1);
if (Creature* algalon = instance->GetCreature(m_uiAlgalonGUID)) if (Creature* algalon = instance->GetCreature(m_uiAlgalonGUID))
algalon->AI()->DoAction(ACTION_DESPAWN_ALGALON); algalon->AI()->DoAction(ACTION_DESPAWN_ALGALON);
@@ -294,7 +294,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -407,7 +407,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -237,17 +237,15 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_YELL_DEAD_1: case EVENT_YELL_DEAD_1:
Talk(YELL_DEAD_1); Talk(YELL_DEAD_1);
events.PopEvent();
break; break;
case EVENT_START_RESURRECTION: case EVENT_START_RESURRECTION:
me->CastSpell(me, SPELL_SUMMON_VALKYR, true); me->CastSpell(me, SPELL_SUMMON_VALKYR, true);
events.PopEvent();
events.RescheduleEvent(EVENT_VALKYR_BEAM, 7000); events.RescheduleEvent(EVENT_VALKYR_BEAM, 7000);
events.RescheduleEvent(EVENT_VALKYR_MOVE, 1); events.RescheduleEvent(EVENT_VALKYR_MOVE, 1);
events.RescheduleEvent(EVENT_ANNHYLDE_YELL, 3000); events.RescheduleEvent(EVENT_ANNHYLDE_YELL, 3000);
@@ -255,35 +253,29 @@ public:
case EVENT_VALKYR_MOVE: case EVENT_VALKYR_MOVE:
if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) ) if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) )
s->GetMotionMaster()->MovePoint(1, s->GetPositionX(), s->GetPositionY(), s->GetPositionZ() - 15.0f); s->GetMotionMaster()->MovePoint(1, s->GetPositionX(), s->GetPositionY(), s->GetPositionZ() - 15.0f);
events.PopEvent();
break; break;
case EVENT_ANNHYLDE_YELL: case EVENT_ANNHYLDE_YELL:
if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) ) if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) )
s->AI()->Talk(YELL_ANHYLDE_2); s->AI()->Talk(YELL_ANHYLDE_2);
events.PopEvent();
break; break;
case EVENT_VALKYR_BEAM: case EVENT_VALKYR_BEAM:
me->RemoveAura(SPELL_SUMMON_VALKYR); me->RemoveAura(SPELL_SUMMON_VALKYR);
if( Creature* c = ObjectAccessor::GetCreature(*me, ValkyrGUID) ) if( Creature* c = ObjectAccessor::GetCreature(*me, ValkyrGUID) )
c->CastSpell(me, SPELL_RESURRECTION_BEAM, false); c->CastSpell(me, SPELL_RESURRECTION_BEAM, false);
events.PopEvent();
events.RescheduleEvent(EVENT_RESURRECTION_BALL, 4000); events.RescheduleEvent(EVENT_RESURRECTION_BALL, 4000);
break; break;
case EVENT_RESURRECTION_BALL: case EVENT_RESURRECTION_BALL:
me->CastSpell(me, SPELL_RESURRECTION_BALL, true); me->CastSpell(me, SPELL_RESURRECTION_BALL, true);
events.PopEvent();
events.RescheduleEvent(EVENT_RESURRECTION_HEAL, 4000); events.RescheduleEvent(EVENT_RESURRECTION_HEAL, 4000);
break; break;
case EVENT_RESURRECTION_HEAL: case EVENT_RESURRECTION_HEAL:
me->RemoveAura(SPELL_RESURRECTION_BALL); me->RemoveAura(SPELL_RESURRECTION_BALL);
me->CastSpell(me, SPELL_RESURRECTION_HEAL, true); me->CastSpell(me, SPELL_RESURRECTION_HEAL, true);
FeignDeath(false); FeignDeath(false);
events.PopEvent();
events.RescheduleEvent(EVENT_MORPH_TO_UNDEAD, 3000); events.RescheduleEvent(EVENT_MORPH_TO_UNDEAD, 3000);
break; break;
case EVENT_MORPH_TO_UNDEAD: case EVENT_MORPH_TO_UNDEAD:
me->CastSpell(me, SPELL_INGVAR_TRANSFORM, true); me->CastSpell(me, SPELL_INGVAR_TRANSFORM, true);
events.PopEvent();
events.RescheduleEvent(EVENT_START_PHASE_2, 1000); events.RescheduleEvent(EVENT_START_PHASE_2, 1000);
break; break;
case EVENT_START_PHASE_2: case EVENT_START_PHASE_2:
@@ -292,7 +284,6 @@ public:
c->DespawnOrUnsummon(); c->DespawnOrUnsummon();
summons.DespawnAll(); summons.DespawnAll();
} }
events.PopEvent();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
AttackStart(me->GetVictim()); AttackStart(me->GetVictim());
me->GetMotionMaster()->MoveChase(me->GetVictim()); me->GetMotionMaster()->MoveChase(me->GetVictim());
@@ -310,7 +301,6 @@ public:
case EVENT_UNROOT: case EVENT_UNROOT:
me->SetControlled(false, UNIT_STATE_ROOT); me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false); me->DisableRotate(false);
events.PopEvent();
break; break;
case EVENT_SPELL_ROAR: case EVENT_SPELL_ROAR:
Talk(EMOTE_ROAR); Talk(EMOTE_ROAR);
@@ -369,7 +359,6 @@ public:
case EVENT_AXE_RETURN: case EVENT_AXE_RETURN:
if (Creature* c = ObjectAccessor::GetCreature(*me, ThrowGUID)) if (Creature* c = ObjectAccessor::GetCreature(*me, ThrowGUID))
c->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.5f); c->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.5f);
events.PopEvent();
events.RescheduleEvent(EVENT_AXE_PICKUP, 1500); events.RescheduleEvent(EVENT_AXE_PICKUP, 1500);
break; break;
case EVENT_AXE_PICKUP: case EVENT_AXE_PICKUP:
@@ -381,7 +370,6 @@ public:
} }
ThrowGUID = 0; ThrowGUID = 0;
SetEquipmentSlots(true); SetEquipmentSlots(true);
events.PopEvent();
break; break;
} }
@@ -176,7 +176,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -209,7 +209,6 @@ public:
DoZoneInCombat(c); DoZoneInCombat(c);
} }
} }
events.PopEvent();
break; break;
} }
@@ -296,7 +295,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
@@ -311,7 +310,6 @@ public:
events.RepeatEvent(urand(40000, 120000)); events.RepeatEvent(urand(40000, 120000));
break; break;
case EVENT_RESURRECT: case EVENT_RESURRECT:
events.PopEvent();
events.DelayEvents(3500); events.DelayEvents(3500);
DoCast(me, SPELL_SCOURGE_RESURRECTION, true); DoCast(me, SPELL_SCOURGE_RESURRECTION, true);
me->SetStandState(UNIT_STAND_STATE_STAND); me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -324,7 +322,6 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetControlled(false, UNIT_STATE_ROOT); me->SetControlled(false, UNIT_STATE_ROOT);
me->GetMotionMaster()->MoveChase(me->GetVictim()); me->GetMotionMaster()->MoveChase(me->GetVictim());
events.PopEvent();
break; break;
} }
@@ -163,13 +163,12 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_MATE_DIED: case EVENT_MATE_DIED:
Talk(YELL_SKARVALD_DAL_DIEDFIRST); Talk(YELL_SKARVALD_DAL_DIEDFIRST);
events.PopEvent();
break; break;
case EVENT_SPELL_CHARGE: case EVENT_SPELL_CHARGE:
if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, (IsHeroic() ? 100.0f : 30.0f), true) ) if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, (IsHeroic() ? 100.0f : 30.0f), true) )
@@ -317,17 +316,15 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) ) if( me->HasUnitState(UNIT_STATE_CASTING) )
return; return;
switch( events.GetEvent() ) switch( events.ExecuteEvent() )
{ {
case 0: case 0:
break; break;
case EVENT_YELL_DALRONN_AGGRO: case EVENT_YELL_DALRONN_AGGRO:
Talk(YELL_DALRONN_AGGRO); Talk(YELL_DALRONN_AGGRO);
events.PopEvent();
break; break;
case EVENT_MATE_DIED: case EVENT_MATE_DIED:
Talk(YELL_DALRONN_SKA_DIEDFIRST); Talk(YELL_DALRONN_SKA_DIEDFIRST);
events.PopEvent();
break; break;
case EVENT_SPELL_SHADOW_BOLT: case EVENT_SPELL_SHADOW_BOLT:
if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 42.0f, true) ) if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 42.0f, true) )
@@ -222,7 +222,7 @@ public:
return; return;
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_UNFREEZE_MONSTER: case EVENT_UNFREEZE_MONSTER:
{ {
@@ -238,7 +238,6 @@ public:
else else
EnterEvadeMode(); EnterEvadeMode();
} }
events.PopEvent();
break; break;
} }
case EVENT_UNFREEZE_MONSTER2: case EVENT_UNFREEZE_MONSTER2:
@@ -253,7 +252,6 @@ public:
else else
EnterEvadeMode(); EnterEvadeMode();
} }
events.PopEvent();
break; break;
} }
case EVENT_PALEHOOF_START: case EVENT_PALEHOOF_START:
@@ -263,7 +261,6 @@ public:
orb->CastSpell(me, SPELL_AWAKEN_SUBBOSS, true); orb->CastSpell(me, SPELL_AWAKEN_SUBBOSS, true);
events.ScheduleEvent(EVENT_PALEHOOF_START2, 6000); events.ScheduleEvent(EVENT_PALEHOOF_START2, 6000);
} }
events.PopEvent();
break; break;
} }
case EVENT_PALEHOOF_START2: case EVENT_PALEHOOF_START2:
@@ -281,7 +278,6 @@ public:
events.ScheduleEvent(EVENT_PALEHOOF_WITHERING_ROAR, 10000); events.ScheduleEvent(EVENT_PALEHOOF_WITHERING_ROAR, 10000);
events.ScheduleEvent(EVENT_PALEHOOF_IMPALE, 12000); events.ScheduleEvent(EVENT_PALEHOOF_IMPALE, 12000);
events.ScheduleEvent(EVENT_PALEHOOF_ARCING_SMASH, 15000); events.ScheduleEvent(EVENT_PALEHOOF_ARCING_SMASH, 15000);
events.PopEvent();
break; break;
} }
case EVENT_PALEHOOF_WITHERING_ROAR: case EVENT_PALEHOOF_WITHERING_ROAR:
@@ -402,7 +398,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_JORMUNGAR_ACID_SPIT: case EVENT_JORMUNGAR_ACID_SPIT:
{ {
@@ -526,7 +522,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_RHINO_STOMP: case EVENT_RHINO_STOMP:
{ {
@@ -636,7 +632,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_FURBOLG_CHAIN: case EVENT_FURBOLG_CHAIN:
{ {
@@ -744,7 +740,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_WORGEN_MORTAL: case EVENT_WORGEN_MORTAL:
{ {
@@ -191,7 +191,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SKADI_START: case EVENT_SKADI_START:
{ {
@@ -204,7 +204,6 @@ public:
else else
EnterEvadeMode(); EnterEvadeMode();
events.PopEvent();
break; break;
} }
case EVENT_SKADI_CRUSH: case EVENT_SKADI_CRUSH:
@@ -430,7 +429,7 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
events.Update(diff); events.Update(diff);
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_GRAUF_CHECK: case EVENT_GRAUF_CHECK:
{ {
@@ -447,7 +446,6 @@ public:
SpawnHelpers(0); SpawnHelpers(0);
events.ScheduleEvent(EVENT_GRAUF_MOVE, 15000); events.ScheduleEvent(EVENT_GRAUF_MOVE, 15000);
events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20000); events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20000);
events.PopEvent();
break; break;
} }
case EVENT_GRAUF_MOVE: case EVENT_GRAUF_MOVE:
@@ -478,7 +476,6 @@ public:
{ {
RemoveSkadi(false); RemoveSkadi(false);
me->DespawnOrUnsummon(); me->DespawnOrUnsummon();
events.PopEvent();
break; break;
} }
} }
@@ -198,7 +198,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_YMIRON_HEALTH_CHECK: case EVENT_YMIRON_HEALTH_CHECK:
{ {
@@ -275,7 +275,6 @@ public:
} }
} }
events.PopEvent();
break; break;
} }
case EVENT_YMIRON_BJORN_ABILITY: case EVENT_YMIRON_BJORN_ABILITY:
@@ -288,7 +287,6 @@ public:
sf->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); sf->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
sf->GetMotionMaster()->MoveFollow(me->GetVictim(), 0, rand_norm()*M_PI * 2); sf->GetMotionMaster()->MoveFollow(me->GetVictim(), 0, rand_norm()*M_PI * 2);
} }
events.PopEvent();
break; break;
} }
case EVENT_YMIRON_HALDOR_ABILITY: case EVENT_YMIRON_HALDOR_ABILITY:
@@ -345,4 +343,4 @@ public:
void AddSC_boss_ymiron() void AddSC_boss_ymiron()
{ {
new boss_ymiron(); new boss_ymiron();
} }
@@ -101,7 +101,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_ROCK_SHARDS: case EVENT_ROCK_SHARDS:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -127,12 +127,10 @@ public:
} }
case EVENT_IMPALE: case EVENT_IMPALE:
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25), false); me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25), false);
events.PopEvent();
break; break;
case EVENT_BERSERK: case EVENT_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
Talk(EMOTE_BERSERK); Talk(EMOTE_BERSERK);
events.PopEvent();
break; break;
default: default:
break; break;
@@ -153,7 +153,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_CHAIN_LIGHTNING: case EVENT_CHAIN_LIGHTNING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -176,7 +176,6 @@ public:
break; break;
case EVENT_SUMMON_NEXT_MINION: case EVENT_SUMMON_NEXT_MINION:
me->SummonCreature(NPC_TEMPEST_MINION, TempestMinions[urand(0, 3)], TEMPSUMMON_CORPSE_DESPAWN, 0); me->SummonCreature(NPC_TEMPEST_MINION, TempestMinions[urand(0, 3)], TEMPSUMMON_CORPSE_DESPAWN, 0);
events.PopEvent();
break; break;
default: default:
break; break;
@@ -121,7 +121,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BURNING_BREATH: case EVENT_BURNING_BREATH:
rotateTimer = 1500; rotateTimer = 1500;
@@ -116,8 +116,6 @@ public:
void UpdateAI(uint32 diff) void UpdateAI(uint32 diff)
{ {
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
@@ -125,7 +123,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch (events.GetEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_FREEZING_GROUND: case EVENT_FREEZING_GROUND:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -144,7 +142,6 @@ public:
case EVENT_CAST_WHITEOUT_GROUND_EFFECT: // Whiteout Ground effect trigger case EVENT_CAST_WHITEOUT_GROUND_EFFECT: // Whiteout Ground effect trigger
if (Unit* whiteOutGround = me->SummonCreature(NPC_WHITEOUT_GROUND_EFFECT, -43.3316, -288.708, 92.2511, 1.58825, TEMPSUMMON_TIMED_DESPAWN, 4000)) if (Unit* whiteOutGround = me->SummonCreature(NPC_WHITEOUT_GROUND_EFFECT, -43.3316, -288.708, 92.2511, 1.58825, TEMPSUMMON_TIMED_DESPAWN, 4000))
whiteOutGround->CastSpell(whiteOutGround, SPELL_WHITEOUT_VISUAL, false); // Cast the spell whiteOutGround->CastSpell(whiteOutGround, SPELL_WHITEOUT_VISUAL, false); // Cast the spell
events.PopEvent();
break; break;
} }
@@ -105,7 +105,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -119,7 +119,7 @@ public:
break; break;
case EVENT_UNROOT: case EVENT_UNROOT:
me->SetControlled(false, UNIT_STATE_ROOT); me->SetControlled(false, UNIT_STATE_ROOT);
events.PopEvent();
break; break;
case EVENT_SPELL_BLIZZARD: case EVENT_SPELL_BLIZZARD:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
@@ -104,7 +104,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -269,7 +269,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;
@@ -75,7 +75,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; return;
switch(events.GetEvent()) switch(events.ExecuteEvent())
{ {
case 0: case 0:
break; break;

Some files were not shown because too many files have changed in this diff Show More