Два способа сбора наград за рекламу в мобильных играх, или роботы должны работать

Во многих мобильных играх есть внутренняя валюта или что-то полезное, что можно получить после просмотра рекламы. Первое время я смотрел такую рекламу и даже находил что-то интересное в ней, но чем дальше — тем больше чувствовал себя мартышкой, выполняющей одни и те же действия, в точности одни и те же движения. Каждый раз для меня подобное — знак — пора автоматизировать процесс.
Статья не претендует на нобелевскую премию и какие-то научные достижения, просто я сделал два варианта для автоматического просмотра рекламы и друзьям это понравилось, вот и решил написать эту статью.

Два способа сбора наград за рекламу в мобильных играх, или роботы должны работать

Потому что роботы должны работать, а не вот так.

Я с детства был фанатом одной гоночной серии и когда нашел её новую мобильную версию, да ещё и бесплатно — обрадовался и удивился. Хотя довольно скоро понял, почему она бесплатная — внутри-игровые покупки тянут на несколько средних месячных зарплат в регионах или одну-две московских, они буквально стоят как игры ААА-класса последнего времени. Без вливания реальных денег процесс шел крайне медленно. Но можно смотреть рекламу и особенно в начале игры это даёт хорошую прибавку во всем, только быстро надоедает. Особенно когда одна и та же реклама показывается 5-10 раз подряд. И кнопки находятся (в 99.9% случаев) в одних и тех же местах. Собственно последнее меня и заставило вспомнить, что у меня есть несколько серво машинок и ардуинок и такую действительно механическую работу нужно доверить механизму.

Схема довольно простая:
image
Желтый (или рыжий, у кого как) провод сервок — к 10 и 11 пинам ардуинки,
с неё +5В и землю, на землю же надо подвести рычажки сервок (экран ёмкостной).

А вот код заработал не сразу:

#include   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 проект, копаться сильно не хотел в тот момент. И я всё ещё крайне избегаю всего что связано с С++ и строгими типами, ну не моё это.

С помощью кучи визиток подогнал сервы по высоте под телефон.
Также я могу наконец сказать что использую тот спорт инвентарь, что мне дарят, по крайней мере коробка от него пригодилась.
image

Самым сложным было сделать чтобы экран реагировал на нажатия рычажков сервок без пальцев. Друзья уже говорили что проще найти (или добыть) настоящий человеческий палец, чем все мои опыты. Пробовал антистатическую пленку (ту в которую упаковывают видеокарты и винчестеры), несколько видов фольги.
В конце концов сделал вот такие рычажки и распечатал их на верной пруше:

Под площадкой рычажка наклеил немного пластилина и обмотал той фольгой что заработала, также подвел оба наконечника из фольги к земле схемы, более-менее заработало.

Выглядит вот так (после обрезки большей части рекламы и «соединение с сервером»):

Смысл всего этого действа (кроме фана от самого процесса и лиц друзей, которые видели это) — в одной картинке:

Для начала и середины игры это довольно серьезная, абсолютно халявная прибавка ресурсов.
Даже на поздних этапах — это всё еще приятный бонус, каждый день использования = много в неделю и очень много в месяц.

В этом было несколько минусов:
— телефон приходилось каждый раз ложить точно на место, ± пара миллиметров — не работает
— надо иногда подключать зарядку и ардуинку — всегда
— через некоторое время экран всё равно переставал реагировать на прикосновения фольги даже так, если кто знает, почему — напишите, мне всё ещё интересно (причем антистатическая пленка переставала работать гораздо быстрее)

Хотя мне всё ещё интересен последний пункт, но я нашёл второй способ и к первому не возвращался уже давно.

Нужна маленькая программка 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 проектов и в идеале пассивного дохода от них.

 
Источник

Читайте также