Материал частично взят из ReadMe Sanny Builder'a
Начну с типов данных:
@ - пишется в начале,как метка на label.
Пример: 0002: jump @MyLabel
$ - обозначение глобальных переменных. Могут использоваться в любом месте кода(всего Main'a).
Пример: 0004: $Var1 = 100
@ - пишется в конце,как обозначение переменной,используемой только в том потоке,в котором
её объявили.
Пример: 0006: 100@ = 10
'...' - текст (макс. 7 символов).
Пример: 03A4: name_thread 'MAIN'
"..." - текст (точный максимум неизвестен, но не больше 255 символов).
Пример: 0662: write_debug_message "Hello_world"
s$ - глобальная стринговая переменная (можно использовать во всём Main'e)
Пример: 05A9: s$MyString = 'FOREVER'
@s - локальная стринговая переменная (можно использовать только в том потоке,в котором вы её
создали).
Пример: 05AA: 1@s = 'LOCAL'
v$ - глобальная длинная стринговая переменная (можно использовать во всём Main'e).
Пример: 06D1: v$MyString = "LONG_GLOBAL"
@v - локальная длинная стринговая переменная (можно использовать только в том потоке,в кото-
ром вы её создали).
Пример: 06D2: 1@v = "LONG_LOCAL"
# - имя модели из одного из IDE - файлов игры
Пример: 0247: request_model #CELLPHONE
& - прямой байтовый адрес.Читает и пишет значения по указанному адресу.
Пример: 0004: &100 = 0
Переменным можно задавать тип,кто хоть чуть-чуть знает программирование,тот сразу поймёт:
var
$Man: Actor
end
Мы присвоили переменной $Man тип актёрa.Теперь переменная $Man обладает всеми свойствами,ко-
торыми обладает тип Actor.
Теперь нам не обязательно писать вот так:
actor.create($Man,4,1600.0,1200.0,16.0)
Теперь можно написать:
$Man.create(4,1600.0,1200.0,16.0)
Необязательно писать model.load(#M4),можно написать сразу #M4.load ,потому-что знак # уже
указывает на то,что эта переменная - модель.
Также можено объявлять массивы.Используется следующая запись:
var
<array name>: array <size> of <type>
end
Например:
var
$MyArray: array 10 of Integer
end
После этого вы можете работать с этим массивом без указания его типа
и размера.Например:
$FloatArray[$RndIndex] += 100.0
Теперь насчёт математических действий,т.е. сложение,вычитание...
$Var_1 += 1 // прибавление к целой переменной целого числа
$Var_1 += 1.0 // прибавление к дробной переменной дробного числа
$Var_1 -= 1 // отнимание целого числа от целой переменной
$Var_1 -= 1.0 // отнимание от дробной переменной дробного числа
$Var_1 /= 1000 // деление целой переменной на целое число
$Var_1 /= 1000.0 // деление дробной переменной на дробное число
$Var_1 *= 1000 // умножение целой переменной на целое число
$Var_1 *= 1000.0 // умножение дробной переменной на дробное число
008B: $Var_1 = $Var_2 // приравнивание переменной 1 к переменной 2 (дробные и целые)
0089: $Var_1 = $Var_2 // приравнивание переменной 1 к переменной 2 (только дробные)
0084: $Var_1 = $Var_2 // приравнивание переменной один к переменной два (целые и handles)
0087: $Var_1 = $Var_2 // приравнивание переменной с точкой к др. переменной с точкой
0086: $Var_1 = $Var_2 // приравнивание перемееной один к переменной два (только целые)
005F: $Var_1 += $Var_2 // прибавление к целой переменной дробной переменной
005A: $Var_1 += $Var_2 // прибавление к переменной один переменной два (только целые)
005B: $Var_1 += $Var_2 // прибавление к одной переменной с точкой др. переменной с точкой
0060: $Var_1 -= $Var_2 // отнимание от одной переменной др. переменной (только целые)
0063: $Var_1 -= $Var_2 // отнимание от одной переменной с точкой др. переменной с точкой
0072: $Var_1 /= $Var_2 // деление целой переменной на другую целую переменную
0073: $Var_1 /= $Var_2 // деление переменной с точкой на другую переменную с точкой
006B: $Var_1 *= $Var_2 // умножение дробной переменной на др. дробную переменную
Сравнения,т.е. проверки для чисел:
$Var_1 == 1 // равняется ли переменная 1 (только целые)
$Var_1 >= 9 // переменная больше либо равняется 9 (только целые)
0 >= $Var_1 // число 17 больше либо равняется переменной (только целые)
$Var_1 > 9 // переменная больше 9 (только целые)
17 > $Var_1 // число 17 больше переменной (только целые)
001C: $Var_1 > $Var_1 // целая переменная 1 больше целой переменной 2,в команде с опкодом нет
// знака < , вместо него используйте >= и меняйте первую цифру опкода на 8 и ставьте
// после опкода слово not ,вот так :
801C: not $Var_1 >= $Var_1 // размыслите логически,если не больше и не равно,то
// естественно меньше
Одним словом все эти знаки называются псевдознаками:
< это not >=
not < это >=
<= это not >
not <= это >
<> это not ==
not <> это ==
0025: $Var_1 > $Var_2 // дробная переменная 1 больше дробной переменной 2 (применяются псевдознаки)
Это заучивать не надо,если сейчас не поняли,то со временем сами догоните...
Ещё можно преобразовывать число одного типа в другой:
0093: $Var_1 = integer_to_float $Var_2 //преобразовывает целую переменную $Var_2 в перемен-
ную с точкой $Var_1,вот допустим $Var_2 = 1000,после выполнения данной опереации $Var_1 бу-
дет равно 1000.0 , можно даже написать вот так:
0093: $Var_1 = integer_to_float $Var_1 // не используя вторую переменную,сразу переводим
целую переменную в переменную с точкой,внизу есть пример по этому поводу.
0092: $Var_2 = float_to_integer $Var_1 // преобразовывает дробную переменную $Var_1 в целую,
т.е. отбрасывает все знаки после запятой.
0094: make $Var_1 absolute_integer // берёт целую переменную и обнуляет её
0097: make $Var_1 absolute_float // берёт дробную переменную и обнуляет её
0099: $Var_1 = random_integer 23 to 65535 // выбирает произвольное целое число на промежутке
// от 23 до 65535
0208: $1 = random_float 0.0 10.0 // выбирает произв. дробное число из диапозона от 0.0 до 10.0
Примеры:
1) Вот давайте я приведу пример скрипта с использованием одного математического дейтвия:
По нажатию "ПРЫЖОК" + "СПРИНТ" к игровому времени будет прибавлятся один час:
create_thread @TimeM // создаём поток с именем TimeM
:TimeM // Начинаем наш поток
wait 0 // ждём 0 мс,если не напишем,то игра вылетит
if and // условие с выполнением всех проверок(подусловий)
00E1: key_pressed 0 14 // проверка (если нажата клавиша "ПРЫЖОК")
00E1: key_pressed 0 16 // проверка (если нажата клавиша "СПРИНТ")
jf @TimeM // если все проверки не выполнились,то переходим на начало
wait 100 // ждём 100 мс,если не напишем небольшую задержку,то игровое время
// будет изменятся с бешеной скоростью(из-за скорости процессора вашего компа)
$time += 1 // тут к переменной $time прибавляем 1
00C0: set_current_time $time 0 // и устанавливаем игровое время на $time
jump @TimeM // и прыгаем в начало
2) Сейчас я привёл пример преобразования дробной переменной в целую:
Скрипт будет измерять расстояние между игроком и домом CJ'я и затем преобразовывать его в
целое и выводить на экран под звёздачками:
create_thread @Dist // создаём поток с именем Dist
:Dist // начинаем поток
wait 10 // ставим задержку,если не поставим,то игра просто вылетит
if // ставим обыкновенное одиночное условие
player.Defined($PLAYER_CHAR) // проверка(игрок существует)
jf @Dist // если игрок ещё не успел создаться,то прыгаем на начало
actor.StorePos($PLAYER_ACTOR,$x,$y,$z) // записываем координаты игрока в переменные
050A: $120 = distance_between 2495.3 -1689.7 14.6 and $x $y $z // эта команда измеряет
// расстояние между координатами игрока и домом CJ'я,но она возвращает дробное значение
0092: $120 = float_to_integer $120 // поэтому его надо преобразовать в целое
04F7: status_text $120 0 line 1 '_GOT00' // выводим текст с одной переменной под звёздач-
// ками,мы используем отфанарное имя GXT записи,для того,чтобы там не было текста
jump @Dist