Sanny Builder
На русском (не обновляется)
На русском (не обновляется)
  • Введение
  • Благодарности
  • История изменений
  • Синтаксис
    • Типы данных
    • Константы
    • Переменные
    • Массивы
    • Операторы
    • Условия
    • Циклы
    • Классы
    • Ключевые слова
    • Дополнительные команды
    • HEX..END
    • Директивы
    • Комментарии
  • Редактор
    • Возможности
    • Опции программы
      • Общие настройки
      • Форматирование
      • Редактор
      • Редактор тем оформления
      • Горячие клавиши
    • Консоль
    • Горячие клавиши
    • Поиск опкодов
    • Интерфейс командной строки
    • Языковая служба
  • Режимы редактирования
    • CustomLabels.ini
    • Enums.txt
    • Расширения
    • Список опкодов (SCM.INI)
    • Шаблоны кода
  • Документация по SCM
    • Скриптовые лимиты
    • GTA III
      • Иконки радара
      • Типы пешеходов
    • Vice City
      • Банды
      • Гаражи
      • Иконки радара
      • Интерьеры
      • Номера кнопок
      • Типы оружия
      • Типы пешеходов
    • San Andreas
      • Банды
      • Варианты изменения авто
      • Гаражи
      • Зоны
      • Интерьеры
      • Номера клавиш
      • Одежда
      • Оружие
      • Персонажи
      • Погода
      • Прически
      • Системы частиц
      • Статистика
      • Татуировки
      • Типы пешеходов
      • Типы поездов
      • Части тела игрока
    • Liberty City Stories
      • Банды
      • Модели
      • Одежда
      • Оружие
      • Персонажи
      • Погода
    • Vice City Stories
      • Банды
      • Одежда
      • Погода
  • Исправление проблем
    • Сообщения об ошибках
      • 0001: INI файл не найден
      • 0002: Неизвестный тип массива
      • 0003: Ошибка чтения script.img
      • 0004: Неизвестный тип параметра
      • 0005: Неправильный режим редактирования
      • 0006: Неверный заголовок файла
      • 0007: Файл не найден
      • 0008: Ошибка чтения списка опкодов
      • 0009: Список опкодов не найден
      • 0010: Неизвестный опкод
      • 0011: Неизвестный опкод
      • 0012: Переход за границы файла
      • 0013: Неизвестная команда
      • 0014: Неверное выражение
      • 0016: Скрипт не найден
      • 0017: Переменная не объявлена
      • 0018: Неверный размер массива
      • 0019: Неизвестный тип массива
      • 0020: Переменная не объявлена как массив
      • 0021: Неверное значение в имени переменной
      • 0022: Cчетчик итераций не является переменной
      • 0023: Неверный синтаксис
      • 0024: Ожидалось целочисленное значение
      • 0025: Неверный цикл
      • 0026: Неверное число с плавающей точкой
      • 0027: Слишком длинная строка
      • 0028: Незавершенная строка
      • 0029: Неверный ID отладочного скрипта
      • 0031: Неверное количество элементов
      • 0032: Неверное значение элемента в заголовке
      • 0033: Неверное имя локальной переменной
      • 0034: Локальная переменная вне допустимых границ
      • 0035: Ожидалось слово
      • 0036: Локальная переменная миссии вне допустимых границ
      • 0037: Отладочный скрипт не найден
      • 0038: Неизвестный тип массива
      • 0039: Неверное определение элемента
      • 0040: Имя или значение константы не определено
      • 0041: Неверный ID миссии
      • 0042: Дублирование имени внешнего скрипта
      • 0043: Неверный индекс массива
      • 0044: Неверное имя массива
      • 0045: Неверный синтаксис массива: пропущено имя переменной
      • 0046: Неверный синтаксис массива
      • 0047: Неверный размер массива
      • 0048: Ошибка чтения размера массива
      • 0049: Недостаточно параметров для опкода
      • 0050: Недостаточно параметров для команды
      • 0051: Ошибка записи заголовка script.img
      • 0052: Ошибка записи script.img
      • 0053: Рекурсивное подключение файла
      • 0054: Метка не найдена
      • 0055: Идентификатор не найден
      • 0056: Метка переобьявлена
      • 0057: Внутренная метка не найдена
      • 0058: Недопустимый параметр
      • 0059: Неверное определение опкода
      • 0060: Нет исходного файла
      • 0061: Пустой исходный файл
      • 0062: IDE файл не найден
      • 0063: Ожидалась метка миссии
      • 0064: Метка миссии не найдена
      • 0065: Метка внешнего скрипта не найдена
      • 0067: Недопустимый символ в имени внешнего скрипта
      • 0068: Неверный символ в идентификаторе
      • 0069: Неверный символ в имени объекта
      • 0071: Неверное число условий
      • 0072: Логический оператор пропущен
      • 0073: Лишний логический оператор
      • 0074: Опция отключена
      • 0075: Неверное 16-ричное значение
      • 0076: Ожидалось условие
      • 0079: Недопустимый параметр в команде Alloc
      • 0080: Ожидалось неотрицательное число
      • 0081: Слишком много параметров
      • 0082: Неверный синтаксис
      • 0083: Неизвестный ID модели
      • 0084: Переход на оффсет 0
      • 0086: Неверный индекс массива
      • 0087: Недопустимая переменная
      • 0088: Глобальная переменная вне допустимых границ
      • 0089: Опкод не найден
      • 0090: Константа переобъявлена
      • 0091: Недостаточно памяти для переменной
