Post by BotsOFF on Jun 7, 2020 15:41:47 GMT
Если базовых функций недостаточно, для выполнения тех или иных задач, то в AnkuLua есть специальные функции.
zoom(pt1StartX, pt1StartY, pt1EndX, pt1EndY, pt2StartX, pt2StartY, pt2EndX, pt2EndY, step): Функция позволяет из одной начальной точки с координатами (pt1StartX, pt1StartY) перемещаться в конечную (pt1EndX, pt1EndY) в то время как из другой начальной точки (pt2StartX, pt2StartY) идет перемещение в другую конечную (pt2EndX, pt2EndY) с указанным шагом.
Следующий пример, уменьшит масштаб экрана
continueClick(x, y, xRandom, yRandom, times): Эта функция будет кликать в течении указанного времени в области с координатами верхнего левого угла (x, y) на ширину и высоту (x + xRandom, y + yRandom).
Обычно эта функция не достаточно быстра.
Если действительно нужны быстрые нажатия в определенной области, то используйте функцию continuedClick().
В качестве примера Tap Titans Click
continueClick(PSMRL, times [,timeout]): Данная функция также поддерживает объекты PSRML и параметры тайм-аута. Возвращаемое значение отсутствует.
continueClick можно вызывать напрямую или из объекта Region().
timeout время ожидания, в секундах с точностью до миллисекунд. 1.003 означает 1 секунду и 3 миллисекунды.
setContinueClickTiming(downMs, intervalMs): Позволяет настраивать функцию описанную выше. downMs: удерживать нужное количество времени (в миллисекундах), intervalMs: интервал между нажатиями (в миллисекундах)
continueMultiTouch(table of PSMRL, times [,timeout]): Эта функция используется сразу для нескольких нажатий. Нажимаются объекты таблицы PSMRL. Каждый объект будет нажиматься нужное время. Если объектами таблицы являются PS (Pattern или String), то в каждом из них будет выполняться поиск, что увеличит время между нажатиями.
Если значение тайм-аута не задано, по умолчанию будет используется время поиска. continueMultiTouch не может быть вызван из объекта Region().
Настройки времени continueMultiTouch() так же устанавливаются с помощью setContinueClickTiming().
longClick(PSMRL [,seconds]), stopLongClick(): Функция longClick делает клик и удерживает его. Если параметр second задан, то удержание будет происходить указанное время. Если параметр seconds отсутствует, то longClick будет работать до следующего нажатия или до использования stopLongClick().
numberOCR( region, imagePrefix): Данная функция определяет числа, основываясь на распознавании OCR в заданной области. Примеры чисел должны быть записаны как imagePregix0.png, imagePrefix1.png ... imagePrefix9.png
Если число не будет найдено, будет выдана ошибка. Пример использования Heroes Charge: Booty Cave.
Сама функция описана в 15 строке кода
Изображения чисел power0.png, power1.png ... power9.png в подкаталоге image.
numberOCRNoFindException(region, imagePrefix): Данная функция идентична numberOCR, только в случае отсутствия результата она не выдаст ошибку. Функция возвращает два значения. Первое значение это найденное число, второе значение это логическое true.
getColor(PSMRL [, seconds]): Данная функция возвращает 3 значения (R, G, B) конкретной координаты на экране.
Для повышения эффективности AnkuLua преобразует изображения в оттенки серого перед выполнением распознавания, поэтому AnkuLua трудно отличить изображение цветное или нет.
В некоторых играх кнопка может быть просто серая, что затрудняет понимание ее состояния. В этом случае использование данной функции помогает понять изображение намного лучше.
getTouchEvent(): Функция ожидает от пользователя любого касания экрана, после чего возвращает результат. getTouchEvent() возвращает три значения.
action(string): тип касания (распознается только в AnkuLua) "click", "longClick", "swipe" и "dragDrop".
location(Location (Table)): Если action было "click" или "longClick", вернется значение одной координаты. Если "swipe" или "dragDrop", вернется таблица с начальными и конечными результатами.
touchList (Table): Таблица более детальных нажатий, где каждый элемент имеет данные вида {touchType, time, locaiton}
touchType: целое число 1, 2 или 3 определяющее действие вниз, вверх и перемещение соответственно.
time: время, когда происходит детальное нажатие. Оно отсчитывается от события.
location: координаты.
Поскольку AnkuLua определяет только простые действия, в скрипте можно использовать touch List, чтобы сделать более сложный ответ.
Примечание: при запуске getTouchEvent() все нажатия будут обрабатываться только данной функцией, и вы не сможете параллельно управлять экраном.
При работе данной функции, getTouch Event() заполняет экран прозрачным цветом. Цвет может быть выбран с помощью setTouchEventStyle(color). Цветовым форматом является ARGB.
playMusic(file, loop): Воспроизведение файла однократно (loop = false) или многократно (loop = true). Эта функция доступна только в Pro версии.
Поместите музыкальный файл в папку "music". Путь к файлу указывать не нужно.
stopMusic(): Останавливает воспроизведение файла. Эта функция доступна только в Pro версии.
vibrate(seconds): Включает вибрацию прибора на определенное количество времени. Эта функция доступна только в Pro версии.
setVolumeDetect(boolean): Включает или выключает обнаружение нажатия клавиш громкости. Функции isVolumeUp() и isVolumeDown() только отражают изменение уровня громкости, когда обнаружение включено. Если обнаружение выключено, isVolumeUp() и isVolumeDown() всегда возвращают значение false.
isVolumeUp() and isVolumeDown(): Проверяют изменение громкости (включая музыку и звонки). Этот метод доступен только в Pro версии.
Примечание: на некоторых устройствах первое нажатие клавиши громкости просто показывает текущий уровень громкости. Поэтому для изменения уровня, необходимо нажать еще раз.
Timer: С помощью таймера, можно узнать время затраченное на какую-либо функцию.
Предусмотрены следующие функции:
set(): Возвращает значение времени в секундах с начала отсчета или предыдущего вызова и затем сбрасывает таймер.
check(): Возвращает значение времени в секундах с начала отсчета или предыдущего вызова и не сбрасывает таймер.
Пример скрипта, с остановкой через 30 минут:
setScanInterval(seconds), setScanRate(frequency), getScanInterval(), getScanRate(): Задает интервал или частоту сканирования. Частота - обратна интервалу.
Для сканирования экрана каждые 4 секунды, используйте один из следующих вариантов:
Примечание: все методы и функции связанные со сканированием экрана, ограничены по времени в пробной версии.
setBrightness(value), getBrightness(): Устанавливает яркость экрана. Значение должно быть от 0 до 255.
Примечание: функция setBrightness() ограничена по времени в пробной версии.
getNetworkTime(): Возвращает сетевое значение времени (long int).
Обратитесь к следующему сайту для определения сетевого времени www.lua.org/pil/22.1.html
Примечание: в Lua сетевое время указывается в секундах, а в getNetworkTime() оно указывается в миллисекундах.
Используйте следующий скрипт для перевода сетевого времени в локальное.
scriptExit(String message): Функция останавливает скрипт и показывает сообщение в диалоговое окне.
setStopMessage(String message): Показывает сообщение в диалоговом окне после остановки скрипта, независимо от причины остановки: нормальный выход, остановка пользователем, scriptExit() или ошибка.
Новое значение будет заменять предыдущее. Оно может быть использовано для отображения окончательного результата скрипта. Например, следующий пример будет показывать только "Win 2, lose 0".
chargerConnected(): Возвращает статус подключения зарядного устройства (true) или нет (false)
batteryLevel(): Возвращает уровень заряда аккумулятора в процентах (1~100).
isEmulator(): Возвращает статус, если устройство является платформенным (true) или нет (false)
typeOf(variable): Используется для проверки типа переменной, поскольку метод type() в Lua переопределен на метод строкового ввода. Либо можно изменить type() на Lua оригинального использования следующим примером. Функция ввода строки будет изменен на keyin()
startApp(String packageName), killApp(String packageName): Запуск и закрытие приложения с именем packageName.
Имя приложения это строка после "id=" в ссылке на google play.
Например ссылка на пробную версию AnkuLua:
play.google.com/store/apps/details?id=com.appautomatic.ankulua.trial
И имя приложения com.appautomatic.ankulua.trial
Примечание: функция startApp ограничена в пробной версии.
unzip(String fileName[, String directory [, String encoding]): Распаковывает файл с именем fileName в каталог directory. При наличии кодировки encoding, имя файла будет в формате кодировки.
directory: каталог для распаковки. Если каталог не указан, по умолчанию будет использоваться каталог скрипта.
Рекомендуется использовать английские буквы в имени архива, либо использовать кодировку для назначения имени файла.
isRecoveredFromKilled(): Проверяет, не выгрузил Android из памяти AnkuLua, при необходимости запускает заново. Возвращает значения true или false.
В этом случае dialogShow() и dialogShowFullScreen() не будут отображаться, а будут использованы предыдущие их значения.
setRecoveredFromKilled(): Форсирует состояние, при котором Android выгрузил из памяти AnkuLua, и повторно запускает скрипт автоматически. Можно использовать для тестирования скрипта в таком состоянии, поскольку его трудно воспроизвести.
halfCompareDimension(): Функция проверяет, запущен ли скрипт в состоянии полусравнения, и если да, возвращает true.
Параметр полусравнения, можно найти в настройках AnkuLua.
Сетевые функции
setHttpTimeout(Int seconds): Установите время ожидания сервера в секундах. Чем больше время ожидания, тем больше необходимо выставить значение.
Примечание: для использования любых методов связанных с выходом в сеть, необходимо включить соответствующий параметр в настройках AnkuLua.
httpGet(String url): Функция вернет строковое значение url
Примечание: всегда добавляйте http или https перед ссылкой
httpPost(String url, Table param): Функция будет работать с веб-сайтом в режиме Post. Параметры ключевых значений должны быть помещены в таблицу.
Разницу между Get и Post, можно найти в интернете.
httpDownload(String url, String fileName): Функция скачает файл по ссылке url и сохранит его с именем fileName.
sendEmail(String subject, String message): Функция отправит сообщение получателю, согласно выставленным настройкам в AnkuLua.
Перед использованием этой функции, установите необходимые параметры в настройках AnkuLua.
Примечание для пользователей GMail: Проверьте параметры вашего почтового сервера.
Если вы включите двух этапную проверку, сначала введите пароль в приложение.
support.google.com/mail/answer/185833
Если вы не включили двух этапную проверку, нужно включить менее безопасный доступ к приложению.
myaccount.google.com/lesssecureapps
setExceptionEmail(String subject, String message): Функция будет отправлять электронные письма при ошибках или остановки скрипта.
В электронном письме будет содержаться только диалоговые надписи.
Как и для sendEmail(), установите необходимые параметры в настройках AnkuLua.
[Вперед]: Компиляция и шифрование скриптов
[Назад]: Функции пользовательского интерфейса
[Главная]: AnkuLua. Введение
zoom(pt1StartX, pt1StartY, pt1EndX, pt1EndY, pt2StartX, pt2StartY, pt2EndX, pt2EndY, step): Функция позволяет из одной начальной точки с координатами (pt1StartX, pt1StartY) перемещаться в конечную (pt1EndX, pt1EndY) в то время как из другой начальной точки (pt2StartX, pt2StartY) идет перемещение в другую конечную (pt2EndX, pt2EndY) с указанным шагом.
Следующий пример, уменьшит масштаб экрана
-- ========== Settings ================
Settings:setCompareDimension(true, 1280)
Settings:setScriptDimension(true, 1280)
-- ========== main program ===========
zoom(50, 350, 330, 350, 1200, 350, 350, 350, 300)
continueClick(x, y, xRandom, yRandom, times): Эта функция будет кликать в течении указанного времени в области с координатами верхнего левого угла (x, y) на ширину и высоту (x + xRandom, y + yRandom).
Обычно эта функция не достаточно быстра.
Если действительно нужны быстрые нажатия в определенной области, то используйте функцию continuedClick().
local p = find("target.png")
continueClick(p:getX(), p:getY(), 1, 1, 100)
В качестве примера Tap Titans Click
continueClick(PSMRL, times [,timeout]): Данная функция также поддерживает объекты PSRML и параметры тайм-аута. Возвращаемое значение отсутствует.
continueClick можно вызывать напрямую или из объекта Region().
timeout время ожидания, в секундах с точностью до миллисекунд. 1.003 означает 1 секунду и 3 миллисекунды.
setContinueClickTiming(downMs, intervalMs): Позволяет настраивать функцию описанную выше. downMs: удерживать нужное количество времени (в миллисекундах), intervalMs: интервал между нажатиями (в миллисекундах)
continueMultiTouch(table of PSMRL, times [,timeout]): Эта функция используется сразу для нескольких нажатий. Нажимаются объекты таблицы PSMRL. Каждый объект будет нажиматься нужное время. Если объектами таблицы являются PS (Pattern или String), то в каждом из них будет выполняться поиск, что увеличит время между нажатиями.
Если значение тайм-аута не задано, по умолчанию будет используется время поиска. continueMultiTouch не может быть вызван из объекта Region().
Настройки времени continueMultiTouch() так же устанавливаются с помощью setContinueClickTiming().
-- пример для calculator plus
png7 = find("7.png")
loc1 = find("1.png"):getTarget()
list = {Pattern("6.png"), png7, "8.png", loc1}
continueMultiTouch(list, 2)
-- the result is 67816781
longClick(PSMRL [,seconds]), stopLongClick(): Функция longClick делает клик и удерживает его. Если параметр second задан, то удержание будет происходить указанное время. Если параметр seconds отсутствует, то longClick будет работать до следующего нажатия или до использования stopLongClick().
longClick("target.png", 2) -- нажимаем и удерживаем 2 секунды
longClick("target.png") -- нажимаем и удерживаем до определенных команд
-- выполняем скрипт без каких либо касаний экрана
--
stopLongClick() -- теперь вы отпускаем ранее нажатие на экран
longClick("target.png") -- нажимаем и удерживаем до определенных команд
click("target2.png") -- отпускаем удержание цели и нажимаем на вторую
numberOCR( region, imagePrefix): Данная функция определяет числа, основываясь на распознавании OCR в заданной области. Примеры чисел должны быть записаны как imagePregix0.png, imagePrefix1.png ... imagePrefix9.png
Если число не будет найдено, будет выдана ошибка. Пример использования Heroes Charge: Booty Cave.
Сама функция описана в 15 строке кода
local p = numberOCR(r,"power")
Изображения чисел power0.png, power1.png ... power9.png в подкаталоге image.
numberOCRNoFindException(region, imagePrefix): Данная функция идентична numberOCR, только в случае отсутствия результата она не выдаст ошибку. Функция возвращает два значения. Первое значение это найденное число, второе значение это логическое true.
getColor(PSMRL [, seconds]): Данная функция возвращает 3 значения (R, G, B) конкретной координаты на экране.
Для повышения эффективности AnkuLua преобразует изображения в оттенки серого перед выполнением распознавания, поэтому AnkuLua трудно отличить изображение цветное или нет.
В некоторых играх кнопка может быть просто серая, что затрудняет понимание ее состояния. В этом случае использование данной функции помогает понять изображение намного лучше.
r, g, b = getColor("target.png")
if (r == b and r == g) then -- изображение серое
getTouchEvent(): Функция ожидает от пользователя любого касания экрана, после чего возвращает результат. getTouchEvent() возвращает три значения.
action(string): тип касания (распознается только в AnkuLua) "click", "longClick", "swipe" и "dragDrop".
location(Location (Table)): Если action было "click" или "longClick", вернется значение одной координаты. Если "swipe" или "dragDrop", вернется таблица с начальными и конечными результатами.
touchList (Table): Таблица более детальных нажатий, где каждый элемент имеет данные вида {touchType, time, locaiton}
touchType: целое число 1, 2 или 3 определяющее действие вниз, вверх и перемещение соответственно.
time: время, когда происходит детальное нажатие. Оно отсчитывается от события.
location: координаты.
Поскольку AnkuLua определяет только простые действия, в скрипте можно использовать touch List, чтобы сделать более сложный ответ.
Примечание: при запуске getTouchEvent() все нажатия будут обрабатываться только данной функцией, и вы не сможете параллельно управлять экраном.
При работе данной функции, getTouch Event() заполняет экран прозрачным цветом. Цвет может быть выбран с помощью setTouchEventStyle(color). Цветовым форматом является ARGB.
action, locTable, touchTable = getTouchEvent()
print (action)
if (action == "click" or action == "longClick") then
print (locTable)
else
print (locTable[1])
print (locTable[2])
end
for i, t in ipairs(touchTable) do
print (string.format("%s: %fs, %s", t[1], t[2], t[3]:toString()))
end
playMusic(file, loop): Воспроизведение файла однократно (loop = false) или многократно (loop = true). Эта функция доступна только в Pro версии.
Поместите музыкальный файл в папку "music". Путь к файлу указывать не нужно.
playMusic("music.mp3", false)
stopMusic(): Останавливает воспроизведение файла. Эта функция доступна только в Pro версии.
vibrate(seconds): Включает вибрацию прибора на определенное количество времени. Эта функция доступна только в Pro версии.
setVolumeDetect(boolean): Включает или выключает обнаружение нажатия клавиш громкости. Функции isVolumeUp() и isVolumeDown() только отражают изменение уровня громкости, когда обнаружение включено. Если обнаружение выключено, isVolumeUp() и isVolumeDown() всегда возвращают значение false.
isVolumeUp() and isVolumeDown(): Проверяют изменение громкости (включая музыку и звонки). Этот метод доступен только в Pro версии.
Примечание: на некоторых устройствах первое нажатие клавиши громкости просто показывает текущий уровень громкости. Поэтому для изменения уровня, необходимо нажать еще раз.
setVolumeDetect(true)
while (true) do
if (isVolumeUp()) then toast("Volume up") end
if (isVolumeDown()) then toast("Volume down") end
end
Timer: С помощью таймера, можно узнать время затраченное на какую-либо функцию.
Предусмотрены следующие функции:
set(): Возвращает значение времени в секундах с начала отсчета или предыдущего вызова и затем сбрасывает таймер.
check(): Возвращает значение времени в секундах с начала отсчета или предыдущего вызова и не сбрасывает таймер.
t = Timer()
wait(1)
print(t:check())
wait(1.2)
print(t:check())
wait(1.3)
print(t:set())
wait(1.5)
print(t:check())
Пример скрипта, с остановкой через 30 минут:
timer = Timer() -- Запустили таймер
-- выполнение какого-либо кода
if (timer:check > 30*60) then
scriptExit(скрипт работает более 30 минут) -- или установите свои параметры
end
setScanInterval(seconds), setScanRate(frequency), getScanInterval(), getScanRate(): Задает интервал или частоту сканирования. Частота - обратна интервалу.
Для сканирования экрана каждые 4 секунды, используйте один из следующих вариантов:
setScanInterval(4)
setScanRate(1/4)
getScanInterval() и getScanRate() возвращают соответствующие значения.Примечание: все методы и функции связанные со сканированием экрана, ограничены по времени в пробной версии.
setBrightness(value), getBrightness(): Устанавливает яркость экрана. Значение должно быть от 0 до 255.
Примечание: функция setBrightness() ограничена по времени в пробной версии.
getNetworkTime(): Возвращает сетевое значение времени (long int).
Обратитесь к следующему сайту для определения сетевого времени www.lua.org/pil/22.1.html
Примечание: в Lua сетевое время указывается в секундах, а в getNetworkTime() оно указывается в миллисекундах.
Используйте следующий скрипт для перевода сетевого времени в локальное.
local temp = os.date("*t", getNetworkTime() / 1000)
print (temp.year)
print (temp.month)
print (temp.day)
print (temp.hour)
scriptExit(String message): Функция останавливает скрипт и показывает сообщение в диалоговое окне.
setStopMessage(String message): Показывает сообщение в диалоговом окне после остановки скрипта, независимо от причины остановки: нормальный выход, остановка пользователем, scriptExit() или ошибка.
Новое значение будет заменять предыдущее. Оно может быть использовано для отображения окончательного результата скрипта. Например, следующий пример будет показывать только "Win 2, lose 0".
setStopMessage("Win 1, lose 0")
......
setStopMessage("Win 2, lose 0")
scriptExit("Exit")
chargerConnected(): Возвращает статус подключения зарядного устройства (true) или нет (false)
batteryLevel(): Возвращает уровень заряда аккумулятора в процентах (1~100).
isEmulator(): Возвращает статус, если устройство является платформенным (true) или нет (false)
typeOf(variable): Используется для проверки типа переменной, поскольку метод type() в Lua переопределен на метод строкового ввода. Либо можно изменить type() на Lua оригинального использования следующим примером. Функция ввода строки будет изменен на keyin()
keyin = type
type = typeOf
startApp(String packageName), killApp(String packageName): Запуск и закрытие приложения с именем packageName.
Имя приложения это строка после "id=" в ссылке на google play.
Например ссылка на пробную версию AnkuLua:
play.google.com/store/apps/details?id=com.appautomatic.ankulua.trial
И имя приложения com.appautomatic.ankulua.trial
Примечание: функция startApp ограничена в пробной версии.
unzip(String fileName[, String directory [, String encoding]): Распаковывает файл с именем fileName в каталог directory. При наличии кодировки encoding, имя файла будет в формате кодировки.
directory: каталог для распаковки. Если каталог не указан, по умолчанию будет использоваться каталог скрипта.
Рекомендуется использовать английские буквы в имени архива, либо использовать кодировку для назначения имени файла.
isRecoveredFromKilled(): Проверяет, не выгрузил Android из памяти AnkuLua, при необходимости запускает заново. Возвращает значения true или false.
В этом случае dialogShow() и dialogShowFullScreen() не будут отображаться, а будут использованы предыдущие их значения.
setRecoveredFromKilled(): Форсирует состояние, при котором Android выгрузил из памяти AnkuLua, и повторно запускает скрипт автоматически. Можно использовать для тестирования скрипта в таком состоянии, поскольку его трудно воспроизвести.
halfCompareDimension(): Функция проверяет, запущен ли скрипт в состоянии полусравнения, и если да, возвращает true.
Параметр полусравнения, можно найти в настройках AnkuLua.
Сетевые функции
setHttpTimeout(Int seconds): Установите время ожидания сервера в секундах. Чем больше время ожидания, тем больше необходимо выставить значение.
Примечание: для использования любых методов связанных с выходом в сеть, необходимо включить соответствующий параметр в настройках AnkuLua.
httpGet(String url): Функция вернет строковое значение url
result = httpGet("http://google.com") -- всегда добавляйте http в url
Примечание: всегда добавляйте http или https перед ссылкой
httpPost(String url, Table param): Функция будет работать с веб-сайтом в режиме Post. Параметры ключевых значений должны быть помещены в таблицу.
Разницу между Get и Post, можно найти в интернете.
params = {param1="Parameter1", param2="This is parameter 2" }
result = httpPost("http://httpbin.org/post", params)
print (result)
httpDownload(String url, String fileName): Функция скачает файл по ссылке url и сохранит его с именем fileName.
httpDownload("https://www.google.com.tw/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png", "/sdcard/google.png")
sendEmail(String subject, String message): Функция отправит сообщение получателю, согласно выставленным настройкам в AnkuLua.
Перед использованием этой функции, установите необходимые параметры в настройках AnkuLua.
sendEmail("Subject", "Message")
Примечание для пользователей GMail: Проверьте параметры вашего почтового сервера.
Если вы включите двух этапную проверку, сначала введите пароль в приложение.
support.google.com/mail/answer/185833
Если вы не включили двух этапную проверку, нужно включить менее безопасный доступ к приложению.
myaccount.google.com/lesssecureapps
setExceptionEmail(String subject, String message): Функция будет отправлять электронные письма при ошибках или остановки скрипта.
В электронном письме будет содержаться только диалоговые надписи.
Как и для sendEmail(), установите необходимые параметры в настройках AnkuLua.
setExceptionEmail("Subject", "Message")
[Вперед]: Компиляция и шифрование скриптов
[Назад]: Функции пользовательского интерфейса
[Главная]: AnkuLua. Введение