Ejemplo n.º 1
0
Archivo: logic.cpp Proyecto: jjgod/SDL
/* Do final logic initialization */
int InitLogic(void)
{
    /* Make sure we have a valid player list */
    if ( CheckPlayers() < 0 )
        return(-1);
    return(0);
}
Ejemplo n.º 2
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;
        }
    }
}
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 6
0
    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;
    }