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

Определяем, когда игрок покинул ячейку

[no fix] CellChanged

If ( CellChanged == 1 )

CellChanged возвращает 1 в кадре, когда игрок меняет ячейку. Когда игрок готов покинуть ячейку, скрипт в текущей ячейке останавливается, так что эта функция исполняется, и результаты будут готовы, как только игрок вернется, а не когда он покидает ее, так как скрипт останавливается раньше, чем устанавливается CellChanged (Спасибо Klinn за это исправление). В функции есть небольшой баг: телепортация из ячейки не переключает эту функцию (не подтверждено).

Пример: В скрипте SlaveScript, который освобождает рабов в игре, функция CellChanged работает как триггер, заставляя рабов исчезнуть — раб уходит в светлое будущее:

Begin SlaveScript

[…]

if ( slaveStatus == 3 )

if ( GetCurrentAIPackage == 3 )

AIWander 512 0 0 0 0 0 0 0 0 0 0 0

endif

if ( GetItemCount Slave_Bracer_Left > 0 )

Drop Slave_Bracer_Left 1

endif

if ( GetItemCount Slave_Bracer_Right > 0 )

Drop Slave_Bracer_Right 1

endif

if ( CellChanged == 1 )

Disable

endif

endif

end slaveScript

другой отличный пример — это скрипт Gateway Haunt. Он всегда возвращается, когда вы этого не ждете:

Begin ResurrectHaunt

;town_Sadrith quest

;gateway_haunt resurrects until journal town_Sadrith >= 35

if ( CellChanged == 1 )

if ( gateway_haunt->GetHealth < 1 )

gateway_haunt->Resurrect

endif

endif

end ResurrectHaunt

Определяем, путешествует ли игрок

[no fix] GetPCTraveling (returns boolean)

if ( GetPCTraveling == 1 )

Бладмун добавляет эту функцию, чтобы проверять путешествует ли игрок, например на силт страйдере. Возвращает 1 - если да, 0 – если нет. Это используется в скрипте про превращение в оборотня, чтобы не превращать игрока, пока он путешествует или находится в тюрьме:

if ( PCWerewolf != 1 ) ; НЕ ВЫПОЛНЯТЬ ЕСЛИ ИГРОК НЕ ОБОРОТЕНЬ

return

endif

if ( GetPCinJail == 1 )

return

endif

if ( GetPCTraveling == 1 )

return

endif

Триггеры для актеров, стоящих на объектах

GetStandingPC (returns Boolean/short)

возвращает 1, если игрок стоит на нем

GetStandingActor (returns Boolean/short)

возвращает 1, если ЛЮБОЙ актер (включая игрока), стоит на нем.

If ( Object_Id -> GetStandingPC == 1)

[… включение страшной ловушки ]

endif

Это великолепная функция для включения событий, особенно во внутренних ячейках. Это также отличная функция для строительства ловушек. Вы можете сделать “активатор”, используя файл модели любого статического объекта (включая полы, коврики и т.д.), и включать нужные события, как только игрок (или другой актер) наступит на этот объект.

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

Begin HBHallLighting

if ( GetStandingPC == 1 )

set HB_hallfire to 1

endif

end

глобальная переменная, используемая для включения света. Вот скрипт для огня:

Begin HBHallfireon

if ( HB_hallfire == 1)

if ( GetPos, z, < -736 )

MoveWorld, z, 3 ; огонь поднимается, пока не достигнет пика

if ( GetPos, z, > -780)

enable

endif

endif

else

disable

endif

end