Powered by GitBook
On this page
  • Глобальные переменные
  • Сохраняемые переменные
  • DMA переменные
  • Локальные переменные
  • Переменные-таймеры
  • Объявление типа переменной
  • Короткая форма объявления переменных
  • Начальное значение переменной
  1. Синтаксис

Переменные

PreviousКонстантыNextМассивы

Last updated 1 year ago

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

Глобальные переменные

Глобальная переменная начинается со знака $, после которого следует комбинация латинских букв, цифр и _:

$variable1 $100 $____

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

Сохраняемые переменные

Сохраняемые переменные - это особый вид глобальных переменных, добавленный в LCS и VCS . Перед их именем стоит $_, например $_var. Значение такой переменной восстанавливается при загрузке сохраненной игры. Глобальные переменные, которые начинаются только с $ (например, $var), не сохраняют свое значение и обнуляются при загрузке сохранения в LCS или VCS.

DMA переменные

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

Глобальная переменная, чье имя состоит из цифр, называетсяDMA-переменная (Direct Memory Address - прямой доступ к памяти). Это имя и будет индексом, который использует игра.

См. .

Локальные переменные

Именем локальной переменной служит число, после которого стоит знак @.

0@ 
999@ 
56@

Значения локальных переменных доступны только в пределах текущего скрипта или миссии.

Переменные-таймеры

Каждый скрипт или миссия также имеют две особые локальные переменные, которые называются TIMERA и TIMERB. Значение переменной-таймера постоянно увеличивается с ходом игры, поэтому они обычно используются, чтобы измерять время, пройденное с определенного момента (сброса таймера).

0006: TIMERA = 0 // сброс таймера

:WAIT_2S
0001: wait 0 ms
00D6: if
0019:   TIMERA > 2000 // если таймер увеличился до 2000, т.е. прошло 2 секунды
004D: jump_if_false @WAIT_2S
0662: printstring "2 seconds has passed" // показать текст

Имена TIMERAиTIMERBдоступны начиная с Sanny Builder v3.3.0. В более ранних скриптах таймеры использовались как обычные локальные переменные 16@, 17@ (в GTA3 и VC) либо 32@, 33@ (SA).

Объявление типа переменной

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

$var = 0
$myarray($index, 10i) >= 150

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

Например, существует два опкода, которые складывают значения двух переменных: 0058 для целых чисел и 0059 для дробных.

0058: $Var1 += $Var2 // (целые числа)
0059: $Var1 += $Var2 // (дробные числа)

Если убрать опкод, как скомпилировать такое выражение?

$Var1 += $Var2 // ??

Чтобы сообщить компилятору тип переменной, используется ключевое слово var.

var <переменная>: <тип>

Переменная - это любая допустимая глобальная или локальная переменная (см. выше).

Тип может быть одним из нижеперечисленных значений:

  • Integer, Int - целые числа

  • Float - дробные числа

Пример:

var $size: integer

Можно объявить несколько переменных в одной строке, разделяя их запятой:

var $x: float, $y: float, $z: float    

Если вы предпочитаете многострочные определения, используйте конструкцию VAR..END:

var
   $x: float
   $y: float
   $z: float
end

Когда обе переменные имеют известный компилятору тип, выражение компилируется без опкода:

var
    $Var1 : Integer
    $Var2 : Integer
end
$Var1 += $Var2 // здесь будет опкод 0058

Как только тип переменной объявлен, он используется везде ниже по коду. Тип переменной может быть изменен, если она используется по-другому:

script_name 'Food'
var
    10@ : Float
    $Var : Float
end
$var = 1
10@ = $Var
end_thread

thread 'Loop'
var
    10@ : Int
    $Var : Int
end
$var = 1
10@ = $Var
end_thread

В скрипте'Food' 10@ является дробной переменной. В скрипте'Loop' 10@ уже целочисленная переменная.

Тип переменной может быть переобъявлен многократно.

Короткая форма объявления переменных

Начиная с версии 3.2.0 можно объявлять переменные, используя только имя типа (доступно для типов Int, Float, String, LongString).

Синтаксис:

<type> <variable name>

Пример:

int 0@ // 0@ объявлена как целочисленная переменная

Начиная с версии 3.4.0 появилась возможность объявить переменную с собственным именем:

int a
float distance
string name

a = 1
distance = 15.5
name = 'CJ'

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

int a = 1
float distance = 15.5
string name = 'CJ'

Компилятор связывает каждое имя с новой локальной переменной. В примере выше код будет скомпилирован примерно следующим образом:

0006: 0@ = 1 
0007: 1@ = 15.5 
05AA: 2@ = 'CJ'

Начальное значение переменной

Одновременно с объявлением переменной можно задать ей начальное значение. Для этого напишите = и значение:

var $fVar: float = 1.0

или

float $fVar = 1.0

Теперь переменная $fVar объявлена как Float, и компилятор добавит в скрипт опкод 0005:

0005: $fVar = 1.0

Инициализация доступна только для переменных, но не массивов.

Количество локальных переменных в одном скрипте/миссии строго .

String, ShortString - переменная, содержащая (используется только при объявлении массивов, для одиночных переменных используются префикс s$ или суффикс @s)

LongString - переменная, содержащая (используется только при объявлении массивов, для одиночных переменных используются префикс v$ или суффикс @v)

<Имя класса> - переменная или массив переменных

Из-за эта возможность доступна только в CLEO скриптах.

ограничено
архитектурных ограничений
режимах
Alloc
членов класса
короткий строковый литерал
длинный строковый литерал