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

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

Итак, минимально понадобятся следующие моды:

Поскольку какого-то особого пользовательского интерфейса (подобно поездам) нет, всю логику придется реализовывать на комбинаторах – вот для чего наконец-то потребуются логические сети. В рамках базовой игры я вообще не понял, для чего они могли бы пригодиться, а в Space Age я начал ими пользоваться крайне минималистичным образом типа контроля количества космических исследовательских пакетов и боеприпасов в хабе платформы во избежание переполнения.

Некая инструкция есть на форуме. К сожалению, она писалась во времена условных альфа-версий самой Factorio, но в целом принцип не изменился – хотя в нюансах несколько поменялась работа комбинаторов, да и предлагаемые мной решения отличаются логикой.

Добыча

Иными словами, автоматизация экскаватора. Проблема в том, что сама добыча происходит только в движении – следовательно, необходимо каким-то образом заставить его двигаться по месторождению без участия оператора (т.е. вас как игрока).

Первый способ – нарисовать путь «змейкой» по всему месторождению и отправить машину «копать от забора до обеда». Недостаток – избыточность по мере исчерпания ресурсов, но в принципе способ вполне рабочий.

minig_path.jpg

Второй, более сложный способ – автоматизация с помощью, например, сканера местности (Tile Scanner), башни управления техникой (Unit Controller) и логической схемы.

Мое решение заключается в следующем.

  1. Получить текущую позицию экскаватора.
  2. Просканировать произвольную клетку в пределах заданной дистанции.
  3. Если клетка содержит необходимый ресурс, направить туда экскаватор для добычи.

Помимо вышеупомянутых башен также потребуется сканер техники (Unit Scanner) и несколько комбинаторов. Логическая схема:

  1. Постоянным комбинатором подаем на вход сканера техники идентифицирующий сигнал – нагляднее, мне кажется, по типу техники (AI Miner), либо непосредственно ID экскаватора.
  2. Для порядка убираем ненужные сигналы из выхода сканера техники – минимально нам понадобятся собственно ID техники, позиция (Tile) и данные инвентаря.
  3. Подсоединяем выход сканера техники ко входу сканера местности – тем самым подаем на вход сигналы X и Y (начальные координаты).
  4. Постоянным комбинатором подаем на вход сканера местности сигнал дистанции (я на всякий случай сделал это проводом другого цвета). Значение, к примеру, 10.
  5. Настраиваем сканер местности – я убрал пульсацию (иначе непонятно, какие собственно сигналы выходят) и установил частоту 60 (1 раз в секунду).
  6. На вход сравнивающего комбинатора проводом одного цвета (зеленым) подключаем выход сканера техники, а другим (красным) – сканера местности.
  7. Условие сравнивающего комбинатора: сигнал ресурса (например железа) со сканера местности (красная сеть) больше нуля. Также я добавил условия отсутствия в этих координатах экскаваторов и самосвалов для минимизации вероятности столкновений. А чтобы «набитый битком» экскаватор не крутился туда-сюда, целесообразно добавить проверку количества ресурса в зеленой сети. Конкретное значение зависит от уровня горной машины – на начальном уровне хранилище предоставляет 50 мест, т.е. 2500 единиц железной руды.
  8. На выход комбинатора пробрасываем ID машины со сканера техники (зеленая сеть) и координаты (X и Y) со сканера местности (красная).
  9. Подсоединяем выход сравнивающего комбинатора к башне управления техникой. Тем самым, при соблюдении условий, мы отправляем экскаватору команду перемещения в новые координаты.
mining_comb.jpg

Компромиссы таковы:

  • возможны пропуски «тактов», т.е. при неудачном сканировании экскаватор ничего не делает (уменьшить эффект можно регулировкой частоты);
  • вроде бы невозможно полностью исчерпать месторождение, так как для этого нужно перемещаться на клетки без ресурса, а это запрещено условием. Очень теоретически есть некие субкоординаты, но углубляться не стал.

Опять же в теории с помощью сканера зон (Zone Scanner) можно усложнить схему и заставить перемещаться экскаватор на новое месторождение при исчерпании текущего (предварительно разметив эти самые месторождения), но на практике я такой вариант не прорабатывал – мне кажется проще «врукопашную» это все отслеживать и перемещать (а заодно и остатки ресурса добыть).

Доставка

Т.е. автоматизация самосвала. Как и в случае с экскаватором, можно заставить его гонять по заданному маршруту, но в данном случае это будет уже очень нерационально, плюс возникает проблема со сближением грузовика с экскаватором для обмена ресурсами. Игровая условность заключается в том, что обмен происходит «мгновенно» при «достаточном» сближении машин (друг с другом или депо), причем «курьер» пополняет экскаватор топливом в случае наличия такового среди груза. Нюанс еще и в том, что в экскаватор скорее всего помещается меньше ресурсов, чем в грузовик, да и разгрузка может произойти не сразу, если депо заполнено – нужно обеспечить технологические паузы.

Совершенно точно потребуется отдельный сканер техники (теперь для грузовиков) и две логических сети – одна для «прямого» пути (к экскаватору) и вторая для обратного (в депо). Можно ли переиспользовать ту же башню управления техникой, что и для экскаваторов – вопрос. Наверное для порядка все же скорее нет, так что я построил еще одну.

