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

Виртуальные сигналы в прерываниях. Параметр топлива в Factorio

Статья про тонкости игрового процесса в игре Factorio. В этой статье поговорим о виртуальном сигнале в игре Factorio — о параметре топлива. Это вторая статья из трёх о виртуальных сигналах. В этой статье говорится о параметре топлива. (Первая статья о параметре предмета и параметре жидкости. Третья статья о параметре сигнала) В предыдущей статье я уже знакомил читателя с железной дорогой и 1 поездом, которые используются мною для всего цикла статей о виртуальных сигналах: В текущей статье поезд будет ездить по всей железной дороге, в зависимости от своего расписания. Но нас будут интересовать, в основном, искусственно созданные заправки в Депо с разным топливом. Краткое описание задачи поезда для этой статьи: поезд развозит боеприпасы по станциям разгрузки на аванпостах, иногда возвращается на погрузку боеприпасов, и снова уезжает на развозку. Иногда, когда заканчивается топливо, поезд должен по прерыванию поехать на одну из станций Депо чтобы заправиться. Параметр топлива используется
Оглавление

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

В этой статье поговорим о виртуальном сигнале в игре Factorio — о параметре топлива.

Предисловие

Это вторая статья из трёх о виртуальных сигналах. В этой статье говорится о параметре топлива. (Первая статья о параметре предмета и параметре жидкости. Третья статья о параметре сигнала)

Вводные данные

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

1. Имитация железной дороги для статьи с 1 поездом.
1. Имитация железной дороги для статьи с 1 поездом.

В текущей статье поезд будет ездить по всей железной дороге, в зависимости от своего расписания. Но нас будут интересовать, в основном, искусственно созданные заправки в Депо с разным топливом.

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

Параметр топлива

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

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

Как это работает

Пример создания прерывания с виртуальным значком параметра топлива мы видим на рисунке ниже. Это использование подставного значка в начале названия станции.

2. Использование виртуального сигнала параметра топлива для создания названия станции в прерывании.
2. Использование виртуального сигнала параметра топлива для создания названия станции в прерывании.

Что даст использование этого значка в названии станции? Вместо подставного значка установится значок топлива и поезд уедет на соответствующую станцию погрузки соответствующего топлива. Давайте посмотрим, как сейчас обстоят дела с топливом локомотива:

3. В локомотиве есть разное топливо.
3. В локомотиве есть разное топливо.

Сейчас в ячейках хранения топлива в локомотиве лежат древесина, уголь, ракетное топливо. Если вернуться к предыдущему рисунку (рисунок 2) и посмотреть условие для прерывания, то между всеми пунктами, указывающими сколько топлива должно остаться для срабатывания, стоит логический оператор И. Это означает, что И одного топлива И другого топлива И остальных должно одновременно стать меньше указанных в соответствующих им условиях. Не какого-то одного должно стать меньше, чем указано, а сразу всех стать меньше, чем у каждого из них указано. И вот только тогда прерывание сработает, а поезд получит новое временное расписание на дозаправку топливом.

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

4. Вручную уменьшено количество каждого топлива.
4. Вручную уменьшено количество каждого топлива.

Частично топливо было изъято из локомотива. Теперь поезд должен увидеть, что каждого топлива мало и пора ехать на дозаправку. Как вы помните из рисунка 2, в целях прерывания вручную прописана такая станция: [виртуальный значок параметра топлива] + [название станции: Депо]. Чтобы создалось настоящее название, поезд должен выяснить какое топливо осталось в локомотиве и подставить его вместо виртуального значка. А в локомотиве у нас осталось разное топливо. Значит произойдёт сортировка по ID и первое в этом списке топливо подставится вместо параметра топлива в названии станции.

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

5. Поезд прибыл на станцию заправки древесиной.
5. Поезд прибыл на станцию заправки древесиной.

Посмотрите на рисунок 5. Здесь видно, что во временном расписании значок древесины подставился вместо виртуального параметра топлива и сформировал верное название станции. Поэтому поезд смог прибыть по назначению.

Но теперь есть нюанс на самой заправке. Древесина будет загружена в хранилище локомотива в полном объёме, насколько позволяет занятое ею место в ячейках. А вот остальное топливо поезд не поедет заправлять в локомотив. Да ещё и встанет здесь, на станции заправки древесиной, и останется стоять навечно. Почему так?

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

Можно предположить, что если бы в прерывании на проверку топлива между условиями на лимит топлива стоял не логический оператор И, а стоял бы логический оператор ИЛИ, то тогда при любом заканчивающемся топливе поезд следовал бы на ту станцию заправки, которая относится к этому самому топливу:

6. Вместо логического оператора И установлен логический оператор ИЛИ.
6. Вместо логического оператора И установлен логический оператор ИЛИ.

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

И вместо заправки ракетным топливом, поезд поедет заправляться древесиной.

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

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

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

Другой пример использования виртуального сигнала параметр топлива наглядно показан на следующем рисунке:

7. В условии прерывания использован виртуальный сигнал параметра топлива.
7. В условии прерывания использован виртуальный сигнал параметра топлива.

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

То есть, по-прежнему, у нас есть в локомотиве древесина, уголь и ракетное топливо, но в значок параметра топлива будет установлена древесина, так как она идёт первая в этом списке по ID. Заметьте, что на рисунке 7 в условии стоит, как и ранее было для древесины: <80. Это значит, что если по какой-то причине, древесина и уголь выгорят, и останется только ракетное топливо, то оно даже при полной погрузке в локомотив всё равно будет меньше 80. Ведь размер пачки ракетного топлива всего лишь 20. А ячеек хранения топлива в локомотиве всего 3. Отсюда 20х3=60 ракетного топлива всего. То есть, мы сами же не даём своим условием использовать разное топливо.

Стоп, но не проблема поставить условие [виртуальный сигнал параметра топлива] <10, например. Да, не проблема. Только древесина или уголь могут выгореть при таком условии ещё до того как поезд приедет на станцию заправки. И поезд остановится на путях.

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

Выводы

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

8. Созданы несколько прерываний на различное топливо.
8. Созданы несколько прерываний на различное топливо.

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

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

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

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

Чертежи

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

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

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

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

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

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

#Формат_АА
#Factorio
#схема
#чертежи
#прерывание
#расписание
#виртуальный_сигнал
#параметр_топлива