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

            if (!bHealth && HealthBelowPct(50) && !HealthBelowPct(5))
            {
                CreatureState(me, false);
                DoCast(me,SPELL_FREEZE_ANIM);
                DoCast(me,SPELL_EMERGE);
                bHealth = true;
            }

            if (!bHealth1 && HealthBelowPct(5))
            {
                DoCast(me,SPELL_EMERGE);
                CreatureState(me, false);
                bHealth1 = true;
                me->RemoveAllAuras();
            }

            if (MightyBlowTimer <= diff)
            {
                DoCast(me->getVictim(), SPELL_MIGHTY_BLOW, true);
                MightyBlowTimer = 10*IN_MILLISECONDS;
            } else MightyBlowTimer -= diff;

            if (!me->HasUnitState(UNIT_STAT_STUNNED))
                DoMeleeAttackIfReady();
        }
        void Reset()
        {
            if (pInstance)
                pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, NOT_STARTED);
            if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE))
                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);

            MightyBlowTimer = 10*IN_MILLISECONDS;
            bHealth = false;
            bHealth1 = false;

            DespawnMojo(); // make sure no mojo is left
            SpawnMojo();

            MojoEventPhase = 0;
            MojoEventTimer = 2*IN_MILLISECONDS;

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

            if (MojoEventPhase == 1)
            {
                me->GetMotionMaster()->Clear();
                me->GetMotionMaster()->MoveIdle();
                CreatureState(me, false);

                for (uint8 i = 0; i < 5; ++i)
                {
                    if (MojoGUID[i])
                    {
                        Creature* pCreature = Unit::GetCreature((*me), MojoGUID[i]);
                        if (pCreature && pCreature->isAlive())
                        {
                            pCreature->GetMotionMaster()->Clear();
                            pCreature->GetMotionMaster()->MovePoint(0,me->GetPositionX(),me->GetPositionY(),me->GetPositionZ());
                        }
                    }
                }
                MojoEventPhase = 2;
            }

            if (MojoEventPhase == 2)
            {
                if (MojoEventTimer <= diff)
                {
                    DespawnMojo();
                    CreatureState(me, true);
                    me->GetMotionMaster()->MoveChase(me->getVictim());
                    MojoEventPhase = 3;
                } else MojoEventTimer -= diff;
            }

            if (!bHealth && HealthBelowPct(50) && !HealthBelowPct(5))
            {
                CreatureState(me, false);
                DoCast(me, SPELL_EMERGE);
                bHealth = true;
                me->RemoveAllAuras();
            }

            if (!bHealth1 && HealthBelowPct(5))
            {
                CreatureState(me, false);
                DoCast(me, SPELL_EMERGE);
                bHealth1 = true;
                me->RemoveAllAuras();
            }

            if (me->HasUnitState(UNIT_STAT_STUNNED))
                return;

            if (MightyBlowTimer <= diff)
            {
                DoCast(me->getVictim(), SPELL_MIGHTY_BLOW, true);
                MightyBlowTimer = 15*IN_MILLISECONDS;
            } else MightyBlowTimer -= diff;

            DoMeleeAttackIfReady();
        }