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

Перевозим разные ресурсы одним поездом с помощью прерываний в Factorio.

Статья про тонкости игрового процесса в игре Factorio. В этой статье разберём прерывания в расписании поездов в Factorio, и используем их в примере перевозки разных ресурсов. Если вы слабо понимаете что такое прерывания и как настраивать расписание в поездах, то предлагаю начать чтение с предыдущих статей: 1) как создавать расписание для поездов, 2) как использовать одинаковое название для разных ж/д станций с похожим назначением, 3) как создавать прерывания в расписании поездов. Прерывания в Factorio стали неотъемлемой частью расписаний поездов в игре. Разберёмся каким образом можно выстроить на прерываниях доставку разных ресурсов одним и тем же поездом (поездами). Внимание! Вариант использования прерываний описанный в этой статье не является самым оптимальным и лучшим. Он превосходит обычные расписания по своим возможностям и может быть использован игроками, не желающими глубоко вникать в тему прерываний. Подходит для новичков, и опытных игроков, осваивающих прерывания так как не сл
Оглавление

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

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

Вступление.

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

Прерывания в Factorio стали неотъемлемой частью расписаний поездов в игре. Разберёмся каким образом можно выстроить на прерываниях доставку разных ресурсов одним и тем же поездом (поездами).

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

Устройство железной дороги и станций.

Давайте представим нашу железную дорогу как маленькое депо на 3 станции с одинаковыми названиями «Депо», 1 станции железных плит, 1 станции медных плит, и по 1 станции на разгрузку тех и других плит. Итого: 7 станций. И добавим сюда пока 1 поезд формата 1+1 (как рассчитать свой поезд, длину, скорость – в этой статье):

1. Железная дорога со станциями.
1. Железная дорога со станциями.

Итак, в станциях погрузки и разгрузки устанавливаем ограничение количества поездов по 1:

2. На станциях погрузки/разгрузки установлено ограничение количества поездов 1.
2. На станциях погрузки/разгрузки установлено ограничение количества поездов 1.

Названия станциям для упрощения даём так: «[значок ресурса]Погрузка» и «[значок ресурса]Разгрузка»:

3. Названия станций.
3. Названия станций.

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

Расписание и прерывания.

Ну, а теперь, начнём рассматривать самое важное – расписание и прерывания. Как я уже упоминал, в расписании стоит станция «Депо». В ней одно условие, это заправка поезда под завязку – «Все локомотивы полностью заправлены»:

4. В расписании остановка «Депо» с условием «Все локомотивы полностью заправлены».
4. В расписании остановка «Депо» с условием «Все локомотивы полностью заправлены».

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

5. Настройка прерывания «Железные плиты».
5. Настройка прерывания «Железные плиты».

Второе прерывание на перевозку медных плит с названием «Медные плиты» со значком в начале названия. Условие как и в предыдущем случае: станция погрузки медных плит не занята, а цели: полная погрузка медных плит на станции погрузки и полная разгрузка медных плит на станции разгрузки:

6. Настройка прерывания «Медные плиты».
6. Настройка прерывания «Медные плиты».

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

Нажатием переключателя «Авто» запускаем поезд. Срабатывает самое первое (верхнее) прерывание с железными плитами, и поезд прибывает на погрузку железных плит:

7. Поезд на погрузке железных плит.
7. Поезд на погрузке железных плит.

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

После полной погрузки поезд трогается с места к следующему временному пункту расписания – станции разгрузки железных плит, а временная станция «Погрузка» исчезает из расписания:

8. Поезд на разгрузке железных плит.
8. Поезд на разгрузке железных плит.

Но теперь сюрприз! После выгрузки железных плит, из расписания исчезает временная станция разгрузки, но поезд не отправляется на станцию «Депо» как это указано в его расписании. Вместо этого снова срабатывает первое (самое верхнее) прерывание «Железные плиты» и поезд вновь уходит на погрузку железных плит. А затем снова на разгрузку. И снова на погрузку... И так происходит бесконечно.

Нас начинает волновать вопрос: а почему не работает прерывание с медными плитами? Ответ очевиден – потому, что перед ним (выше по списку) находится другое прерывание, которое срабатывает первым. Давайте проведём эксперимент и на станции погрузки железных плит установим ограничение количества поездов в значение 0:

9. Количество поездов ограничено до нуля.
9. Количество поездов ограничено до нуля.

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

10. Поезд прибыл на погрузку медных плит.
10. Поезд прибыл на погрузку медных плит.

Как и в предыдущий раз – локомотив изменил свой цвет в цвет станции погрузки медных плит.

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

Продолжая разбор происходящего, устанавливаем в станции погрузки медных плит ограничение количества поездов в значение 0:

11. Количество поездов ограничено до нуля.
11. Количество поездов ограничено до нуля.

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

12. Поезд направляется на станцию «Депо».
12. Поезд направляется на станцию «Депо».

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

Пункт 1. Это всё неправильно из-за того, что всегда срабатывает только первое прерывание и поезд ездит только на железные плиты.

Пункт 2. Это всё неправильно из-за того, что даже заблокировав железные плиты мы отправляем поезд на медные плиты, где он «зависает» на бесконечных погрузках/разгрузках.

Пункт 3. Это всё неправильно и потому, что при любом описанном выше раскладе поезд никак не может достигнуть станции «Депо» и получить топливо. Значит, он остановится где-то на полпути.

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

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

Пункт 3 вытекает из пунктов 1 и 2, так как они, зациклившись, не дают поезду попасть на станцию «Депо». И вот это важно решить в первую очередь создав ещё одно прерывание. Начнём именно с этого.

