[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