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

Вращение и углы

Bethesda использует и градусы, и минуты (1° градус = 60 минут) как единицы в функциях:

GetAngle [°] (-180 до 180 °) Setangle [°] Position [мин] PositionCell [мин] PlaceItem [мин] PlaceItemCell [мин] Rotate [ ° / секунды ] RotateWorld [ ° / секунды ]

Вращение объектов

Точно так же, как и в случае с перемещением, описанным выше, вы можете вращать объекты вокруг их локальной или мировой оси и определять текущий угол поворота23:

Rotate , axis, angle/sec_enum

RotateWorld, axis, angle/sec_enum

Rotate, z, -30; вращать против часовой стрелки, 30° в секунду, вокруг оси z объекта

Object_ID -> Rotate, Y, 100

Оси – это X, Y или Z. Заметьте, что значение, которое вы задаете в функциях, это скорость вращения (не угол), так что если хотите повернуть объект на 90 градусов, то используйте SetAngle (для мгновенного поворота) или Rotate вместе с GetAngle, чтобы проверять насколько повернулся объект. Эти функции не могут быть использованы на актерах.

Установка углов

SetAngle, axis, float_enum_angle

SetAngle, z, 30

Object_ID -> Setangle, z, 25

Эта функция устанавливает у объекта определенный угол поворота. Оси — X, Y, или Z. Значение типа float устанавливает угол вращения (в градусах) вызывающего объекта в это значение. Она всегда зависит от локальных координат того, где находятся объекты.

Примечание: Для актеров см. функцию "Face, x, y". Судя по тестам в консоли, эта функция не воздействует на актеров. С трибуналом, она может принимать локальные переменные типа float в качестве значений, но только внутри текущих активных ячеек.

Пример: См. функцию SetPos.

Функции размеров

GetScale (float)

SetScale newScale_float

ModScale scaleChange_float

If (doonce == 0 )

Object_ID -> SetScale 0.1

Set doonce to 1

endif

Эти функции используются, чтобы установить или изменить размеры копии объекта. Любой размер должен быть между (не включительно) 0 и 10 (так что можно задавать его вне 0.5 и 2, что первоначально отрицалось Bethesda)(инфа от Mode Locrian). Скрипт выше может использоваться, чтобы обойти ограничение на размер, которое накладывает CS.

Примечание: Не следует вызывать SetScale каждый фрейм, особенно в экстерьерах и других медленных с точки зрения FPS ситуациях.

При загрузке игры размер сбросится в значение между 0.5 – 2. Потому не используйте однократных условий, а вызывайте функцию регулярно. Например, каждые 10 фреймов или проверяя текущий размер объекта функцией GetScale:

if ( GetScale != 5 ) SetScale, 5 endif

Также можно использовать стартовый скрипт Трибунала или Бладмуна. Он будет однократно проверять размеры объектов при загрузке игры24 (Информация с форумов / JOG).

Пример:

Этот скрипт от Беседки показывает как увеличивать и уменьшать предмет.

Когда скрипт помещен на объект, активация копии объекта дает возможность игроку изменять ее размер.

Begin scalescript

short questionAsked

short button

float direction

float currscale

float tempscale

if ( MenuMode )

return

endif

if ( OnActivate == 1 )

if ( questionAsked == 0 )

MessageBox, "Сделать этот объект..." "...Больше" "...Меньше"

set questionAsked to 1

endif

endif

if ( questionAsked == 1 )

set button to GetButtonPressed

if ( button == -1 )

else

if ( button == 0 )

set direction to 1

elseif ( button == 1 )

set direction to –1

endif

set questionAsked to 0

set button to 0

endif

endif

if ( direction != 0 )

set tempscale to .3 * GetSecondsPassed

set tempscale to tempscale * direction

ModScale tempscale

set currscale to GetScale

if ( direction == -1 )

if ( currscale <= .5 )

set direction to 0

endif

else

if ( currscale >= 2 )

set direction to 0

endif

endif

endif

end scalescript