Index: /trunk/src/game/GridNotifiers.h
===================================================================
--- /trunk/src/game/GridNotifiers.h (revision 6)
+++ /trunk/src/game/GridNotifiers.h (revision 13)
@@ -710,4 +710,29 @@
     };
 
+    class NearestAssistCreatureInCreatureRangeCheck
+    {
+        public:
+            NearestAssistCreatureInCreatureRangeCheck(Creature* obj,Unit* enemy, float range)
+                : i_obj(obj), i_enemy(enemy), i_range(range) {}
+
+            bool operator()(Creature* u)
+            {
+                if(u->getFaction() == i_obj->getFaction() && !u->isInCombat() && !u->GetCharmerOrOwnerGUID() && u->IsHostileTo(i_enemy) && u->isAlive()&& i_obj->IsWithinDistInMap(u, i_range) && i_obj->IsWithinLOSInMap(u))
+                {
+                    i_range = i_obj->GetDistance(u);         // use found unit range as new range limit for next check
+                    return true;
+                }
+                return false;
+            }
+            float GetLastRange() const { return i_range; }
+        private:
+            Creature* const i_obj;
+            Unit* const i_enemy;
+            float  i_range;
+
+            // prevent clone this object
+            NearestAssistCreatureInCreatureRangeCheck(NearestAssistCreatureInCreatureRangeCheck const&);
+    };
+
     class AnyAssistCreatureInRangeCheck
     {
@@ -799,4 +824,108 @@
         WorldObject const* i_obj;
         float i_range;
+    };
+
+    // Searchers used by ScriptedAI
+    class MostHPMissingInRange
+    {
+    public:
+        MostHPMissingInRange(Unit const* obj, float range, uint32 hp) : i_obj(obj), i_range(range), i_hp(hp) {}
+        bool operator()(Unit* u)
+        {
+            if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && u->GetMaxHealth() - u->GetHealth() > i_hp)
+            {
+                i_hp = u->GetMaxHealth() - u->GetHealth();
+                return true;
+            }
+            return false;
+        }
+    private:
+        Unit const* i_obj;
+        float i_range;
+        uint32 i_hp;
+    };
+
+    class FriendlyCCedInRange
+    {
+    public:
+        FriendlyCCedInRange(Unit const* obj, float range) : i_obj(obj), i_range(range) {}
+        bool operator()(Unit* u)
+        {
+            if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) &&
+                (u->isFeared() || u->isCharmed() || u->isFrozen() || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_CONFUSED)))
+            {
+                return true;
+            }
+            return false;
+        }
+    private:
+        Unit const* i_obj;
+        float i_range;
+    };
+
+    class FriendlyMissingBuffInRange
+    {
+    public:
+        FriendlyMissingBuffInRange(Unit const* obj, float range, uint32 spellid) : i_obj(obj), i_range(range), i_spell(spellid) {}
+        bool operator()(Unit* u)
+        {
+            if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && 
+                !(u->HasAura(i_spell, 0) || u->HasAura(i_spell, 1) || u->HasAura(i_spell, 2)))
+            {
+                return true;
+            }
+            return false;
+        }
+    private:
+        Unit const* i_obj;
+        float i_range;
+        uint32 i_spell;
+    };
+
+    class AllFriendlyCreaturesInGrid
+    {
+    public:
+        AllFriendlyCreaturesInGrid(Unit const* obj) : pUnit(obj) {}
+        bool operator() (Unit* u)
+        {
+            if(u->isAlive() && u->GetVisibility() == VISIBILITY_ON && u->IsFriendlyTo(pUnit))
+                return true;
+
+            return false;
+        }
+    private:
+        Unit const* pUnit;
+    };
+
+    class AllGameObjectsWithEntryInGrid
+    {
+    public:
+        AllGameObjectsWithEntryInGrid(uint32 ent) : entry(ent) {}
+        bool operator() (GameObject* g)
+        {
+            if(g->GetEntry() == entry)
+                return true;
+
+            return false;
+        }
+    private:
+        uint32 entry;
+    };
+
+    class AllCreaturesOfEntryInRange
+    {
+    public:
+        AllCreaturesOfEntryInRange(Unit const* obj, uint32 ent, float ran) : pUnit(obj), entry(ent), range(ran) {}
+        bool operator() (Unit* u)
+        {
+            if(u->GetEntry() == entry && pUnit->IsWithinDistInMap(u, range))
+                return true;
+
+            return false;
+        }
+    private:
+        Unit const* pUnit;
+        uint32 entry;
+        float range;
     };
 
