×
Меню
Индекс

MSFD Функции уровня воды

 
[no fix] GetWaterLevel (float)
[no fix] SetWaterLevel newWaterLevel_float
[no fix] ModWaterLevel waterLevelChange_float
 
Работает только для интерьера в котором уже есть вода!
Для экстерьеров не работает, т.е. нельзя создать прилив в момент ОГРОМНОГО МЕССЕРА над горизонтом (увы).
 
Отличная возможность для жестоких ловушек…
Эти функции используются для того, чтобы определить и изменить уровень воды в текущей внутренней ячейке.
Когда Актер внезапно обнаруживает себя под водой, он ждет, пока у него не останется половина запаса воздуха, а затем он начинает всплывать на поверхность по прямой линии. Плавающие (мертвые) тела движутся, не учитывая столкновений.
 
Примеры:
Этот скрипт должен висеть на ручке, чтобы она поднимала или опускала уровень воды в комнате.
Это скрипт того факела в трибунале, где надо затопить неких "массовиков затейников" с дротиками.
 
Begin crank
 
short changelevel
float direction
float waterlift
short crankturn
short currcrank
float newwaterlevel
 
if ( MenuMode )
     return
endif
 
if ( OnActivate == 1 )
     if ( changelevel == 0 )
          if ( direction == 1 )
               set direction to –1
          else
               set direction to 1
          endif
          set changelevel to 1
     endif
endif
if ( changelevel == 0 )
     return
endif
 
set crankturn to 360 * GetSecondsPassed
set crankturn to crankturn * direction
set currcrank to GetAngle X
set crankturn to currcrank + crankturn
SetAngle X crankturn
 
set waterlift to 120 * GetSecondsPassed
set waterlift to waterlift * direction
ModWaterLevel waterlift
 
set newwaterlevel to GetWaterLevel
if ( direction == 1 )
     if ( newwaterlevel >= 600 )
          SetWaterLevel 600
          set changelevel to 0
     endif
else
     if ( newwaterlevel <= 0 )
          SetWaterLevel 0
          set changelevel to 0
     endif
endif
 
end crank
 
Это модифицированный скрипт “Float”, помещенный на всех объектах с точкой вращения в центре, чтобы они плавали на поверхности, вне зависимости от уровня воды.
Он также заставляет объект прекратить дергаться, если игрок стоит на нем.
 
Begin NewFloat
 
float timer
float     swingTime
float     startAngle
float     currangle
short      reset
 
float     xvalue
float     zvalue
float      zoffset
float      tmpoffset
float     weightoffset
 
set startAngle to GetStartingAngle, x
 
if ( MenuMode == 0 )
 
     if ( timer == 0 )
          if ( reset == 0 )
               set timer to Random 100
               set timer to timer / 4
          endif
     endif
 
     set swingTime to 1
 
     set timer to ( timer + GetSecondsPassed )
     set currangle to GetAngle X
     set xvalue to 10 * GetSecondsPassed
     set zvalue to 5 * GetSecondsPassed
 
 
     if ( GetStandingPC )
          set zoffset to –30
          SetAngle X 0
     else
          ;rotate up
          if ( timer < swingTime )
 
               set currangle to currangle + xvalue
               SetAngle X currangle
               set zoffset to zoffset + zvalue
 
          ;rotate down
          elseif ( timer < (swingTime * 3) )
 
                    set currangle to currangle – xvalue
                    SetAngle X currangle
                    set zoffset to zoffset – zvalue
 
          ;up again
          elseif (timer < (swingTime * 4 ) )
 
               set currangle to currangle + xvalue
               SetAngle X currangle
               set zoffset to zoffset + zvalue
 
          ;reset timer to zero
          else
               set timer to 0
               set reset to 1
               set zoffset to 0
               SetAngle, x, startangle
 
          endif
     endif
 
     set tmpoffset to GetWaterLevel
     set tmpoffset to tmpoffset + zoffset
 
     SetPos Z tmpoffset
 
endif
 
end NewFloat