void UpdateAI(const uint32 diff)
    {
        //Return since we have no target
        if (!UpdateVictim())
            return;

        //FireBlast_Timer
        if (FireBlast_Timer <= diff)
        {
            DoCast(me->getVictim(), SPELL_FIREBLAST);
            FireBlast_Timer = 7000;
        } else FireBlast_Timer -= diff;

        //Spirit_Timer
        if (Spirit_Timer <= diff)
        {
            SummonSpirits(me->getVictim());
            SummonSpirits(me->getVictim());
            SummonSpirits(me->getVictim());
            SummonSpirits(me->getVictim());

            Spirit_Timer = 30000;
        } else Spirit_Timer -= diff;

        DoMeleeAttackIfReady();
    }
        void UpdateAI(const uint32 diff)
        {
            if (!UpdateVictim())
                return;

            if (FireBlastTimer <= diff)
            {
                DoCastVictim(SPELL_FIREBLAST);
                FireBlastTimer = 7000;
            }
			else FireBlastTimer -= diff;

            if (SpiritTimer <= diff)
            {
                SummonSpirits(me->GetVictim());
                SummonSpirits(me->GetVictim());
                SummonSpirits(me->GetVictim());
                SummonSpirits(me->GetVictim());

                SpiritTimer = 30000;
            }
			else SpiritTimer -= diff;

            DoMeleeAttackIfReady();
        }
    void UpdateAI(const uint32 diff)
    {
        //Return since we have no target
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;

        //FireBlast_Timer
        if (FireBlast_Timer < diff)
        {
            DoCastSpellIfCan(m_creature->getVictim(),SPELL_FIREBLAST);
            FireBlast_Timer = 7000;
        }else FireBlast_Timer -= diff;

        //Spirit_Timer
        if (Spirit_Timer < diff)
        {
            SummonSpirits(m_creature->getVictim());
            SummonSpirits(m_creature->getVictim());
            SummonSpirits(m_creature->getVictim());
            SummonSpirits(m_creature->getVictim());

            Spirit_Timer = 30000;
        }else Spirit_Timer -= diff;

        DoMeleeAttackIfReady();
    }
    void UpdateAI(const uint32 uiDiff) override
    {
        // Return since we have no target
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
        {
            return;
        }

        // m_uiSpiritTimer
        if (m_uiSpiritTimer < uiDiff)
        {
            SummonSpirits();
            SummonSpirits();
            SummonSpirits();
            SummonSpirits();

            m_uiSpiritTimer = 20000;
        }
        else
        {
            m_uiSpiritTimer -= uiDiff;
        }

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

        //m_uiSpiritTimer
        if (m_uiSpiritTimer < uiDiff)
        {
            SummonSpirits();
            SummonSpirits();
            SummonSpirits();
            SummonSpirits();

            m_uiSpiritTimer = 20000;
        }
        else
            m_uiSpiritTimer -= uiDiff;

        DoMeleeAttackIfReady();
    }
    void UpdateAI(const uint32 diff)
    {
        //Return since we have no target
        if (!CanDoSomething())
            return;

        //Spirit_Timer
        if (Spirit_Timer < diff)
        {
            SummonSpirits(me->getVictim());
            SummonSpirits(me->getVictim());
            SummonSpirits(me->getVictim());
            SummonSpirits(me->getVictim());

            Spirit_Timer = 30000;
        }else Spirit_Timer -= diff;
        
        Tasks.UpdateEvent(diff);

        DoMeleeAttackIfReady();
    }