MSFD Актеры активируют объекты
AiActivate "Object ID"
AiActivate , ObjectID, [reset]
"Actor_ID" -> AIActivate "Object"
Процитирую Bethesda: «Этот пакет указывает Актеру активировать ObjectID. Мощный и не протестированный, не использующийся пакет».
В обычном Морре эта функция практически сломана, кроме того, что ею можно заставить NPC выпить зелье.
С Трибуналом она, похоже, исправлена, до определенной степени.
Я мог заставить NPC поднять оружие, открыть обычную дверь и пройти через загружающую дверь.
Загружающие двери работают, только если телепортирующий маркер находится в том же интерьере, или загруженных (текущий и вокруг) экстерьерах – иначе игра вылетает.
Я также успешно тестил ее с активатором (переключателем у Призрачных Врат)
Нужны обычные предосторожности с функциями ИИ (убедитесь, что Актер не слишком далеко, что сетка ИИ на месте – нормальная, что ничего не загораживает путь, и т.д.)
Хотя я не достаточно тестил, я не заметил, что появлялся сигнал от AIPackageDone, но есть и другие способы установить для NPC новый пакет (см примеры ниже).
Пример: Это тестовые скрипты, которые я сделал.
Они показывают, как задавать условия, чтобы определить, закончил ли NPC выполнять действие.
Begin TT_opendoor
short doonce
short AIState
if ( doonce == 0 )
if ( GetDistance, Player < 400 )
AIActivate TT_door
set doonce to 1
endif
elseif ( doonce == 1 )
set AIState to GetCurrentAIPackage
MessageBox "Package = %g", AIState
if ( TT_door->GetAngle, z != 180 ); Как только дверь начала вращаться
MessageBox "Done"
AIWander 30, 5, 0, 0,20,0,0,10,30,0,0
set doonce to 2
endif
endif
end
Begin TT_pickmace
short doonce
short AIState
if ( doonce == 0 )
if ( GetDistance, Player < 400 )
AIActivate TT_daedric_mace
set doonce to 1
endif
elseif ( doonce == 1 )
set AIState to GetCurrentAIPackage
MessageBox "Package = %g", AIState
if ( GetItemCount, TT_daedric_mace >= 1 ); когда в инвентаре NPC появидась булава
MessageBox "Done"
AIWander 512, 5, 0, 0,20,0,0,10,30,0,0
set doonce to 2
endif
endif
end
Begin TT_openloaddoor
short doonce
short AIState
if ( doonce == 0 )
if ( GetDistance, Player < 400 )
AIActivate TT_door
set doonce to 1
endif
elseif ( doonce == 1 )
set AIState to GetCurrentAIPackage
MessageBox "Package = %g", AIState
if ( GetPos, y > 2000 ); позиция изменилась. Телепортация в ту же ячейку
MessageBox "Done"
AIWander 30, 5, 0, 0,20,0,0,10,30,0,0
set doonce to 2
endif
endif
end