Классы
Класс - это группа команд, относящихся к какой-либо сущности в игре: игрокам, актерам, машинам и т.д. Например, класс
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)
Переменные - экземпляры класса могут быть переобъявлены с другим типом.
#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)
Последний параметр (
BodyPart.Torso
) - это значение перечисления BodyPart
, кот орое будет заменено на 0
при компиляции. Перечисления и их значения определены в файле enums.txt
.Sanny Builder до версии 3.6 определял специальные константы для классов в файле
classes.db
. Такие параметры назывались Extended
. Один член класса не мог иметь более одного параметра такого типа. Начиная с версии 3.6 классы могут использовать перечисления в качестве типов параметров, при этом допускается использование разных перечислений для разных параметров.
Определенные ранее в файле
classes.db
параметры типа Extended
были заменены на перечисления и перемещены в раздел DEPRECATED_ENUMS
для поддержания обратной совместимости с существующими скриптами.Last modified 2yr ago