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

После прерывания поезд останавливается. Как в Factorio сделать чтобы снова ехал?

Статья про тонкости игрового процесса в игре Factorio. В этой статье поговорим о проблеме с прерываниями в игре Factorio, когда поезда останавливаются после выполнения прерываний и не едут. Буквально каждый, или почти каждый, кто пробовал использовать прерывания, мог столкнуться с такой ситуацией, когда поезд выполнил движение по расписанию в прерывании, а затем встал. Встал намертво и стоит. И свободные станции есть чтобы поехать, и путь свободен, но поезд уже не трогается с места. Давайте разбираться, почему так происходит. Вероятно, я не Нострадамус и не умею предсказывать, но вот что я думаю по поводу ваших остановившихся поездов: Если с первыми двумя проблемами можно самостоятельно разобраться, внимательно изучив все дороги, станции и расписания, то вот следующие две проблемы не всегда очевидны для новичков или тех, кто раньше не пользовался прерываниями. Но сначала ещё раз нужно обозначить главный тезис: если у вас есть основное постоянное расписание, и там дополнительно присутст
Оглавление

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

В этой статье поговорим о проблеме с прерываниями в игре Factorio, когда поезда останавливаются после выполнения прерываний и не едут.

Предисловие

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

Решение проблемы

Вероятно, я не Нострадамус и не умею предсказывать, но вот что я думаю по поводу ваших остановившихся поездов:

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

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

Порядок прерываний

Итак, необходимо уяснить важную мысль — порядок прерываний в расписании поезда должен быть последовательным, прерывания в списке нельзя перемешивать как попало:

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

Что для локомотива всегда важнее любой ж/д станции и любых ресурсов? Верно — топливо. Не будет топлива — хоть трижды поменяй расписание и построй широкие ж/д магистрали — поезд не тронется с места. Соответственно, прерывание с топливом всегда должно стоять первым в списке.

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

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

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

Но вот прерывание с проверкой на отсутствие пути нужно ставить самым последним. И только так. Почитать об этом можно тут. Дело в том, что проверка на отсутствие пути должна быть выполнена уже после того как были проверены условия на топливо, на разгрузку, погрузку, занятые станции, депо и прочее. Если прерывание с проверкой на отсутствие пути будет где-то в начале или середине, то любая занятая станция может показаться локомотиву отсутствием пути. И это прерывание сработает. При этом не сработают все следующие прерывания.

Ожидание при выполнении прерываний

С порядком прерываний разобрались выше, но как быть, если поезда всё равно останавливаются, когда их много на станциях и они мешают друг другу проехать? Правильно — строим Депо.

А если Депо есть, но поезда приезжают туда и останавливаются навечно, при этом переключатель работы в локомотиве не выключается в ручной режим, а остаётся в режиме «Авто»? Тут всё сложнее. Вернее решается это легко, но ситуация сложная. Обычно много поездов занимают часть дорог, вставая где-то перед перекрёстками или перед занятыми ж/д станциями. Все подъездные пути забиты поездами. Те поезда, которые уехали в Депо и хотят продолжить свой путь — просто не могут это сделать, так как некуда пристроиться. Чтение прерываний прекращается.

Подобная ситуация, например, может случиться на планете Фульгора с её маленькими островами в мазутном океане. С островов на острова прокинуты железные дороги, на станциях стоят поезда, перед станциями стоят поезда, много поездов, все куда-то спешат, много ресурсов перерабатывается, сортируется, перевозится. Важно понять, как поезд должен себя вести чтобы не возникало случаев с остановками.

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

По логике поезд должен проверить: а не заняты ли станции разгрузки или погрузки в соответствии с имеющимся или не имеющимся в поезде грузом? И, если что-то из этого верно, ну, то есть станции заняты то уехать в Депо и... внимание!.. необходимо отсчитать 5 секунд бездействия. А там поезд снова пробегает по всем прерываниям, снова добирается до прерывания «Станция занята». Проверяет, что станции заняты и опять отсчитывает 5 секунд бездействия. И так по кругу, до тех пор, пока любая из нужных станций не освободится и на неё не сработает соответствующее прерывание.

2. Настройка прерывания «Станция занята».
2. Настройка прерывания «Станция занята».

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

Теперь обратите внимание на рисунок 2 — тут используются сортировочные поезда, они возят сразу 12 ресурсов. Поэтому в прерываниях при проверке опустевшего поезда приходится указывать условия для всех 12 ресурсов.

По прерыванию «Станция занята»: есть проверка станции разгрузки, и есть проверка станции погрузки с проверкой всех ресурсов на их заканчивание до нуля. Обе проверки собраны через оператор ИЛИ. В целях, естественно, указана станция Депо и ожидание бездействия 5 секунд. Этих 5 секунд хватит чтобы где-то что-то произошло и появилась свободная станция. А если нет, то 5 секунд посчитаются снова.

Ну, и в самом конце списка прерываний расположено прерывание «Нет пути», оно используется всегда для предотвращения застревания поездов посреди железных дорог. В предыдущих моих статьях о прерываниях можно почитать о нём подробнее. В этом прерывании также необходимо в «Целях» добавить к станции Депо условие на 1 секунду бездействия. Чтобы поезд приехал и запустил проверку всех прерываний с начала. Здесь 1 секунды хватит, так как одноразовая задача этого прерывания не в ожидании, а в доставке поезда в Депо.

Чертежи.

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

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

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

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

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

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

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