Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
4 страниц V  < 1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Азы скриптинга NWN/NWN2, Итак, начинаем с самого начала...
Solo
сообщение Oct 8 2007, 19:49
Сообщение #11


Благородный Дон
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Тестер



ну если я правильно понял задание, то справился с ним (IMG:style_emoticons/kolobok_light/yahoo.gif)
вот что получилось:
Neverwinter Script Source
void main()
{
  object oSolo = OBJECT_SELF;
  int iMax = GetMaxHitPoints(oSolo);
  int iD = iMax - 5;
  effect eDamage = EffectDamage(iD);

  AssignCommand( oSolo, ApplyEffectToObject( DURATION_TYPE_INSTANT, eDamage, oSolo ) );
}


вот что написал компилятор:
08.10.2007 20:40:08: 0 Ошибок. 'script1' составление успешно
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 8 2007, 21:28
Сообщение #12


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Да ,все правильно. Но в следующий раз юзай тег NSS на форуме. (IMG:style_emoticons/kolobok_light/yes3.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Oct 8 2007, 22:47
Сообщение #13


Level 19
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



Neverwinter Script Source
void main()
{
  object oVhall = OBJECT_SELF;
  int iMax = GetMaxHitPoints(oVhall);
  int iD = iMax-5;
  effect eDamage = EffectDamage(iD);

  AssignCommand(oVhall, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,
oVhall));
}

В итоге результатом стало понимание работы бажного nss.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 9 2007, 02:22
Сообщение #14


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Neverwinter Script Source
void main()
{
  object oLira = OBJECT_SELF;
  int iMax = GetMaxHitPoints(oLira);
  int iD = iMax-5;
  effect eDamage = EffectDamage(iD);

AssignCommand(oLira, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage,oLira));

}



Мне кажется, единственная ошибка, которая могла быть в этом скрипте, это если в какой-нибудь строке не поменять oSelf на другое определение объекта?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 9 2007, 09:08
Сообщение #15


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Artlira @ Oct 9 2007, 05:22) *
Мне кажется, единственная ошибка, которая могла быть в этом скрипте, это если в какой-нибудь строке не поменять oSelf на другое определение объекта?

Совершенно верно. Мне важно, что бы вы поняли что oSelf это просто имя описываемого объекта. И оно используется во многих местах.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 9 2007, 11:24
Сообщение #16


Level 18
Иконки Групп

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Neverwinter Script Source
void main()
{
    object oGriffon = OBJECT_SELF;
    int iMax = GetMaxHitPoints(oGriffon);
    int iD = iMax-5;
    effect eDamage = EffectDamage(iD);
   
    AssignCommand(oGriffon, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage,oGriffon));
}


Результат - 0.85.nss(1): ERROR: ELLIPSIS IN IDENTIFIER

Мы в каком пишем НВНе?

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 9 2007, 12:48
Сообщение #17


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Вы все поняли, что объект можно представить в любом обозначении. Вы верно проследили, что надо во всем скрипте изменить порядок. Что бы лучше понять что происходит, я вам опишу словами. Мы попросту скрипту представляем, что у нас есть объект и мы будем с ним работать дальше. Что бы каждый раз не икать его мы сразу, четко его определяем.

Neverwinter Script Source
object oSelf = OBJECT_SELF;


Дананя строка сосотит из двух важных частей они заключены между знаком равно. В этой строке ДВА ДЕЙСТВИЯ. Первым, мы объявили скрипту, что у нас есть объект object oSelf. Второым мы ПРИРОВНЯЛИ этот наш объявлленный объект к OBJECT_SELF. Тем самый четко дали понять скрипту кто есть ХУ. Верхний код можно написать и таким образом:

Neverwinter Script Source
void main()
{
   object oSelf; // Объявляем скрипту, что у нас используется ОБЪЕКТ oSelf
   oSelf = OBJECT_SELF; // Определяем его прировняв к OBJECT_SELF
}


То же самое мы делаем и с двумя цифровыми данными в скрипте:

Neverwinter Script Source
int iMax = GetMaxHitPoints(oSelf);
    int iD = iMax-5;


