×
Меню
Индекс

MSFD Установка позиции

 (другой путь, чтобы сгенерировать движение)

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