Index: /trunk/src/game/CreatureAI.h
===================================================================
--- /trunk/src/game/CreatureAI.h (revision 2)
+++ /trunk/src/game/CreatureAI.h (revision 13)
@@ -32,4 +32,37 @@
 #define TIME_INTERVAL_LOOK   5000
 #define VISIBILITY_RANGE    10000
+
+//Spell targets used by SelectSpell
+enum SelectTarget
+{
+    SELECT_TARGET_DONTCARE = 0,                             //All target types allowed
+
+    SELECT_TARGET_SELF,                                     //Only Self casting
+
+    SELECT_TARGET_SINGLE_ENEMY,                             //Only Single Enemy
+    SELECT_TARGET_AOE_ENEMY,                                //Only AoE Enemy
+    SELECT_TARGET_ANY_ENEMY,                                //AoE or Single Enemy
+
+    SELECT_TARGET_SINGLE_FRIEND,                            //Only Single Friend
+    SELECT_TARGET_AOE_FRIEND,                               //Only AoE Friend
+    SELECT_TARGET_ANY_FRIEND,                               //AoE or Single Friend
+};
+
+//Spell Effects used by SelectSpell
+enum SelectEffect
+{
+    SELECT_EFFECT_DONTCARE = 0,                             //All spell effects allowed
+    SELECT_EFFECT_DAMAGE,                                   //Spell does damage
+    SELECT_EFFECT_HEALING,                                  //Spell does healing
+    SELECT_EFFECT_AURA,                                     //Spell applies an aura
+};
+
+//Selection method used by SelectTarget
+enum SelectAggroTarget
+{
+    SELECT_TARGET_RANDOM = 0,                               //Just selects a random target
+    SELECT_TARGET_TOPAGGRO,                                 //Selects targes from top aggro to bottom
+    SELECT_TARGET_BOTTOMAGGRO,                              //Selects targets from bottom aggro to top
+};
 
 class MANGOS_DLL_SPEC CreatureAI
Index: /trunk/src/bindings/scripts/VC71/71ScriptDev2.vcproj
===================================================================
--- /trunk/src/bindings/scripts/VC71/71ScriptDev2.vcproj (revision 11)
+++ /trunk/src/bindings/scripts/VC71/71ScriptDev2.vcproj (revision 13)
@@ -1569,7 +1569,4 @@
 			</File>
 			<File
-				RelativePath="..\include\sc_grid_searchers.h">
-			</File>
-			<File
 				RelativePath="..\include\sc_instance.h">
 			</File>
Index: /trunk/src/bindings/scripts/VC80/80ScriptDev2.vcproj
===================================================================
--- /trunk/src/bindings/scripts/VC80/80ScriptDev2.vcproj (revision 11)
+++ /trunk/src/bindings/scripts/VC80/80ScriptDev2.vcproj (revision 13)
@@ -2307,8 +2307,4 @@
 			<File
 				RelativePath="..\include\sc_gossip.h"
-				>
-			</File>
-			<File
-				RelativePath="..\include\sc_grid_searchers.h"
 				>
 			</File>
Index: /trunk/src/bindings/scripts/VC90/90ScriptDev2.vcproj
===================================================================
--- /trunk/src/bindings/scripts/VC90/90ScriptDev2.vcproj (revision 11)
+++ /trunk/src/bindings/scripts/VC90/90ScriptDev2.vcproj (revision 13)
@@ -2305,8 +2305,4 @@
 			<File
 				RelativePath="..\include\sc_gossip.h"
-				>
-			</File>
-			<File
-				RelativePath="..\include\sc_grid_searchers.h"
 				>
 			</File>
Index: /trunk/src/bindings/scripts/include/sc_creature.cpp
===================================================================
--- /trunk/src/bindings/scripts/include/sc_creature.cpp (revision 12)
+++ /trunk/src/bindings/scripts/include/sc_creature.cpp (revision 13)
@@ -514,6 +514,6 @@
     Unit* pUnit = NULL;
 
