Справка по языку сценариев; актуально для версии: 4.12.001; дата сборки: 25.03.2016
Если вы нашли неточность или ошибку в справке: пишите нам clickermann@inbox.ru

Содержание

ПЕРЕМЕННЫЕ

Как вы знаете со школы, переменные это такие ячейки памяти, которые содержат какое либо значение, при этом оно может туда помещаться и оттуда извлекаться.
Данная программа так же поддерживает переменные. Они могут содержать в себе числа (целые и с точкой) и строки. Переменные могут участвовать в вычислениях, передаваться в качестве параметров для функций и процедур. Даже если у вас не было в школе информатики, из математики вы прекрасно научились обращаться с переменными.
Имена для переменных могут содержать буквы латинского алфавита, цифры и знак "_" (нижнее подчеркивание). При этом перед именем обязательно должен идти префикс "$", а само имя не должно начинаться с цифры. К примеру, "$my_var1" - вполне допустимое имя для переменной.
Использование переменных предельно простое. Вы просто вместо числовой константы (числа) подставляете переменную. То есть если было "lclick(10, 10)", то станет "lclick(10, $var)". Изучите примеры и вы все поймете.

Особое значение имеют системные переменные. Их имена зарезервированы программой и значения переменных подставляются автоматически при обращении к ним.

Имя переменнойЗначение
$_xmouseПеременная при каждом обращении принимает значение координаты мыши по оси Х
$_ymouseТоже, но для оси У
$_xmaxМаксимально допустимое значение X, вычисляется как ширина разрешения - 1
$_ymaxАналогично для Y
$_return1Переменная используется для возврата в нее значения определенными инструкциями
$_return2Аналогично
$_cursorСодержит код вида указателя мыши
$_msСистемный таймер Windows, отсчитывающий миллисекунды с момента старта ОС
$_time_tТекущее время в формате Unix-систем (подробнее)
$_time_hТекущий час
$_time_mТекущая минута
$_time_sТекущая секунда
$_date_yТекущий год
$_date_mТекущий месяц
$_date_dТекущие число
$_hwndТекущий hwnd (если 0, то привязки к окну нет)

МАССИВЫ

Массив это по сути набор однотипных переменных объединенных общим именем. Каждый элемент массива имеет свой индекс (целое число от нуля), определяющий его место в массиве. Как и переменная, элемент массива может принимать значения и использоваться в вычислениях.
Синтаксис таков. Имя массива такое же как для переменных, например $var. Далее после имени в квадратных скобках указывается индекс элемента. Например

// массив из трех элементов
$var[0] = 1
$var[1] = 2
$var[2] = 3

// вывод суммы элементов
print( $var[0] + $var[1] + $var[2] )
Индекс в квадратных скобках допускает вычисления, поэтому эту же задачу можно было бы решить сложнее
// массив из трех элементов
$var[0] = 1
$var[1] = 2
$var[2] = 3

$result = 0 // накапливаемая сумма

// перебор через цикл элементов массива [0 .. 2]
for($i, $i < 3)
  $result = $result + $var[ $i-1 ]
end_cyc

// вывод суммы элементов
print( $result )
Более полно и детально работа с массивами рассмотрена в соответствующей теме на официальном форуме

КОНСТАНТЫ

Константы играют ту же роль, что и переменные. За тем исключением, что константы нельзя изменить и их префикс "#".
Константы загружаются в программу при запуске из файла %Clickermann%/data/const.txt
Вы можете его править, однако тогда не забывайте делать его копию при скачивании новой версии ПО.

АРИФМЕТИКА

Как было показано в разделе "переменные", в качестве параметров процедур и правой части тождества могут передаваться арифметические выражения. Программа поддерживает стандартные операции сложение "+", вычитание "-", деление "/", умножение "*", а так же скобки "()". В выражениях допускается использовать числовые переменные, константы и числовые функции.
Отдельно упомянем отрицательные значения. Школьная формулировка "2 * (-3)" не подойдет в силу особенностей алгоритмов. То есть два знака подряд не воспринимаются. Необходимо записать это выражение так "2 * (0-3)"
Кроме того, возможно задавать числа в 32-разрядном шестнадцатиричном виде. То есть от 0x0 (0) до 0xFFFFFFFF (4294967295). Это может быть удобно для некоторых команд. Числа в таком представлении так же поддерживают арифметические операции.

