Exemplo n.º 1
0
        void UpdateAI(uint32 diff) override
        {
            // if no target, update dummy and return
            if (!UpdateVictim())
            {
                dummy_dragonAI::UpdateAI(diff);
                return;
            }

            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
                    case EVENT_ACOLYTE_VESPERON:
                        if (instance->GetBossState(DATA_PORTAL_OPEN) == IN_PROGRESS)
                            events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 10000);
                        else
                        {
                            OpenPortal();
                            DoCastVictim(SPELL_TWILIGHT_TORMENT_VESP);
                            events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, urand(60000, 70000));
                        }
                        break;
                    default:
                        dummy_dragonAI::ExecuteEvent(eventId);
                        break;
                }
            }

            DoMeleeAttackIfReady();
        }
Exemplo n.º 2
0
        void UpdateAI(uint32 diff) override
        {
            // if no target, update dummy and return
            if (!UpdateVictim())
            {
                dummy_dragonAI::UpdateAI(diff);
                return;
            }

            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
                    case EVENT_HATCH_EGGS:
                        OpenPortal();
                        events.ScheduleEvent(EVENT_HATCH_EGGS, 30000);
                        break;
                    default:
                        dummy_dragonAI::ExecuteEvent(eventId);
                        break;
                }
            }

            DoMeleeAttackIfReady();
        }
Exemplo n.º 3
0
//--------------------------------
// hhProxDoor::SetDoorState
//--------------------------------
void hhProxDoor::SetDoorState( EProxState doorState ) {
	int i;

	//HUMANHEAD PCF mdl 04/27/06 - Don't allow locked doors to become active
	if ( doorLocked && doorState == PROXSTATE_Active ) {
		return;
	}

	switch( doorState ) {
		case PROXSTATE_Active:
			BecomeActive( TH_TICKER );
			CancelEvents( &EV_PollForExit );
			PostEventMS( &EV_PollForExit, 500 );
			OpenPortal();
			break;

		case PROXSTATE_GoingInactive:
			break;

		case PROXSTATE_Inactive:
			// Guarantee the door is closed
			for( i = 0; i < doorPieces.Num(); i++ ) {
				if (doorPieces[i].IsValid()) {
					doorPieces[ i ]->SetProximity( 0.0 );
				}
			}
			ClosePortal();
			CancelEvents( &EV_PollForExit );
			BecomeInactive( TH_TICKER );
			break;
	}

	proxState = doorState;
}
Exemplo n.º 4
0
        void UpdateAI(uint32 diff) override
        {
            // if no target, update dummy and return
            if (!UpdateVictim())
            {
                dummy_dragonAI::UpdateAI(diff);
                return;
            }

            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch (eventId)
                {
                    case EVENT_ACOLYTE_SHADRON:
                        if (instance->GetBossState(DATA_PORTAL_OPEN) == NOT_STARTED)
                            events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 10000);
                        else
                        {
                            if (me->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA))
                                return;

                            OpenPortal();

                            instance->SetBossState(DATA_PORTAL_OPEN, IN_PROGRESS);

                            events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, urand(60000, 65000));
                        }
                        break;
                    default:
                        dummy_dragonAI::ExecuteEvent(eventId);
                        break;
                }
            }

            DoMeleeAttackIfReady();
        }