Найти в Дзене
Формат АА

Как в Factorio развозить боеприпасы одним поездом не возвращаясь в депо или на погрузку.

Статья про тонкости игрового процесса в игре Factorio. В этой статье разберём как в игре Factorio можно одним поездом снабжать несколько ж/д станций не возвращаясь на погрузку или в депо. Перед тем как начать читать эту статью, задайте себе вопрос: вы разбираетесь в прерываниях расписания в поездах? Каждую последующую статью про прерывания я снабжал ссылками на предыдущие, чтобы читатель имел возможность вернуться к основам, и по порядку изучить тему перед чтением более сложного материала. В этот раз не буду предлагать читать все предыдущие статьи по теме прерываний, рассчитывая, что читатель пришёл уже подготовленный или знающий. Максимум – могу посоветовать окунуться в раздельные прерывания для ж/д станций в этой статье, если требуется немного освежить в памяти принцип работы сложных прерываний. Сегодня будем разбирать одну из самых лакомых тем по железной дороге в Factorio – как одним поездом возить боеприпасы на разные аванпосты, но не возвращаться каждый раз на погрузку, а ехать н
Оглавление

Статья про тонкости игрового процесса в игре Factorio.

В этой статье разберём как в игре Factorio можно одним поездом снабжать несколько ж/д станций не возвращаясь на погрузку или в депо.

Предисловие.

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

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

Сегодня будем разбирать одну из самых лакомых тем по железной дороге в Factorio – как одним поездом возить боеприпасы на разные аванпосты, но не возвращаться каждый раз на погрузку, а ехать на следующий до полного истощения боеприпасов в вагоне. Эта ситуация применима не только к развозке боеприпасов по аванпостам, но и к развозке любых грузов по ж/д станциям на фабрике. Раньше, в обычной ванильной версии игры настроить такое было нереально без специального набора сложной логики или без различных модов типа LTN. Теперь, спасибо разработчикам, появились прерывания, и вкупе с некоторой простейшей логикой это стало достижимо каждому.

Железная дорога, аванпосты и поезда.

Итак, наша мечта: чтобы поезд вышел из погрузки боеприпасов полный до верху и отправился на аванпост. Разгрузил сколько требовалось и поехал на второй аванпост. Разгрузил и здесь сколько нужно, следом отправился на другой аванпост. Можно даже не по порядку, а в очереди приоритета. Где боеприпасы нужнее – там у ж/д станции приоритет выше – туда в первую очередь поехал разгружаться. Отсюда же на другой аванпост, где приоритет высокий. Ну вы поняли, на погрузку не возвращаться после каждой разгрузки. В депо – только на заправку. На погрузку боеприпасов только когда вагон опустел.

1. Нужен примерно такой порядок движения поезда.
1. Нужен примерно такой порядок движения поезда.

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

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

Прерывания.

Упрощённый вариант прерываний для понимания.

В общих чертах, делаем сначала основные прерывания для понимания сути. Само собой, никакого расписания не составляем. Пользоваться будем только прерываниями. И, само собой, первым прерыванием ставим проверку на топливо. Кто не знает, как это сделать, может быстро прочитать в статье о прерываниях. Вторым прерыванием будет разгрузка на аванпосте, третьим прерыванием будет погрузка боеприпасов. Вот такая упрощённая схема для быстрого понимания.

2. Упрощённая схема прерываний.
2. Упрощённая схема прерываний.

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

Модернизация логики приоритета на ж/д станциях разгрузки.

Описанная выше схема будет работать в идеале, а в реальной игре, поезд застрянет на станции разгрузки. Вот приехал он на аванпост по прерыванию разгрузки. Разгрузился на определённый объём боеприпасов. Станция прекратила разгрузку. В условии прерывания указано время бездействия на станции «3 секунды». Поезд выждал 3 секунды и должен отправиться в путь. Срабатывает перебор прерываний по списку, и вот у поезда временное расписание – ехать на станцию «Аванпост» для разгрузки. А он уже тут. Вот только разгружать его никто не хочет. Проходит 3 секунды. Поезд должен отправиться в путь. Срабатывает перебор прерываний... Ну вы поняли: дальше поезд по циклу будет перебирать одно и то же прерывание и оставаться на месте. Теоретически, через много-много времени он всё же разгрузится и всё же уедет на погрузку. Но это будет наверное не сегодня.

В условии бездействия установлено 3 секунды – это нормальный отрезок времени для ожидания. Самый простой жёлтый манипулятор за 3 секунды спокойно успевает сделать не один оборот вокруг своей оси для перекладывания груза. Поезд не успеет уехать раньше.

