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

Forge of Empires: python бот для ПБГ

Привет! 👋 В прошлый раз мы автоматизировали рутину Экспедиции Гильдии, показав, как бот может взять на себя бои и сбор реликвий. Сегодня мы сделаем следующий шаг и адаптируем нашего верного помощника для Поля Боя Гильдий (ПБГ)! Это покажет, насколько универсален наш подход, и как, имея основу, можно быстро переключаться между задачами. Главная прелесть нашего подхода с PyAutoGUI в том, что основные функции универсальны! Нам не нужно переписывать всё с нуля. Большая часть кода для Экспедиции Гильдии отлично подходит для ПБГ. Ключевые изменения коснутся только последовательности действий (функция main_loop) и, конечно, изображений, которые бот будет искать. Помимо уже знакомой функции bring_browser_to_front для активации окна, и базовых move_mouse_with_offset и locate_and_click для взаимодействия, этот скрипт имеет несколько интересных моментов: Выбор сектора с самой низким накоплением усталости. Можно закомментировать эту команду и вручную выбирать сектор и затем запускать Это важное
Оглавление

Привет! 👋

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

🔄 Как быстро переделать бота для ПБГ?

Главная прелесть нашего подхода с PyAutoGUI в том, что основные функции универсальны! Нам не нужно переписывать всё с нуля. Большая часть кода для Экспедиции Гильдии отлично подходит для ПБГ. Ключевые изменения коснутся только последовательности действий (функция main_loop) и, конечно, изображений, которые бот будет искать.

🚀 Что нового в этом коде?

Помимо уже знакомой функции bring_browser_to_front для активации окна, и базовых move_mouse_with_offset и locate_and_click для взаимодействия, этот скрипт имеет несколько интересных моментов:

1. Выбор сектора (в if __name__ == "__main__":)

Выбор сектора с самой низким накоплением усталости. Можно закомментировать эту команду и вручную выбирать сектор и затем запускать

-2

Это важное дополнение вне основного цикла. Перед началом всех боев в ПБГ боту нужно выбрать сектор, в котором он будет работать. Строка locate_and_click("20.png", "20") делает именно это.

2. Оптимизированный main_loop для ПБГ

-3

Функция main_loop значительно упростилась по сравнению с экспедицией. Почему?

  • Отсутствие target1.jpg внутри цикла: В Экспедиции мы кликали по узлам на карте. В ПБГ, после выбора сектора, бот, как правило, остается внутри этого сектора и последовательно атакует армию за армией. Это означает, что нет необходимости каждый раз искать новый "узел". Бот просто переходит к следующему бою в выбранном секторе после завершения предыдущего боя.
  • Без реликвий: В ПБГ нет реликвий, которые выпадают после каждого боя, поэтому соответствующий цикл был удален.
  • Параметр n=150: Вызов main_loop(n=150) означает, что бот выполнит 150 боев. Это огромное количество, которое вручную заняло бы уйму времени!

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

Давайте быстро пробежимся по структуре, чтобы понять, как это всё работает вместе для ПБГ.

1. bring_browser_to_front()

-4

Эта функция осталась без изменений и выполняет свою важную роль — гарантирует, что окно вашего браузера (где запущена игра) всегда активно и развернуто. Это фундамент стабильной работы бота, ведь PyAutoGUI ищет изображения на активном экране.

2. move_mouse_with_offset()

-5

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

3. locate_and_click()

-6

Ваша основная "рабочая лошадка". Она ищет изображение на экране, кликает по нему и ждет. Параметр confidence позволяет контролировать точность совпадения изображения, а deltaY даёт возможность смещать клик по вертикали, что бывает полезно для интерфейсов, где интерактивные элементы не всегда центрированы (как мы нажимали под стрелкой на сектор в Экспе.

4. main_loop() для ПБГ

-7

Этот цикл выполняет основную работу в ПБГ. Для каждого из n боев он:

  • Выбирает тип боя: if not locate_and_click("def_make.png", "def_make"): locate_and_click("atack_make.png", "atack_make"). Бот сначала пытается найти кнопку "Оборонительный бой" (если такая есть), и если не находит, то кликает по кнопке "Атакующий бой". Это адаптирует бота к разным сценариям.
  • Меняет юнитов: locate_and_click("change_units.jpg", "change_units").
  • Дважды кликает автобой: locate_and_click("autobattle.jpg", "autobattle", confidence=0.9) .
  • Завершение боя: locate_and_click("OK_button.jpg", "OK_button").
  • Сбор лута (если есть): locate_and_click("reward_button.jpg", "reward_button").

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

Для этого бота вам понадобятся свежие скриншоты элементов интерфейса ПБГ:

-8

В разное время делал скрины, поэтому часть в jpg, часть в png. Можно все в одном формате, это Вас не должно смущать.

✅ Итоги

Мы успешно адаптировали нашего бота для эффективной работы в ПБГ, показав, как с помощью минимальных изменений в main_loop и правильных изображений можно переориентировать бота на новую задачу. Главное — это понимание логики игрового процесса и правильная подготовка изображений.

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

ПС. Помните: пока другие тратят часы на бесконечные клики в ПБГ, вы можете спокойно пить чай, зная, что ваша гильдия бьет рекорды. И всё благодаря паре строк кода. 😉

-9