Переменные
Переменная - это именованная область памяти со значением, которое может быть многократно прочитано и/или изменено. Существует два вида переменных - глобальные и локальные.
Глобальные переменные
Глобальная переменная начинается со знака $
, после которого следует комбинация латинских букв, цифр и _
:
$variable1
$100
$____
Значения глобальных переменных доступны из любого места в коде.
Сохраняемые переменные
Сохраняемые переменные - это особый вид глобальных переменных, добавленный в LCS
и VCS
режимах. Перед их именем стоит $_
, например $_var
. Значение такой переменной восстанавливается при загрузке сохраненной игры. Глобальные переменные, которые начинаются только с $
(например, $var
), не сохраняют свое значение и обнуляются при загрузке сохранения в LCS или VCS.
DMA переменные
Во время компиляции имена переменных заменяются на числа. Эти числа являются индексами в специальном массиве, который используется игрой для хранения значений глобальных переменных. Индекс является уникальным числом, присваиваемым конкретной переменной.
Глобальная переменная, чье имя состоит из цифр, называетсяDMA
-переменная (Direct Memory Address - прямой доступ к памяти). Это имя и будет индексом, который использует игра.
См. Alloc.
Локальные переменные
Именем локальной переменной служит число, после которого стоит знак @
.
Значения локальных переменных доступны только в пределах текущего скрипта или миссии.
Количество локальных переменных в одном скрипте/миссии строго ограничено.
Переменные-таймеры
Каждый скрипт или миссия также имеют две особые локальные переменные, которые называются TIMERA
и TIMERB
. Значение переменной-таймера постоянно увеличивается с ходом игры, поэтому они обычно используются, чтобы измерять время, пройденное с определенного момента (сброса таймера).
Имена TIMERA
иTIMERB
доступны начиная с Sanny Builder v3.3.0. В более ранних скриптах таймеры использовались как обычные локальные переменные 16@, 17@
(в GTA3 и VC) либо 32@, 33@
(SA).
Объявление типа переменной
Переменные обычно используются в арифметических или условных выражениях. Если в выражении правая часть является числом, опкод указывать не обязательно:
Если же обе части выражения являются переменными, компилятор не сможет подобрать нужный опкод, т.к. типы переменных неизвестны.
Например, существует два опкода, которые складывают значения двух переменных: 0058
для целых чисел и 0059
для дробных.
Если убрать опкод, как скомпилировать такое выражение?
Чтобы сообщить компилятору тип переменной, используется ключевое слово var
.
Переменная
- это любая допустимая глобальная или локальная переменная (см. выше).
Тип
может быть одним из нижеперечисленных значений:
Integer
,Int
- целые числаFloat
- дробные числаString
,ShortString
- переменная, содержащая короткий строковый литерал (используется только при объявлении массивов, для одиночных переменных используются префиксs$
или суффикс@s
)LongString
- переменная, содержащая длинный строковый литерал (используется только при объявлении массивов, для одиночных переменных используются префиксv$
или суффикс@v
)<Имя класса>
- переменная или массив переменных членов класса
Пример:
Можно объявить несколько переменных в одной строке, разделяя их запятой:
Если вы предпочитаете многострочные определения, используйте конструкцию VAR..END
:
Когда обе переменные имеют известный компилятору тип, выражение компилируется без опкода:
Как только тип переменной объявлен, он используется везде ниже по коду. Тип переменной может быть изменен, если она используется по-другому:
В скрипте'Food'
10@
является дробной переменной. В скрипте'Loop'
10@
уже целочисленная переменная.
Тип переменной может быть переобъявлен многократно.
Короткая форма объявления переменных
Начиная с версии 3.2.0 можно объявлять переменные, используя только имя типа (доступно для типов Int
, Float
, String
, LongString
).
Синтаксис:
Пример:
Начиная с версии 3.4.0 появилась возможность объявить переменную с собственным именем:
Одновременно с объявлением такой переменной можно присвоить ей начальное значение, чтобы уменьшить количество строк кода:
Компилятор связывает каждое имя с новой локальной переменной. В примере выше код будет скомпилирован примерно следующим образом:
Из-за архитектурных ограничений эта возможность доступна только в CLEO скриптах.
Начальное значение переменной
Одновременно с объявлением переменной можно задать ей начальное значение. Для этого напишите =
и значение:
или
Теперь переменная $fVar
объявлена как Float
, и компилятор добавит в скрипт опкод 0005
:
Инициализация доступна только для переменных, но не массивов.
Last updated