-    MostHPMissingInRange u_check(m_creature, range, MinHPDiff);
-    MaNGOS::UnitLastSearcher<MostHPMissingInRange> searcher(pUnit, u_check);
+    MaNGOS::MostHPMissingInRange u_check(m_creature, range, MinHPDiff);
+    MaNGOS::UnitLastSearcher<MaNGOS::MostHPMissingInRange> searcher(pUnit, u_check);
 
     /*
@@ -521,5 +521,5 @@
     This means that if we only search grid then we cannot possibly return pets or players so this is safe
     */
-    TypeContainerVisitor<MaNGOS::UnitLastSearcher<MostHPMissingInRange>, GridTypeMapContainer >  grid_unit_searcher(searcher);
+    TypeContainerVisitor<MaNGOS::UnitLastSearcher<MaNGOS::MostHPMissingInRange>, GridTypeMapContainer >  grid_unit_searcher(searcher);
 
     CellLock<GridReadGuard> cell_lock(cell, p);
@@ -537,8 +537,8 @@
     std::list<Creature*> pList;
 
-    FriendlyCCedInRange u_check(m_creature, range);
-    MaNGOS::CreatureListSearcher<FriendlyCCedInRange> searcher(pList, u_check);
-
-    TypeContainerVisitor<MaNGOS::CreatureListSearcher<FriendlyCCedInRange>, GridTypeMapContainer >  grid_creature_searcher(searcher);
+    MaNGOS::FriendlyCCedInRange u_check(m_creature, range);
+    MaNGOS::CreatureListSearcher<MaNGOS::FriendlyCCedInRange> searcher(pList, u_check);
+
+    TypeContainerVisitor<MaNGOS::CreatureListSearcher<MaNGOS::FriendlyCCedInRange>, GridTypeMapContainer >  grid_creature_searcher(searcher);
 
     CellLock<GridReadGuard> cell_lock(cell, p);
@@ -557,8 +557,8 @@
     std::list<Creature*> pList;
 
-    FriendlyMissingBuffInRange u_check(m_creature, range, spellid);
-    MaNGOS::CreatureListSearcher<FriendlyMissingBuffInRange> searcher(pList, u_check);
-
-    TypeContainerVisitor<MaNGOS::CreatureListSearcher<FriendlyMissingBuffInRange>, GridTypeMapContainer >  grid_creature_searcher(searcher);
+    MaNGOS::FriendlyMissingBuffInRange u_check(m_creature, range, spellid);
+    MaNGOS::CreatureListSearcher<MaNGOS::FriendlyMissingBuffInRange> searcher(pList, u_check);
+
+    TypeContainerVisitor<MaNGOS::CreatureListSearcher<MaNGOS::FriendlyMissingBuffInRange>, GridTypeMapContainer >  grid_creature_searcher(searcher);
 
     CellLock<GridReadGuard> cell_lock(cell, p);
Index: /trunk/src/bindings/scripts/include/sc_creature.h
===================================================================
--- /trunk/src/bindings/scripts/include/sc_creature.h (revision 2)
+++ /trunk/src/bindings/scripts/include/sc_creature.h (revision 13)
@@ -8,37 +8,4 @@
 #include "CreatureAI.h"
 #include "Creature.h"
-
-//Spell targets used by SelectSpell
-enum SelectTarget
-{
-    SELECT_TARGET_DONTCARE = 0,                             //All target types allowed
-
-    SELECT_TARGET_SELF,                                     //Only Self casting
-
-    SELECT_TARGET_SINGLE_ENEMY,                             //Only Single Enemy
-    SELECT_TARGET_AOE_ENEMY,                                //Only AoE Enemy
-    SELECT_TARGET_ANY_ENEMY,                                //AoE or Single Enemy
-
-    SELECT_TARGET_SINGLE_FRIEND,                            //Only Single Friend
-    SELECT_TARGET_AOE_FRIEND,                               //Only AoE Friend
-    SELECT_TARGET_ANY_FRIEND,                               //AoE or Single Friend
-};
-
-//Spell Effects used by SelectSpell
-enum SelectEffect
-{
-    SELECT_EFFECT_DONTCARE = 0,                             //All spell effects allowed
-    SELECT_EFFECT_DAMAGE,                                   //Spell does damage
-    SELECT_EFFECT_HEALING,                                  //Spell does healing
-    SELECT_EFFECT_AURA,                                     //Spell applies an aura
-};
-
-//Selection method used by SelectTarget
-enum SelectAggroTarget
-{
-    SELECT_TARGET_RANDOM = 0,                               //Just selects a random target
-    SELECT_TARGET_TOPAGGRO,                                 //Selects targes from top aggro to bottom
-    SELECT_TARGET_BOTTOMAGGRO,                              //Selects targets from bottom aggro to top
-};
 
 struct MANGOS_DLL_DECL ScriptedAI : public CreatureAI