Мы их представляем скрипту и что сократить написание сразу же определяем с помощью каких либо функций. В данном случае это понимается так:

Neverwinter Script Source
void main()
{
    object oSelf; // Объявляем скрипту, что у нас используется ОБЪЕКТ
    oSelf = OBJECT_SELF; // Определяем его прировняв

    int iMax; // Объявляем, что у нас будет использоваться интеджер с именем iMax
    iMax  = GetMaxHitPoints(oSelf); // Он будет равен >>
    // Get Max Hit Points ВЗЯТЬ МАКСИМАЛЬНЫЕ ХИТ ПОИНТЫ объекта oSelf

    int iD;  // объявляем, что у нас будет еще оно число
    iD = iMax-5; // Оно будет равно от максимального числа хитпоинов отнять 5
}


В общем суть на пальцах такая. Мы говорим: "В нашей команде есть ИГРОКИ (object, int, float). У них есть своя специализация и ФАМИЛИЯ." Когда мы объявляем ИГРОК то это представление объекта. Когда говорим ИГРОК ПЕТРОВ, ВРАТАРЬ СИДОРОВ, ЗАЩИТНИК ИВАНОВ, то это представление и определение кто именно. Игроки могут меняться и наше определение объекта может меняться в скриптах тоже. ЗАЩИТНИКИ, НАПАДАЮЩИЕ могут смениться. Не важно кто защищает ворота и кто в нападении. Мы можем их сменить. Но прежде чем ввести их в игру судья объявляет что игроки поменялись! Так же можно менять в скрипте.

Neverwinter Script Source
void main()
{
    object oSelf; // Объявляем скрипту, что у нас используется ОБЪЕКТ
    oSelf = OBJECT_SELF; // Определяем его прировняв

    int iMax; // Объявляем, что у нас будет использоваться интеджер с именем iMax
    iMax  = GetMaxHitPoints(oSelf); // Он будет равен >>
    // Get Max Hit Points ВЗЯТЬ МАКСИМАЛЬНЫЕ ХИТ ПОИНТЫ объекта oSelf

    int iD;  // объявляем, что у нас будет еще оно число
    iD = iMax-5; // Оно будет равно от максимального числа хитпоинов отнять 5

    effect eDamage; // объявляем, что у нас используется эффект
    eDamage = EffectDamage(iD); // Эффект Effect Damage поврежедения равен числу iD

    if(GetIsPC(oSelf)==TRUE) // Если oSelf это РС
    {
      // Если это игрок то мы сменим определение еффекта и вылечим РС
      eDamage = EffectHeal(iMax); // на число iMax его максимальные хитпоинты
    }
    AssignCommand(oSelf, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,
Self));
}


Если есть вопросы спрашивайте.

Добавлено через 106 секунд

Мне важно, что бы вы поняли описание объектов и их определение можно менять в скрипте.

Добавлено через 54 секунды

Скажите что изменилось в скрипте?
Neverwinter Script Source
void main()
{
  object oSelf = OBJECT_SELF;
  int iMax = GetMaxHitPoints(oSelf);
  int iD = iMax-5;
  effect eDamage = EffectDamage(iD);

  if(GetIsPC(oSelf)==TRUE)
  {
      eDamage = EffectHeal(iMax);
  }
  AssignCommand(oSelf, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,
Self));
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 9 2007, 13:18
Сообщение #18


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Изменилась сама программа скрипта. Теперь он работает выборочно, то есть одному из объектов – в данном случае игроку будет явная выгода (лечение), а у всех прочих по-прежнему изымет по 5 хитов?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 9 2007, 13:19
Сообщение #19


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Самое главное что мы сделали? Мы ПОМЕНЯЛИ ефекты.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 9 2007, 13:32
Сообщение #20


Level 18
Иконки Групп

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Цитата(Artlira @ Oct 9 2007, 14:18) *
а у всех прочих по-прежнему изымет по 5 хитов

