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

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

Синтаксис: <имя класса>.<член класса>(параметры)
Имя класса - название группы опкодов, которая определена в файле classes.db для текущего режима редактирования Член класса - одна из команд, входящих в класс Параметры - 0 и более параметров, разделенных запятой
1
Player.SetMinWantedLevel($PLAYER_CHAR, 2)
Copied!
Player - имя класса SetMinWantedLevel - член класса $PLAYER_CHAR, 2 - два параметра для команды SetMinWantedLevel
Существует 3 вида членов класса:
    условия
    методы
    свойства

Условия

Условные команды в списке, вызываемом нажатием Ctrl+пробел, обозначаются словом Check. Они используются в условных выражениях:
1
if
2
Player.Defined($PLAYER_CHAR)
3
jf @anywhere
Copied!

Методы

Команды, которые используются для выполнения одиночного действия над экземплярами класса, называются методами. Например, перемещение объекта, взрыв машины и т.п.:
1
Object.PutAt($crate, 10.0, -25.5, 12.2)
2
Car.Destroy($car)
Copied!
В списке членов класса они обозначаются словом proc.
Особый вид методов - это конструктор. Конструктор создает новый экземпляр класса и сохраняет указатель на него в переменную.
Sanny Builder допускает два эквивалентных друг другу варианта написать конструктор:
1
Player.Create($PLAYER_CHAR, #NULL, 2488.5601, -1666.84, 13.38)
Copied!
1
$PLAYER_CHAR = Player.Create(#NULL, 2488.5601, -1666.84, 13.38)
Copied!

Свойства

Свойства служат для чтения или изменения отдельных атрибутов экземпляра класса.
Например, свойство .Money класса Player позволяет работать с количеством денег у игрока:
1
Player($PLAYER_CHAR).Money += 1000000 // добавить деньги
2
Player($PLAYER_CHAR).Money > [email protected] // проверить счет игрока
3
[email protected] = Player($PLAYER_CHAR).Money // записать текущую сумму денег в переменную
Copied!
В текущей версии существует ограничение на использование пробелов в строковых литералах в параметрах свойств. Компилятор игнорирует такие пробелы:
1
[email protected] = File.Open("file name","wb")
Copied!
будет скомпилировано как:
1
[email protected] = File.Open("filename","wb")
Copied!

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

Большинство классов в качестве первого параметра принимают переменную, которая хранит указатель на экземпляр класса - ту сущность в игре, над которой выполняется эта команда:
1
Player.Build($PLAYER_CHAR)
Copied!
$PLAYER_CHAR - экземпляр класса.
При этом некоторые внутриигровые элементы существуют в единственном экземпляре. Например, камера, которая определяет поле зрения игрока. Члены классов для таких сущностей не требуют экземпляра класса:
1
Camera.SetBehindPlayer()
Copied!

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

Переменные можно объявлять с типом - именем класса:
1
var
2
$PLAYER_CHAR: Player
3
end
Copied!
Это указывает компилятору на то, что переменная $PLAYER_CHAR является экземпляром класса Player. Такую переменную можно использовать вместо имени класса:
1
if
2
$PLAYER_CHAR.Defined
3
jf @anywhere
Copied!
Если переменная используется вместо имени класса, она также компилируется как первый параметр, поэтому дублировать её в списке параметров не нужно:
1
$PLAYER_CHAR.SetClothes("PLAYER_FACE", "HEAD", Head)
Copied!
эквивалентно:
1
Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head)
Copied!
Переменные - экземпляры класса могут быть переобъявлены с другим типом.

Класс Model

Имена моделей являются экземплярами класса Model:
1
#AK47.Load
2
3
:loop
4
wait 0
5
if
6
#AK47.Available
7
jf @loop
Copied!
эквивалентно:
1
Model.Load(#AK47)
2
3
:loop
4
wait 0
5
if
6
Model.Available(#AK47)
7
jf @loop
Copied!

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

Некоторые параметры в членах классов могут задаваться в виде перечисляемого типа (или перечисления). Это делает код более читаемым:
1
Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", BodyPart.Torso)
Copied!
Последний параметр (BodyPart.Torso) - это значение перечисления BodyPart, которое будет заменено на 0 при компиляции. Перечисления и их значения определены в файле enums.txt.

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

Sanny Builder до версии 3.6 определял специальные константы для классов в файле classes.db . Такие параметры назывались Extended. Один член класса не мог иметь более одного параметра такого типа.
Начиная с версии 3.6 классы могут использовать перечисления в качестве типов параметров, при этом допускается использование разных перечислений для разных параметров.
Определенные ранее в файле classes.db параметры типа Extended были заменены на перечисления и перемещены в раздел DEPRECATED_ENUMS для поддержания обратной совместимости с существующими скриптами.
Last modified 11mo ago