Создаём новое прерывание с названием «[значок топлива]Топливо». Выставляем в условии проверку на количество топлива в локомотиве. И при условии, что топливо = 0 (или по вашему усмотрению = 1 или = 2 или иначе) прерывание срабатывает. Цель прерывания – это как раз станция «Депо», где по условию поезд должен будет заправиться под завязку.

Только учтите – это прерывание должно находиться самым первым в списке, то есть выше других! Иначе оно не прочитается, пока поезд циклично ездит на погрузки/разгрузки. Для этого хватаем настроенный пункт прерывания и перетягиваем его в верх списка:

13. В самом верху списка установлено прерывание «Топливо».
13. В самом верху списка установлено прерывание «Топливо».

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

Теперь, если запустить поезд по маршруту, то он снова начнёт зацикливаться на станциях либо по пункту 1, либо по пункту 2, но зато поезд не встанет посреди дороги без топлива, а вернётся на станцию «Депо» для заправки.

Чтобы разрушить порочный круг погрузок/разгрузок из пунктов 1 и 2 добавляем второй поезд. Но перед этим в расписании первого локомотива дадим группе поездов с нашим расписанием название – «Плиты»:

14. Название группы поездов «Плиты».
14. Название группы поездов «Плиты».

Теперь щёлкаем по второму локомотиву и в нём нажимаем на кнопку с карандашом возле названия группы поездов:

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

Выбираем из выпавшего списка нашу группу «Плиты» и применяем её. Теперь у второго поезда такое же расписание, как у первого, и те же самые прерывания.

Переходим к нашим станциям погрузки, возвращаем им ограничение количества поездов на 1. Запускаем оба поезда. Видим картину, которая радует глаз – оба поезда приехали на разные станции погрузки:

16. Оба поезда стоят на разных станциях погрузки.
16. Оба поезда стоят на разных станциях погрузки.

Пробежимся по расписанию и прерываниям поездов для понимания происходящего:

  1. Первый поезд тронулся и у него сработало первое прерывание – проверка топлива. Условие не совпало так как локомотив под завязку заправлен.
  2. После прерывания с топливом сработало прерывание идущее следом по списку (расположенное ниже) – прерывание по железным плитам. Станция погрузки железных плит пуста – поезд направился туда на погрузку.
  3. Второй поезд также проверил топливо и перешёл на следующее прерывание. Станция железных плит оказалась занята. Прерывание не сработало.
  4. Второй поезд проверил следующее прерывание – по медным плитам. Станция погрузки медных плит оказалась пуста и он отправился на неё.

Получается, что, если поездов больше одного, то они равномерно разъезжаются по разным станциям и выполняют соответствующие прерывания.

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

«Но как же станция «Депо» в расписании? Зачем она тогда нужна, если поезда на неё ездят только в прерывании по топливу?» – Спросит догадливый читатель. Если у вас возник такой вопрос – ставьте лайк внизу статьи. Способность мыслить широко – вызывает уважение.

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

А теперь добавляем в нашу рабочую схему один «лишний» поезд.

17. Третий поезд направился по расписанию.
17. Третий поезд направился по расписанию.

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

  1. Разгрузил железные плиты, проверил прерывание на топливо, дальше нужно решать куда ехать – станция с железными плитами занята.
  2. Можно ехать на станцию с медными плитами, там сейчас пусто. Перекрашивается в цвет этой станции, едет на погрузку медных плит.
  3. Если станция погрузки медных плит занята как и станция погрузки железных плит, то срабатывает обычное расписание – поезд уходит на станцию «Депо».

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

В то же время, наши поезда не будут накапливаться возле станции разгрузки, так как мы заблаговременно установили на станциях разгрузки ограничения поездов 1. Реши мы сделать дополнительные погрузочно-выгрузочные пути перед станциями разгрузки, чтобы поезда могли приезжать и скапливаться в ожидании очереди разгрузки – нам бы пришлось указать в ограничениях станций другое количество поездов, например 2 или 3 или больше. Тогда все наши поезда собрались бы с одними железными плитами на разгрузке железных плит и стояли бы в очереди, разгружаясь друг за другом. А медные плиты конечно бы пустовали.

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

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

Применение в игре.

Очень удобно применять использовавшийся выше пример в игре. Вводные такие: имеются несколько месторождений железной руды, медной руды, камня. Нужно всё это возить и выгружать на главную шину. Возле шины построены ж/д станции принимающие по 2 поезда для разгрузки на шину (можно сделать сколько удобно). Где-то строится депо и устанавливаются манипуляторы с топливом. Все ж/д станции погрузки ресурсов именуются одинаково, только различаясь в названии по ресурсу. Так же и со станциями разгрузки – названия одинаковые, но отличающиеся по ресурсу. Создаются прерывания как в примере из этой статьи. Устанавливается количество поездов с запасом. Например на 3 станции разгрузки поездов – по 6 поездов (3 станции по 2 поезда) + 6 месторождений (не спрашивайте каких ресурсов, я наугад придумал, ведь это не имеет значение) по 1 поезду. Ну, и можно на запас ещё 1 или 2 поезда добавить. А можно и не добавлять. Депо расширяется до того количества поездов, которое мы насчитали: 6 + 6 = 12 + 1 запасной = 13 поездов. Все поезда получают одну группу с расписанием и прерываниями.

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

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

Чертежи.

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

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

Прямая ссылка на чертежи для статьи в моём канале Telegram: https://t.me/format_aa/245

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

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

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

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