(другой путь, чтобы сгенерировать движение)
SetPos, axis, float_enum_pos (float_var with Tribunal/Bloodmoon)
SetPos, z, 477
Object_ID->SetPos X, 466
Эта функция (в отличие от функций move и moveworld) работают с актерами, включая игрока.
Оси — x, y, или z.
Значение типа float устанавливает позицию вызывающего актера в это значение.
Она всегда зависит от локальных координат той ячейки, где находятся объекты.
Примечание: С Трибуналом эта функция может принимать переменные в качестве значений, но только для текущих ячеек.
Это важно для экстерьеров, вы не можете двигать объекты на огромные расстояния, точка назначения должна быть ячейкой игрока плюс окружающие ее ячейки (Информация с форумов / Srikandi). Также отметьте, что объекты можно поставить в любую позицию (и никаких столкновений замечено не будет), то актеры проверяются на столкновения и могут подвинутся, чтобы избежать их (может быть использовано для обнаружения столкновений).
Пример: Этот скрипт создан для плавающих ящиков в канализации Морнхолда (Трибунал).
Он показывает, как SetPos и SetAngle можно использовать вместо MoveWorld и Rotate, чтобы производить покачивающееся движение:
begin floatAboveStartHeight
float timer
float swingTime
float startAngle
float startHeight
float currangle
float xvalue
float zvalue
float zoffset
float tmpoffset
float weightoffset
float waterlevel
short reset
short initialized
if ( initialized == 0 ); Эта секция сохраняет стартовую высоту и положение направление объекта
set startAngle to GetAngle, X
set startHeight to GetPos, Z
set swingTime to 1
set initialized to 1
endif
if ( MenuMode == 0 )
set waterlevel to GetWaterLevel
if ( waterlevel > startHeight )
if ( timer == 0 )
if ( reset == 0 )
set timer to Random 100
set timer to timer / 4
endif
endif
set timer to ( timer + GetSecondsPassed )
set currangle to GetAngle X
; Здесь устанавливается значение для движения и вращения, в зависимости от частоты кадров:
set xvalue to 10 * GetSecondsPassed
set zvalue to 5 * GetSecondsPassed
; ящик движется по своей оси x:
; вращается вверх
if ( timer < swingTime )
set currangle to currangle + xvalue
SetAngle X currangle
set zoffset to zoffset + zvalue
; вращается вниз
elseif ( timer < (swingTime * 3) )
set currangle to currangle - xvalue
SetAngle X currangle
set zoffset to zoffset - zvalue
; снова вверх
elseif (timer < (swingTime * 4 ) )
set currangle to currangle + xvalue
SetAngle X currangle
set zoffset to zoffset + zvalue
; сброс timer в 0
else
set timer to 0
set reset to 1
set zoffset to 0
SetAngle, x, startangle
endif
set tmpoffset to waterlevel
set tmpoffset to tmpoffset + zoffset
; Ящик качается вверх и вниз
SetPos Z tmpoffset
Else ; уровень воды нормальный
SetAngle, X, startAngle
SetPos Z startHeight
endif
endif
end