×
Меню
Индекс

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