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

Проигрывание видео

[no fix] PlayBink “filename” flag_enum

Останавливает игру и проигрывает видео. Установите флаг в 1, чтобы игрок мог прервать показ нажатием escape. Видео должно быть в формате Bink и помещено в папку Datafiles/Videos. MW по умолчанию загружает видео с CD, так что я не уверен, что это реально сработает. Возможно (не проверялось), что установив "TryArchiveFirst=-1" в файле Morrowind.ini можно повлиять на это (-1 Use raw data, 0 Use Newer, 1 use Archive Only). В противном случае придется искать no-CD патч, чтобы проигрывать собственное видео.

Функции Уровневых Списков

[no fix] AddToLevCreature “levcreaname” “creature_ID” level_enum

[no fix] AddToLevItem “levitemname” “item_Id” level_enum

[no fix] RemoveFromLevCreature “levcreaname” “creature_ID” level_enum

[no fix] RemoveFromLevItem “levitemname” “item_ID” level_enum

Эти функции используются для управления списками Уровневых Предметов (Leveled Item) и Уровневых Существ (Leveled Creature) прямо во время игры. Уровневые списки представлены парами объект/уровень, где уровень — требуемый уровень игрока для появления объекта. Функции AddTo добавят нужную пару объект/уровень в указанный уровневый список, если только тот уже не содержит также названную пару. Функции RemoveFrom удалят данную пару из уровневого списка. Также, если для функции RemoveFrom указать пару с уровнем –1, тогда все пары, содержащие данный объект, будут удалены.

Примечание: Функции RemoveFrom не удаляют существующий объект из мира. Если Уровневое Существо уже посчитано как определенное животное, то удаление этого создания из Уровневого Списка не повлечет за собой мгновенное исчезновение данного создания их мира. Тем не менее, это предотвратит появление данного Уровневого Существа в следующий раз.

Пример:

Активировав предмет с этим скриптом можно запретить и разрешить существование крыс в мире, удаляя их из списка Уровневых Существ и удаляя мясо крысы из списка Уровневых Предметов.

Begin norats

short norats

if ( OnActivate == 1 )

if ( norats == 0 )

set norats to 1

RemoveFromLevCreature "rat_scamp_crab" "rat" –1

RemoveFromLevCreature "rat_scamp_crab" "rat-fast" –1

RemoveFromLevItem "lev_meat" "rat_meat" –1

MessageBox "Нет больше крыс."

Else

set norats to 0

AddToLevCreature "rat_scamp_crab" "rat" 1

AddToLevCreature "rat_scamp_crab" "rat-fast" 1

AddToLevItem "lev_meat" "rat_meat" 1

MessageBox "Крысы возвращаются."

Endif

endif

end

Квадратный корень

[no fix] GetSquareRoot, number (float)

set var_1 to GetSquareRoot var_2

Функция GetSquareRoot возвращает корень квадратный от заданного числа. Полезно для вычисления векторов или расстояний (помните Пифагора?).

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

[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