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

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

Оглавление

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

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

Предисловие

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

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

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

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

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

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

2. Рабочая часть железной дороги, используемая в статье.
2. Рабочая часть железной дороги, используемая в статье.

Кратко ознакомлю уважаемых читателей с представленной железной дорогой прежде, чем перейдём к сути. Здесь 1 станция погрузки магазинов с бронебойными патронами (слева). Здесь несколько (8 штук) аванпостов, которых, кстати, можно сделать любое количество. Все аванпосты имитируют периодическую растрату боеприпасов выкидывая их на ленту. На всех аванпостах используется логика, которая задаёт приоритет станциям в зависимости от запаса боеприпасов. Чем меньше боеприпасов, тем выше приоритет — поезд будет в первую очередь ездить именно туда. Где боеприпасов много — станция устанавливает ограничение поездов в ноль и не принимает поезд. Дорога закольцована параллельной веткой чтобы поезд делал разворот на кольце, не заезжая на станцию погрузки, и вновь ехал на аванпосты.

Про топливо будем говорить в следующей статье, поэтому считаем, что его достаточно в локомотиве.

Задача поезда: возить боеприпасы на все аванпосты. В локомотиве три прерывания: проверка на топливо, на разгрузку и на погрузку (как их установить можно почитать тут). Но в этот раз в прерываниях будут использоваться подставные виртуальные сигналы.

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

Параметр предмета и параметр жидкости

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

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

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

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

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

3. Прерывание погрузки с подставным виртуальным сигналом «Параметр предмета».
3. Прерывание погрузки с подставным виртуальным сигналом «Параметр предмета».

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

Таким образом, вручную устанавливая новый поезд на рельсы и присваивая ему группу поездов или создавая новое расписание, необходимо убедиться, что в него уже грузится необходимый ресурс. А для этого установку поезда желательно произвести на самой станции погрузки. Можно также произвести установку в любом другом месте, но в вагон кинуть тот ресурс, который необходим поезду для создания правильного расписания. С жидкостью, к сожалению, такое не провернуть вне станции погрузки (ведь налить жидкость в вагон-цистерну руками не получится). Кинув в вагон ресурс, смело запускайте прерывание погрузки — сработает временное расписание и поезд уедет на погрузку текущего ресурса, который лежит в вагоне.

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

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

Теперь о станциях. Если мы желаем отправлять поезд с ресурсами на станцию с этими самыми ресурсами, не важно, погрузка это или разгрузка, то чтобы поезд не перепутал, куда везти именно этот самый ресурс — нужно указать точно как будет называться станция для этого ресурса. Думаю, это всем понятно. Самый простой способ здесь (но не единственный) — это назвать станции словами «Погрузка» и «Разгрузка», но в этих названиях обязательно установить значок того ресурса, который будет здесь загружаться или разгружаться. Например, на рисунке 2 все станции как будто бы являются далёкими аванпостами и предназначены для разгрузки магазинов с бронебойными патронами. Вот для названий этих станций используется такая связка: [значок магазина с бронебойными патронами] + [название станции: Аванпост]. Если потребуется построить другую станцию аванпоста, для другого ресурса, то в названии будет использован значок того другого ресурса.

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

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

То же самое и с разгрузкой. Как и на рисунке 3, мы видим на рисунке 4 такие же виртуальные сигналы с параметром предмета в названии станции аванпоста в окне редактирования прерывания разгрузки:

4. Прерывание разгрузки с подставным виртуальным сигналом «Параметр предмета».
4. Прерывание разгрузки с подставным виртуальным сигналом «Параметр предмета».

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

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

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

5. После погрузки поезд создал правильное расписание из прерывания разгрузки.
5. После погрузки поезд создал правильное расписание из прерывания разгрузки.

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

6. Поезд на разгрузке.
6. Поезд на разгрузке.

В обычной игре я бы дал поезду полностью разгрузиться, а потом бы создал ему условия для отправки на погрузку. Но в этой статье покажу как обезопасил поезд от застревания на разгрузке. А конкретно: поезд выгрузит весь ресурс и вагон опустеет. Должно сработать прерывание на погрузку, но ресурса в вагоне нет, подставить вместо виртуального сигнала нечего. Прерывание не может сработать. Чтобы такого не случилось, в разгрузке использовано условие [боеприпасы] ≤ 13. Там ещё условие ИЛИ бездействие 3 секунды, но это уже для случая, когда станция доверху заполнилась и больше не выгружает из поезда боеприпасы.

Итак, смотрите рисунок 6. В расписании установлено условие ≤13 не просто так. Манипулятор не должен выгрузить из вагона последний ресурс, должен оставить хотя бы 1 магазин с патронами. Если при срабатывании условия ≤13 в вагоне было 13 магазинов с патронами, манипулятор может не успеть среагировать и схватит свой максимум — 12 магазинов с патронами. 1 магазин останется в вагоне. Чего и требовалось добиться для безопасного расписания. Теперь поезд сможет создать новое расписание, ведь ресурс в вагоне остался, виртуальные сигналы подменяются значком магазина с боеприпасами как и положено.

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

7. Поезд отправился на погрузку.
7. Поезд отправился на погрузку.

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

Но заметьте из рисунка, что в вагоне осталось 8 магазинов с бронебойными патронами. Таким образом поезд не «потерялся» и точно знал, на какую именно станцию погрузки он поедет — наличие ресурса обеспечило указание станции.

Выводы

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

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

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

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

Значки ресурсов (как и виртуальные сигналы) в названиях станций могут стоять как в начале, так и в конце. Но при этом, все названия должны иметь одинаковый формат написания, и в условиях прерываний стиль написания должен повторяться: если все значки в названиях станций в начале — виртуальные сигналы тоже вначале. И, наоборот: если все значки после названий — то и все виртуальные сигналы тоже после названий.

Чертежи

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

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

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

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

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

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

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