Автор: Aiwan Jun 22 2006, 20:37
Попробовал потыкался и понял что это мне ковырять на несколько дней. Суть такая. Идет НПС, за ним караван из трех верблюдов. Типа торговец шляющийся по модулю. Но заставить этих гадов идти строго не джампая при большой дистанции не могу. А времени уже нет заниматься таким. Мож кто делал себе? Дайте пжалуста скриптики Или скажите где капать
Автор: StalkerDtN Jun 23 2006, 07:55
Если я прально понял и приемлим ХБ, то можно просто на него повесит что-то вроде:
NSS
void scaner();
void scaner()
{
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) >= 20.0f)
AssignCommand(oAnimal1, ActionMoveToObject(oNPC));
if (GetDistanceBetween(oAnimal1, oAnimal2) >= 20.0f)
AssignCommand(oAnimal2, ActionMoveToObject(oAnimal1));
if (GetDistanceBetween(oAnimal2, oAnimal3) >= 20.0f)
AssignCommand(oAnimal3, ActionMoveToObject(oAnimal2));
}
void main()
{
...
scaner();
...
}
Просто, вместо ActionForceFollowObject использовать ActionMoveToObject. Проверил, вроде не жамкались
ps: предполагается, что торговец уже ходит по пустыне.
Автор: Aiwan Jun 23 2006, 23:49
Спасибо, попробую.
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();
}
}
Спасибо, действительно идут "гуськом"
Я правдап немного скрипт поправил, что бы акции не копились в стеке. Как сделаю полностью скрипт выложу.