Index: trunk/src/bindings/scripts/include/sc_creature.cpp
===================================================================
--- trunk/src/bindings/scripts/include/sc_creature.cpp (revision 153)
+++ trunk/src/bindings/scripts/include/sc_creature.cpp (revision 186)
@@ -74,16 +74,16 @@
 void ScriptedAI::MoveInLineOfSight(Unit *who)
 {
-    if (!m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature))
-    {
-        if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
-            return;
-
-        float attackRadius = m_creature->GetAttackDistance(who);
-        if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
-        {
-            who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
-            AttackStart(who);
-        }
-    }
+    if(m_creature->getVictim() || !m_creature->IsHostileTo(who) || !who->isInAccessablePlaceFor(m_creature))
+        return;
+
+    if(!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
+        return;
+
+    if(!m_creature->IsWithinDistInMap(who, m_creature->GetAttackDistance(who)) || !m_creature->IsWithinLOSInMap(who))
+        return;
+    
+    if(m_creature->canAttack(who))
+        //who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
+        AttackStart(who);
 }
 
@@ -778,5 +778,5 @@
 void Scripted_NoMovementAI::MoveInLineOfSight(Unit *who)
 {
-    if( !m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
+    if( !m_creature->getVictim() && m_creature->canAttack(who) && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
     {
         if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
Index: trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp (revision 109)
+++ trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp (revision 186)
@@ -1196,6 +1196,5 @@
             return;
 
-
-        if (who->isTargetableForAttack() && who->isInAccessablePlaceFor(m_creature) && m_creature->IsHostileTo(who))
+        if (m_creature->canAttack(who) && who->isInAccessablePlaceFor(m_creature) && m_creature->IsHostileTo(who))
         {
             if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
@@ -1205,6 +1204,6 @@
             if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
             {
-                if(who->HasStealthAura())
-                    who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
+                //if(who->HasStealthAura())
+                //    who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
 
                 //Begin melee attack if we are within range
Index: trunk/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp (revision 180)
+++ trunk/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp (revision 186)
@@ -414,5 +414,5 @@
             EnterPhase(PHASE_FLIGHT);
         }
-        else 
+        else // handle flight sequence
             Timer[EVENT_FLIGHT_SEQUENCE] = 1000;    
     }
@@ -692,8 +692,8 @@
         for(uint32 i = 1; i <= MaxTimer[Phase]; i++)
         {
-            if(Timer[i])
+            if(Timer[i]) // Event is enabled
                 if(Timer[i] <= diff)
                 {
-                    if(!Event)
+                    if(!Event) // No event with higher priority
                         Event = (EventIllidan)i;
                 }
@@ -709,10 +709,10 @@
 
         case PHASE_NORMAL_2:
-            if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30)
+            if(HPPCT(m_creature) < 30)
                 EnterPhase(PHASE_TALK_SEQUENCE);
             break;
 
         case PHASE_NORMAL_MAIEV:
-            if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 1)
+            if(HPPCT(m_creature) < 1)
                 EnterPhase(PHASE_TALK_SEQUENCE);
             break;
@@ -759,5 +759,5 @@
                         DoPlaySoundToSet(m_creature, soundid);
                 }
-                Timer[EVENT_TAUNT] = 32000;
+                Timer[EVENT_TAUNT] = 25000 + rand()%10000;
                 break;
 
@@ -834,10 +834,7 @@
                 Phase = PHASE_FLIGHT_SEQUENCE;
                 Timer[EVENT_FLIGHT_SEQUENCE] = 0;//do not start Event when changing hover point
-                for (uint8 i = 0; i <= rand()%3; i++)
-                {
-                    HoverPoint++;
-                    if(HoverPoint > 3)
-                        HoverPoint = 0;
-                }
+                HoverPoint += (rand()%3 + 1);
+                if(HoverPoint > 3)
+                    HoverPoint -= 4;
                 m_creature->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
                 break;
@@ -2060,25 +2057,15 @@
     final.y = 2 * final.y - initial.y;
 
-    for(uint8 i = 0; i < 2; ++i)//core bug, two buff do not coexist
-    {
-        Creature* Trigger = NULL;
-        Trigger = m_creature->SummonCreature(DEMON_FIRE, initial.x, initial.y, initial.z, 0, TEMPSUMMON_TIMED_DESPAWN, 13000);
-        if(Trigger)
-        {
-            ((demonfireAI*)Trigger->AI())->IsTrigger = true;
-            Trigger->SetSpeed(MOVE_WALK, 3);
-            Trigger->SetUnitMovementFlags(MOVEMENTFLAG_WALK_MODE);
-            Trigger->GetMotionMaster()->MovePoint(0, final.x, final.y, final.z);
-
-            if(!i)
-                Trigger->CastSpell(Trigger, SPELL_EYE_BLAST_TRIGGER, true);
-            else
-            {
-                Trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
-                m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Trigger->GetGUID());
-                DoCast(Trigger, SPELL_EYE_BLAST);
-            }
-        }
-    }
+    Creature* Trigger = m_creature->SummonCreature(DEMON_FIRE, initial.x, initial.y, initial.z, 0, TEMPSUMMON_TIMED_DESPAWN, 13000);
+    if(!Trigger) return;
+
+    ((demonfireAI*)Trigger->AI())->IsTrigger = true;
+    Trigger->SetSpeed(MOVE_WALK, 3);
+    Trigger->SetUnitMovementFlags(MOVEMENTFLAG_WALK_MODE);
+    Trigger->GetMotionMaster()->MovePoint(0, final.x, final.y, final.z);
+
+    Trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+    m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Trigger->GetGUID());
+    DoCast(Trigger, SPELL_EYE_BLAST);
 }
 
@@ -2163,11 +2150,8 @@
         m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
         m_creature->GetMotionMaster()->Clear(false);
-        //m_creature->GetMotionMaster()->MoveIdle();
         m_creature->AttackStop();
         break;
     case PHASE_FLIGHT_SEQUENCE:
-        if(Phase == PHASE_FLIGHT) //land
-            Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
-        else //lift off
+        if(Phase == PHASE_NORMAL) //lift off
         {
             FlightCount = 1;
@@ -2177,7 +2161,8 @@
             m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
             m_creature->GetMotionMaster()->Clear(false);
-            //m_creature->GetMotionMaster()->MoveIdle();
             m_creature->AttackStop();
         }
+        else //land
+            Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
         break;
     case PHASE_TRANSFORM_SEQUENCE:
@@ -2192,5 +2177,4 @@
         }
         m_creature->GetMotionMaster()->Clear();
-        //m_creature->GetMotionMaster()->MoveIdle();
         m_creature->AttackStop();
         break;
