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

View File

@@ -237,17 +237,15 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
switch( events.GetEvent() )
switch( events.ExecuteEvent() )
{
case 0:
break;
case EVENT_YELL_DEAD_1:
Talk(YELL_DEAD_1);
events.PopEvent();
break;
case EVENT_START_RESURRECTION:
me->CastSpell(me, SPELL_SUMMON_VALKYR, true);
events.PopEvent();
events.RescheduleEvent(EVENT_VALKYR_BEAM, 7000);
events.RescheduleEvent(EVENT_VALKYR_MOVE, 1);
events.RescheduleEvent(EVENT_ANNHYLDE_YELL, 3000);
@@ -255,35 +253,29 @@ public:
case EVENT_VALKYR_MOVE:
if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) )
s->GetMotionMaster()->MovePoint(1, s->GetPositionX(), s->GetPositionY(), s->GetPositionZ() - 15.0f);
events.PopEvent();
break;
case EVENT_ANNHYLDE_YELL:
if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) )
s->AI()->Talk(YELL_ANHYLDE_2);
events.PopEvent();
break;
case EVENT_VALKYR_BEAM:
me->RemoveAura(SPELL_SUMMON_VALKYR);
if( Creature* c = ObjectAccessor::GetCreature(*me, ValkyrGUID) )
c->CastSpell(me, SPELL_RESURRECTION_BEAM, false);
events.PopEvent();
events.RescheduleEvent(EVENT_RESURRECTION_BALL, 4000);
break;
case EVENT_RESURRECTION_BALL:
me->CastSpell(me, SPELL_RESURRECTION_BALL, true);
events.PopEvent();
events.RescheduleEvent(EVENT_RESURRECTION_HEAL, 4000);
break;
case EVENT_RESURRECTION_HEAL:
me->RemoveAura(SPELL_RESURRECTION_BALL);
me->CastSpell(me, SPELL_RESURRECTION_HEAL, true);
FeignDeath(false);
events.PopEvent();
events.RescheduleEvent(EVENT_MORPH_TO_UNDEAD, 3000);
break;
case EVENT_MORPH_TO_UNDEAD:
me->CastSpell(me, SPELL_INGVAR_TRANSFORM, true);
events.PopEvent();
events.RescheduleEvent(EVENT_START_PHASE_2, 1000);
break;
case EVENT_START_PHASE_2:
@@ -292,7 +284,6 @@ public:
c->DespawnOrUnsummon();
summons.DespawnAll();
}
events.PopEvent();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
AttackStart(me->GetVictim());
me->GetMotionMaster()->MoveChase(me->GetVictim());
@@ -310,7 +301,6 @@ public:
case EVENT_UNROOT:
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
events.PopEvent();
break;
case EVENT_SPELL_ROAR:
Talk(EMOTE_ROAR);
@@ -369,7 +359,6 @@ public:
case EVENT_AXE_RETURN:
if (Creature* c = ObjectAccessor::GetCreature(*me, ThrowGUID))
c->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.5f);
events.PopEvent();
events.RescheduleEvent(EVENT_AXE_PICKUP, 1500);
break;
case EVENT_AXE_PICKUP:
@@ -381,7 +370,6 @@ public:
}
ThrowGUID = 0;
SetEquipmentSlots(true);
events.PopEvent();
break;
}

View File

@@ -176,7 +176,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
switch( events.GetEvent() )
switch( events.ExecuteEvent() )
{
case 0:
break;
@@ -209,7 +209,6 @@ public:
DoZoneInCombat(c);
}
}
events.PopEvent();
break;
}
@@ -296,7 +295,7 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
switch( events.GetEvent() )
switch( events.ExecuteEvent() )
{
case 0:
break;
@@ -311,7 +310,6 @@ public:
events.RepeatEvent(urand(40000, 120000));
break;
case EVENT_RESURRECT:
events.PopEvent();
events.DelayEvents(3500);
DoCast(me, SPELL_SCOURGE_RESURRECTION, true);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -324,7 +322,6 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetControlled(false, UNIT_STATE_ROOT);
me->GetMotionMaster()->MoveChase(me->GetVictim());
events.PopEvent();
break;
}

