Помощь - Поиск - Пользователи - Календарь
Полная версия: НПС шагают друг за другом
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Aiwan
Попробовал потыкался и понял что это мне ковырять на несколько дней. Суть такая. Идет НПС, за ним караван из трех верблюдов. Типа торговец шляющийся по модулю. Но заставить этих гадов идти строго не джампая при большой дистанции не могу. А времени уже нет заниматься таким. Мож кто делал себе? Дайте пжалуста скриптики pardon.gif Или скажите где капать yes3.gif
StalkerDtN
Если я прально понял и приемлим ХБ, то можно просто на него повесит что-то вроде:
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. Проверил, вроде не жамкались unknw.gif
ps: предполагается, что торговец уже ходит по пустыне.
Aiwan
Спасибо, попробую. yes3.gif

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();
    }
}

Спасибо, действительно идут "гуськом" yes3.gif Я правдап немного скрипт поправил, что бы акции не копились в стеке. Как сделаю полностью скрипт выложу.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.