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

Запирание и отпирание дверей или сундуков

Lock, short_enum_locklevel

Unlock

My_Door -> Lock, 50

GetLocked (returns Boolean/short)

If ( GetLocked == 1 )

Unlock

Endif

(только для дверей и контейнеров)

Эти функции используются, чтобы запирать и отпирать двери или контейнеры. Функция GetLocked возвращает 1, когда вызывающий объект заперт. Lock запирает объект до определенного уровня (0-100). Unlock убирает любой замок, вне зависимости от уровня замка.

Пример:

Это примерный скрипт от qwert, который делает сундук устройством для прокачки навыка взлома, постоянно запирая его:

Begin PC_Security_Skill_Trainer float timer if ( menumode == 1) return endif set timer to timer + GetSecondsPassed if ( timer > 10 ) set timer to 0 endif if ( timer == 0 ) ;используем таймер, чтобы запереть сундук через 10 секунд "Storm_Chest_Trainer"->Lock 50 endif

End

Анимирование объектов

Есть группа функций, позволяющих проигрывать определенную анимацию, заданную в модели (файл .nif). Вы можете выяснить имена анимационных групп, загрузив модель в окно просмотра и затем, просматривая различные анимационные группы, или посмотреть в окне "base animation" в меню "Character". Великолепное собрание информации об анимационных группах можно найти здесь:

http://morrowind.preik.net/animationgroups.html

Но только то, что перечислено в окне “ base animation” можно вызвать этой функцией. Дополнительную анимацию, можно загрузить, использую кнопку анимации в меню объекта. См танцующих девушек в Доме Наслаждений Дезель в Суране.

Не у всех моделей есть анимационные группы, но различные флаги (под активаторами) — хорошие примеры, чтобы выяснить, что они означают. Пример для GroupName: idle, idle2, idle3, walk, и т.д.

Эти функции не работают на игроке:

PlayGroup, GroupName, [Flags]

PlayGroup, walk, 1

Проигрывает анимацию, определенную через GroupName. Опциональные флаги могут использоваться для того, чтобы начать проигрывание группы различными способами (см. ниже).

LoopGroup, GroupName, Number_enum, [Flags]

Проигрывает анимацию, определенную через GroupName. Анимация будет проигрываться определенное количество раз, а затем вернется к анимации бездействия (Idle). Опциональные флаги могут использоваться для того, чтобы начать проигрывание группы различными способами (см. ниже).

SkipAnim

Текущая анимация не проигрывается в этом фрейме.

Флаги:

0 = Обычный

Текущая анимация проиграется полностью, а затем начнется новая анимация.

1 = Немедленный старт

Текущая анимация будет остановлена вне зависимости от того, на каком она сейчас кадре, а затем новая анимация проиграется с начала.

2 = Немедленный цикл

Текущая анимация будет остановлена вне зависимости от того, на каком она сейчас кадре, а затем новая анимация начнет циклично повторяться.

Примечание: PlayGroup не работает на игроке. С установленным Бладмуном у NPC есть небольшие глюки с анимацией. Когда вы вызываете ее из консоли, она работает нормально, но когда вы пишите в скрипте NPC->PlayGroup, group, 1, может, оказаться, что анимация проигрывается совершенно другая. (Информация с форумов / Kir). Так что придется поэкспериментировать, чтобы найти нужную анимацию. (Посмотрите на список анимаций бездействия NPC для AIWander, Kir работает над инструментом NPC Animation Explorer «NPC Animation Explorer» (Проводник для анимаций NPC), следите за прогрессом!)

Пример:

Это оригинальный скрипт, присоединенный к наружным вывескам и заставляющий их двигаться в зависимости от погоды:

begin OutsideBanner

;это скрипт для наружных вывесок, который

;анимирует их на ветру.

;Idle — штиль, Idle2 — легкий бриз, и Idle3 — сильный ветер

short ran

if ( MenuMode == 0 )

set ran to random 100

if ( ran < 30 ) ; 30% шанс, что флаг сделает что-то новое

if (GetCurrentWeather >= 5 ) ; гроза, пылевая буря или мор

LoopGroup, Idle3, 5

endif

; последняя анимация, вызванная в скрипте, будет проигрываться

if ( ran <= 10 )

PlayGroup, Idle

elseif ( GetCurrentWeather < 5 )

PlayGroup, Idle2

endif

endif

endif

end OutsideBanner