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
  • Общий синтаксис
  • Условия
  • Методы
  • Свойства
  • Экземпляры класса
  • Объявление экземпляров класса
  • Класс Model
  • Константы класса
  1. Синтаксис

Классы

PreviousЦиклыNextКлючевые слова

Last updated 4 years ago

Класс - это группа команд, относящихся к какой-либо сущности в игре: игрокам, актерам, машинам и т.д. Например, класс Player объединяет опкоды, которые выполняются над игровым персонажем.

Общий синтаксис

Синтаксис: <имя класса>.<член класса>(параметры)

Имя класса - название группы опкодов, которая определена в файле classes.db для текущего Член класса - одна из команд, входящих в класс Параметры - 0 и более , разделенных запятой

Player.SetMinWantedLevel($PLAYER_CHAR, 2)

Player - имя класса SetMinWantedLevel - член класса $PLAYER_CHAR, 2 - два параметра для команды SetMinWantedLevel

Существует 3 вида членов класса:

  • условия

  • методы

  • свойства

Условия

Условные команды в списке, вызываемом нажатием Ctrl+пробел, обозначаются словом Check. Они используются в :

if
    Player.Defined($PLAYER_CHAR)
jf @anywhere

Методы

Команды, которые используются для выполнения одиночного действия над экземплярами класса, называются методами. Например, перемещение объекта, взрыв машины и т.п.:

Object.PutAt($crate, 10.0, -25.5, 12.2)
Car.Destroy($car)

В списке членов класса они обозначаются словом proc.

Особый вид методов - это конструктор. Конструктор создает новый экземпляр класса и сохраняет указатель на него в переменную.

Sanny Builder допускает два эквивалентных друг другу варианта написать конструктор:

Player.Create($PLAYER_CHAR, #NULL, 2488.5601, -1666.84, 13.38)
$PLAYER_CHAR = Player.Create(#NULL, 2488.5601, -1666.84, 13.38)

Свойства

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

Например, свойство .Money класса Player позволяет работать с количеством денег у игрока:

Player($PLAYER_CHAR).Money += 1000000 // добавить деньги
Player($PLAYER_CHAR).Money > 461@ // проверить счет игрока
4@ = Player($PLAYER_CHAR).Money // записать текущую сумму денег в переменную
0@ = File.Open("file name","wb")

будет скомпилировано как:

0@ = File.Open("filename","wb")

Экземпляры класса

Большинство классов в качестве первого параметра принимают переменную, которая хранит указатель на экземпляр класса - ту сущность в игре, над которой выполняется эта команда:

Player.Build($PLAYER_CHAR)

$PLAYER_CHAR - экземпляр класса.

При этом некоторые внутриигровые элементы существуют в единственном экземпляре. Например, камера, которая определяет поле зрения игрока. Члены классов для таких сущностей не требуют экземпляра класса:

Camera.SetBehindPlayer()

Объявление экземпляров класса

var
    $PLAYER_CHAR: Player
end

Это указывает компилятору на то, что переменная $PLAYER_CHAR является экземпляром класса Player. Такую переменную можно использовать вместо имени класса:

if
    $PLAYER_CHAR.Defined
jf @anywhere

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

$PLAYER_CHAR.SetClothes("PLAYER_FACE", "HEAD", Head)

эквивалентно:

Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head)

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

Класс Model

#AK47.Load
  
:loop
wait 0
if
  #AK47.Available
jf @loop

эквивалентно:

Model.Load(#AK47)

:loop
wait 0
if
    Model.Available(#AK47)
jf @loop

Константы класса

Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", BodyPart.Torso)

Константы класса (устаревшее)

Sanny Builder до версии 3.6 определял специальные константы для классов в файле classes.db . Такие параметры назывались Extended. Один член класса не мог иметь более одного параметра такого типа.

Определенные ранее в файле classes.db параметры типа Extended были заменены на перечисления и перемещены в раздел DEPRECATED_ENUMS для поддержания обратной совместимости с существующими скриптами.

В текущей версии существует ограничение на использование пробелов в в параметрах свойств. Компилятор игнорирует такие пробелы:

Переменные можно с типом - именем класса:

являются экземплярами класса Model:

Некоторые параметры в членах классов могут задаваться в виде (или перечисления). Это делает код более читаемым:

Последний параметр (BodyPart.Torso) - это значение перечисления BodyPart, которое будет заменено на 0 при компиляции. Перечисления и их значения определены в enums.txt.

Начиная с версии 3.6 классы могут использовать в качестве типов параметров, при этом допускается использование разных перечислений для разных параметров.

режима редактирования
параметров
условных выражениях
перечисляемого типа
файле
перечисления
объявлять
строковых литералах
Имена моделей