Стоит обратить внимание на некоторые особенности:
1) Если программа не сможет выполнить вычисление, она вернет результат как строку
2) Любое выражение, заключенное в двойные кавычки " ", считается строкой, и вычисления с ним не проводятся
3) Большинство функций и процедур, работающих с координатами экрана, принимают в качестве аргументов только целые значения. Если передать им число с точкой, это не вызовет ошибку, но будет считаться, что передан 0. Чтобы избавится от дробной части и избежать этого ньюанса, необходимо воспользоваться функцией INT или ROUND

ФУНКЦИИ И ПРОЦЕДУРЫ

Процедуры, это команды, выполняющие какие либо действия. Процедуры имеют свои собственные имена, могут иметь набор принимаемых параметров. Например, процедура щелчка мышью LCLICK(x,y): lclick - имя, x,y - два параметра, определяющие координаты для дейтсвия
Функции отличаются от процедур тем, что возвращают значение. То есть функции могут быть использованы в качестве параметров процедур, в качестве аргументов других функций, в качестве членов выражений. Функции делятся на строковые (возвращающие строку) и числовые (возвращающие число).
В данной справке, как правило, указано является ли команда функцией или процедурой и приведен пример ее использования.

ДИРЕКТИВЫ ПРЕПРОЦЕССОРА

Это страшное для неподготовленного человека определение означает ряд команд, которые выполняются только в момент загрузки скрипта и в дальнейшем в работе не участвуют.

ДирективаЗначениеПример
#nameПозволяет задать скрипту имя, которое будет отображаться рядом с названием программы.#name "СуперБот v1.2"
#includeВставляет в это место содержимое текстового файла из папки проекта. Это позволяет "прятать" объемный код, повышая таким образом читаемость скрипта.#include "mylib.cms"
#logfileВключает ведение лог-файла в папке проекта, куда дублируется весь вывод через logwrite / print#logfile
#autorunСценарий начинает выполняться сразу после загрузки#autorun
#ps2_keyboardВключает режим PS/2 клавиатуры#ps2_keyboard
#ps2_mouseВключает режим PS/2 мыши#ps2_mouse
#defineобъявляет макроссм.ниже

МАКРОСЫ ПРЕПРОЦЕССОРА

Фактически, макрос это команда препроцессору заменить что-то на что-то согласно шаблону. Это позволяет программисту немного пофантазировать на тему синтаксиса скриптов. На самом деле вы можете "провернуть" простейший макрос и руками через "заменить все", однако макросы дают ряд преимуществ. Рассмотрим синтаксис.

#define find:replace
find и replace две строки, разделенные двоеточием. Эта запись означает что по всему скрипту строка find будет заменена на replace. Простейший пример, переименования lclick в clk:
#define clk:lclick

clk(10,10)
clk(20,20)
Этот выполнится, поскольку препроцессор заменит clk на приемлемый lclick. Альтернативный вариант, когда параметры помещаются в макрос (правда теряется вариативность аргументов):
#define clk:lclick(10,10)

clk
clk
Ну и на последок, использование макроса в качестве аргумента. Здесь, как вы видите "rand10" является псевдонимом для функции "rnd(1,10)" и используется для подстановки в клики:
#define rand10:rnd(1,10)

lclick( rand10, 5 )
lclick( rand10, 8 )

ПРИМЕРЫ

// вывод чисел и строк
print(5)		// 5
print(5 + 5)	// 10
print("5 + 5")	// 5+5
print(0xff * 2)	// 510

// с точкой
$var = 2.5
print($var * 2)	// 5

// сложное вычисление (функция в функции)
$result = round(sin(30) * 2, -2)
print( $result )	// - 1.98

// помещение курсора в точку 5;10
// strlen возвращает длину строки "qwert" - 5 символов
move( strlen("qwert"), 10)

// здороваемся с миром, меняя значение $object можно поздороваться
// еще с кем нибудь
$object = rndfrom("world", "Vasya", "new day")
print( strconcat("Hello, ", $object, "!") )

// движение курсора хаотично, параметр Х (первый аргумент move) вычисляется 
// и принимает значения 10,20,30,40 или 50
move ( rnd(1,5) * 10, 50 )

// школьная шутка про "два плюс два умножить на два" (приоритет операций). оба решения
print( (2+2)*2  )	// = 8

print( 2+2*2  )		// = 6