Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: SeiSu on August 23, 2018, 11:50:45 PM
-
Добрый день. Возникла идея, не столько необходимая, сколько спортивно интересная.
Есть, значится, игра на андроид(запускаю на компьютере через блюстакс), в этой игре, как и во многих других есть донат который можно получить за просмотр рекламы. Там по экрану плывет кораблик, и на него надо успеть кликнуть, тогда реклама откроется, и иногда после просмотра самой рекламы выпадает окно с ошибкой, на которой надо нажать кнопку, вот в кораблике то и заключается сложность.
[spoiler]
скрин https://pp.userapi.com/c845521/v845521626/d07bb/_agpa0XzCmg.jpg (https://pp.userapi.com/c845521/v845521626/d07bb/_agpa0XzCmg.jpg)
скрин https://pp.userapi.com/c845521/v845521626/d07c4/VNauRbOPYa4.jpg (https://pp.userapi.com/c845521/v845521626/d07c4/VNauRbOPYa4.jpg)
[/spoiler]
Необходим следующий скрипт:
- Скрин и анализ правого верхнего угла(если там иконка чата(1), то ничего не делать, если там не эта иконка, то жмакать до момента её появления);
- скрин и анализ всей нижней части экрана на предмет поиска движущегося объекта(2) (если объекта нет - ничего не делать, если есть - жмакнуть в центр самого объекта(3), а не экрана);
- Скрин и анализ середины экрана на поиск уведомления с кнопкой(4), как и в предыдущих случаях, если там ничего нет - пропуск действия, если есть кнопка - нажать.
Как сие можно организовать? Буду благодарен за любую помощь.
З.Ы. на летающем кораблике все время меняется изображение, так что думаю, логично будет фильтровать его по цвету обрамления, бежевому.
-
Создавал я эту тему ничего не зная о кликере и писании скриптов, спустя пару-тройку часов на меня снизошло озарение, и я сделал следующее:
GETSCREEN
IF_PICTURE_IN (1203,51, 1269,115, "pic_to_clc\Chat.bmp", -1, 100) //скан иконки чата
WAIT(1)
LCLICK(1070, 558) //если есть, клацаем в центр экрана в ожидании кораля с рекламой
ELSE //если нет, то
IF_PICTURE_IN (455,478, 903,532, "pic_to_clc\Error.bmp", -1, 100) //скан на наличие окна с ошибкой
LCLICK(555, 508) //если есть, то клацаем по ошибке
WAIT(1)
ELSE //если нет, то
LCLICK(1233, 81) //клацаем на крестик закрытия рекламы
WAIT(1)
END_IF
END_IF
В принципе, оно работает, ибо довольно простенькое, однако(всегда есть "однако"). Есть реклама, которая неверно отображается(чёрным экраном) и лечится только переоткрытием самого приложения. При добавлении в скрипт вот такой штуки:
ELSE //если нет, то
IF_PICTURE_IN (84,49, 1277,719, "pic_to_clc\BR.bmp", -1, 100) //скан на наличие чёрного экрана
WAIT(5)
LCLICK(518, 16) //закрываем игру
WAIT(5)
LCLICK(405, 177) //запускаем заново
WAIT(5)
кликермен зависает, и закрыть его можно только через диспетчер задач.
И у меня осталась пара вопросов: Оно же постоянно скринит экран? Эти скрины куда-то сохраняются и засоряют память? Как их после каждой проверки удалять?
Как сделать так, чтобы после, например, 10 минут ожидания корабля(если пропала реклама) вылетало окно с ошибкой, мол всё, реклама закончилась. Примерно так: 10 минут сканит и 10 минут видит чат - всё, тормозим, ошибка.
-
Он не зависает а занят поиском твоей картинки. Вероятно картинка довольно большая. Ориентируйся на размер 50х50 = 2500 пикселов.
Чем больше пикселов в картинке тем дольше поиск. И пока функция ищет кликер не может остановить выполнение.
Черный экран можно определить и другим способом, например подсчетом пикселов определенного цвета
GETSCREEN
IF(PXLCOUNT(100,100, 500,500, 0) > 1000)
// действие если в зоне 100,100, 500,500 более 1000 черных (0) пикселов
END_IF
Кликер делает снимки в свой буфер в оперативной памяти. Буфер каждый раз после вызова GETSCREEN переписывается. Так что ничего у тебя там не захламляется.
GETSCREEN
IF_PICTURE_IN (1203,51, 1269,115, "pic_to_clc\Chat.bmp", -1, 100) //скан иконки чата
WAIT(1)
LCLICK(1070, 558) //если есть, клацаем в центр экрана в ожидании кораля с рекламой
DEFINE($time, $_time_t + 600) // Создаем таймер на 10 минут. DEFINE создает переменную только если её не существует
IF($time < $_time_t) // если записанное время в переменой $time стало меньше текущего времени системной переменной $_time_t
HALT // стоп или другие действия
END_IF
ELSE //если нет, то
IF_PICTURE_IN (455,478, 903,532, "pic_to_clc\Error.bmp", -1, 100) //скан на наличие окна с ошибкой
LCLICK(555, 508) //если есть, то клацаем по ошибке
WAIT(1)
UNDEFINE($time) // Удаляем переменную. В этом случае DEFINE снова сможет создать переменную $time и присвоить значение + 10 минут к текущему времени.
ELSE //если нет, то
LCLICK(1233, 81) //клацаем на крестик закрытия рекламы
WAIT(1)
UNDEFINE($time) // Удаляем переменную
END_IF
END_IF
-
Спасибо за ответ. Поковырялся, сделал вот это:
GETSCREEN
IF_PICTURE_IN (1203,51, 1269,115, "pic_to_clc\Chat.bmp", -1, 100) //скан иконки чата
WAIT(1)
LCLICK(1070, 558) //если есть, клацаем в центр экрана в ожидании корабля с рекламой
DEFINE($time, $_time_t + 240) //ставим таймер на 4 минуты
IF($time < $_time_t) //если да, то
HALT //стоп
HINTPOPUP("Реклама закончилась.", "Стоямба, Барсик") //вывод сообщения
END_IF
ELSE //если нет, то
IF_PICTURE_IN (455,478, 903,532, "pic_to_clc\Error.bmp", -1, 100) //скан на наличие окна с ошибкой
LCLICK(555, 508) //если есть, то клацаем по ошибке
WAIT(15)
ELSE //если нет, то
LCLICK(1233, 81) //клацаем на крестик закрытия
WAIT(1)
UNDEFINE($time) //значит реклама появилась и можно сбросить таймер
END_IF
END_IF
WAIT(1)
IF($time2 < $_time_t)
$time2 = $_time_t + 60 //проверка на черный экран раз в 5 минут
GETSCREEN
IF_PICTURE_IN (600,600, 630,630, "pic_to_clc\BR.bmp", -1, 100) //скан на наличие чёрного экрана
WAIT(15) //если находит - ждем 15 секунд, затем ещё раз проверяем
IF_PICTURE_IN (600,600, 630,630, "pic_to_clc\BR.bmp", -1, 100) //повторная проверка, если находим, то
LCLICK(518, 16) //закрываем игру
WAIT(5)
LCLICK(405, 177) //запускаем заново
WAIT(10)
ELSE //если повторная проверка ничего не нашла, то
WAIT(1)
END_IF
END_IF
END_IF
WAIT(1)
Всё работает, можно ли это как-то оптимизировать, или и так сойдет?
-
IF_PICTURE_IN (600,600, 630,630, "pic_to_clc\BR.bmp", -1, 100) //повторная проверка, если находим, то
А с чего б не найти то, ведь нового снимка то не делали! Где GETSCREEN?