No description
Find a file
2026-06-13 12:26:44 +03:00
.idea Init 2026-06-13 12:19:38 +03:00
bot.py Init 2026-06-13 12:19:38 +03:00
capture.py Init 2026-06-13 12:19:38 +03:00
config.py Init 2026-06-13 12:19:38 +03:00
debug_snapshot.py Init 2026-06-13 12:19:38 +03:00
input_sender.py Init 2026-06-13 12:19:38 +03:00
README.md chore: added README 2026-06-13 12:26:44 +03:00
requirements.txt Init 2026-06-13 12:19:38 +03:00
vision.py Init 2026-06-13 12:19:38 +03:00

PerfectKachalka

Бот для мини-игры со шкалой навыка (skill-check): синяя полупрозрачная шкала с движущимся курсором и двумя цветными зонами. Бот распознаёт шкалу, зону и курсор по экрану и нажимает E в нужный момент.

Требования

  • Игра запущена в режиме Exclusive Fullscreen (не оконный безрамочный) - это нужно для bettercam, который умеет захватывать такой режим.
  • Зависимости уже установлены в .venv (opencv-python, numpy, bettercam, pydirectinput, keyboard, mss). При необходимости переустановить: .venv\Scripts\python.exe -m pip install -r requirements.txt.

Проверка детекции (опционально, но рекомендуется)

.venv\Scripts\python.exe debug_snapshot.py
  • Скрипт ждёт 5 секунд - успейте переключиться в игру так, чтобы шкала мини-игры была видна на экране.
  • После снимка он напечатает найденные координаты шкалы/зоны/курсора и сохранит debug_snapshot.png с нарисованными рамками: синяя рамка - шкала, красная - узкая (целевая) зона, пурпурная линия - курсор.
  • Если что-то не нашлось, скрипт сохранит debug_full.png (полный кадр без рамок) - по нему можно подправить пороги в config.py.

Запуск бота

.venv\Scripts\python.exe bot.py
  • В консоли появится строка Захват экрана: bettercam (или mss, если bettercam не сработал - тогда эксклюзивный фуллскрин может не захватываться).
  • Переключитесь в игру.
  • F6 - включить/выключить бота. При включении он один раз сканирует экран на наличие шкалы (повторяет попытку раз в секунду, если шкала пока не видна).
  • Ctrl+C в консоли - полностью завершить программу.

Если игра запущена с правами администратора

pydirectinput может не достучаться до окна игры из-за защиты Windows (UIPI), если игра имеет более высокие привилегии, чем консоль. В этом случае запускайте терминал/bot.py от имени администратора.

Подстройка таймингов

При каждом нажатии E в консоли печатается строка вида:

[Bot] E нажата | cursor_x=... predicted_x=... zone=(...,...) | задержка цикла=... мс
  • Если E срабатывает позже, чем курсор визуально входит в узкую зону - увеличьте CURSOR_LEAD_TIME в config.py, шаг ~0.02-0.03.
  • Если E срабатывает раньше входа в зону - уменьшите его.
  • Если "задержка цикла" заметно больше ~16 мс - система не успевает за 60 FPS, это тоже добавляет задержку.
  • Если в одном проходе курсора через зону E срабатывает несколько раз - потребуется сглаживание скорости курсора (сообщите, чтобы добавить).

Изменения в config.py применяются после перезапуска bot.py.

Структура проекта

  • bot.py - основной цикл: поиск шкалы, отслеживание курсора, нажатие E, переключение по F6.
  • vision.py - распознавание шкалы/зон/курсора по кадру (OpenCV/HSV).
  • capture.py - захват экрана (bettercam, с откатом на mss).
  • input_sender.py - отправка нажатия клавиши (pydirectinput).
  • config.py - все настраиваемые пороги и параметры.
  • debug_snapshot.py - однократный снимок экрана с визуализацией найденных шкалы/зоны/курсора, для отладки.