Найти в Дзене
Артем Милич

Как написать бота для Forge of Empires: Автосбор сундуков 🎁

(Часть 2. Собираем сундуки вместо ручного клика) Привет! 👋 В прошлый раз мы написали самый примитивный бот, с целью обучения, реализуя автоматическое производство и сбор молотков в "Доме охотника", используя простой скрипт на PyAutoGUI. Сегодня переходим к следующему этапу — будем собирать сундуки, которые появляются в вашем городе ежедневно. Сегодняшний код не сильно сложнее предыдущего, логика тут простая: Также добавим защиту от ситуаций, когда изображение не найдено — скрипт будет ждать и повторять попытку. Увеличена уверенность поиска (`confidence=0.8`) Из-за особенностей интерфейса FoE в некоторых ситуациях сундук может быть частично перекрыт. Чтобы уменьшить ошибки распознавания, я поднял `confidence` до 0.8. Это значит, что поиск будет более точным, но чуть менее терпимым к изменениям. Добавлены паузы между действиями Между кликом по сундуку и попыткой найти окно награды теперь есть пауза time.sleep(1). Это нужно потому, что игра не всегда моментально показывает окно с наградо
Оглавление

(Часть 2. Собираем сундуки вместо ручного клика)

Привет! 👋

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

🧩 Что делает наш скрипт?

Сегодняшний код не сильно сложнее предыдущего, логика тут простая:

  1. Ищем изображение сундука.
  2. Кликаем по нему.
  3. Ждём появление окна награды.
  4. Кликаем по окну награды.
  5. Повторяем нужное количество раз.

Также добавим защиту от ситуаций, когда изображение не найдено — скрипт будет ждать и повторять попытку.

🔧 Обновления и изменения относительно прошлого поста

Увеличена уверенность поиска (`confidence=0.8`)

Из-за особенностей интерфейса FoE в некоторых ситуациях сундук может быть частично перекрыт. Чтобы уменьшить ошибки распознавания, я поднял `confidence` до 0.8. Это значит, что поиск будет более точным, но чуть менее терпимым к изменениям.

Добавлены паузы между действиями

Между кликом по сундуку и попыткой найти окно награды теперь есть пауза time.sleep(1). Это нужно потому, что игра не всегда моментально показывает окно с наградой — без этой задержки скрипт просто не найдёт вторую кнопку.

time.sleep(random.uniform(2.0, 2.5)) - Задержка после клика стала чуть больше (2.0–2.5 секунды)

После каждого клика (и по сундуку, и по награде) мы ждём случайное время от 2 до 2.5 секунд. Это имитирует человеческое поведение и снижает шансы детекции как бота.

🐍 Разбор кода по функциям

1. move_mouse_with_offset()

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

2. locate_and_click()

-2

Функция ищет изображение на экране, кликает по нему и возвращает `True`, если всё прошло успешно. Если изображение не найдено — выводит сообщение и возвращает `False`.

3. collect_chest()

-3

Здесь реализована логика одного цикла сбора: клик по сундуку → ждём → клик по награде.

Если какой-то шаг не удался, функция возвращает `False`, и основной цикл пытается снова через 3 секунды.

4. main_loop()

-4

Основной цикл собирает нужное количество сундуков. Он проверяет успешность каждой попытки и при неудаче повторяет попытку через 3 секунды.

📸 Подготовка изображений

На всякий случай скажу, что скрины лучше всего делать через стандартное приложение "Ножницы" или горячими клавишами Win+Shift+S. Подготовим мы следующие два изображения:

-5

- chest.jpg — сам сундук на карте (убедитесь, что он не закрыт другими элементами).

- reward.jpg — кнопка ОК окна награды.

💡 Совет: выбирайте такие участки изображения, которые не меняются от контекста. Например, не весь сундук, а его уникальная часть. То есть надпись "Вы получили награду! Добавлено ..." лучше не добавлять в скрин. Но для этого бота постарайтесь, чтоб кнопка ОК была посередине скрина или добавьте deltaY из первого бота.

✅ Итоги

Сегодня вы научились создавать бота, который собирает сундуки в FoE автоматически. Мы рассмотрели:

  • Как повысить точность поиска изображений.
  • Как обрабатывать ситуации, когда элемент не найден.
  • Как сделать поведение бота более человечным.
  • Как организовать цикл работы с возможностью повторных попыток.

🧰 Полезные советы на заметку

  • - Тестируйте бота сначала вручную, замедляя скорость выполнения.
  • - Убедитесь, что окно FoE находится в том же масштаба (не приближено, не отдалено), в котором Вы делали скрины.
  • - Можно использовать pyautogui.screenshot() для дебага и проверки того, как выглядит текущий экран.

Весь код

-6

❤️ Подписывайтесь!

Дальше напишем скрипт который за Вас нажмет на кнопки автобафа, автопосещения таверн. Пусть это также примитивно, но мне тоже надо прокачать свой недавносозданный аккаунт для написания ботов. Тогда и начнем фармить ПБГ и Экспу. Но всему свое время.

P.S. Аккуратнее с возможными баннами!