Проблема в том, что поезд уехать готов. Но станция не отпускает.

В данном случае у станции нет жёстких причин блокировать станционную стоянку, а поезд без жёсткой блокировки сам уехать не может. Надо чтобы выгнали. Поэтому передвигаемся на аванпост, а точнее на его ж/д станцию разгрузки боеприпасов, и начинаем модернизировать логику управляющую приоритетом станции. О логике и приоритетах на станции я писал в этой статье.

От выхода арифметического комбинатора на станцию идёт зелёный сигнальный провод. Ставим рядом сравнивающий комбинатор и на его вход кидаем ещё один зелёный сигнальный провод от того же выхода арифметического комбинатора. Настраиваем сравнивающий комбинатор таким образом: в левой части условия устанавливаем сигнал P, в правой части условия число 10. Между ними знак «>» (больше). На выход устанавливаем сигнал L и его значение равное 1.

3. Настройка сравнивающего комбинатора.
3. Настройка сравнивающего комбинатора.

Теперь из выхода сравнивающего комбинатора кидаем сигнальный провод на станцию. Здесь можно использовать как зелёный так и красный сигнальный провод, это не имеет значения, так как по зелёному у нас идёт сигнал P, а по красному сигнал L. Но, если мы оба сигнала начнём передавать по зелёным проводам, они друг другу не помешают.

Давайте разбираться для чего был нужен дополнительный комбинатор. Логика установленная на станции считает приоритет от 0 до 255 и выдаёт на станцию. Станция выставляет этот приоритет автоматически. Поезд выбирает ту станцию, на которой выше приоритет и ездит туда. Теперь мы воспользуемся сигналом приоритета чтобы жёстко указать поезду, что здесь ему не рады.

Сравнивающий комбинатор получает на вход сигнал P, в котором хранится значение приоритета для станции. Комбинатор сравнивает это значение с числом 10, которое мы установили в условии. Если приоритет выше чем 10, то станция получает сигнал L=1. На самой станции для этого ставится галочка «Установить лимит поездов». Обязательно проверьте, что там по умолчанию выставлен сигнал L. Его значение автоматически начнёт отображаться в левой части окна, в значении «Ограничить количество поездов»:

4. На станции включается галочка «Установить лимит поездов».
4. На станции включается галочка «Установить лимит поездов».

После получения сигнала L=1, станция автоматически выставит ограничение поездов в значение 1. Теперь поезд сможет приехать на станцию, если её приоритет будет выше, чем у других станций.

Пока поезд разгружается на станции, приоритет падает. Когда приоритет упадёт ниже 10 – сравнивающий комбинатор отреагирует на это отменив сигнал L. Поезд будет продолжать разгружаться до тех пор пока манипуляторы не остановятся. Тогда, если помните, по условию поезд выждет 3 секунды бездействия. А затем, как вы уже догадались, он обратит внимание, что на станцию не поступает сигнал L и станция выставила ограничение поездов в 0. То есть поезду здесь стоять нельзя. И, о чудо! Поезд будет вынужден уехать. Он проверит прерывание на разгрузку, определит, что ему нужно ехать на станцию «Аванпост», и поняв, что текущий «Аванпост» поезда не принимает – двинется на другой «Аванпост», у которого станция имеет самый высокий приоритет из всех.

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

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

Теперь про число 10. Почему в условии сравнивающего комбинатора стоит именно 10? На самом деле там может стоять любое удобное для вас значение. Во время разгрузки поезд будет думать только о разгрузке. И если в вашем условии стоит другое число, и сигнал L поменяется по вашему условию, то поезд на это не обратит внимание. Станция уже выставила значение в ограничении поездов 0, а поезд по-прежнему разгружается – у него для этого работает своё условие. И только после разгрузки он отсчитает 3 секунды бездействия и среагирует на ограничение поездов 0.

Таким же образом в сравнивающем комбинаторе может стоять условие P>0. Если станция полностью загрузилась боеприпасами из вагона, и получила самый низкий приоритет равный 0 (означающий, что станция полная и не нуждается в поездах), то тогда и сигнал L не получит значение 1, что будет равноценно 0 в ограничениях поездов на станции.

Рабочий вариант прерываний.

Выше мы рассмотрели три основных прерывания необходимые для работы поезда со станциями на аванпостах, и логику, позволяющуюосуществлять правильную работу этих прерываний. Теперь разберёмся в ошибках, которые будут возникать и произведём изменения в расписании поезда.

