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

Сравнения и выражения

Операторы сравнения работают с любыми выражениями, которые можно представить в числах. Предполагая, что "a = 17", "b = 20" и "c = a - b", все следующие выражения работают, как ожидалось. Скобки необходимы только по математическим причинам:

IF c == -3 && b == 20  IF c == -3 && b == 20 && a == 17  IF c - 1 == -4 && b == 20 && a == 17  IF a - 20 == 17 - b  IF a - 20 == 17 - b && c + 3 == 0  IF a + 3 == b  IF a - b == c  IF a * 4 - b * 4 == c * 4  IF a * ( 5 + c ) - 14 == b  IF 2 * (a * (5 + c) - 14) == b - - b

Если переменная или результат функции содержат 1 или 0, или вам интересно, равен ли результат 0, вам не нужно проверять "== 1" или "!=0" Команды

IF Done  IF Getisid MyNPC  IF Getitemcount Lockpick  IF IsActor && Flag 

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

IF Done != 0  IF Getisid MyNPC != 0  IF Getitemcount Lockpick != 0 

IF IsActor != 0 && Flag != 0 

Примечания

  • Не забывайте, что компилятор не распознает команды, написанные в одну строку. Хотя выражение

if condition == 1 set varname to 1  else set varname to 2

работает в других языках программирования, в скриптах Обливиона эти команды нужно разделить (кроме того, так более читаемо):

if condition == 1       set varname to 1  else       set varname to 2  endif 

  • После условия или команды "else" остаток строки игнорируется, и никаких сообщений об ошибке не появится, так что (поскольку строка кажется правильной) вы можете потратить много времени, пытаясь обнаружить источник проблемы.

4.4 Переменные (Variables)

4.4.1 Классификация переменных

Ref – переменные (reference – указатели на базовый объект)

Функции оказывают действие на “вызывающий объект” (тот, на котором работает скрипт) по умолчанию, но вы можете вызвать их и на другом объекте, используя ссылку (указатель) на объект. Когда вы хотите, чтобы скрипт влиял, например, на игрока, используйте ссылку на игрока (“Player”) и точку “.”, чтобы перенаправить вызов функции (function-call) на игрока с вызывающего объекта:

player.additem gold_001 100

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

short addgold  set addgold to 100  player.additem gold_001 addgold

Переменные

Вы можете использовать локальные переменные, объявленные в этом же скрипте, или же использовать для своих целей глобальные переменные. Из функции нельзя напрямую обратиться к переменной в другом скрипте. Но такой возможностью обладают команды If и Set. Например, эта строка скрипта работать не будет:

player.additem gold_001 otherobject.addgold

Следует написать так:

short addgold ; объявление вспомогательной локальной переменной 

set addgold to otherobject.addgold ; присвоить ей значение внешней локальной переменной 

player.additem gold_001 addgold ; использование полученных внешних данные

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