Index: /trunk/src/bindings/scripts/include/precompiled.h
===================================================================
--- /trunk/src/bindings/scripts/include/precompiled.h (revision 2)
+++ /trunk/src/bindings/scripts/include/precompiled.h (revision 13)
@@ -7,7 +7,12 @@
 
 #include "../ScriptMgr.h"
+#include "Cell.h"
+#include "CellImpl.h"
+#include "GridNotifiers.h"
+#include "GridNotifiersImpl.h"
+#include "Unit.h"
+#include "GameObject.h"
 #include "sc_creature.h"
 #include "sc_gossip.h"
-#include "sc_grid_searchers.h"
 #include "sc_instance.h"
 
Index: /unk/src/bindings/scripts/include/sc_grid_searchers.h
===================================================================
--- /trunk/src/bindings/scripts/include/sc_grid_searchers.h (revision 2)
+++  (revision )
@@ -1,131 +1,0 @@
-/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
-* This program is free software licensed under GPL version 2
-* Please see the included DOCS/LICENSE.TXT for more information */
-
-#ifndef SC_GRIDSEARCH_H
-#define SC_GRIDSEARCH_H
-
-#include "Unit.h"
-#include "GameObject.h"
-
-#include "Cell.h"
-#include "CellImpl.h"
-#include "GridNotifiers.h"
-#include "GridNotifiersImpl.h"
-
-//Used in:
-//sc_creature.cpp - DoSelectLowestHpFriendly()
-class MostHPMissingInRange
-{
-public:
-    MostHPMissingInRange(Unit const* obj, float range, uint32 hp) : i_obj(obj), i_range(range), i_hp(hp) {}
-    bool operator()(Unit* u)
-    {
-        if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && u->GetMaxHealth() - u->GetHealth() > i_hp)
-        {
-            i_hp = u->GetMaxHealth() - u->GetHealth();
-            return true;
-        }
-        return false;
-    }
-private:
-    Unit const* i_obj;
-    float i_range;
-    uint32 i_hp;
-};
-
-//Used in:
-//sc_creature.cpp - DoFindFriendlyCC()
-class FriendlyCCedInRange
-{
-public:
-    FriendlyCCedInRange(Unit const* obj, float range) : i_obj(obj), i_range(range) {}
-    bool operator()(Unit* u)
-    {
-        if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) &&
-            (u->isFeared() || u->isCharmed() || u->isFrozen() || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_CONFUSED)))
-        {
-            return true;
-        }
-        return false;
-    }
-private:
-    Unit const* i_obj;
-    float i_range;
-};
-
-//Used in:
-//sc_creature.cpp - DoFindFriendlyMissingBuff()
-class FriendlyMissingBuffInRange
-{
-public:
-    FriendlyMissingBuffInRange(Unit const* obj, float range, uint32 spellid) : i_obj(obj), i_range(range), i_spell(spellid) {}
-    bool operator()(Unit* u)
-    {
-        if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && 
-            !(u->HasAura(i_spell, 0) || u->HasAura(i_spell, 1) || u->HasAura(i_spell, 2)))
-        {
-            return true;
-        }
-        return false;
-    }
-private:
-    Unit const* i_obj;
-    float i_range;
-    uint32 i_spell;
-};
-
-//Used in:
-//hyjalAI.cpp
-class AllFriendlyCreaturesInGrid
-{
-public:
-    AllFriendlyCreaturesInGrid(Unit const* obj) : pUnit(obj) {}
-    bool operator() (Unit* u)
-    {
-        if(u->isAlive() && u->GetVisibility() == VISIBILITY_ON && u->IsFriendlyTo(pUnit))
-            return true;
-
-        return false;
-    }
-
-private:
-    Unit const* pUnit;
-};
-
-//Used in:
-//hyjalAI.cpp
-class AllGameObjectsWithEntryInGrid
-{
-public:
-    AllGameObjectsWithEntryInGrid(uint32 ent) : entry(ent) {}
-    bool operator() (GameObject* g)
-    {
-        if(g->GetEntry() == entry)
-            return true;
-
-        return false;
-    }
-private:
-    uint32 entry;
-};
-
-class AllCreaturesOfEntryInRange
-{
-public:
-    AllCreaturesOfEntryInRange(Unit const* obj, uint32 ent, float ran) : pUnit(obj), entry(ent), range(ran) {}
-    bool operator() (Unit* u)
-    {
-        if(u->GetEntry() == entry && pUnit->IsWithinDistInMap(u, range))
-            return true;
-
-        return false;
-    }
-
-private:
-    Unit const* pUnit;
-    uint32 entry;
-    float range;
-};
-
-#endif
Index: /trunk/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp
===================================================================
--- /trunk/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp (revision 6)
+++ /trunk/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp (revision 13)
@@ -24,5 +24,4 @@
 #include "precompiled.h"
 #include "def_black_temple.h"