Первое. Поезд будет ездить по разным аванпостам и выгружать боеприпасы до тех пор, пока не опустеет. Необходимо предусмотреть вариант, когда поезд может уехать на последнюю станцию перед полным опустошением не с полным количеством боеприпасов, а с остатком, которого не хватает для разгрузки. Например, на каждой станции аванпостов из вагона изымается максимум по 100 магазинов с бронебойными патронами, а поезд приедет с 20 магазинами. То есть, будет нарушен сам принцип бесконечной езды по аванпостам, если поезд не может пополнить запас станции максимально. Естественно, этот поезд нужно повернуть на погрузку сразу, как запас боеприпасов в вагоне станет меньше необходимого.

Производим изменение в прерывании разгрузки:

5. В прерывании на разгрузку изменяется условие.
5. В прерывании на разгрузку изменяется условие.

Ранее в условии прерывания на разгрузку стояло количество боеприпасов больше нуля чтобы поезд отправился на аванпост. Теперь меняем это условие на количество боеприпасов больше или равно ста. Таким образом, если после очередной разгрузки вагон будет заполнен боеприпасами в количестве 100 или чуть больше – поезд спокойно поедет на аванпост чтобы разгрузиться на станции. Если меньше 100 – поезд на аванпост не поедет.

Хочу напомнить – у всех свои запросы и пожелания, на станциях может извлекаться не 100 магазинов с патронами, а больше или меньше. Поэтому стоит учитывать те значения, которые важны в вашей игре, в ваших условиях.

Второе. В условии прерывания на погрузку ранее мы использовали 0 боеприпасов чтобы отправиться на станцию погрузки. Но учитывая сказанное выше, в прерывании на погрузку меняем условие на количество боеприпасов меньше ста. Теперь прерывание сработает, если в вагоне осталось меньше 100 магазинов с бронебойными патронами. И поезд отправится на погрузку:

6. В прерывании на погрузку меняется условие.
6. В прерывании на погрузку меняется условие.

Третье. Как бы прекрасно не выглядели наши прерывания после внесённых изменений, нельзя забывать о случайностях, которые могут произойти, и от которых необходимо заранее подстраховаться. Обычно в таких случаях бывают следующие случайности, для которых делаются отдельные прерывания: станции разгрузки заняты, станции погрузки заняты, непонятно что происходит и куда ехать, нет пути или станция отсутствует.

  • Станции разгрузки на аванпостах могут быть заняты, если аванпостов мало, а поездов достаточно чтобы занять все станции.
  • Станции погрузки могут быть заняты даже чаще, чем станции разгрузки.
  • Когда возникает желание что-то переименовать пока поезд собирается ехать или хочется что-нибудь перестроить по-быстрому, может возникнуть ситуация, что поезд «потерялся» и не понимает что делать. Прерывания не имеющие постоянного расписания переводят локомотив в ручной режим в таких ситуациях. Чтобы не допустить этого, добавляется прерывание, которое просто отправляет поезд в депо. Но ставится это прерывание предпоследним в списке прерываний.
  • Последним прерыванием будет проверка на отсутствие пути или станции. Это казалось бы похожая ситуация на ту, что была описана выше, но нет. Представьте, что поезд уже ехал на станцию, но жуки сгрызли рельсы. Или станцию. Вот теперь сработает это прерывание.

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

Наши прерывания в конечном виде будут такими:

7. Окончательный список прерываний для поезда развозящего боеприпасы по аванпостам.
7. Окончательный список прерываний для поезда развозящего боеприпасы по аванпостам.

Послесловие.

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

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

Также боеприпасы могут быть разные. А в вагонах могут быть закреплённые за конкретными разными боеприпасами ячейки хранения. Или разные вагоны могут везти разные боеприпасы. В любом случае всё это можно при необходимости дополнительно прописать в прерываниях и учесть в логике подсчёта приоритета на станциях разгрузки.

Этот же способ доставки грузов можно применять для перевозки ресурсов. Как пример, может быть две, три или четыре станции разгрузки шестерней, из которые нужно доставлять по 200 шестерней на производства за один цикл. Один поезд может проезжать все станции и выгружать по 400 или по 600 шестерней за раз, не возвращаясь на погрузку.

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

Чертежи.

К этой статье нет чертежей. Чертежи к другим статьям (и не только к статьям) можно скачать в текстовых файлах в моём канале Telegram и в чате с чертежами.

-----------------------------------------

Прямая ссылка на мой канал Telegram: https://t.me/format_aa

☕️ Если вы хотите угостить меня кофе или вкусняшкой за старания, сделать это можно с помощью доната: https://boosty.to/format_aa/donate

-----------------------------------------

Подпишись на канал и узнавай больше +

#Формат_АА
#Factorio
#схема
#чертежи
#приоритет
#поезд
#расписание
#прерывания