![]() CATEGORIES: BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism |
Short AllowWerewolfForceGreeting 3 pageFacex_enum, y_enum
"ActorID" -> Face, -1334, 334
Согласно моим данным эта функция не принимает переменные (по крайней мере, в версии 1.6.1820), но были сообщения, что принимает – возможно, это зависит от версии. Эта функция заставляет NPC посмотреть на указанные координаты. Это прерывает текущую анимацию. На перемещающихся NPC это вызывает прекращение движения, поворот в нужном направлении, затем продолжение движения после того, как поворот закончен. (Информация с форумов / JOG, Dan_Wheeler) Задание случайного перемещения Актера 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).
Чтобы актер стоял на одном место, используйте: AIWander, 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 Актеры активируют объекты AiActivate"Object ID" AiActivate , ObjectID, [reset]
Actor -> AIActivate "Object"
Процитирую Bethesda: «Этот пакет указывает Актеру активировать ObjectID. Мощный и непротестированный, неиспользующийся пакет».
В обычном Морре эта функция практически сломана, кроме того, что ею можно заставить NPC выпить зелье. С Трибуналомона, похоже, исправлена, до определенной степени. Я мог заставить NPC поднять оружие, открыть обычную дверь и пройти через загружающую дверь. Загружающие двери работают, только если телепортирующий маркер находится в том же интерьере, или загруженных (текущий и вокруг) экстерьерах – иначе игра вылетает. Я также успешно тестил ее с активатором (переключателем у Призрачных Врат) Нужны обычные предосторожности с функциями ИИ (убедитесь, что Актер не слишком далеко, что сетка ИИ на месте – нормальная, что ничего не загораживает путь, и т.д.) Хотя я не достаточно тестил, я не заметил, что появлялся сигнал от AIPackageDone, но есть и другие способы установить для NPC новый пакет (см примеры ниже). Пример: Это тестовые скрипты, которые я сделал. Они показывают, как задавать условия, чтобы определить, закончил ли NPC выполнять действие. Begin TT_opendoor
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 Следование и эскорт AiFollow, "Actor ID", duration_f_enum, x_f_enum, y_f_enum, z_f_enum, [reset]
AiFollowCell, "Actor ID", "Cell ID", duration_f_enum, x_f_enum, y_f_enum, z_f_enum, [reset]
Actor -> AIFollow, "Mob2ID", 0,0,0,0
Пакет ИИ «Следовать» (Follow) приказывает одному актеру идти за другим. Это можно использовать, чтобы NPC или существо пошло за игроком, а можно составить из NPC и существ караван. Следующий отрывок из моего собственного скрипта показывает использование функции с нулевыми параметрами:
Поскольку точка назначения и длительность не заданы, гуар будут следовать за NPC до тех пор, пока не будет дана другая команда. Также как и с другими командами ИИ, убедитесь, что каждая команда вызывается только раз, а не каждый фрейм. Длительность, CellID и координаты x, y, z точки назначения ставят условия, при которых AIFollow завершится (что можно отследить функцией GetAIPackageDone). AiFollowCell позволяет указать интерьер в качестве точки назначения. Значение необязательного флага reset неизвестно.
AIEscort, "Actor ID", duration, x, y, z, [reset] AIEscortCell, "Actor ID", "Cell ID", duration, x, y, z, [reset]
Эта функции позволяет Актеру привести игрока в определенную точку. Актер будет ждать игрока, если расстояние окажется слишком большим, и продолжит путь, когда игрок приблизится (Спасибо Kir за эту инфу). Смотрите примерв создании персонажа – страж эскортирует вас из трюма судна на второй уровень к выходу. (Спасибо MisterSmileyFaceDude). Значение необязательного флага reset неизвестно. Определение текущего пакета ИИ Date: 2015-12-17; view: 740
|