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

            // AntiMagicPulse_Timer
            if (m_uiAntiMagicPulseTimer < uiDiff)
            {
                if (DoCastSpellIfCan(m_creature, SPELL_ANTIMAGICPULSE) == CAST_OK)
                {
                    m_uiAntiMagicPulseTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
                }
            }
            else
            {
                m_uiAntiMagicPulseTimer -= uiDiff;
            }

            // MagmaShackles_Timer
            if (m_uiMagmaShacklesTimer < uiDiff)
            {
                if (DoCastSpellIfCan(m_creature, SPELL_MAGMASHACKLES) == CAST_OK)
                {
                    m_uiMagmaShacklesTimer = urand(8 * IN_MILLISECONDS, 12 * IN_MILLISECONDS);
                }
            }
            else
            {
                m_uiMagmaShacklesTimer -= uiDiff;
            }

            // Explode an add
            if (m_uiExplodeAddTimer < uiDiff)
            {
                if (urand(0, 1)) // 50% chance to explode, is it too much?
                {
                    ObjectGuid guid = m_pInstance->GetGuid(NPC_FIRESWORN);
                    if (Creature* firesworn = m_pInstance->instance->GetCreature(guid))
                        SendAIEvent(AI_EVENT_CUSTOM_A, firesworn, firesworn, SPELL_MASSIVE_ERUPTION);   // this is an instant explosion with no SPELL_ERUPTION_TRIGGER
                }
                m_uiExplodeAddTimer = 15 * IN_MILLISECONDS;
            }
            else m_uiExplodeAddTimer -= uiDiff;

            DoMeleeAttackIfReady();
        }