Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OSFM v1.2.0.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.49 Mб
Скачать

ScriptEffectUpdate

Использование:

begin ScriptEffectUpdate

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

В игре Обливион блок-тип ScriptEffectUpdate используется 13 раз. Примеры скриптов: DAHermaeusSoulsSpell, DummyMagicEffectSCRIPT, GhostEffectScript

4.3.6 Команда "." (точка - UseReference)

Синтаксис:

ObjectID.ObjectFunction [Arguments ...] IDобъекта.Функция [Аргументы…]

Команда "." устанавливает предшествующий ей ObjectID (ID объекта) только для текущей функции. ObjectID может быть задан как непосредственно - с указанием ID копии объекта, так и с помощью переменной типа reference (как указатель на объект). Примечания: Как бы странно это ни показалось, но по сравнению с другими командами в скомпилированном скрипте это настоящая команда, которая использует код 0x001C. Выражения (например, QuestID.QuestVariable (IDквеста.КвестоваяПеременная)) не используют эту команду. Внутри игры подобные выражения являются просто сложением (ObjectID)(VariableNumber). Например, строка "MageConvSystem.lecturevar" из скрипта ArcaneUScholarScript в шестнадцатеричном коде будет выглядеть как "72 04 00 73 0F 00" ("MageConvSystem" - четвертая копия, используемая в скрипте, а "lecturevar" объявлена пятнадцатой переменной). Content - Disposition: form-data; name="smiles_on"

4.3.7 Команда Set (установить)

Команда Set присваивает локальной или глобальной переменной указанное значение. Это значение может быть числом или результатом вычисления выражения. Арифметические операторы:

Оператор

Описание

+

Сложение

Вычитание

*

Умножение

/

Деление

%

Модуль (выполняет целочисленное деление и возвращает остаток)

Примечания:

  • Оператор модуля "%" вычисляется после умножения / деления, но перед сложением / вычитанием:

    4 * 3 % 2 = 0 4 * ( 3 % 2 ) = 4 1 + 2 % 3 = 3 (1 + 2 ) % 3 = 0

  • Минус сразу перед числом или переменной считается знаком "отрицания". Если вам необходимо выполнить вычитание, нужно оставлять как минимум по одному пробелу до и после минуса. Это единственный случай, когда вам нужен пробел между арифметическими операторами. (Например: "a-b" не будет компилироваться; нужно написать "a - b").

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

float a  set a to 9/5  ; установит "a" в 1.000  set a to 9.0/5 ; установит "a" в 1.800

  • Если вы хотите сохранить в целочисленной переменной верно округленный результат деления, убедитесь, что в вычислениях используется плавающая точка (и десятичная часть не отбрасывается) и добавьте 0.5:

short a  set a to 9/5   ; установит "a" в 1  set a to 9/5 + 0.5 ; установит "a" в 1  set a to 9.0/5   ; установит "a" в 1  set a to 9.0/5 + 0.5 ; установит "a" в 2  set a to 7.0/5 + 0.5 ; установит "a" в 1

short a  set a to 9  set a to a/5.0 + 0.5 ; установит "a" в 2

short a  float b  set b to 9  set a to b/5 + 0.5 ; установит "a" в 2

  • Вы можете использовать результат сравнения в качестве "значения". Переменная тогда станет равной 1 или 0 в зависимости от того, истинно ли сравнение или нет. Например,

set goodluck to player.GetAV luck > 60

делает то же самое, что и

if player.GetAV luck > 60       set goodluck to 1  else       set goodluck to 0  endif   

  • Вы можете использовать результаты сравнения непосредственно в арифметических операциях, но для этого нужно заключить сравнение в скобки. Выражение

set luckbonus to 50 * (player.Getav luck > 60)

делает то же самое, что и

if player.Getav luck > 60        set luckbonus to 50  else        set luckbonus to 0  endif   

Другие примеры:

set a to 2  set b to a*a  set c to (b - a)*b - a  set d to ((3* -b+a) - c)/ -2  message "a=%.0f, b=%.0f, c=%.0f, d=%.0f" a b c d ; ("a=2, b=4, c=6, d=8")  set stage to getstage quest1 + 10  set weapondrawn to player.isweaponout

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]