void BattlePhaseManager::Update (const Time& dt) { if (battlePhases_.IsEmpty ()) return; currentBattlePhase_->Update (dt); SwitchPhase (currentBattlePhase_->GetNext ()); }
void Aggro(Unit *who) { if (pInstance) SetInstanceData(TYPE_NETHERSPITE, IN_PROGRESS); if (pInstance) { //door closes if (GameObject* pDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_MASSIVE_DOOR))) pDoor->SetGoState(GO_STATE_READY); } SwitchPhase(); DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (!CanDoSomething()) return; Active_Event = NULL_EVENT; for (uint32 i=1; i<MaxTimeCounter[Active_Phase]; i++) { if (uiTimers[i]) if (uiTimers[i] <= diff) { if (!Active_Event) Active_Event = (Events)i; } else uiTimers[i] -= diff; } switch(Active_Phase) { case PORTAL_PHASE: if(Active_Event == EVENT_PORTAL_END_TIMER) SwitchPhase(); break; case BANISH_PHASE: if(Active_Event == EVENT_BANISH_END_TIMER) SwitchPhase(); break; default: break; } if((Active_Phase == PORTAL_PHASE && me->isAlive()) || (Active_Phase == BANISH_PHASE && me->isAlive())) { switch(Active_Event) { case EVENT_ENRAGE: DoCast(me, SPELL_NETHERSPITE_ROAR); DoCast(me, SPELL_NETHER_INFUSION); uiTimers[EVENT_ENRAGE] = 0; break; case EVENT_EXHAUST_CHECK: Apply_Exhaustion(0); Apply_Exhaustion(1); Apply_Exhaustion(2); uiTimers[EVENT_EXHAUST_CHECK] = 2000; break; default: break; } } if(Active_Phase == PORTAL_PHASE && me->isAlive()) { switch(Active_Event) { case EVENT_BEAM_INITIAL: Nether_Beam(0); Nether_Beam(1); //Nether_Beam(2); // <--uncomment to activate red beam, not complete uiTimers[EVENT_BEAM_INITIAL] = 0; uiTimers[EVENT_BEAM_PERIODIC] = 1000; break; case EVENT_BEAM_PERIODIC: Nether_Beam(0); Nether_Beam(1); //Nether_Beam(2); // <--uncomment to activate red beam, not complete uiTimers[EVENT_BEAM_PERIODIC] = 1000; break; case EVENT_NETHERBURN: DoCast(me,SPELL_NETHERBURN); uiTimers[EVENT_NETHERBURN] = 5000; break; case EVENT_VOID_ZONE: DoCast(SelectUnit(SELECT_TARGET_RANDOM,0),SPELL_VOID_ZONE,true); uiTimers[EVENT_VOID_ZONE] = 15000; break; default: break; } if(pCurrent_Candidate[2] != me) { AttackStart(pCurrent_Candidate[2]); } else DoMeleeAttackIfReady(); } if(Active_Phase == BANISH_PHASE && me->isAlive()) { switch(Active_Event) { case EVENT_NETHERBREATH: DoCast(SelectUnit(SELECT_TARGET_RANDOM,0),SPELL_NETHERBREATH); uiTimers[EVENT_NETHERBREATH] = 5000; break; default: break; } DoMeleeAttackIfReady(); } }