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

Forge of Empires: Пишем бота в Python для Экспедиции

Привет! 👋 Сегодня мы погрузимся в мир автоматизации Forge of Empires с автоматическим прохождением Экспедиции Гильдии. Забудьте о рутине и бесконечных кликах! Давайте посмотрим, как можно заставить бота делать эту работу за вас, пока вы занимаетесь более важными делами (или просто отдыхаете 😉). Логика включает в себя: В отличие от предыдущих постов, где мы фокусировались на базовых кликах, здесь появляются по-настоящему интересные и полезные нововведения: Это абсолютно новое и крайне важное дополнение! Раньше наш бот просто ждал, что окно игры будет активно. Но что если у Вас один монитор, а держать на одном экране два окна Python и браузера неудобно. Теперь бот сам позаботится об этом! В функции main_loop мы введем ветвления логики: Это означает: "Если не удалось найти и кликнуть по изображению оборонительной боя (def_make.jpg), тогда попробуй найти и кликнуть по изображению атакующего боя (atack_make.jpg)". Это элегантное решение для сбора реликвий. Вместо того чтобы писать три от
Оглавление

Привет! 👋

Сегодня мы погрузимся в мир автоматизации Forge of Empires с автоматическим прохождением Экспедиции Гильдии. Забудьте о рутине и бесконечных кликах! Давайте посмотрим, как можно заставить бота делать эту работу за вас, пока вы занимаетесь более важными делами (или просто отдыхаете 😉).

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

Логика включает в себя:

  1. Переключение на окно браузера: удобная функция, если у Вас один монитор.
  2. Клик по точке на карте экспедиции.
  3. Выбор опции боя: В зависимости от ситуации, бот будет выбирать либо оборонительный, либо атакующий бой.
  4. Смена юнитов: бот кликнет на кнопку смены юнитов.
  5. Автобой: Дважды нажимает автобой для двухпоточной армии.
  6. Автосбор лута: Клик по кнопке "ОК" после боя если выпадает.
  7. Проверка реликвий: После каждого боя, бот будет проверять и собирать выпавшие реликвии (серебряные, золотые, уникальные), кликая на них и подтверждая сбор.

🚀 Новые фишки и почему они крутые

В отличие от предыдущих постов, где мы фокусировались на базовых кликах, здесь появляются по-настоящему интересные и полезные нововведения:

1. Управление окном браузера: bring_browser_to_front()

-2

Это абсолютно новое и крайне важное дополнение! Раньше наш бот просто ждал, что окно игры будет активно. Но что если у Вас один монитор, а держать на одном экране два окна Python и браузера неудобно. Теперь бот сам позаботится об этом!

  • pygetwindow as gw: Это новая библиотека! Она позволяет скрипту взаимодействовать с окнами вашей операционной системы. Мы используем её, чтобы найти окно с определенным именем (например, "Chrome") и вывести его на передний план.
  • browser.activate(): Активирует окно браузера, делая его активным.
  • browser.maximize(): Разворачивает окно на весь экран. Это критично, так как PyAutoGUI лучше работает с развернутыми окнами, и это гарантирует, что расположение элементов будет предсказуемым.
  • time.sleep(0.5): Небольшая задержка, чтобы система успела переключить окно.

2. Более сложная логика принятия решений

В функции main_loop мы введем ветвления логики:

-3

Это означает: "Если не удалось найти и кликнуть по изображению оборонительной боя (def_make.jpg), тогда попробуй найти и кликнуть по изображению атакующего боя (atack_make.jpg)".

3. Цикл для сбора реликвий

-4

Это элегантное решение для сбора реликвий. Вместо того чтобы писать три отдельных if-условия для каждой реликвии, мы используем цикл for. Бот по очереди проверяет наличие каждого типа реликвий. Если реликвия найдена и кликнута, он также кликает по кнопке награды.

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

Мы уже подробно разобрали move_mouse_with_offset() и locate_and_click() в предыдущих статьях. Их функционал остался прежним: move_mouse_with_offset добавляет случайную "дрожь" курсору, а locate_and_click ищет изображение на экране и кликает по нему с учетом случайной задержки и параметра confidence.

Перейдем к обновленной главной функции:

main_loop()

-5

Эта функция управляет всем процессом прохождения экспедиции.

  • bring_browser_to_front(): Этот вызов гарантирует, что браузер с игрой всегда будет на переднем плане.
  • Цикл for i in range(n): Повторяет весь процесс прохождения одной провинции n раз. В данном примере, n=10, что означает 10 полных циклов боя.
  • Последовательность кликов:
    locate_and_click("target1.jpg", "target1", deltaY=120): Кликаем на 120 пикселей ниже стрелки (возможно под Ваше разрешение экрана нужно будет поменять).
    if not locate_and_click("def_make.jpg", "def_make"): locate_and_click("atack_make.jpg", "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("target1.jpg", "target1", deltaY=100): Клик по сундуку на 100 пикселей ниже стрелки.
    locate_and_click("reward_button.jpg", "reward_button"): Клик по кнопке сбора лута.
    Цикл сбора реликвий: Как обсуждалось выше, этот цикл автоматизирует сбор всех выпавших реликвий.

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

Для этого скрипта вам потребуется множество изображений! Убедитесь, что они сделаны в игровом окне в полноэкранном режиме и имеют четкий вид:

-6

✅ Итоги

Сегодня мы подняли автоматизацию в Forge of Empires на новый уровень! Мы научились:

  • Автоматически активировать и максимизировать окно браузера, делая бота еще более независимым.
  • Реализовывать более сложную логику принятия решений (например, выбор типа боя).
  • Использовать циклы для эффективного сбора множественных элементов (реликвий).
  • Создавать бота, способного проходить этапы Экспедиции Гильдии без вашего прямого участия.

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

Готовы узнать как быстро переделать этот код в фарм ПБГ? Тогда до скорых встреч!

"ПС. Не забудьте: в борьбе за славу и ресурсы в Forge of Empires, ваши питоновские скрипты могут оказаться куда эффективнее, чем бессонные ночи. 😉"

-7