Эффекты конечно же сменились, но чуть поправлю предыдущее высказывание - оно будет верным, если скрипт не запускается единожды. В противном случае или пан или пропал. Причем оба и игрок и его соперни к на шарде (если для него) или нпс (он ведь тоже попадет под раздачу, если станет выпонять определенные действия.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 9 2007, 14:38
Сообщение #21


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Если я правильно понимаю, то смысл в том, что скриптом можно определить любой, необходимый в конкретном случае объект (непись, игрок, плейс). И заставить этот объект выполнить действие (серию действий) или (в этом примере) наложить на него эффект, который нужен в определенной ситуации?
Смысл не в конкретном скрипте, а в том, как и что можно заставить работать?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 9 2007, 14:53
Сообщение #22


Level 18
Иконки Групп

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Все верно, основной смысл кода в том - кто и что будет делать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 9 2007, 14:54
Сообщение #23


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Griffon, не гони лошадей многим это будет не понять. (IMG:style_emoticons/kolobok_light/declare.gif) Сейчас важно видеть ПРОСТОЕ то что я говорю.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 9 2007, 15:01
Сообщение #24


Level 18
Иконки Групп

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Все, передаю слово учителю. Хотя учащимся стоит понять, что такое код и что он может делать, ну конечно, при ограничениях по имеющимся функциям.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Oct 9 2007, 18:48
Сообщение #25


Level 19
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



QUOTE(Aiwan @ Oct 9 2007, 13:48) *
Скажите что изменилось в скрипте?

Объекты, целые и эффекты задаются по-разному?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 10 2007, 15:35
Сообщение #26


Level 18
Иконки Групп

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Цитата(Griffon @ Oct 9 2007, 12:24) *
Neverwinter Script Source
void main()
{
object oGriffon = OBJECT_SELF;
int iMax = GetMaxHitPoints(oGriffon);
int iD = iMax-5;
effect eDamage = EffectDamage(iD);

AssignCommand(oGriffon, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage,oGriffon));
}


Результат - 0.85.nss(1): ERROR: ELLIPSIS IN IDENTIFIER


Почему же пишет что ошибка? И что это за ошибка?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 10 2007, 16:05
Сообщение #27


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Griffon @ Oct 10 2007, 18:35) *
Почему же пишет что ошибка? И что это за ошибка?

Может из за НВН2 функций. Я пока компилю на первом НВН так как второй еще не ставил, карту недавно купил и винду переставил. Попробуй в первом редакторе компильнуть. Не переживайте логика и все что в первом НВн то и во втором. Но в редакторе первого НВН легче и понятней. Так что рекомендую юзать пока его.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 11 2007, 10:43
Сообщение #28


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Цитата
Результат - 0.85.nss(1): ERROR: ELLIPSIS IN IDENTIFIER

Griffon у тебя имя файла "0.85" ?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 11 2007, 11:56
Сообщение #29


Level 18
Иконки Групп

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Цитата(mamuc @ Oct 11 2007, 11:43) *
Griffon у тебя имя файла "0.85" ?


Какого? Что за файл? Я не сохранял скрипт, написал и просто нажал скомпилировать. Может после перехода на след строку не нужно табуляцией сдвигать ее в право, он сам сдвинет?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 11 2007, 12:12
Сообщение #30


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



в тулсете при компиляции обязательно создаеться файл (IMG:style_emoticons/kolobok_light/rolleyes.gif)

Цитата
Результат - 0.85.nss(1): ERROR: ELLIPSIS IN IDENTIFIER


сообщение о ошибке следует читать так
"0.85" имя файла меня здесь делает осторожным присутствие точки ( есть древнее правило неупотреблять в именах некоторые специальные симболы, в частности точка в имени файла должна отделять имя и тип файла и не использоваться никак иначе)
"nss" - это и есть тот тип файла про который я упоминал выше
"(1)" - номер строки в котором произошла ошибка
"ERROR: ...." что именно компилятору не нравиться
попробуй написать скрипт и сохранить его под каким то другим именем и потом прокопилировать

Сообщение отредактировал mamuc - Oct 11 2007, 12:13
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 11 2007, 13:26
Сообщение #31


