diff --git a/.vscode/settings.json b/.vscode/settings.json index bdf20b3..25410be 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,6 +17,7 @@ ], "Lua.workspace.userThirdParty": [ "/home/mami/.config/Code/User/workspaceStorage/fdae937c5189f993d370b36f3104188f/justarandomgeek.factoriomod-debug/sumneko-3rd", + "/home/mami/.config/Code/User/workspaceStorage/95c2a8450056100ba3db30ac2a468857/justarandomgeek.factoriomod-debug/sumneko-3rd" ], "Lua.diagnostics.globals": [ "__DebugAdapter", diff --git a/cybersyn/locale/ru/base.cfg b/cybersyn/locale/ru/base.cfg index 86065a4..3718c2c 100644 --- a/cybersyn/locale/ru/base.cfg +++ b/cybersyn/locale/ru/base.cfg @@ -1,51 +1,51 @@ [mod-setting-name] -cybersyn-enable-planner=Включить централизованное планирование -cybersyn-ticks-per-second=Обновления централизованного планирования в секунду -cybersyn-update-rate=Частота обновления централизованного планирования +cybersyn-enable-planner=Включить центральный планировщик +cybersyn-ticks-per-second=Обновлений центрального планировщика в секунду +cybersyn-update-rate=Частота операций в обновлении центрального планировщика cybersyn-request-threshold=Пороговое значение запроса по умолчанию cybersyn-priority=Приоритет по умолчанию -cybersyn-locked-slots=Заблокированные по умолчанию слоты для каждого грузового вагона +cybersyn-locked-slots=Количество заблокированных по умолчанию слотов для каждого грузового вагона cybersyn-network-flag=Маска сети по умолчанию cybersyn-fuel-threshold=Топливный порог -cybersyn-depot-bypass-enabled=Включение обхода депо -cybersyn-warmup-time=Время прогрева станции (сек) -cybersyn-stuck-train-time=Время ожидания застрявшего поезда (сек) -cybersyn-allow-cargo-in-depot=Разрешить хранение грузов на депо -cybersyn-invert-sign=Инвертировать вывод комбинатора (устарел) +cybersyn-depot-bypass-enabled=Разрешить пропуск депо +cybersyn-warmup-time=Время "прогрева" станции (сек) +cybersyn-stuck-train-time=Таймаут застревания поезда (сек) +cybersyn-allow-cargo-in-depot=Разрешить поезда с грузом в депо +cybersyn-invert-sign=Инвертировать вывод комбинатора (устаревший параметр) [mod-setting-description] -cybersyn-enable-planner=Включите или отключите алгоритм централизованного планирования. Если этот параметр отключен, новые поезда отправляться не будут. +cybersyn-enable-planner=Включает или отключает алгоритм централизованного планирования. Если этот параметр отключен, новые поезда отправляться не будут. cybersyn-ticks-per-second=Сколько раз в секунду центральный планировщик должен обновлять состояние сети и планировать доставки. Это значение будет округлено до делителя 60. Установка этого значения в 0 остановит все отправки. -cybersyn-update-rate=Сколько станций на тик можно опросить одновременно или могут быть запланированы доставки одновременно. Большее число позволяет центральному планировщику быть в курсе текущего состояния сети, но за счёт производительности. -cybersyn-request-threshold=Порог запроса по умолчанию, когда на станцию не подается сигнал порога запроса. Когда станция получает отрицательный сигнал товара, который превышает порог ее запроса, до тех пор, пока существует какая-либо станция с положительным сигналом, превышающим порог запроса, доставка этого товара будет запланирована между двумя станциями. -cybersyn-priority=Приоритет по умолчанию, когда сигнал приоритета не подается на станцию, склад или заправщик. Станции с более высокими приоритетами будут получать доставки раньше станций с более низкими приоритетами. -cybersyn-locked-slots=Количество заблокированных ячеек по умолчанию на грузовой вагон, когда на станцию не подается сигнал "заблокированные ячейки на грузовой вагон". Когда на станции-снабжения заблокированы ячейки для каждого грузового вагона X, любой поезд, пытающийся осуществить доставку с нее, изменит свои заказы, так что в каждом грузовом вагоне останется пустым по крайней мере X ячеек для товаров. Это необходимо для правильной работы станций снабжения нескольких товаров. +cybersyn-update-rate=Сколько станций за одно обновление планировщика могут быть опрошены или запланированы на доставку одновременно. Большее число позволяет центральному планировщику быстрее актуализировать состояния сети, но за счёт снижения производительности. +cybersyn-request-threshold=Порог запроса по умолчанию, когда на станцию не подается сигнал порога запроса. Если станция получает отрицательный сигнал предмета, превышающий ее порог запроса, а также существует какая-либо станция с положительным сигналом этого же предмета, превышающим тот же порог, тогда будет запланирована доставка этого предмета между этими двумя станциями. +cybersyn-priority=Приоритет по умолчанию, когда сигнал приоритета не подается на станцию, депо или заправку. Станции с более высоким приоритетом будут получать доставки раньше станций с более низким приоритетом. +cybersyn-locked-slots=Количество заблокированных ячеек на грузовой вагон по умолчанию, когда на станцию не подается сигнал "заблокированные ячейки на грузовой вагон". Когда станция снабжения настроена на X заблокированных ячеек для каждого грузового вагона. Любой поезд, пытающийся осуществить доставку с нее, изменит свои запросы таким образом, чтобы в каждом грузовом вагоне всегда оставались пустыми по крайней мере X ячеек. Это необходимо для правильной работы станций, снабжающих несколькими разными предметами одновременно. cybersyn-network-flag=Набор подсетей по умолчанию, которые станция будет обслуживать, когда на станцию не подается сетевой сигнал. Это целое число интерпретируется побитово, чтобы дать 32 возможных подсети на выбор. -cybersyn-fuel-threshold=Какой процент запасов топлива в поезде должен быть заполнен, чтобы пропустить дозаправку. Если это значение равно 1, поезда всегда будут посещать заправочную станцию после завершения доставки. -cybersyn-depot-bypass-enabled=Если этот флажок установлен, то, когда поезд завершает доставку и дозаправку, он может принять новый заказ от сети, прежде чем вернуться в свое депо. -cybersyn-warmup-time=Сколько секунд кибернетический комбинатор будет ждать, прежде чем подключиться к сети Cybersyn. Это льготный период для изменения или исправления кольцевой сети до того, как поезда начнут отправляться на новую станцию созданную из чертежа. +cybersyn-fuel-threshold=Какой процент запасов топлива в поезде должен быть, чтобы пропустить дозаправку. Если это значение равно 1, поезда всегда будут посещать заправочную станцию после завершения доставки. +cybersyn-depot-bypass-enabled=Если этот параметр включен, то, когда поезд завершает доставку и дозаправку, он может сразу начать выполнять новую доставку вместо возврата в свое депо. +cybersyn-warmup-time=Сколько секунд кибернетический комбинатор будет ждать, прежде чем подключиться к сети Cybersyn. Это льготное время, чтобы успеть измененить или исправить логическую сеть до того, как поезда начнут отправляться на новую станцию, созданную из чертежа. cybersyn-stuck-train-time=По истечении этого количества секунд с момента отправки поезда будет отправлено оповещение, сообщающее вам, что поезд, вероятно, застрял и не завершил свою доставку. Игроку, скорее всего, придется отлаживать свою сеть, чтобы освободить поезд. -cybersyn-allow-cargo-in-depot=Если этот флажок установлен, поездам будет разрешено иметь груз на депо; никаких предупреждений генерироваться не будет, и поезд не будет остановлен. Кроме того, поезда с заказами на посещение станций-отправителей с отметкой "Состояние бездействия" будут ожидать бездействия вместо ожидания порожнего груза. Полезно для создания железнодорожных систем, в которых склады обрабатывают избыточный груз. Только для продвинутых пользователей. -cybersyn-invert-sign=Измените знак вывода кибернетический комбинатор так, чтобы он был таким же, как в LTN или в более ранних версиях Project Cybersyn. +cybersyn-allow-cargo-in-depot=Если этот параметр включен, поездам будет разрешено иметь груз во время стоянки в депо; никаких предупреждений генерироваться не будет, и поезд не будет приостановлен. Кроме того, поезда при посещении станций снабжения с включенной настройкой "Условие бездействия" будут ожидать бездействия вместо ожидания полной разгрузки. Полезно для создания железнодорожных систем, в которых депо обрабатывают избыточный груз. Только для продвинутых пользователей. +cybersyn-invert-sign=Изменяет знак сигналов вывода кибернетического комбинатора так, чтобы он был таким же, как в LTN или в более ранних версиях Project Cybersyn. [item-name] cybersyn-combinator=Кибернетический комбинатор [item-description] -cybersyn-combinator=Поместите рядом с железнодорожной станцией, чтобы добавить её в сеть поездов Cybersyn. Эта станция теперь может запрашивать или предоставить предметы, о которых сообщают ему через логическую сеть. +cybersyn-combinator=Помещается рядом с железнодорожной станцией, чтобы добавить её в сеть поездов Cybersyn. Тогда эта станция сможет запрашивать или предоставлять предметы, о которых комбинатору сообщают через логическую сеть. [entity-name] cybersyn-combinator=Кибернетический комбинатор cybersyn-combinator-output=Выход кибернетического комбинатора [entity-description] -cybersyn-combinator=Имеет 5 разных режимов. Однако для работы простой сети вам понадобится только режим станции и режим депо. +cybersyn-combinator=Имеет 5 разных режимов. Однако для работы простой сети вам понадобится только режимы станции и депо. [technology-name] cybersyn-train-network=Сеть поездов Cybersyn [technology-description] -cybersyn-train-network=Контроллеры для железнодорожных станций помогут в логистики вашей базы. +cybersyn-train-network=Контроллеры для железнодорожных станций, ответственные за координацию логистики вашей базы. [virtual-signal-name] cybersyn-priority=Приоритет станции @@ -53,18 +53,18 @@ cybersyn-request-threshold=Порог запроса cybersyn-locked-slots=Заблокированые слоты на грузовой вагон [cybersyn-messages] -nonempty-train=Поезд останется в депо так как в нём остался груз с последней доставки +nonempty-train=Поезд останется в депо, так как в нём остался груз с последней доставки unexpected-train=Поезд неожиданно вернулся в депо, прежде чем завершил доставку stuck-train=Поезд застрял cannot-path-between-surfaces=Поезд пытается осуществить доставку между двумя несвязанными поверхностями, возможно, необходимо поместить их в отдельные сети -depot-broken=Поезд потерян, потому что его предписаное депо уничтожено +depot-broken=Поезд потерян, потому что депо, к которому он прикреплен, уничтожено refueler-broken=Поезд потерян, потому что его станция заправки была уничтожена -station-broken=Поезд потерян, потому что одна из его станций доставки была уничтожена -train-at-incorrect=Поезд остановился на станции куда не планировалась доставка +station-broken=Поезд потерян, потому что одна из его станций назначения была уничтожена +train-at-incorrect=Поезд остановился на станции, на которую не планировалась доставка missing-train=Не удалось найти ни одного поезда в текущей сети, чтобы совершить доставку из __2__ в __1__ no-train-has-capacity=Не удалось найти поезд с достаточной вместимостью для доставки из __2__ в __1__ -no-train-matches-r-layout=Не удалось найти поезд в списке разрешенных станции __1__ для осуществления доставки -no-train-matches-p-layout=Не удалось найти поезд в списке разрешенных станции __2__ для доставки в __1__ +no-train-matches-r-layout=Не удалось найти поезд в списке разрешенных поездов станции __1__ для осуществления доставки +no-train-matches-p-layout=Не удалось найти поезд в списке разрешенных поездов станции __2__ для доставки в __1__ [cybersyn-gui] combinator-title=Кибернетический комбинатор @@ -76,19 +76,19 @@ comb2=Управление станцией wagon-manifest=Управление вагоном switch-provide=Только снабжение switch-request=Только запрос -switch-provide-tooltip=Заблокируйте эту станцию чтобы она осуществляла только снабжение сети поездов своими товарами. По умолчанию станции работают в режими снабжения и запроса. -switch-request-tooltip=Заблокируйте эту станцию чтобы она осуществляла только запрос товаров из сети поездов. По умолчанию станции работают в режими снабжения и запроса. +switch-provide-tooltip=Разрешить этой станции только предоставление в сеть поездов своих предметов. По умолчанию станции работают в режиме снабжения и запроса. +switch-request-tooltip=Разрешить этой станции только запрашивание предметов из сети поездов. По умолчанию станции работают в режиме снабжения и запроса. network=Сеть -network-tooltip=Сигнал используется для определения того, членом какой сети является данный комбинатор. Поезда будут отправляться со депо на станции снабжения и станции запроса только в том случае, если все они идентифицированы одним и тем же сигналом сети. -allow-list-description=Автоматический список разрешенных -allow-list-tooltip=Если флажок стоит, сеть проверит, если каждый вагон поезда может быть загружен или разгружен на станции, то он добавляется в список разрешенных поездов этой станции. Если флажок снят, список разрешенных поездов не используется, и всем поездам разрешается останавливаться здесь. -is-stack-description=Порог стопки -is-stack-tooltip=При установке флажка все пороговые значения запросов для этой станции интерпретируются как количество стопок товаров, а не общее количество товаров. Пороговые значения для жидкостей остаются неизменными. -enable-inactive-description=Состояние бездействия -enable-inactive-tooltip=Если флажок стоит, на станции снабжения поезду будет выжидать период бездействия, даже если его заказ был выполнен. Это часто бывает полезно для предотвращения застревания предметов в манипуляторах. -use-same-depot-description=Требуется такое же депо -use-same-depot-tooltip=Если флажок стоит, поезда всегда возвращаются в тоже депо что и покинули вне зависимости от названия. Если флажок снят, поезду разрешается вернуться в любое депо с аналогичным названием. -depot-bypass-description=Обход депо -depot-bypass-tooltip=Если флажок стоит, поезда из этого депо не должны быть припаркованы в этом депо для получения новых заказов, у них просто не должно быть текущих активных заказов. Они все равно вернутся в это депо, если у них закончится топливо и не будет доступных станций заправки. -enable-slot-barring-description=Исключение нефильтрованных слотов -enable-slot-barring-tooltip=Если флажок стоит, все ячейки соседнего вагона, которые не отфильтрованы будут заблокированы, чтобы ни один товар не мог загрузиться в него. +network-tooltip=Этот сигнал используется для определения того, членом какой сети является данный комбинатор. Поезда будут отправляться с депо на станции снабжения и станции запроса только в том случае, если все они идентифицированы одним и тем же сигналом сети. +allow-list-description=Авто-список разрешенных поездов +allow-list-tooltip=Если параметр включен, сеть проверит, что каждый вагон поезда может быть загружен или разгружен на станции, и автоматически добавит в список разрешенных поездов этой станции. Если параметр отключен, список разрешенных поездов не используется, и всем поездам разрешается останавливаться здесь. +is-stack-description=Порог в ячейках +is-stack-tooltip=При включении параметра все пороговые значения запросов для этой станции интерпретируются как количество полных ячеек, а не общее количество предметов. Не влияет на интерпретацию порогового значения для жидкостей. +enable-inactive-description=Условие бездействия +enable-inactive-tooltip=Если параметр включен, поезд на станции снабжения будет выжидать период бездействия, даже если его запрос был выполнен. Это часто бывает полезно для предотвращения застревания предметов в манипуляторах. +use-same-depot-description=Прикреплять поезд к депо +use-same-depot-tooltip=Если параметр включен, поезда всегда возвращаются в то же депо, что и покинули, независимо от названия. Если параметр отключен, поезду разрешается вернуться в любое депо с таким же названием. +depot-bypass-description=Пропуск депо +depot-bypass-tooltip=Если параметр включен, поезда из этого депо не должны быть обязательно припаркованы в этом депо для назначения новых доставок, у них просто не должно быть текущих активных доставок. Впоследствии они все равно вернутся в это депо, если у них будет заканчиваться топливо и не будет доступных станций заправки. +enable-slot-barring-description=Исключать нефильтрованные слоты +enable-slot-barring-tooltip=Если параметр включен, все нефильтрованные ячейки управляемого вагона будут заблокированы, чтобы ни один предмет не мог загрузиться в него. diff --git a/cybersyn/scripts/layout.lua b/cybersyn/scripts/layout.lua index 88a48df..e03e7ce 100644 --- a/cybersyn/scripts/layout.lua +++ b/cybersyn/scripts/layout.lua @@ -467,7 +467,7 @@ function reset_stop_layout(map_data, stop, is_station_or_refueler, forbidden_ent local length = 2 local pre_rail = stop_rail local layout_pattern = {0} - local type_filter = {"inserter", "pump", "arithmetic-combinator"} + local type_filter = {"inserter", "pump", "arithmetic-combinator", "loader-1x1"} local wagon_number = 0 for i = 1, 112 do local rail, rail_direction, rail_connection_direction = pre_rail.get_connected_rail({rail_direction = rail_direction_from_stop, rail_connection_direction = defines.rail_connection_direction.straight}) @@ -510,6 +510,17 @@ function reset_stop_layout(map_data, stop, is_station_or_refueler, forbidden_ent end end end + elseif entity.type == "loader-1x1" then + if not supports_cargo then + local direction = entity.direction + if is_ver then + if direction == defines.direction.east or defines.direction.west then + supports_cargo = true + end + elseif direction == defines.direction.north or direction == defines.direction.south then + supports_cargo = true + end + end elseif entity.type == "pump" then if not supports_fluid and entity.pump_rail_target then local direction = entity.direction @@ -658,3 +669,98 @@ function update_stop_from_inserter(map_data, inserter, forbidden_entity) update_stop_from_rail(map_data, rails[1], forbidden_entity) end end +---@param map_data MapData +---@param loader LuaEntity +---@param forbidden_entity LuaEntity? +function update_stop_from_loader(map_data, loader, forbidden_entity) + local surface = loader.surface + local direction = loader.direction + local loader_type = loader.loader_type + local position = loader.position + --check input/output direction and loader position, and case position and modify x or y by +/- 1 for search + if loader_type == "input" then --loading train + if direction == defines.direction.east then + position.x = position.x + 1 -- input and facing east -> move on X axis 1 to the right + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + elseif direction == defines.direction.south then + position.y = position.y - 1 -- input and facing south -> move on Y axis down 1 unit + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + elseif direction == defines.direction.west then + position.x = position.x - 1 -- input and facing west -> move on X axis 1 to the left + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + elseif direction == defines.direction.north then + position.y = position.y + 1 -- input and facing south -> move on Y axis up 1 unit + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + end + elseif loader_type == "output" then --unloading train + if direction == defines.direction.east then + position.x = position.x - 1 -- output and facing east -> move on X axis 1 to the left + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + elseif direction == defines.direction.south then + position.y = position.y + 1 -- output and facing south -> move on Y axis up 1 unit + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + elseif direction == defines.direction.west then + position.x = position.x + 1 -- output and facing west -> move on X axis 1 to the right + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + elseif direction == defines.direction.north then + position.y = position.y - 1 -- output and facing south -> move on Y axis down 1 unit + local rails = surface.find_entities_filtered({ + type = "straight-rail", + position = position, + radius = 1, + }) + if rails[1] then + update_stop_from_rail(map_data, rails[1], forbidden_entity) + end + end + end +end \ No newline at end of file diff --git a/cybersyn/scripts/main.lua b/cybersyn/scripts/main.lua index 4e721e6..ce90199 100644 --- a/cybersyn/scripts/main.lua +++ b/cybersyn/scripts/main.lua @@ -617,6 +617,8 @@ local function on_built(event) on_combinator_built(global, entity) elseif entity.type == "inserter" then update_stop_from_inserter(global, entity) + elseif entity.type == "loader-1x1" then + update_stop_from_loader(global, entity) elseif entity.type == "pump" then update_stop_from_pump(global, entity) elseif entity.type == "straight-rail" then @@ -633,6 +635,8 @@ local function on_broken(event) on_combinator_broken(global, entity) elseif entity.type == "inserter" then update_stop_from_inserter(global, entity, entity) + elseif entity.type == "loader-1x1" then + update_stop_from_loader(global, entity) elseif entity.type == "pump" then update_stop_from_pump(global, entity, entity) elseif entity.type == "straight-rail" then @@ -841,6 +845,7 @@ local filter_built = { {filter = "type", type = "inserter"}, {filter = "type", type = "pump"}, {filter = "type", type = "straight-rail"}, + {filter = "type", type = "loader-1x1"}, } local filter_broken = { {filter = "name", name = "train-stop"}, @@ -848,6 +853,7 @@ local filter_broken = { {filter = "type", type = "inserter"}, {filter = "type", type = "pump"}, {filter = "type", type = "straight-rail"}, + {filter = "type", type = "loader-1x1"}, {filter = "rolling-stock"}, } local function main()