Спасибо, попробую.

NSS
//:://////////////////////////////////////////////
//:: OnUserDefaine am_csp_common
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
Стандартный UserDefaine скрипт
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 09.07.2005
//:://///////////////////////////////////////////
void MoveTo()
{
object oNPC = GetObjectByTag("NPC_MERCHANT_001");
object oAnimal1 = GetObjectByTag("NPC_ANIMAL_001");
object oAnimal2 = GetObjectByTag("NPC_ANIMAL_002");
object oAnimal3 = GetObjectByTag("NPC_ANIMAL_003");
location lLoc = GetLocation(oNPC);
if (GetDistanceBetween(oNPC, oAnimal1) >= 5.0f)
{
AssignCommand(oAnimal1, ClearAllActions());
AssignCommand(oAnimal1, ActionMoveToObject(oNPC, FALSE, 2.0));
}
if (GetDistanceBetween(oAnimal1, oAnimal2) >= 5.0f)
{
AssignCommand(oAnimal2, ClearAllActions());
AssignCommand(oAnimal2, ActionMoveToObject(oAnimal1, FALSE, 2.0));
}
if (GetDistanceBetween(oAnimal2, oAnimal3) >= 5.0f)
{
AssignCommand(oAnimal3, ClearAllActions());
AssignCommand(oAnimal3, ActionMoveToObject(oAnimal2, FALSE, 2.0));
}
}
void main()
{
int nEvent = GetUserDefinedEventNumber();
if (GetIsDead(OBJECT_SELF)==TRUE) return; // Если он помер, то пусть молчит
if (GetArea(OBJECT_SELF)!=GetArea(GetFirstPC())) return;
//=========================== HEARTBEAT EVENT ==================================
if (nEvent == EVENT_HEARTBEAT) // Сигнал поступает User Defined Event 1001
{
MoveTo();
}
}
Спасибо, действительно идут "гуськом"

Я правдап немного скрипт поправил, что бы акции не копились в стеке. Как сделаю полностью скрипт выложу.