Example #1
0
    void UpdateAI(const uint32 uiDiff)
    {
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;

        if (m_uiCallLightTimer < uiDiff)
        {
            m_creature->CastSpell(m_creature->getVictim(), SPELL_CALL_LIGHTNING, false);
            m_uiCallLightTimer = urand(15000, 25000);
        }else m_uiCallLightTimer -= uiDiff;

        if (m_uiStaticDisruptTimer < uiDiff)
        {
            if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1))
                m_creature->CastSpell(pTarget, SPELL_STATIC_DISRUPTION, false);

            m_uiStaticDisruptTimer = urand(7000, 14000);
        }else m_uiStaticDisruptTimer -= uiDiff;

        if (m_uiStormTimer < uiDiff)
        {
            if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0))
            {
                if (m_creature->IsNonMeleeSpellCasted(false))
                    m_creature->InterruptNonMeleeSpells(false);

                DoScriptText(EMOTE_STORM, m_creature);
                m_creature->CastSpell(pTarget, SPELL_ELECTRICAL_STORM, false);
            }

            m_uiStormTimer = 60000;
        }else m_uiStormTimer -= uiDiff;

        if (m_uiGustOfWindTimer < uiDiff)
        {
            if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1))
                m_creature->CastSpell(pTarget, SPELL_GUST_OF_WIND, false);

            m_uiGustOfWindTimer = urand(20000, 30000);
        }else m_uiGustOfWindTimer -= uiDiff;

        if (m_uiSummonEagleTimer < uiDiff)
        {
            DoScriptText(urand(0,1) ? SAY_SUMMON : SAY_SUMMON_ALT, m_creature);
            DoSummonEagles();
            m_uiSummonEagleTimer = 60000;
        }else m_uiSummonEagleTimer -= uiDiff;

        if (!m_bIsBerserk && m_uiBerserkTimer < uiDiff)
        {
            DoScriptText(SAY_ENRAGE, m_creature);
            m_creature->CastSpell(m_creature, SPELL_BERSERK, true);
            m_bIsBerserk = true;
        }else m_uiBerserkTimer -= uiDiff;

        DoMeleeAttackIfReady();
    }
Example #2
0
    void UpdateAI(const uint32 uiDiff) override
    {
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;

        if (m_uiCallLightTimer < uiDiff)
        {
            if (DoCastSpellIfCan(m_creature->getVictim(), SPELL_CALL_LIGHTNING) == CAST_OK)
                m_uiCallLightTimer = urand(15000, 25000);
        }
        else
            m_uiCallLightTimer -= uiDiff;

        if (m_uiStaticDisruptTimer < uiDiff)
        {
            if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1, nullptr, SELECT_FLAG_PLAYER))
            {
                if (DoCastSpellIfCan(pTarget, SPELL_STATIC_DISRUPTION) == CAST_OK)
                    m_uiStaticDisruptTimer = urand(7000, 14000);
            }
        }
        else
            m_uiStaticDisruptTimer -= uiDiff;

        if (m_uiStormTimer < uiDiff)
        {
            if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0, nullptr, SELECT_FLAG_PLAYER))
            {
                if (DoCastSpellIfCan(pTarget, SPELL_ELECTRICAL_STORM) == CAST_OK)
                {
                    DoScriptText(EMOTE_STORM, m_creature);
                    m_uiStormTimer = 55000;
                }
            }
        }
        else
            m_uiStormTimer -= uiDiff;

        if (m_uiGustOfWindTimer < uiDiff)
        {
            if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1, nullptr, SELECT_FLAG_PLAYER))
            {
                if (DoCastSpellIfCan(pTarget, SPELL_GUST_OF_WIND) == CAST_OK)
                    m_uiGustOfWindTimer = urand(20000, 30000);
            }
        }
        else
            m_uiGustOfWindTimer -= uiDiff;

        if (m_uiSummonEagleTimer < uiDiff)
        {
            DoScriptText(urand(0, 1) ? SAY_SUMMON : SAY_SUMMON_ALT, m_creature);
            DoSummonEagles();
            m_uiSummonEagleTimer = 60000;
        }
        else
            m_uiSummonEagleTimer -= uiDiff;

        if (m_uiBerserkTimer)
        {
            if (m_uiBerserkTimer < uiDiff)
            {
                if (DoCastSpellIfCan(m_creature, SPELL_BERSERK) == CAST_OK)
                {
                    DoScriptText(SAY_ENRAGE, m_creature);
                    m_uiBerserkTimer = 0;
                }
            }
            else
                m_uiBerserkTimer -= uiDiff;
        }

        DoMeleeAttackIfReady();
    }