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

Ограничения редактора скриптов

Символьное ограничение: Есть предел количества символов в скрипте. Это где-то около 30000 символов (настоящий предел, скорее всего, равен 32767, который является максимумом для 16-битного целого числа, с помощью которого длина скрипта хранится в .esp файле – спасибо Horatio за эту информацию). Если это количество достигается, то вы больше не сможете печатать в окне редактора. Для сохранения свободного места можно попробовать следующее:

  • Удалить символы

  • Использовать более короткие имена переменных

  • Посмотреть, можно ли разделить скрипт на части, вынести какую либо его часть в глобальный скрипт или повесить на разные объекты, как разные скрипты.

Строковое ограничение: Стоит отметить также лимит строк. Похоже, максимальное количество строк варьируется от 900 до 1500 строк кода, возможно, это лимит скомпилированных строк, а не всех строк, так что пустые строки и комментарии не в счет. Это выдаст ошибку во время сохранения скрипта.

Ограничение на If-elseif: Есть предел на максимальное количество конструкций if-elseif , которые могут быть использованы в скрипте. Я не уверен в точном значении (я слышал и 127, и 256). Также есть максимальная “глубина” вложенных if команд, это примерно 10 (спасибо Riiak) и максимальное количество линий скрипта внутри блока if - endif.

Сохранение процессорного времени

Если вы планируете мод с большим количеством или с длинными и запутанными скриптами, тогда можно подумать и о сохранении процессорной мощи. Для этого можно сделать несколько вещей:

Если скрипту не обязательно исполняться в каждом кадре, поместите маленький счетчик:

Begin My_super_long_script

Short framecounter

If ( framecounter < 10 )

set framecounter to ( framecounter + 1 )

Return

Endif

set framecounter to 0

[супер длинный скрипт идет дальше]

end

Этот маленький кусочек кода, который всегда должен быть в самом начале вашего скрипта, позволит скрипту (ну большей его части, той, что занимает много процессорного времени) исполняться только каждый 10-ый кадр. То же самое можно сделать и с таймером и исполнять скрипт каждые 3 секунды или раз в минуту.

Исполняйте скрипт, только когда игрок в пределах досягаемости. Если вы заскриптовали забавный прыгающий волшебный мячик, да и любой видимый эффект, то нет резона запускать скрипт, если игрок не видит его. Так поместите в начало скрипта следующий код:

If ( GetDistance, player < 5000 )

Return

Endif

Укорачивайте не нужные более скрипты. Если у вас есть локальные скрипты, которые не требуются после некоторого момента, например, потому что Актер мертв, или объект был отключен, тогда уменьшите их требования к процессору, поместив в их начало следующие строки:

If ( GetDisabled == 1 )

Return

Endif

If ( GetHealth <= 0 )

Return

Endif

Останавливайте глобальные скрипты. Помните, глобальные скрипты исполняются все время, пока вы не остановите их командой StopScript. Можно сделать выполняющийся только один раз глобальный скрипт, поместив в его конец команду StopScript.

Begin do_once_global_script

[ваш код здесь]

StopScript "do_once_global_script"

End

Попытайтесь использовать локальные скрипты вместо глобальных. С ними можно быть уверенным в том, что выполняются они только, когда вы по рядом. Серьезно задумайтесь перед созданием глобального скрипта в тех случаях, когда можно обойтись локальным.

Будьте осторожны с while-петлями, GetDetected, GetLOS и другими «медленными» функциями. Используйте методы, описанные выше (например, счетчик или таймер), чтобы быть уверенным в том, что они не вызываются слишком часто.

Останавливайте скрипт в меню. Всегда, если только у вас нет на то особой причины, помещайте следующие строки в начало скрипта, чтобы предотвратить замедление мыши в меню и другие нежелательные эффекты.

If ( MenuMode == 1)

Return

Endif