Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
91
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Следование и эскорт

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 и существ караван. Следующий отрывок из моего собственного скрипта показывает использование функции с нулевыми параметрами:

elseif ( state == 20 )

HB_guar_pack_adros_ -> AIFollow, HB_adros_darani, 0, 0, 0, 0

AITravel -8144, -19409, 728 ;new coords point 1

set state to 30

Поскольку точка назначения и длительность не заданы, гуар будут следовать за 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 неизвестно.

Определение текущего пакета ии

Для сложного скриптнига Актеров возможна переменная, в которой хранится значение текущего типа ИИ и от которой зависят действия скрипта.

GetCurrentAIPackage (returns short)

If ( GetCurrentAIPackage == 2 )

[делать что-то]

endif

Возвращаемые значения:

Никакой

-1

Wander (Бродить)

0

Travel (Идти)

1

Escort (Эскорт)

2

Follow (Следовать)

3

Activate (Активировать)

4

Pursue (Преследовать)

5

Заставляем актера красться

ForceSneak

ClearForceSneak

"Actor_ID" -> ForceSneak

GetForceSneak (returns Boolean/short)

If ( "actor_ID" -> GetForceSneak == 1 )

Команда ForceSneak переводит актера в режим скрытности, все движения будут выполняться, как будто он крадется. ClearForceSneak завершает режим ForceSneak. К сожалению, нет соответствующей команды для бега (добавлена в Трибунале). GetForceSneak возвращает 1, если режим ForceSneak для вызывающего актера включен. Смотрите LookoutScript для примера. Вот отрывок:

elseif ( walkstate == 2 )

Fargoth->ForceSneak ; войти в режим скрытности

Fargoth->AiTravel -11468.595,-71511.531,173.728 ;идти к дереву

set walkstate to 3

elseif ( walkstate == 3 )

if ( Fargoth->GetAiPackageDone == 1 )

;Fargoth->Equip "torch_infinite_time_unique"

set walkstate to 4

;MessageBox "ДОЛЖЕН БЫТЬ У ДЕРЕВА"

endif

elseif ( walkstate == 4 )

set timer to timer + GetSecondsPassed

Fargoth->ClearForceSneak ; выйти из режима скрытности

Fargoth->AiWander 0 0 0 0 0 0 0 0 0

if ( timer > 3 )

Fargoth->ForceSneak ; снова вйоти в режим скрытности

Fargoth->AiTravel -11410.590,-72057.188,133.644 ;идти к стене

set walkstate to 5

endif