×
Меню
Индекс

MSFD Задание случайного перемещения Актера

AiWander, range_enum, duration_enum, time_enum, [idle1], [idle2], [idle3], …[idle9], [reset]
"Actor_ID" -> AIWander, 512, 5, 0, 0, 20, 0, 0, 10, 30, 0, 0, 0
 
Это алгоритм случайных перемещений, который используют практически все NPC в игре.
NPC перемещается вдоль сетки пути, случайно меняет направление и совершает действия простоя (idle).
 
Range: определяет дистанцию, на которую Актер и существо может отходить от первоначального положения.
Duration: возможно время (в часах) выполнения Актером данного пакета (до его сброса, что, похоже, происходит, когда игрок или уходит, или спит, не уверен Где-то я читал, чуть ли не в хелпе, что на Актерах исполняются все пакеты, которые к ним были добавлены. После завершения исполнения всех пакетов, они начинают опять исполнятся заново в той же последовательности, в какой были добавлены. Потому то в диалогах, когда вы просите кого-то подождать вас, после того как этот непись за вами ходил, ему добавляется AIWander с нулевым временем, то есть чтоб этот пакет исполнялся бесконечно. (Прим. Gwathlobal)?)
time: возможно определяет время начала исполнения пакета, если у него есть продолжительность.
[idle1], …[idle9]: шансы для движений простоя.
 
Простои бывают (тестировалось в игре):
Человек мужчина:
Idle1:  Стоять смирно
Idle2:  Перенос веса с одной ноги на другую
Idle3:  Посмотреть назад
Idle4:  Почесать голову, потрясти головой
Idle5:  Поправить одежду или броню на плече
Idle6:  Зевать и потягиваться
Idle7:  Посмотреть на пальцы и оглянуться вокруг
Idle8:  Положить руку на грудь, как при боли в сердце
Idle9:  Потянуться за оружием, затем дотронуться до головы.
 
Человек женщина – как и выше, кроме:
Idle5:  Рука на бедро
Хаджит\ящер женщина – как Человек мужчина, кроме:
Idle9:  Почесать голову, потрясти головой
 
Чтобы актер стоял на одном место, используйте: AIWander, 0, 0, 0, 0
 
Примечание: Количество простоев и некоторые описания в предыдущих версиях были обозначены неверно (исправлено с 8-ой версии – спасибо Whoopa).
Вот пример, который показывает все простои сериями (это может быть полезно, чтобы узнать, какую анимацию вы хотите использовать для  NPC)
 
Begin Animtest
 
float timer
short count
set timer to ( timer + GetSecondsPassed )
 
if ( timer > 10 )
     set timer to 0
     set count to ( count + 1 )
     if ( count >= 18 )
          set count to 0
     endif
endif
 
if ( count == 1 )
     AIWander 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0
     MessageBox "Idle 1 , 100"
     set count to ( count + 1)
elseif ( count == 3 )
     AIWander 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0
     MessageBox "Idle 2 , 100"
     set count to ( count + 1)
elseif ( count == 5 )
     AIWander 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0
     MessageBox "Idle 3 , 100"
     set count to ( count + 1)
elseif ( count == 7 )
     AIWander 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0
     MessageBox "Idle 4 , 100"
     set count to ( count + 1)
elseif ( count == 9 )
     AIWander 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0
     MessageBox "Idle 5 , 100"
     set count to ( count + 1)
elseif ( count == 11 )
     AIWander 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0
     MessageBox "Idle 6 , 100"
     set count to ( count + 1)
elseif ( count == 13 )
     AIWander 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0
     MessageBox "Idle 7 , 100"
     set count to ( count + 1)
elseif ( count == 15 )
     AIWander 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0
     MessageBox "Idle 8 , 100"
     set count to ( count + 1)
elseif ( count == 17 )
     AIWander 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100
     MessageBox "Idle 9 , 100"
     set timer to 0
     set count to ( count + 1)
endif
 
End