MSFD Проверка, завершил ли NPC свое движение
GetAIPackageDone (returns Boolean/short)
if ( GetAIPackageDone == 1 )
[делать что-то]
endif
Чтобы проверить, пришел ли NPC в нужное место, можно использовать GetAIPackageDone.
Эта функция возвращает 1 в том фрейме, когда текущий пакет ИИ завершен.
Точнее, она проверят завершение некоего пакета АИ а не только "пришел" ли.
Используйте это, чтобы проверить завершено ли движение.
Этот скрипт показывает, как соединить несколько функций AITravel в одном скрипте, используя переменную состояния и конструкции if-elseif:
Begin TravelLoop
short state
float timer
if ( menumode == 1 ) ; если меню открыто - не исполнять
return
endif
;начало движения
if ( state == 0 )
if ( player -> GetDistance HB_adros_darani < 5000 )
set state to 5
endif
;******************* Он начинает свой путь
elseif ( state == 5 )
SetHello 0
AITravel -8144, -19409, 728 ;new co-ords point 1
set state to 10
elseif ( state == 10 )
if ( GetAIPackageDone == 1 ) ;он пришел в точку 1
set state to 40
endif
elseif ( State == 40 )
AITravel -9147, -19459, 720 ; новые координаты точки 2
set State to 50
elseif ( state == 50 )
if ( GetAIPackageDone == 1 ) ;он пришел в точку 2
set state to 60
endif
elseif ( state == 60 )
AITravel -8144, -19409, 728 ; новые координаты точки 1
set state to 70
elseif ( state == 70 )
if ( GetAIPackageDone == 1 ) ;он пришел в точку 1
set state to 80
endif
elseif ( state == 80 )
AITravel -6640, -18496, 1040 ;новые координаты точки 0
set state to 90
elseif ( state == 90 )
if ( GetAIPackageDone == 1 ) ;он пришел в точку 0
set state to 0
endif
endif
End TravelLoop
Хорошие примеры скриптов с AITravel можно найти в “lookoutscript” (Фаргот, прячущий сокровища) и CharGenWalkNPC (страж, идущий по кораблю в начале игры).
Или поглядите мой плагин Traveling Merchants, что понять, что такое настоящее безумное использование AITravel
Если вы планирует широко использовать эту функцию, то вам следует знать о следующих проблемах: когда вы покидаете ячейку с путешествующим актером, или вы отдыхаете, скрипт никогда не выполнит условие с GetAIPackageDone, так как ваш NPC стоит все то время, когда вы не в ячейке или спите. Следующий простой код заставит скрипт снова работать (это для предыдущего скрипта)
; *************** Спасение скрипта – восстанавливает скрипт после выхода из ячейки или сна
If ( Player -> GetDistance, HB_adros_darani < 5000 )
if (GetCurrentAIPackage == -1) ; проверка бездействия
set timeout to ( timeout + GetSecondsPassed )
if ( timeout >= 3) ; ждем некоторое время.
; иногда актер бездельничает понемногу
set state to (state - 10) ; переход к следующему состоянию
set timeout to 0
endif
else
set timeout to 0
endif
endif