View File

@@ -163,13 +163,12 @@ public:
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
switch( events.GetEvent() )
switch( events.ExecuteEvent() )
{
case 0:
break;
case EVENT_MATE_DIED:
Talk(YELL_SKARVALD_DAL_DIEDFIRST);
events.PopEvent();
break;
case EVENT_SPELL_CHARGE:
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) )
return;
switch( events.GetEvent() )
switch( events.ExecuteEvent() )
{
case 0:
break;
case EVENT_YELL_DALRONN_AGGRO:
Talk(YELL_DALRONN_AGGRO);
events.PopEvent();
break;
case EVENT_MATE_DIED:
Talk(YELL_DALRONN_SKA_DIEDFIRST);
events.PopEvent();
break;
case EVENT_SPELL_SHADOW_BOLT:
if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 42.0f, true) )

View File

@@ -222,7 +222,7 @@ public:
return;
events.Update(diff);
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_UNFREEZE_MONSTER:
{
@@ -238,7 +238,6 @@ public:
else
EnterEvadeMode();
}
events.PopEvent();
break;
}
case EVENT_UNFREEZE_MONSTER2:
@@ -253,7 +252,6 @@ public:
else
EnterEvadeMode();
}
events.PopEvent();
break;
}
case EVENT_PALEHOOF_START:
@@ -263,7 +261,6 @@ public:
orb->CastSpell(me, SPELL_AWAKEN_SUBBOSS, true);
events.ScheduleEvent(EVENT_PALEHOOF_START2, 6000);
}
events.PopEvent();
break;
}
case EVENT_PALEHOOF_START2:
@@ -281,7 +278,6 @@ public:
events.ScheduleEvent(EVENT_PALEHOOF_WITHERING_ROAR, 10000);
events.ScheduleEvent(EVENT_PALEHOOF_IMPALE, 12000);
events.ScheduleEvent(EVENT_PALEHOOF_ARCING_SMASH, 15000);
events.PopEvent();
break;
}
case EVENT_PALEHOOF_WITHERING_ROAR:
@@ -402,7 +398,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_JORMUNGAR_ACID_SPIT:
{
@@ -526,7 +522,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_RHINO_STOMP:
{
@@ -636,7 +632,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_FURBOLG_CHAIN:
{
@@ -744,7 +740,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_WORGEN_MORTAL:
{

View File

@@ -191,7 +191,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_SKADI_START:
{
@@ -204,7 +204,6 @@ public:
else
EnterEvadeMode();
events.PopEvent();
break;
}
case EVENT_SKADI_CRUSH:
@@ -430,7 +429,7 @@ public:
void UpdateAI(uint32 diff)
{
events.Update(diff);
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_GRAUF_CHECK:
{
@@ -447,7 +446,6 @@ public:
SpawnHelpers(0);
events.ScheduleEvent(EVENT_GRAUF_MOVE, 15000);
events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20000);
events.PopEvent();
break;
}
case EVENT_GRAUF_MOVE:
@@ -478,7 +476,6 @@ public:
{
RemoveSkadi(false);
me->DespawnOrUnsummon();
events.PopEvent();
break;
}
}

View File

@@ -198,7 +198,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.GetEvent())
switch (events.ExecuteEvent())
{
case EVENT_YMIRON_HEALTH_CHECK:
{
@@ -275,7 +275,6 @@ public:
}
}
events.PopEvent();
break;
}
case EVENT_YMIRON_BJORN_ABILITY:
@@ -288,7 +287,6 @@ public:
sf->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
sf->GetMotionMaster()->MoveFollow(me->GetVictim(), 0, rand_norm()*M_PI * 2);
}
events.PopEvent();
break;
}
case EVENT_YMIRON_HALDOR_ABILITY:
@@ -345,4 +343,4 @@ public:
void AddSC_boss_ymiron()
{
new boss_ymiron();
}
}