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

Функция UsedOnMe

UsedOnMe, “Object ID” (returns Boolean/short)

if ( UsedOnMe, Misc_pot_redware_01 )

В соответствие с файлом помощи:

"Возвращает “истину”, если “Object ID” использован на вызывающем объекте. Это используется для скриптов, которые заставляют объекты делать определенные вещи, когда игрок применяет на них этот объект."

Судя по тому, что известно сейчас, эта функция испорчена.

Движение и создание объектов

Следующие функции не работают с игроком, NPC или монстрами. Она работает со статическими объектами, активаторами, контейнерами, прочими объектами и т.д. Примечание: Актеры, включая игрока, имеют тенденцию проваливаться сквозь движущиеся объекты через некоторое время. Этого можно избежать, быстро отключая и включая двигающийся объект в каждом кадре — это постоянно обновляет информацию о соприкосновениях. Актерам также можно добавить заклинание левитации или замедленного падения, чтобы уменьшить шанс проваливания сквозь объекты (за деталями обращайтесь в раздел “Советы и Трюки” для объектов, на которых можно ездить, от MadMax)

Движение вдоль оси объекта

Move axis(x/y/z), units/sec_enum

Move x, 100

Object_ID -> Move Z, 30

Двигает объект вдоль выбранной оси (x, y, или z) с выбранной скоростью. Скорость исчисляется в пунктах в секунду (21.3 пункта в футе). Поэтому расстояние, пройденной за фрейм будет зависеть от количества фреймов в секунду, а расстояние, пройденное за единицу времени нет. Это движение основано на локальном положении объекта. Таким образом, положительное движение по y всегда будет двигать объект вдоль его локального, прямонаправленного вектора:

Примечание: Move не будет работать на актерах, включая игрока. Однако можно использовать ее на мертвых актерах (Информация с форумов / Argent). Как и все функции со стрелкой, Move требует, что бы объект уже был в игре, до того как вы напишите скрипт:

PlaceAtPC "My_Object", 1,1,1

My_Object-> Move x, 10

не будет работать, если My_Object не находится в игре, но вы можете повесить на него локальный скрипт с

Move x, 10

Движение вдоль оси мира

MoveWorld axis(x/y/z), units/sec_enum

MoveWorld z, 100

Object_ID -> MoveWorld Z, 30

Двигает объект вдоль выбранной оси мира (x, y, или z) с выбранной скоростью. Скорость исчисляется в пунктах в секунду (21.3 пункта в футе). Это движение основано на координатах оси мира, таким образом, положительное движение по оси z всегда будет двигать объект вверх, вне зависимости от его локального положения: Z – наверх/вниз, X – на запад/восток, Y – на север/юг.

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

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

Begin platform_script

Short PlatformMoving

Short ActivateMe

Float Timer

If ( GetStandingPC == 1 )

Set ActivateMe to 1

Endif

If ( ActivateMe == 1 )

If ( PlatformMoving == 0 )

Set Timer to Timer + GetSecondsPassed

If ( Timer <= 15 )

"floating_platform_01"->MoveWorld X 10

Else

Set Timer to 0

Set PlatformMoving to -1

Endif

Endif

If ( PlatformMoving == -1 )

Set Timer to Timer + GetSecondsPassed

If ( Timer <= 15 )

"floating_platform_01"->MoveWorld X -10

Else

Set Timer to 0

Set PlatformMoving to 0

Set ActivateMe to -1

Endif

Endif

Else

"floating_platform_01"->SetAtStart

Endif

End platform_script

CellUpdate

CellUpdate

Сломана! В соответствии с информацией от Bethesda: Обновляет текущие позиции объектов в ячейках. Должна вызываться при движении объекта на дальние расстояния. Игра поддерживает перемещения объектов, основываясь на том, в какой ячейке он находится, и, если объект выходит из своей стартовой ячейки, то он не может корректно обрабатываться работающим на нем скриптом.

Та часть, где рассказывается о некорректной обработке объекта, верна. Объект может исчезнуть или “перепрыгнуть” в начало, если перемещается слишком далеко от того места, где был создан. К сожалению, все попытки использовать функцию приводят в ошибке времени выполнения: "необходимо добавить код функции для функции CellUpdate".

Примечание: обход этой проблемы (необходим Трибунал) в том, чтобы отключить и удалить (SetDelete) объект (для перемещающихся объектов, при перемещении в новую ячейку) и немедленном помещении новой версии (PlaceItem) в ту же позицию, используя глобальный скрипт (смотри лодочный скрипт от MadMax из плагина Fishing Academy Mod). Смотри раздел Советы и Трюки для более подробного объяснения самим MadMax. Это похоже на колдовство, потому что таким образом объект никогда не покидает ячейку, в которой он был создан.