fryt3ch / FishBot-GTA5RP

Pretty intelligent multifunctional fish bot, which is also able to solve Google reCaptcha v2
1 stars 0 forks source link

Бот на рыбалку для GTA5 RP (FishBot)

Умный многофункциональный бот, способный решать Google reCaptcha v2

English README

Попробовать / приобрести бота

Оглавление

Используемые технологии

Клиентская часть

Серверная часть (антикапча):

Веб часть:

Изображения

Screenshot_3
Screenshot_4

Видео демонстрации работы бота:

Функционал бота:

  • Работа в свернутом режиме. Бот полностью функционален в таком режиме, вы можете запустить его, свернуть игру и заниматься своими делами, все оповещения о его работе вы увидите в меню
  • Автодетект сумки
  • Автоматическое перекладывание рыбы из инвентаря в сумку при заполнении инвентаря
  • Автодетект удочки и приманки, вам не нужно класть их в определенные слоты, бот найдет их сам
  • Автоматическое восстановление голода (при наличии еды в инвентаре, в список можно добавить любую еду, которая у вас есть)
  • Автоматическое восстановление настроения (бот сам определит, сколько сигарет вам нужно выкурить для того, чтобы удочка не сломалась из-за плохого настроения)
  • Звуковые оповещения при появлении капчи или при перегрузе сумки/инвентаря
  • Уведомления в ВК при появлении капчи или при перегрузе сумки/инвентаря
  • Автоматическое выбрасывание любой рыбы (список указывается в конфиге, по умолчанию - Стерлядь) при перегрузе инвентаря
  • Счетчик прибыли: бот определяет, какую рыбу вы поймали и увеличивает вашу прибыль за вычетом стоимости приманки. Цены на рыбу можно поменять в файле настроек, как минимальную, так и максимальную. При нажатии на счетчик прибыли бот пересчитает ваш доход как в максимум, так и в минимум. Прибыль можно обнулить, если хотите считать заново
  • Останавливаться, если рыба сорвалась. Функция не особо нужна, за время тестов рыба не срывалась, но если такое и произойдет, то бот остановит свою работу
  • Пауза между подходами: после каждого вылова рыбы бот будет останавливаться на время (стандарт: 1 секунда, можно поменять в файле настроек или выключить вообще)
  • Задержка между кликами при вылове рыбы. Вы можете изменить это значение, если у вас проблемы с пингом, хотя за время тестов нужды в этом не было
  • Меню. Вы можете изменить прозрачность меню, либо же свернуть его, чтобы оно вам не мешало

О рыбалке на проекте

Составляющие механики рыбалки на данном проекте:

  • У нас есть удочка (их 3 вида, все содержат в своем названии слово Удочка)
    изображение
  • У нас есть приманка (цена - 35$)
    изображение
  • На сервере есть лишь несколько мест, где разрешено рыбачить, при входе в нужную нам зону появляется соответствующий индикатор желтого цвета в левом нижнем углу окна игры
    изображение
  • На сервере присутствует механика голода и настроения. Соответствующие индикаторы о плохом настроении и голоде располагаются в том же месте, что и индикатор места для рыбалки
    • Плохое настроение (появление индикатора фиолетового цвета) добавляет шанс на то, что во время рыбалки удочка сломается
    • Голод (появление индикатора оранжевого цвета) постепенно уменьшает кол-во здоровья персонажа
  • Есть множество видов рыб, у каждой свой шанс вылова и своя цена
  • Каждая рыба имеет вес, поэтому инвентарь (максимум 10 кг) заполняется, на проекте так же существуют сумки и рюкзаки, при наличии которых, наш бот будет перекладывать всю рыбу в них при перегрузе инвентаря

Принцип самого процесса рыбалки на данном проекте:

  • Открываем инвентарь в игре и закидываем удочку (ПКМ по ней)
  • Ждем появления соответсвующего индикатора красного цвета о том, что настало время быстро нажимать на ПКМ до появления индикатора остановки белого цвета (и так циклично, пока не выловим)
    изображение изображение
  • Когда мы успешно вылавливаем рыбу, внизу экрана появляется сообщение с названием данной рыбы
    изображение
  • Выловленная рыба оказывается у нас в инвентаре и хранится в следующем виде
    изображение
  • Раз в 20 выловленных рыб появляется сообщение о необходимости пройти капчу (Google reCaptcha v2), если мы откажемся и нажмем на кнопку Я робот, то мы не сможем рыбачить 10-20-30-40 и т.д. минут
    изображение

Как все работает?

