Sanny Builder
На русском
Search
K
Comment on page

Операторы

Sanny Builder поддерживает запись многих стандартных операций без опкодов. Компилятор анализирует обе стороны выражения и оператор между ними, чтобы подобрать правильный опкод.
В связи с особенностями языка, разные типы данных требуют разных опкодов. Например, в операции сложения двух целых чисел используется опкод, отличный от аналогичной операции с дробными числами. В некоторых случаях это требует предварительного объявления типа переменных, участвующих в выражении.
Большинство поддерживаемых операций в Sanny Builder используют лишь два операнда: один слева от оператора (LHS), и один - справа (RHS).

Присваивание

  • LHS = RHS - операция присваивания. RHS - число, переменная или строка. В присваивании LHS всегда является переменной.
  • LHS += RHS - операция сложения с присваиванием. LHS и RHS должны быть одного типа, целого или дробного. Значение LHS увеличивается на соответствующее значение RHS.
  • LHS -= RHS - операция вычитания с присваиванием
  • LHS *= RHS - операция умножения с присваиванием
  • LHS /= RHS - операция деления с присваиванием
Нижеперечисленные операции требуют расширения CLEO ({$USE CLEO} или {$CLEO}).
  • LHS = value1 + value2 - сложить два целых числа и записать результат в LHS
  • LHS = value1 - value2 - вычесть одно целое число из другого и записать результат в LHS
  • LHS = value1 * value2 - перемножить два целых числа и записать результат в LHS
  • LHS = value1 / value2 - разделить одно целое число на другое и записать результат в LHS

Сравнение

  • LHS == RHS - операция "равно". Стороны должны иметь одинаковое значение, чтобы результат был истиной (true).
  • LHS > RHS - операция "больше чем"
  • LHS >= RHS - операция "больше либо равно"
  • LHS < RHS - операция "меньше чем"
  • LHS <= RHS - операция "меньше либо равно"
  • LHS <> RHS - операция "не равно". Стороны должны иметь разные значения, чтобы результат был истиной (true).
В языке нет отдельного типа Boolean. Результат каждого сравнения имеет значение только в пределах текущего условного выражения.

Побитовые операции

Игра не поддерживает побитовые операции, поэтому для их использования нужен особый плагин CLEO. Кроме того, в исходном коде при помощи директивы {$USE bitwise} должно быть подключено соответствующее расширение.
Операция
Опкод
Пример
AND
0B10
0@ = 1@ & 2@
OR
0B11
0@ = 1@ | 2@
XOR
0B12
0@ = 1@ ^ 2@
NOT
0B13
0@ = ~1@
MOD
0B14
0@ = 1@ % 2@
Shift Right
0B15
0@ = 1@ >> 2@
Shift Left
0B16
0@ = 1@ << 2@
AND (с присваиванием)
0B17
0@ &= 1@
OR (с присваиванием)
0B18
0@ |= 1@
XOR (с присваиванием)
0B19
0@ ^= 1@
NOT (унарный)
0B1A
~0@
MOD (с присваиванием)
0B1B
0@ %= 1@
Shift Right (с присваиванием)
0B1C
0@ >>= 1@
Shift Left (с присваиванием)
0B1D
0@ <<= 1@

FPS-независимое сложение и вычитание

Игра поддерживает операции сложения и вычитания, которые не зависят от FPS. Прочитайте статью на GTAMods.com чтобы узнать больше.
Команда
Опкод
Пример
ADD_TIMED_VAL_TO_FLOAT_VAR
0078
$var +=@ 5.0
ADD_TIMED_VAL_TO_FLOAT_LVAR
0079
0@ +=@ 5.0
ADD_TIMED_FLOAT_VAR_TO_FLOAT_VAR
007A
$var1 +=@ $var2
ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR
007B
0@ +=@ 1@
ADD_TIMED_FLOAT_VAR_TO_FLOAT_LVAR
007C
0@ +=@ $var
ADD_TIMED_FLOAT_LVAR_TO_FLOAT_VAR
007D
$var +=@ 1@
SUB_TIMED_VAL_FROM_FLOAT_VAR
007E
$var -=@ 5.0
SUB_TIMED_VAL_FROM_FLOAT_LVAR
007F
0@ -=@ 5.0
SUB_TIMED_FLOAT_VAR_FROM_FLOAT_VAR
0080
$var1 -=@ $var2
SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_LVAR
0081
0@ -=@ 1@
SUB_TIMED_FLOAT_VAR_FROM_FLOAT_LVAR
0082
0@ -=@ $var
SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_VAR
0083
$var -=@ 1@

Конвертация типов

Некоторые значения могут быть сконвертированы в другой тип. Игра поддерживает перевод между типами Integer и Float.
Использование оператора =# требует, чтобы тип обеих переменных был объявлен заранее.
Команда
Опкод
Пример
CSET_VAR_INT_TO_VAR_FLOAT
008C
$i =# $f
CSET_VAR_FLOAT_TO_VAR_INT
008D
$f =# $i
CSET_LVAR_INT_TO_VAR_FLOAT
008E
0@ =# $f
CSET_LVAR_FLOAT_TO_VAR_INT
008F
1@ =# $i
CSET_VAR_INT_TO_LVAR_FLOAT
0090
$i =# 1@
CSET_VAR_FLOAT_TO_LVAR_INT
0091
$f =# 0@
CSET_LVAR_INT_TO_LVAR_FLOAT
0092
0@ =# 1@
CSET_LVAR_FLOAT_TO_LVAR_INT
0093
1@ =# 0@