Статья не претендует на нобелевскую премию и какие-то научные достижения, просто я сделал два варианта для автоматического просмотра рекламы и друзьям это понравилось, вот и решил написать эту статью.
Потому что роботы должны работать, а не вот так.
Я с детства был фанатом одной гоночной серии и когда нашел её новую мобильную версию, да ещё и бесплатно — обрадовался и удивился. Хотя довольно скоро понял, почему она бесплатная — внутри-игровые покупки тянут на несколько средних месячных зарплат в регионах или одну-две московских, они буквально стоят как игры ААА-класса последнего времени. Без вливания реальных денег процесс шел крайне медленно. Но можно смотреть рекламу и особенно в начале игры это даёт хорошую прибавку во всем, только быстро надоедает. Особенно когда одна и та же реклама показывается 5-10 раз подряд. И кнопки находятся (в 99.9% случаев) в одних и тех же местах. Собственно последнее меня и заставило вспомнить, что у меня есть несколько серво машинок и ардуинок и такую действительно механическую работу нужно доверить механизму.
Схема довольно простая:
Желтый (или рыжий, у кого как) провод сервок — к 10 и 11 пинам ардуинки,
с неё +5В и землю, на землю же надо подвести рычажки сервок (экран ёмкостной).
А вот код заработал не сразу:
#include <Servo.h>
Servo servo1;
Servo servo2;
void setup() {
servo1.attach(10);
servo2.attach(11);
pinMode(LED_BUILTIN, OUTPUT);
}
void blynk(int cnt) {
for (int i = 1; i <= cnt; i++) {
digitalWrite(LED_BUILTIN, HIGH);
delay(11);
digitalWrite(LED_BUILTIN, LOW);
delay(11);
}
}
void hitit(Servo servo, int wait) {
servo.write(180);
delay(500);
servo.write(90);
for (int i = 1; i <= wait; i++) {
delay(1000);
blynk(1);
}
}
void loop() {
blynk(2);
hitit(servo1, 35); // click get stuff and wait for adverts
blynk(4);
hitit(servo2, 15); // close advert
blynk(2);
hitit(servo1, 10); // click collect reward
delay(2000);
}
Позже я вспомнил/узнал что тут крайне маленького размера тип INT и delay(35*1000) не работает.
Ну и ладно, сделал чтоб мигали каждую секунду, это forfun проект, копаться сильно не хотел в тот момент. И я всё ещё крайне избегаю всего что связано с С++ и строгими типами, ну не моё это.
С помощью кучи визиток подогнал сервы по высоте под телефон.
Также я могу наконец сказать что использую тот спорт инвентарь, что мне дарят, по крайней мере коробка от него пригодилась.
Самым сложным было сделать чтобы экран реагировал на нажатия рычажков сервок без пальцев. Друзья уже говорили что проще найти (или добыть) настоящий человеческий палец, чем все мои опыты. Пробовал антистатическую пленку (ту в которую упаковывают видеокарты и винчестеры), несколько видов фольги.
В конце концов сделал вот такие рычажки и распечатал их на верной пруше:
Под площадкой рычажка наклеил немного пластилина и обмотал той фольгой что заработала, также подвел оба наконечника из фольги к земле схемы, более-менее заработало.
Выглядит вот так (после обрезки большей части рекламы и «соединение с сервером»):
Смысл всего этого действа (кроме фана от самого процесса и лиц друзей, которые видели это) — в одной картинке:
Для начала и середины игры это довольно серьезная, абсолютно халявная прибавка ресурсов.
Даже на поздних этапах — это всё еще приятный бонус, каждый день использования = много в неделю и очень много в месяц.
В этом было несколько минусов:
- телефон приходилось каждый раз класть точно на место, ± пара миллиметров — не работает
- надо иногда подключать зарядку и ардуинку — всегда
- через некоторое время экран всё равно переставал реагировать на прикосновения фольги даже так, если кто знает, почему — напишите, мне всё ещё интересно (причем антистатическая пленка переставала работать гораздо быстрее).
Хотя мне всё ещё интересен последний пункт, но я нашёл второй способ и к первому не возвращался уже давно.
Нужна маленькая программка nircmd.exe и эмулятор вашего телефона.
Устанавливаем нужную игру (работает легко с сетевыми играми или придется таскать сейвы туда-сюда).
Запускаем в полный экран.
Делаем скриншот каждый раз, когда надо нажать на экран (для начала на кнопку «получить что-то» за рекламу). Затем вставляем например в пейнт и смотрим инструментом карандашом снизу справа координаты этого элемента для нажатия.
Дальше получился примерно такой код:
:loop
rem hit get reward
nircmd setcursor 1600 950
nircmd sendmouse left click
TIMEOUT 40
rem hit three points where close ads usually are
nircmd setcursor 1777 70
nircmd sendmouse left click
TIMEOUT 1
nircmd setcursor 1212 60
nircmd sendmouse left click
TIMEOUT 1
nircmd setcursor 170 100
nircmd sendmouse left click
TIMEOUT 40
rem hit reconnect just in case
nircmd setcursor 1000 866
nircmd sendmouse left click
TIMEOUT 3
rem hit collect reward
nircmd setcursor 1600 950
nircmd sendmouse left click
rem wait all windows to close and start all over
TIMEOUT 3
goto loop
Сохраняем этот код в .bat файл, например как у меня — gimmemoney.bat, а рядом — ту программку nircmd (можно положить в C:\Users\%USERNAME% и запускать сразу из консоли, в случаях особой игровой зависимости можно добавить в автозагрузку с запуском эмулятора, я еще борюсь).
Редко, раз может в несколько дней, появляются рекламы с вертикальным расположением экрана.
И в эмуляторе, и в ардуино версии это создавало проблемы.
Ардуино-версия не дожила до этого, но в этом скрипте это всё уже учтено, последние нескольких месяцев скрипт не утыкался ни разу.
Также тут добавлено нажатие на кнопку «повторить» если соединение теряется, такое бывает довольно часто.
Минус только один — эмулятор должен быть на переднем плане, развернут во весь экран.
Если кто-то знает, как относительно легко послать нажатие мыши свернутому приложению эмулятора, даже не разворачивая его на передний и не посылая ему фокус — дайте знать, так было бы просто идеально, висит себе свернутый, пока читается утренний гиктаймс.
К чему это всё.
Я закинул в эту игру около 300р и понял что она с радостью съест и 3000р, и 30.000+р.
Набор ресурсов или прогресса какого-то авто часто тут стоит как ААА-игра, ± 3000р.
Это несколько продвинет, но не даст каких-то фантастических преимуществ и это можно слить за день игры (если это не авто, но до конца игры таких наборов можно еще 4-5 купить, только для этого авто, а их в игре десятки).
Эти два способа с одной стороны меня повеселили, а с другой — это приятный и редко достижимый «пассивный доход», о котором многие мечтают, пусть и хотя бы в игре.
Желаю всем море for-fun проектов и в идеале пассивного дохода от них.
Комментарии (17)
stardust1
13.04.2019 10:24Сильно замудренно. В том же эмуляторе Nox встроены макрос. Один раз записываете, что он должен делать и куда кликать, а потом ставите неограниченное количество повторов этого действия. Даже сворачивать его можно. Есть ещё всякие «кликалки», которые даже содержимое экрана анализируют и кликают, когда на экране появляется нужная картинка. Всё это есть на форумах этих игр. Другое дело, что все это уже какое-то задротство и бесполезный расход ресурсов (электричества итд). Оно этого не стоит, если вы конечно на этом не зарабатываете (продажей аккаунтов).
aegelsky Автор
13.04.2019 22:08Спасибо, посмотрел макросы, надо будет записать, это вроде именно что я спрашивал, чтоб работало в свернутом виде.
Сегодня новая «акция» в этой игре, несколько наборов апгрейда авто от 1800 до 3000+р.
Свет в месяц у меня выходит около 800р, как ни крути, это выгодно.
Просто без этого пройти эту игру не вливая реальных денег — крайне тяжело.david52522
14.04.2019 10:50А LuckyPatcher тут не прокатывает, к слову?
iceyay
14.04.2019 11:25Lucky Patcher хорошо работает с оффлайновыми играми, где не требуется интернет для дополнительной проверки транзакции на подлинность.
В случае с онлайн играми, а тем более от крупных разработчиков крупных игр проверка транзакции уже осуществляется и со стороны сервера игры, где Lucky Patcher уже не справляется, поэтому тут либо вкладывай деньги, либо автоматизируй процесс просмотра рекламы.
iceyay
13.04.2019 21:32Думаю, в случае распространения таких вот вещей принцип работы рекламы в мобильных играх изменится, иначе рекламодателям попросту не выгодно будет в это вкладываться.
Хотя таких людей все равно меньшинство по сравнению с основной аудиторией.
SerVB
13.04.2019 23:17В свое время запускал ботов для Clash of Clans на компе с эмулятором. Парочка названий, которые запомнились: MyBot Run, Broken Bot. Умеют не только собирать ежедневные ресурсы, но и строить и улучшать дома, а также худо-бедно воевать. Есть распознавалка изображения даже, ищущая позиции нужных кнопок на экране и понимающая цифры ресурсов. Заглядывал под капот, там Auto It используется.
jorgen_steinbach
14.04.2019 14:11«послать нажатие мыши свернутому приложению эмулятора»
xdotool умеет.
У меня есть скрипт который запускает 3-й commanch, заходит в миссию и поднимает вертолет — при этом можно пользоватся в это время другим приложением (xdotool search --name DOSBOX пошлет клавишу в DOSBOX).
#TODO autorestart mission by capslock dosbox -conf /home/guest/.dosbox/c3.conf & sleep 5 #захожу в миссию xdotool search --name DOSBOX key Return sleep 1 xdotool search --name DOSBOX key Return sleep 1 xdotool search --name DOSBOX key Return sleep 1 xdotool search --name DOSBOX key Return sleep 1 xdotool search --name DOSBOX key Return sleep 1 xdotool search --name DOSBOX key Return #жду загрузки sleep 15 #7-я передача xdotool search --name DOSBOX key 7 sleep 2 #выбор другого обзора xdotool search --name DOSBOX key F2 sleep 2 #убрать колеса xdotool search --name DOSBOX key g #если перезапускаю миссию - нажымаю капслок чтобы выполнить эти действия #(клавшу линуксу нельзя послать - досбокс захватывает клавиатуру) while true do sleep 10 #проверка капслока if [ -n $(xset q | grep LED | grep 1 | wc -l) ] then sleep 15 xdotool key 7 sleep 2 xdotool key F2 sleep 2 xdotool key g sleep 1 xdotool key Caps_Lock fi done
GennadyT
16.04.2019 00:00Спасибо за статью. Ностальгия нахлынула… В своё время писал скрипты для бота для онлайн игры Dwar. Он умеет анализировать изображение на экране и нажимать куда нужно. Я даже добавлял рандомные клики и типа того, чтобы поведение было как у человека :) Вместо меня бот собирал ресурсы, рыбачил, охотился, лечил персонажа и даже в чате отвечал стандартными фразами, если админы тревожили. Было время…
Я запускал его в виртуальной машине, а её сворачивал, чтобы параллельно заниматься другими делами.
SandroSmith
16.04.2019 09:37Видимо автору повезло, что издатель засунул рекламу только одного провайдера. В моих наблюдениях крестик в конце рекламы может появиться в любом углу. В последнее время ещё и с задержкой после окончания ролика.
artemev
Интересно, а у владельца игры не возникнет неприятностей со стороны рекламной сети, ведь с ее точки зрения это выглядит как накрутка просмотров?
RaphZak
В таких играх обычно ограниченно количество просмотров рекламы, обычно несколько раз в сутки, чтобы не набивали слижком уж много халявных ресурсов. Значит и накрутки просмотров не будет.
artemev
Если бы всего несколько раз в сутки, тогда не нужно было бы автоматизировать.
aegelsky Автор
Конкретно в этой игре есть набор ресурсов трёх типов, которые можно получить за одни сутки. На это уходит от часу до полутора, смотря что за реклама и как тупит их сервер, после каждого показа там «соединение с сервером».
До этого был лютый треш — этот дневной набор ресурсов и рекламы поштучно показывался после каждой завершенной гонки.
Я был очень рад тому, что у меня был этот скрипт и можно было дать ему «высмотреть» всю дневную рекламу. После этого после гонок уже ничего не показывалось и можно было играть.
Про неприятности от рекламодателей — по моему всем всё равно. Показы насколько я знаю никого не интересуют, важны только переходы и установки приложений, которые рекламируются.
artemev
Может я что-то не понимаю (не особо в теме), но формат rewarded video предполагает оплату именно за просмотры. Разве нет? Или в этой конкретной игре какой-то другой тип рекламы?
aegelsky Автор
Награды — за просмотры.
Хозяева реклам платят — за переходы, клики и установки приложений.
Эти два множества не пересекаются.