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

Актеры активируют объекты

AiActivate "Object ID"

AiActivate , ObjectID, [reset]

Actor -> AIActivate "Object"

Процитирую Bethesda: «Этот пакет указывает Актеру активировать ObjectID. Мощный и непротестированный, неиспользующийся пакет».

В обычном Морре эта функция практически сломана, кроме того, что ею можно заставить NPC выпить зелье. С Трибуналом она, похоже, исправлена, до определенной степени. Я мог заставить NPC поднять оружие, открыть обычную дверь и пройти через загружающую дверь. Загружающие двери работают, только если телепортирующий маркер находится в том же интерьере, или загруженных (текущий и вокруг) экстерьерах – иначе игра вылетает. Я также успешно тестил ее с активатором (переключателем у Призрачных Врат)

Нужны обычные предосторожности с функциями ИИ (убедитесь, что Актер не слишком далеко, что сетка ИИ на месте – нормальная, что ничего не загораживает путь, и т.д.) Хотя я не достаточно тестил, я не заметил, что появлялся сигнал от AIPackageDone, но есть и другие способы установить для NPC новый пакет (см примеры ниже).

Тип объекта

Активация

NPC

Диалог

Контейнер

Открыть

Дверь

Открыть

Загружающая дверь

Открыть/телепорт(в ту же ячейку)

Оружие, броня, разное и т.д.

Поднять

Книга/Свиток

Читать (для 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