/* Do final logic initialization */ int InitLogic(void) { /* Make sure we have a valid player list */ if ( CheckPlayers() < 0 ) return(-1); return(0); }
void UpdateAI(uint32 diff) { events.Update(diff); switch (events.GetEvent()) { case EVENT_GRAUF_CHECK: { CheckPlayers(); events.RepeatEvent(2000); break; } case EVENT_GRAUF_START: { me->GetMotionMaster()->Clear(true); me->GetMotionMaster()->MoveTakeoff(10, SkadiPosition[0].GetPositionX(), SkadiPosition[0].GetPositionY(), SkadiPosition[0].GetPositionZ(), 3.0f); SpawnHelpers(0); SpawnHelpers(0); events.ScheduleEvent(EVENT_GRAUF_MOVE, 15000); events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20000); events.PopEvent(); break; } case EVENT_GRAUF_MOVE: { AchievementHitCount = 0; uint8 targetPoint = SelectNextPos(currentPos); me->GetMotionMaster()->MovePoint(targetPoint, SkadiPosition[targetPoint].GetPositionX(), SkadiPosition[targetPoint].GetPositionY(), SkadiPosition[targetPoint].GetPositionZ()); if (targetPoint <= 1) { SpawnFlameTriggers(targetPoint); me->CastSpell(me, SPELL_FLAME_VISUAL, false); } if (m_pInstance) m_pInstance->SetData(SKADI_IN_RANGE, 0); currentPos = targetPoint; events.RepeatEvent(25000); break; } case EVENT_GRAUF_SUMMON_HELPERS: { SpawnHelpers(1); events.RepeatEvent(15000); break; } case EVENT_GRAUF_REMOVE_SKADI: { RemoveSkadi(false); me->DespawnOrUnsummon(); events.PopEvent(); break; } } }
void ControllerAI::ExecuteEvents() { while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_KADDRAK_CAST_SPELL: { KaddrakSpell(); #ifdef DEBUG_TRIBUNAL_OF_AGES events.ScheduleEvent(EVENT_KADRAK_CAST_SPELL, debugSpellTimer[0]!=0?debugSpellTimer[0] : TIMER_SPELL_KADRAK); #else events.ScheduleEvent(EVENT_KADDRAK_CAST_SPELL, TIMER_SPELL_KADDRAK); #endif }break; case EVENT_MARNAK_CAST_SPELL: { MarnakSpell(); #ifdef DEBUG_TRIBUNAL_OF_AGES events.ScheduleEvent(EVENT_MARNAK_CAST_SPELL, debugSpellTimer[1]!=0?debugSpellTimer[1] : TIMER_SPELL_MARNAK); #else events.ScheduleEvent(EVENT_MARNAK_CAST_SPELL, TIMER_SPELL_MARNAK); #endif }break; case EVENT_ABEDNEUM_CAST_SPELL: { AbedneumSpell(); #ifdef DEBUG_TRIBUNAL_OF_AGES events.ScheduleEvent(EVENT_ABEDNEUM_CAST_SPELL, debugSpellTimer[2]!=0?debugSpellTimer[2] : TIMER_SPELL_ABEDNEUM); #else events.ScheduleEvent(EVENT_ABEDNEUM_CAST_SPELL, TIMER_SPELL_ABEDNEUM); #endif }break; case EVENT_CHECK_PLAYERS: { if (!CheckPlayers()) { Creature* pCreature = NULL; if (pCreature = me->FindNearestCreature(CREATURE_BRANN, 50.0f)) { pCreature->Kill(pCreature); Reset(); } } else events.ScheduleEvent(EVENT_CHECK_PLAYERS, TIMER_EVENT_CHECK_PLAYERS); }break; } } }
void UpdateAI(const uint32 diff) { if (CheckPlayerTimer <= diff) { CheckPlayers(); CheckPlayerTimer = 3000; } else CheckPlayerTimer -= diff; if (CheckTeronTimer <= diff) { Creature* Teron = (Unit::GetCreature((*me), TeronGUID)); if (!Teron || !Teron->isAlive() || Teron->IsInEvadeMode()) me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); CheckTeronTimer = 5000; } else CheckTeronTimer -= diff; }
void UpdateAI(const uint32 diff) { _events.Update(diff); switch (_events.ExecuteEvent()) { case EVENT_CHECK_PLAYERS: { bool playerNearWithQuest = CheckPlayers(); if (inProgress && !playerNearWithQuest) { inProgress = false; Reset(); } else if (!inProgress && playerNearWithQuest) { inProgress = true; _events.ScheduleEvent(EVENT_UPDATE_POWER, UPDATE_POWER_TIMER); _events.ScheduleEvent(EVENT_SUMMON_ENNEMY, 5000); _events.ScheduleEvent(EVENT_SUMMON_HEALER, 5000); } _events.ScheduleEvent(EVENT_CHECK_PLAYERS, 5000); break; } case EVENT_UPDATE_POWER: UpdatePower(); _events.ScheduleEvent(EVENT_UPDATE_POWER, UPDATE_POWER_TIMER); break; case EVENT_SUMMON_ENNEMY: if (ennemiesCount < (healerCount / 2)) { SummonEnnemy(); _events.ScheduleEvent(EVENT_SUMMON_ENNEMY, 5000); } else _events.ScheduleEvent(EVENT_SUMMON_ENNEMY, 7500); break; case EVENT_SUMMON_HEALER: if (healerCount < MAX_HEALER_COUNT) SummonHealer(); _events.ScheduleEvent(EVENT_SUMMON_HEALER, 12500); break; } }
void UpdateAI(const uint32 uiDiff) { if (m_uiCheckPlayerTimer < uiDiff) { CheckPlayers(); m_uiCheckPlayerTimer = 3000; } else m_uiCheckPlayerTimer -= uiDiff; if (m_uiCheckTeronTimer < uiDiff) { Creature* pTeron = m_creature->GetMap()->GetCreature(m_teronGuid); if (!pTeron || !pTeron->isAlive() || pTeron->IsInEvadeMode()) m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_uiCheckTeronTimer = 5000; } else m_uiCheckTeronTimer -= uiDiff; }