Level 18
Иконки Групп

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Уфффф..... Пока разобрался (IMG:style_emoticons/kolobok_light/crazy.gif)

2mamuc, спасибо за подсказку, помогло найти что вызывало сбой.

По порядку... та ошибка появлялась когда просто создавал новый скрипт - файл -> создать -> скрипт. Оболочка редактора у меня почему-то на русском, видно из-за региональных настроек, надо будет проверить перед очередным запуском.

Затем создал локацию -> затем новый скрипт -> написал, причем именно так без отступлений
Neverwinter Script Source
void main()
{
object oChest = OBJECT_SELF;
object oItem = GetFirstItemInInventory(oChest);
while (GetIsObjectValid(oItem))
{
DestroyObject(oItem);
oItem = GetNextItemInInventory(oChest);
}


Получил ошибку - None.nss(1): ERROR: INVALID DECLARATION TYPE □

После этого переименовал локацию с зона1 на zone1 и Скрипт1 на script1 и еще раз -> компилировать. И, о чудо! выдал ответ, что компиляция успешна, файл находится там-то и там-то. Спасибо.



Добавлено через 23 минуты 13 секунды

P.S. Сменил язык на английский и компилит без проблем file -> new -> script (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 11 2007, 13:46
Сообщение #32


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Griffon @ Oct 11 2007, 14:26) *
Скрипт1 на script1

самое важное. На русском названия скриптов низя писать. Поэтому от русификаторов в работе с тулсетом лучше держаться подальше - русские дефолтовые названия порождают проблемы.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 12 2007, 08:58
Сообщение #33


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



to Griffon только добавь в тобой приведенном примере еще одну закрывающую скобку плз (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 12 2007, 10:14
Сообщение #34


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Такс... Продолжаем разговор (с) Карлсон который живет на крыше.

Мы с вами уже изучили то, что объекты, еффекты и прочие данные можно и НУЖНО описывать заранее. Теперь мы немного разберем то, как определить объект? Мы взяли очень простую схему OBJECT_SELF. попросту говорим что oSelf это ты сам. Но не всегда так просто можно найти нужный объект. В тулсете полно функций, которые определяют объект, например по тегу.

Neverwinter Script Source
object oNpc = GetObjectByTag("NPC_AIWAN");


Функция Get Objec tBy Tag говорит Взять Объект С Тегом. Но вы должны учитывать, что такой объект должен быть с уникальным тегом, что бы ваш скрипт работал нормально. Либо вы должны будете описать еще условия которые позволят найти вам ваш нужный объект. К примеру, если у вас несколько одинаковых НПС и вам нужен один из них то омжно воспользоваться функцией Get Nearest Object By Tag которая говорит Взять Ближайший Объект с Тегом. Эта функция имеет несколько параметров, в ней можно задать условие ближайший объект от кого? Ведь надо точно указать точку отсчета ближайшего объекта от, например двери. По умолчанию у скрипт будет брать ближайший объект от того кто запустил скрипт. Если скрипт стоял на триггере то возьмет ближайший от него. Дети ктороые играют в салочки кричат: "Кто последний тот тухлый банан! Кто первый тот чемпион!" и бегут в дверь. Так вот, чемпион будет именно тот, кто первым добежит и он скорее всего самый ближайший объект у двери. А зачастую он и кричит такую фразу. Всем задание. Создайте в редакторе модуль. Поставьте одну внутреннюю локацию. В ней три нпс с тегами NPC_ВАШ_НИК, поставьте дверь с тегом DOOR_ВАШ_НИК. Начертите подальше от двери триггер и на сло OnEnter поставьте скрипт и настройте его в соответсвии с вашими тегами.

Neverwinter Script Source
// Поиск чемпиона канады
void main()
{
  object oTrigger = OBJECT_SELF; // То на чем стоит скрипт
  object oDoor = GetObjectByTag("DOOR_AIWAN_01"); // Наша дверь
  object oNpc = GetNearestObjectByTag("NPC_AIWAN", oDoor);
  object oPC = GetEnteringObject(); // Тот кто НАСТУПИЛ на триггер
  string sSpeak = "Кто последний тот тухлый банан!"; // Фраза

  if(GetIsPC(oPC)) // ЕСЛИ тот кто наступил ИГРОК ТО ВЫПОЛНЯЕМ
  {
    AssignCommand(oNpc, ClearAllActions()); // Чистим стек команд
    AssignCommand(oNpc, SpeakString(sSpeak)); // Говорит фразу
    AssignCommand(oNpc, ActionForceMoveToObject(oDoor, TRUE)); // Бежит к двери
    // Если убрать TRUE то НПС просто пойдет пешком...
  }
}


В этом скрипте мы находим объекты как то: по тегу (Двери), по действию (Тот кто наступил на триггер), и берем ближайший с тегом. Мне важно что бы вы хотя бы попробовали и поняли как это все работает.

Для того что бы понять что я дал поставьте НПС в линейку между триггером и дверью. Потом посомтрев что происходит вы удалите в строке:
Neverwinter Script Source
object oNpc = GetNearestObjectByTag("NPC_AIWAN", oDoor); // Измените на
  object oNpc = GetNearestObjectByTag("NPC_AIWAN"); // ЭТО


Мы поменяли точку отсчета и теперь к двери побежит ближайший к ТРИГГЕРУ объект. У кого все получилось говорите. У кого что не получилось тоже. Жду...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 13 2007, 02:58
Сообщение #35


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



[ OFFTOP ]
В первом варианте к определение объекта (oNpc) было указано, как объект с заданным тагом, ближайший к двери (oDoor). Тот из трех неписей, который был ближе всех к двери к ней и побежал и произнес фразу.
Neverwinter Script Source
void main( )
{
  object oTrigger = OBJECT_SELF; // То на чем стоит скрипт
  object oDoor = GetObjectByTag( "DOOR_LIRA_01" ); // Наша дверь
  object oNpc = GetNearestObjectByTag( "NPC_LIRA", oDoor ); //Ближайший к двери объект
  object oPC = GetEnteringObject( ); // Тот кто НАСТУПИЛ на триггер
  string sSpeak = "Кто последний тот тухлый банан!"; // Фраза

  if( GetIsPC( oPC )) // ЕСЛИ тот кто наступил ИГРОК ТО ВЫПОЛНЯЕМ
  {
    AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд
    AssignCommand( oNpc, SpeakString( sSpeak )); // Говорит фразу
    AssignCommand( oNpc, ActionForceMoveToObject( oDoor, TRUE )); // Бежит к двери
    // Если убрать TRUE то НПС просто пойдет пешком...
  }
}

Во втором варианте изменилось определение объекта, то есть не было указано, ближайший к чему. Наверно, поэтому, к двери побежал тот непись, который был ближе к триггеру. Сменился приоритет объекта – по отношению к которому выбирался ближайший. Еще я убрала TRUE – непись действительно не побежал, а пошел!
Neverwinter Script Source
void main( )
{
  object oTrigger = OBJECT_SELF; // То на чем стоит скрипт
  object oDoor = GetObjectByTag( "DOOR_LIRA_01" ); // Наша дверь
  object oNpc = GetNearestObjectByTag( "NPC_LIRA" ); //Ближайший к триггеру объект
  object oPC = GetEnteringObject( ); // Тот кто НАСТУПИЛ на триггер
  string sSpeak = "Кто последний тот тухлый банан!"; // Фраза

  if( GetIsPC( oPC )) // ЕСЛИ тот кто наступил ИГРОК ТО ВЫПОЛНЯЕМ
  {
    AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд
    AssignCommand( oNpc, SpeakString( sSpeak )); // Говорит фразу
    AssignCommand( oNpc, ActionForceMoveToObject( oDoor )); // Идет к двери
  }
}

Вроде все получилось.

Сообщение отредактировал Aiwan - Oct 13 2007, 20:12
Причины изменения: ОТЛИЧНО.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

4 страниц V  < 1 2 3 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 16th July 2025 - 18:51