Принцип работы нашего бота:

  • Аутентификация пользователя (схематично, без подробностей)
    изображение
  • В отдельном потоке детектим процесс с игрой и получаем IntPtr ее окна
  • При нажатии на кнопку F4 бот ищет цвет индикатора места, разрешенного для рыбалки, в определенной области окна игры, и, если он найден, бот начинает свою работу
    • То же самое выполняется для индикаторов настроения и голода, если соответствующие настройки включены в меню бота
      1
  • Бот отправляет нажатие клавиши I в окно с игрой, открывается инвентарь
  • Бот считывает вес инвентаря с определенной области и определяет, есть на вас сумка или же нет. В соответствии с этим выводом, он сканирует область инвентаря (если есть сумка, то инвентарь располагается выше, чем если ее нет) и получает координаты найденых вещей, которые он может использовать
    • Мы разбиваем сетку инвентаря (или сумки) на одинаковые квадраты, циклично проходимся по всем квадратам и обрабатываем их через Tesseract, который возвращает текст, найденный в каждом из квадратиков. Местонахождение предмета - точка середины квадрата, в котором был найден текст, идентифицирующий данный предмет
      ezgif-1-2731e7283ccc
  • Если ваш инвентарь забит (n >= 9.6, т.к. средний вес рыбы - 0.4 кг.) и при этом у вас есть сумка, то бот сам переложит имеющеюся рыбу в сумку. Если ее нет, то бот выдаст ошибку и отправит уведомление о перегрузе в ВКонтакте
  • При наличии удочки/приманки бот просто нажмет ЛКМ по удочке и начнет рыбачить, в противном случае бот сообщит об ошибке (и уведомит в ВКонтакте)
  • После начала рыбалки бот сканирует потенциальную область расположения кнопки "Я робот" (чтобы обнаружить капчу, если она появилась)
  • Далее, каждые 100 мсек. бот ищет в области появления индикатора о начале вылова рыбы пикселя красного цвета
  • Как только пиксель был обнаружен, бот начинает отправлять в окно с игрой нажатия ЛКМ с заданной пользователем скоростью, одновременно ища белый пиксель в той же области, в которой был найден красный. И так циклично, пока не появится сообщение об успешном/провальном вылове рыбы
  • Бот считывает текст снизу экрана, определяет, что за рыба была поймана, и, при включенной функции счетчика прибыли, учтет эту рыбу в статистике и прибавит ее стоимость за вычетом цены приманки в счетчик прибыли (рыбы и их цены можно изменять в файле конфигурации)

Принцип работы антикапчи:

  • Образная схема взаимодействия с клиентом (без подробностей)
    изображение
  • Антикапча запускается отдельным приложением и представляет из себя TCP сервер, ожидающий подключения клиентов
  • Как только у одного из пользователей появляется капча, бот подключается к TCP серверу антикапчи, происходит аутентификация (бот высылает HWID пользователя, антикапча проверяет через POST/GET запрос к нашему captcha.php, есть ли у данного пользователя доступ к антикапче)
  • Если аутентификация прошла успешна, пользователь добавляется в очередь на решение капчи и пока он находится в очереди, каждые 10 сек. ему высылается его номер в очереди, который бот выводит в статус, чтобы пользователь мог понять, сколько ему еще осталось ждать
  • При запуске нашего сервера мы можем ввести число - кол-во сущностей, которые будут работать с пользователями (1 сущность - одновременно обрабатывается 1 пользователь). Когда очередь не пуста, каждая сущность пытается взять из очереди клиента, который успешно прошел аутентификацию и был допущен к решению капчи. Как только одной (или нескольким сразу) сущности это удалось, начинается обработка клиента
  • Все картинки, полученные от разных пользователей обрабатывает единый объект YoloWrapper. Мы используем Mutex, чтобы предотвратить одновременный доступ к YoloWrapper со стороны нескольких сущностей
    • Для чего нам вводить понятие сущностей в наш проект? Дело в том, что пока YoloWrapper работает с сущностью N1, другие (N2, N3, и т.д.) за это время уже начнут обрабатывать капчу (примут массив с байтами со стороны клиента, выяснят, что надо искать в капче, какое задание выполнять), а когда обработка YoloWrapper, запущенная со стороны сущности N1, закончится, тогда уже N2 запустит свою обработку YoloWrapper. Таким образом вы увеличиваем скорость прохождения капчи в случае, если у нас много пользователей
  • Как только сущность антикапчи закончила обработку полученного изображения, она высылает своему клиенту сериализованный словарь, ключ которого - точка (куда нажимать боту на капче), а значение - число (пауза между текущим и следующим нажатием)
  • Бот получает этот словарь и выполняет указанные сервером действия. Таким образом и проходится капча

Возможности системы подписок на приложение:

  • Привязка пользователей по принципу ID VK - уникальный ключ - HWID (уникальный ключ формата FISHBOT_[0-9A-Z]{16}, пример: FISHBOT_Y1NZVSY18W6EJUFA)
    • Пользователь получает ключ в группе ВК в автоматическом режиме, используя комманду "бесплатный ключ", сгенерированный ключ привязывается к пользователю по VK ID. Как только пользователь введет этот ключ при запуске бота, ключ привяжется к HWID пользователя (уникальный идентификатор компьютера, только на котором будет работать данный ключ)
  • Выдача подписок (как на бота, так и на антикапчу) администратором в автоматическом режиме через ту же группу ВК. Достаточно использовать команду "выдать бота (или капчу) [VK ID] [Период]. Допустимый диапазон поля [Период] - 1 неделя, 2 недели, 1 месяц, Навсегда
  • Просмотр всей информации о пользователе администратором, используя команду "подписки [VK ID]"
  • Аннулирование подписки администратором, используя команду "аннулировать [VK ID]"
  • Сброс HWID у пользователя администратором, используя команду "сбросить [VK ID]"