Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Город Мастеров _ Neverwinter Nights Aurora Toolset _ НПС шагают друг за другом

Автор: Aiwan Jun 22 2006, 20:37

Попробовал потыкался и понял что это мне ковырять на несколько дней. Суть такая. Идет НПС, за ним караван из трех верблюдов. Типа торговец шляющийся по модулю. Но заставить этих гадов идти строго не джампая при большой дистанции не могу. А времени уже нет заниматься таким. Мож кто делал себе? Дайте пжалуста скриптики pardon.gif Или скажите где капать yes3.gif

Автор: 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. Проверил, вроде не жамкались unknw.gif
ps: предполагается, что торговец уже ходит по пустыне.

Автор: Aiwan Jun 23 2006, 23:49

Спасибо, попробую. 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 (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)