void UpdateAI(const uint32 diff)
    {
        //Return since we have no target
        if (!m_creature->SelectHostilTarget())
            return;

        //Check if we have a current target
        if( m_creature->getVictim() && m_creature->isAlive())
        {
            //EncasingWebs
            if (EncasingWebs_Timer < diff)
            {
                //Cast
                DoCast(m_creature->getVictim(),SPELL_ENCASINGWEBS);
                //30 seconds until we should cast this again
                EncasingWebs_Timer = 30000;
            }else EncasingWebs_Timer -= diff;

            //PierceArmor
            if (PierceArmor_Timer < diff)
            {
                //Cast
                if (rand()%100 < 75) //75% chance to cast
                {
                    DoCast(m_creature->getVictim(),SPELL_PIERCEARMOR);
                }
                //35 seconds until we should cast this again
                PierceArmor_Timer = 35000;
            }else PierceArmor_Timer -= diff;

            //VirulentPoison
            if (VirulentPoison_Timer < diff)
            {
                //Cast
                DoCast(m_creature->getVictim(),SPELL_VIRULENTPOISON);
                //20 seconds until we should cast this again
                VirulentPoison_Timer = 20000;
            }else VirulentPoison_Timer -= diff;

            //RaiseUndeadScarab
            if (RaiseUndeadScarab_Timer < diff)
            {
                //Cast
                RaiseUndeadScarab(m_creature->getVictim());
                //16 seconds until we should cast this again
                RaiseUndeadScarab_Timer = 16000;
            }else RaiseUndeadScarab_Timer -= diff;

            //If we are within range melee the target
            if( m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE))
            {
                //Make sure our attack is ready and we arn't currently casting
                if( m_creature->isAttackReady() && !m_creature->m_currentSpell)
                {
                    m_creature->AttackerStateUpdate(m_creature->getVictim());
                    m_creature->resetAttackTimer();
                }
            }
        }
    }
示例#2
0
    void UpdateAI(const uint32 diff)
    {
        if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
            return;

        //EncasingWebs
        if (EncasingWebs_Timer < diff)
        {
            DoCast(m_creature->getVictim(),SPELL_ENCASINGWEBS);
            EncasingWebs_Timer = 30000;
        }else EncasingWebs_Timer -= diff;

        //PierceArmor
        if (PierceArmor_Timer < diff)
        {
            if (rand()%100 < 75)
                DoCast(m_creature->getVictim(),SPELL_PIERCEARMOR);

            PierceArmor_Timer = 35000;
        }else PierceArmor_Timer -= diff;

        //CryptScarabs
        if (CryptScarabs_Timer < diff)
        {
            DoCast(m_creature->getVictim(),SPELL_CRYPT_SCARABS);
            CryptScarabs_Timer = 16000;
        }else CryptScarabs_Timer -= diff;

        //RaiseUndeadScarab
        if (RaiseUndeadScarab_Timer < diff)
        {
            RaiseUndeadScarab(m_creature->getVictim());
            RaiseUndeadScarab_Timer = 18000;
        }else RaiseUndeadScarab_Timer -= diff;

        DoMeleeAttackIfReady();
    }
示例#3
0
    void UpdateAI(const uint32 diff)
    {
        if (!UpdateVictim())
            return;

        //EncasingWebs
        if (EncasingWebs_Timer <= diff)
        {
            DoCast(me->getVictim(), SPELL_ENCASINGWEBS);
            EncasingWebs_Timer = 30000;
        } else EncasingWebs_Timer -= diff;

        //PierceArmor
        if (PierceArmor_Timer <= diff)
        {
            if (urand(0,3) < 2)
                DoCast(me->getVictim(), SPELL_PIERCEARMOR);
            PierceArmor_Timer = 35000;
        } else PierceArmor_Timer -= diff;

        //CryptScarabs_Timer
        if (CryptScarabs_Timer <= diff)
        {
            DoCast(me->getVictim(), SPELL_CRYPT_SCARABS);
            CryptScarabs_Timer = 20000;
        } else CryptScarabs_Timer -= diff;

        //RaiseUndeadScarab
        if (RaiseUndeadScarab_Timer <= diff)
        {
            RaiseUndeadScarab(me->getVictim());
            RaiseUndeadScarab_Timer = 16000;
        } else RaiseUndeadScarab_Timer -= diff;

        DoMeleeAttackIfReady();
    }