Также надо немного настроить сигналы депо и грузовика, чтобы, например, твердое топливо выгружалось в грузовик (-1), а у самого грузовика ограничить количество загружаемого топлива – иначе места для самих ресурсов не останется.

depot_signals.jpg

Сигналы депо

По координатам

Простейший вариант – направлять грузовик непосредственно к экскаватору и депо, в этом случае он сам будет искать путь по тому же алгоритму, что и кусаки. В большинстве случаев скорее всего это будет работать удовлетворительно – главное чтобы где-то там не ходили поезда (иначе придется каким-то образом разбираться еще и с железнодорожными переездами), либо воспользоваться к примеру транспортными самолетами вместо наземной техники (которые, к сожалению, появляются на относительно поздней стадии игры).

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

Подадим на вход вновь построенного сканера техники соответствующий сигнал (по типу техники или конкретному ID) от постоянного комбинатора. К выходу этого сканера подключаем два сравнивающих комбинатора разными проводами.

Первый – для «прямого» пути (зеленый провод). Соответственно красным проводом соединяем его вход с выходом сканера экскаваторов. Условие: ресурс (медная руда) в зеленой сети меньше заданной константы (например размера пачки – 50, или даже вовсе равен нулю для полной разгрузки). Пробрасываем ID грузовика из зеленой сети, а координаты экскаватора – из красной. Подсоединяем выход комбинатора к башне управления техникой.

Обратный путь (в депо, красный провод) делается симметрично – зеленым проводом соединяем комбинатор депо (правый верхний угол, не путать с самим депо) со входом комбинатора, в условии теперь проверим, что ресурса в красной сети больше либо равно заданной константы (например 5000 – почти полная загрузка, но для отладки лучше взять поменьше), ID грузовика также теперь пробрасывается из красной сети, а ID депо (вместо координат) – из зеленой, и не забываем подключить выход комбинатора к башне управления.

delivery_coords.jpg

Кручу-верчу, запутать хочу. Комбинатор для возврата в депо, а грузовик едет за медью

Теоретически есть сигнал «следовать за техникой», но есть подозрение, что в этом случае будут постоянно происходить микростолкновения, поэтому такой вариант, на мой взгляд, лучше применять как раз с транспортными самолетами.

aircraft_follow.jpg

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

По заданным маршрутам

Исторически я этот вариант у себя реализовал первым, поскольку грузовику мало того, что надо было объехать вокруг всей базы, так еще и потом по всяким лесам-болотам неочевидным образом ехать.

Особенностей у данного режима работы несколько. Во-первых, сами маршруты. Они не должны быть зациклены (чтобы еще и с точками маршрута не заморачиваться) и все точки (кроме конечной) должны иметь опцию Direct drive through (иначе грузовик будет делать остановки).

delivery_path.jpg

Во-вторых, в условиях комбинаторов надо будет проверять, что машина не находится на каком-либо из маршрутов (иначе он потом будет «ломиться» в начало маршрута).

Если сканер экскаватора не передает данные о маршруте, то вроде как достаточно будет одного сравнивающего комбинатора, иначе придется разделять логику между несколькими комбинаторами, чтобы правильно пробросить все необходимые сигналы.

Еще у меня возникла проблема с определением ID маршрута. Для максимальной уверенности стоит отправить технику по нужному маршруту и посмотреть, что показывает сканер, но вроде бы ID маршрута соответствует его порядковому номеру в списке. Увы, визуально это вроде бы никак не отображается, в отличие от идентификаторов техники.

Модифицируем логические схемы из предыдущего примера. Допустим, ID «прямого» маршрута (т.е. за ресурсом) – 2, а обратного (в депо) – 3. Тогда на красный вход «зеленого» сравнивающего комбинатора подаем постоянный сигнал маршрута 2, а на зеленый вход «красного» – 3. Добавляем условия, что сигнал маршрута грузовика равен нулю (по соответствующим цветам), а вместо координат пробрасываем ID маршрута с постоянных комбинаторов.

За железом:

const_path_2.jpg
deli_comb_2.jpg

В депо:

const_path_3.jpg
deli_comb_3.jpg

Заключение

Сохранение, которое иллюстрирует данную статью, можно скачать из каталога файлов. Для наглядности я включил еще пару модов типа плашек и авиации.

Как видите, такая казалось бы тривиальная задача решается весьма нетривиальным методом. Стоит ли оно того – тоже далеко на факт. Лично я все же решил попробовать, поскольку в моей «партии» получилось так, что месторождения камня разбросаны по всей карте и при этом каждое из них «маленькое» (100-200 тысяч), в отличие от «больших» (по несколько миллионов) остальных ресурсов (это была предустановка «железнодорожный мир» и еще куча модов).

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


Категория: Стратегии | Опубликовано 14.02.2025 | Редакция от 08.06.2025

Похожие материалы

Heroes III

Heroes III: Restoration of Erathia. Рассуждения о том, какая раса самая крутая, а какая – самая хилая.


Комментарии, обсуждение