-#include "sc_grid_searchers.h"
 
 struct Location
@@ -328,7 +327,7 @@
         std::list<Creature*> ChannelerList;
 
-        AllCreaturesOfEntryInRange check(m_creature, CREATURE_CHANNELER, 50);
-        MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange> searcher(ChannelerList, check);
-        TypeContainerVisitor<MaNGOS::CreatureListSearcher<AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);
+        MaNGOS::AllCreaturesOfEntryInRange check(m_creature, CREATURE_CHANNELER, 50);
+        MaNGOS::CreatureListSearcher<MaNGOS::AllCreaturesOfEntryInRange> searcher(ChannelerList, check);
+        TypeContainerVisitor<MaNGOS::CreatureListSearcher<MaNGOS::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);
 
         CellLock<GridReadGuard> cell_lock(cell, pair);
Index: /trunk/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp
===================================================================
--- /trunk/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp (revision 6)
+++ /trunk/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp (revision 13)
@@ -317,16 +317,16 @@
     // First get all creatures.
     std::list<Creature*> creatures;
-    AllFriendlyCreaturesInGrid creature_check(m_creature);
-    MaNGOS::CreatureListSearcher<AllFriendlyCreaturesInGrid> creature_searcher(creatures, creature_check);
+    MaNGOS::AllFriendlyCreaturesInGrid creature_check(m_creature);
+    MaNGOS::CreatureListSearcher<MaNGOS::AllFriendlyCreaturesInGrid> creature_searcher(creatures, creature_check);
     TypeContainerVisitor
-        <MaNGOS::CreatureListSearcher<AllFriendlyCreaturesInGrid>,
+        <MaNGOS::CreatureListSearcher<MaNGOS::AllFriendlyCreaturesInGrid>,
         GridTypeMapContainer> creature_visitor(creature_searcher);
 
     // Then get all Ancient Gem Veins. NOTE: Grid Search will only be able to find those in the grid.
     std::list<GameObject*> goList;
-    AllGameObjectsWithEntryInGrid go_check(185557);
-    MaNGOS::GameObjectListSearcher<AllGameObjectsWithEntryInGrid> go_search(goList, go_check);
+    MaNGOS::AllGameObjectsWithEntryInGrid go_check(185557);
+    MaNGOS::GameObjectListSearcher<MaNGOS::AllGameObjectsWithEntryInGrid> go_search(goList, go_check);
     TypeContainerVisitor
-        <MaNGOS::GameObjectListSearcher<AllGameObjectsWithEntryInGrid>, GridTypeMapContainer> go_visit(go_search);
+        <MaNGOS::GameObjectListSearcher<MaNGOS::AllGameObjectsWithEntryInGrid>, GridTypeMapContainer> go_visit(go_search);
 
     CellLock<GridReadGuard> cell_lock(cell, pair);
Index: /trunk/src/bindings/scripts/Makefile.am
===================================================================
--- /trunk/src/bindings/scripts/Makefile.am (revision 2)
+++ /trunk/src/bindings/scripts/Makefile.am (revision 13)
@@ -41,5 +41,4 @@
 include/sc_creature.h \
 include/sc_gossip.h \
-include/sc_grid_searchers.h \
 include/sc_instance.h \
 include/sc_item.h \
@@ -420,2 +419,3 @@
 	done
 
+
