Esempio n. 1
0
  void BattlePhaseManager::Update (const Time& dt)
  {
    if (battlePhases_.IsEmpty ())
      return;

    currentBattlePhase_->Update (dt);
    SwitchPhase (currentBattlePhase_->GetNext ());
  }
Esempio n. 2
0
    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();
    }
Esempio n. 3
0
    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();
        }
    }