Введение в синтаксис Lua

Материал из UoPilot
Перейти к навигации Перейти к поиску

Введение

Любой скрипт в UoPilot на языке Lua начинается с --lua в нулевой строке скрипта.
По завершении выполнения скрипт не перезапускается сначала, т.е. выполняется однократно.
Для многократного выполнения используйте циклы/операторы перехода.
Параметры всех функций заключаются в скобки и разделяются запятыми.

Привязка

Для работы многих команд требуется привязать скрипт к целевому окну.
Что бы это сделать поместите пилот поверх окна, разместите курсор мыши над окном и нажмите Ctrl+A.
Также можно использовать функцию findwindow для поиска нужного окна.

Комментарии

-- (два дефиса) - все что после "--" в строке не выполняется.

Переменные

Объявление переменной и присваивание значения.
--lua
local a = 3        -- объявить переменную "a" и присвоить ей значение 3
local b = 5        -- объявить переменную "b" и присвоить ей значение 5 
log (a, b)   -- вывести в лог значение переменной a и b
Переменные чувствительны к регистру.
--lua
local a = 1
local A = 2
log (a, A)  -- a и A это разные переменные
Можно присваивать значения нескольким переменным
--lua
local a, b, c = 3, 1, 6
log (a, b, c)
А так же менять их значения местами.
--lua
local a, b = 10, 35
log (a, b)
a, b = b, a   -- присвоить переменной 'a' значение переменной 'b' и переменной 'b' значение 'a'
log (a, b)
--lua
local a, b, c, d = 11, 22, 33, 44
a, b, c, d = d, c, b, a
log (a, b, c, d)
Переменные могут содержать разные данные.
--lua
local x = 2    -- содержит число
local s = "это строка"   -- любые символы, кроме чисел, заключаются в кавычки "текст" или 'текст'
log (x, s)

Типы данных

1. nil — означает отсутствие данных.
2. boolean — логический тип данных. К нему относятся true (истина) и false (ложь).
3. number — числовой. Десятичный разделитель в Lua — точка.
4. string — строка.
5. function — функция.
6. table — таблица.

Узнать тип данных можно с помощью функции type().

--lua
local a = 15             -- число (тип number)
local b = "UoPilot"      -- строка (тип string) 
local arr = {1, 2, 3}    -- массив (тип table)
local c = a == 15    -- если переменная 'a' равна 15 вернёт true, иначе false (тип boolean)
log (type(a))
log (type(b))
log (type(arr))
log (type(c))

Математические операции

+ (сложение)
- (вычитание)
* (умножение)
/ (деление)
% (остаток от деления)
^ (возведение в степень)
--lua
local x = 10 + 5
log (x)
--lua 
local a = 4
local b = 7
local c = a + b
log (c)
--lua
local d = 4 ^ 3
log (d)

Логические операторы

not (не)
and (и)
or (или)
== (равно)
~= (не равно)
> (больше)
< (меньше)
>= (больше или равно)
<= (меньше или равно)

Условия

Любое условие имеет вид:
if ... then
...
end
--lua
local a = 13
if a == 13 then    -- если переменная 'a' равна 13   
    log ("Условие выполнено, т. к. переменная a равна 13")
end                -- конец условия
--lua
local a = 4
local b = 7 + a
if b == 11 then    -- если переменная 'b' равна 11   
    log ("Переменная b равна 11")
end
--lua
local x, y = 10, 30
if x + y == 40 then    -- если сумма 'x' и 'y' равна 40
    log ("+++")
end   
Условия с else.

else выполняет другое действие, если условие c if не выполнилось.

--lua
local x = 100
if x > 101 then    -- если 'x' больше 101
    log ("x больше 101")
else               -- иначе
    log ("x меньше 101")
end
Условия с elseif.
--lua
local a = 15
local b = 0
if a > 20 then     -- если а больше 20
    b = 3          -- присвоить 3 переменной b
elseif a < 20 then -- если же а меньше 20
    b = 1          -- присвоить 1 переменной b
else               -- иначе
    b = -1         -- присвоить -1 переменной b
end
log (b)
Несколько условий в одном if.
--lua
local x = 5
local y = 7
if x == 5 and y == 7 then    -- если x равен 5 и y равен 7
    log ("+++")
end
--lua
local x = 5
local y = 7
if x == 5 or y == 10 then    -- если x равен 5 или y равен 10
    log ("+++")
end

Циклы

Цикл for.

Выполняет действие заданное количество раз.

--lua
for i=1, 10 do  
    log (i)   -- вывести в лог переменную i
end
--Число 1 — с какого числа надо начинать цикл, 10 — до скольки продолжать.
--lua
for i=1, 10, 2 do    -- с шагом 2
    log (i)   -- вывести в лог переменную i
end
Цикл while.

Выполняет цикл до тех пор, пока заданное условие является истинным.

--lua
local x = 0
while x < 5 do   -- пока x меньше 5
    x = x + 1    -- прибавляем 1 к "x" 
    log (x)
end
Цикл repeat.

Выполняет действие, пока не выполнится заданное условие. В отличии от while всегда выполнится хотя бы один раз.

--lua
local x = 3  
repeat         -- начало цикла  
    x = x + 1
    log (x)  
until x == 6   -- выполнять цикл пока "x" не станет равен 6

Строки

Строка — это текст, записанный в двойных " " или одинарных ' ' кавычках.

--lua
local s1 = "Hello!" 
local s2 = 'Hello!'
log (s1, s2) 

Внутри двойных кавычек можно использовать одинарные и наоборот.

--lua
local s = '"Hello!"' 
local str1 = "'Hello!'" 
log (s)
log (str1)

Конкатенация строк

Соединение строк. Делается с помощью оператора ".." (две точки).

--lua
local a = "qwe"
local b = "rty"
log (a..b)
-- или
local c = a .. b
log (c)
--lua
local a = 10
local b = 12
log ("Переменная a равна "..a..", Переменная b равна "..b)

Использование функций Uopilot

Проверка цвета в точке
--lua
-- в этом примере функция color проверяет цвет в координатах 333, 768 и возвращает полученный цвет
-- if проверяет совпадает ли цвет с указанным (4071168)
-- если цвет совпадает, то в лог будет выведено сообщение что цвет найден
-- иначе сообщение что цвет не найден
if color (333, 768) == 4071168 then
    log ("Цвет найден")
else
    log ("Цвет не найден")
end
Переместить курсор в указанные координаты
--lua
move (150, 330)
Нажатие клавиши
--lua
send ("q")  -- нажать клавишу q, для работы команды требуется привязка

Список всех функций, с примерами их использования

Список функций (Lua)