From 33cd647042fa87a90a0e99b637397aed7c1dbaf6 Mon Sep 17 00:00:00 2001 From: mamoniot Date: Fri, 23 Dec 2022 18:52:44 -0500 Subject: [PATCH] fixed multiple issues --- cybersyn/changelog.txt | 4 +- cybersyn/info.json | 2 +- cybersyn/locale/en/base.cfg | 12 +++--- cybersyn/scripts/central-planning.lua | 8 ++-- cybersyn/scripts/factorio-api.lua | 57 ++++++++++++++++----------- cybersyn/scripts/global.lua | 2 +- cybersyn/scripts/gui.lua | 5 +-- cybersyn/scripts/migrations.lua | 2 +- cybersyn/scripts/train-events.lua | 8 ++-- 9 files changed, 55 insertions(+), 45 deletions(-) diff --git a/cybersyn/changelog.txt b/cybersyn/changelog.txt index 6463d78..00818f9 100644 --- a/cybersyn/changelog.txt +++ b/cybersyn/changelog.txt @@ -1,6 +1,6 @@ --------------------------------------------------------------------------------------------------- -Version: 1.1.8 -Date: 2022-12-22 +Version: 1.2.0 +Date: 2022-12-23 Changes: - Forced provide stations to wait until they can service the highest priority request station - Provide stations now override request thresholds with the per-item thresholds set by their station info combinator diff --git a/cybersyn/info.json b/cybersyn/info.json index ac57f6b..c3f06d2 100644 --- a/cybersyn/info.json +++ b/cybersyn/info.json @@ -1,6 +1,6 @@ { "name": "cybersyn", - "version": "1.1.7", + "version": "1.2.0", "title": "Project Cybersyn", "author": "Mami", "factorio_version": "1.1", diff --git a/cybersyn/locale/en/base.cfg b/cybersyn/locale/en/base.cfg index 0d0f195..a6ab8a2 100644 --- a/cybersyn/locale/en/base.cfg +++ b/cybersyn/locale/en/base.cfg @@ -45,12 +45,12 @@ cybersyn-locked-slots=Locked slots per cargo wagon [cybersyn-messages] nonempty-train=A train is being held in the depot because it still has cargo unexpected-train=A train has unexpectedly returned to the depot before completing its delivery -stuck-train=A train from depot __1__ is stuck -cannot-path-between-surfaces=A train from depot __1__ is attempting to make a delivery between two unconnected surfaces, perhaps put them on separate networks -depot-broken=A train from depot __1__ is lost because its depot was broken. -refueler-broken=A train from depot __1__ is lost because its refueler was broken. -station-broken=A train from depot __1__ is lost because one of its delivery stations was broken. -train-at-incorrect=A train from depot __1__ is lost; it parked at a station it was not scheduled to delivered to. +stuck-train=A train is stuck +cannot-path-between-surfaces=A train is attempting to make a delivery between two unconnected surfaces, perhaps put them on separate networks +depot-broken=A train is lost because its depot was broken +refueler-broken=A train is lost because its fuel loader was broken +station-broken=A train is lost because one of its delivery stations was broken +train-at-incorrect=A train parked at a station it was not scheduled to delivered to missing-train=Could not find any train on the correct network to make a delivery from __2__ to __1__ no-train-has-capacity=Could not find a train with enough cargo capacity to make a delivery from __2__ to __1__ no-train-matches-r-layout=Could not find a train on the allow-list of __1__ to make a delivery diff --git a/cybersyn/scripts/central-planning.lua b/cybersyn/scripts/central-planning.lua index 654fa58..88b6714 100644 --- a/cybersyn/scripts/central-planning.lua +++ b/cybersyn/scripts/central-planning.lua @@ -300,7 +300,7 @@ local function tick_dispatch(map_data, mod_settings) ---@type string local network_name if r_station.network_name == NETWORK_EACH then - _, _, network_name = string.find(item_network_name, "(^.*):") + _, _, network_name = string.find(item_network_name, "^(.*):") else network_name = r_station.network_name end @@ -337,8 +337,8 @@ local function tick_dispatch(map_data, mod_settings) goto p_continue end - p_flag = p_station.network_name == NETWORK_EACH and (p_station.network_flag[item_name] or 0) or p_station.network_flag - r_flag = r_station.network_name == NETWORK_EACH and (r_station.network_flag[item_name] or 0) or r_station.network_flag + p_flag = p_station.network_name == NETWORK_EACH and (p_station.network_flag[network_name] or 0) or p_station.network_flag + r_flag = r_station.network_name == NETWORK_EACH and (r_station.network_flag[network_name] or 0) or r_station.network_flag netand = band(p_flag, r_flag) if netand == 0 then goto p_continue @@ -680,7 +680,7 @@ function tick(map_data, mod_settings) map_data.total_ticks = map_data.total_ticks + 1 if map_data.active_alerts then - if map_data.total_ticks%(9*mod_settings.tps) < 1 then + if map_data.total_ticks%(10*mod_settings.tps) < 1 then process_active_alerts(map_data) end end diff --git a/cybersyn/scripts/factorio-api.lua b/cybersyn/scripts/factorio-api.lua index ee2303a..7e9ff56 100644 --- a/cybersyn/scripts/factorio-api.lua +++ b/cybersyn/scripts/factorio-api.lua @@ -566,7 +566,6 @@ local function send_alert_for_train(train, icon, message) icon, {message}, true) - player.play_sound({path = ALERT_SOUND}) end end end @@ -623,7 +622,7 @@ local send_stuck_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"} function send_alert_stuck_train(map_data, train) send_alert_for_train(train, send_stuck_train_alert_icon, "cybersyn-messages.stuck-train") map_data.active_alerts = map_data.active_alerts or {} - map_data.active_alerts[train] = 1 + map_data.active_alerts[train.id] = {train, 1} end local send_nonempty_train_in_depot_alert_icon = {name = NONEMPTY_TRAIN_NAME, type = "fluid"} @@ -631,8 +630,9 @@ local send_nonempty_train_in_depot_alert_icon = {name = NONEMPTY_TRAIN_NAME, typ ---@param train LuaTrain function send_alert_nonempty_train_in_depot(map_data, train) send_alert_for_train(train, send_nonempty_train_in_depot_alert_icon, "cybersyn-messages.nonempty-train") + send_alert_sounds(train) map_data.active_alerts = map_data.active_alerts or {} - map_data.active_alerts[train] = 2 + map_data.active_alerts[train.id] = {train, 2} end local send_lost_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"} @@ -640,36 +640,41 @@ local send_lost_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"} ---@param train LuaTrain function send_alert_depot_of_train_broken(map_data, train) send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.depot-broken") + send_alert_sounds(train) map_data.active_alerts = map_data.active_alerts or {} - map_data.active_alerts[train] = 3 + map_data.active_alerts[train.id] = {train, 3} end ---@param map_data MapData ---@param train LuaTrain function send_alert_station_of_train_broken(map_data, train) send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.station-broken") + send_alert_sounds(train) map_data.active_alerts = map_data.active_alerts or {} - map_data.active_alerts[train] = 4 + map_data.active_alerts[train.id] = {train, 4} end ---@param map_data MapData ---@param train LuaTrain function send_alert_refueler_of_train_broken(map_data, train) send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.refueler-broken") + send_alert_sounds(train) map_data.active_alerts = map_data.active_alerts or {} - map_data.active_alerts[train] = 5 + map_data.active_alerts[train.id] = {train, 5} end ---@param map_data MapData ---@param train LuaTrain function send_alert_train_at_incorrect_station(map_data, train) send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.train-at-incorrect") + send_alert_sounds(train) map_data.active_alerts = map_data.active_alerts or {} - map_data.active_alerts[train] = 6 + map_data.active_alerts[train.id] = {train, 6} end ---@param map_data MapData ---@param train LuaTrain function send_alert_cannot_path_between_surfaces(map_data, train) send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.cannot-path-between-surfaces") + send_alert_sounds(train) map_data.active_alerts = map_data.active_alerts or {} - map_data.active_alerts[train] = 7 + map_data.active_alerts[train.id] = {train, 7} end ---@param train LuaTrain @@ -680,21 +685,27 @@ end ---@param map_data MapData function process_active_alerts(map_data) - for train, id in pairs(map_data.active_alerts) do - if id == 1 then - send_alert_for_train(train, send_stuck_train_alert_icon, "cybersyn-messages.stuck-train") - elseif id == 2 then - send_alert_for_train(train, send_nonempty_train_in_depot_alert_icon, "cybersyn-messages.nonempty-train") - elseif id == 3 then - send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.depot-broken") - elseif id == 4 then - send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.station-broken") - elseif id == 5 then - send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.refueler-broken") - elseif id == 6 then - send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.train-at-incorrect") - elseif id == 7 then - send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.cannot-path-between-surfaces") + for train_id, data in pairs(map_data.active_alerts) do + local train = data[1] + if train.valid then + local id = data[2] + if id == 1 then + send_alert_for_train(train, send_stuck_train_alert_icon, "cybersyn-messages.stuck-train") + elseif id == 2 then + send_alert_for_train(train, send_nonempty_train_in_depot_alert_icon, "cybersyn-messages.nonempty-train") + elseif id == 3 then + send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.depot-broken") + elseif id == 4 then + send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.station-broken") + elseif id == 5 then + send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.refueler-broken") + elseif id == 6 then + send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.train-at-incorrect") + elseif id == 7 then + send_alert_for_train(train, send_lost_train_alert_icon, "cybersyn-messages.cannot-path-between-surfaces") + end + else + map_data.active_alerts[train_id] = nil end end end diff --git a/cybersyn/scripts/global.lua b/cybersyn/scripts/global.lua index 5f75577..a267061 100644 --- a/cybersyn/scripts/global.lua +++ b/cybersyn/scripts/global.lua @@ -20,7 +20,7 @@ ---@field public tick_data {} ---@field public economy Economy ---@field public each_refuelers {[uint]: true} ----@field public active_alerts {[LuaTrain]: int}? +---@field public active_alerts {[uint]: {[1]: LuaTrain, [2]: int}}? ---@field public se_tele_old_id {[string]: uint} ---@class Station diff --git a/cybersyn/scripts/gui.lua b/cybersyn/scripts/gui.lua index e2f1d94..1fd1cb9 100644 --- a/cybersyn/scripts/gui.lua +++ b/cybersyn/scripts/gui.lua @@ -65,7 +65,7 @@ function gui_opened(comb, player) on_click = {"close", comb.unit_number} }} }}, - {type="frame", name="frame", style="inside_shallow_frame_with_padding", style_mods={padding=12, bottom_padding=10}, children={ + {type="frame", name="frame", style="inside_shallow_frame_with_padding", style_mods={padding=12, bottom_padding=9}, children={ {type="flow", name="vflow", direction="vertical", style_mods={horizontal_align="left"}, children={ --status {type="flow", style="status_flow", direction="horizontal", style_mods={vertical_align="center", horizontally_stretchable=true, bottom_padding=4}, children={ @@ -196,11 +196,10 @@ function register_gui_actions() if signal and (signal.name == "signal-everything" or signal.name == "signal-anything" or signal.name == "signal-each") then if param.operation == MODE_PRIMARY_IO or param.operation == MODE_PRIMARY_IO_ACTIVE or param.operation == MODE_PRIMARY_IO_FAILED_REQUEST or param.operation == MODE_REFUELER then signal.name = NETWORK_EACH - element.elem_value.name = NETWORK_EACH else signal = nil - element.elem_value = nil end + element.elem_value = signal end set_comb_network_name(comb, signal) diff --git a/cybersyn/scripts/migrations.lua b/cybersyn/scripts/migrations.lua index 793d67e..4507bff 100644 --- a/cybersyn/scripts/migrations.lua +++ b/cybersyn/scripts/migrations.lua @@ -114,7 +114,7 @@ local migrations_table = { end end end, - ["1.1.8"] = function() + ["1.2.0"] = function() ---@type MapData local map_data = global map_data.tick_state = STATE_INIT diff --git a/cybersyn/scripts/train-events.lua b/cybersyn/scripts/train-events.lua index e5b85ba..1141834 100644 --- a/cybersyn/scripts/train-events.lua +++ b/cybersyn/scripts/train-events.lua @@ -332,7 +332,7 @@ local function on_train_leaves_stop(map_data, mod_settings, train_id, train) local refueler = map_data.refuelers[id] set_refueler_from_comb(map_data, mod_settings, id) - local refueler_network_flag = refueler.network_name == NETWORK_EACH and refueler.network_flag[train.network_name] or refueler.network_flag + local refueler_network_flag = refueler.network_name == NETWORK_EACH and (refueler.network_flag[train.network_name] or 0) or refueler.network_flag if btest(train.network_flag, refueler_network_flag) and (refueler.allows_all_trains or refueler.accepted_layouts[train.layout_id]) and refueler.trains_total < refueler.entity_stop.trains_limit then local accepted = false local dist = nil @@ -419,15 +419,15 @@ end function on_train_changed(event) local train_e = event.train--[[@as LuaTrain]] if not train_e.valid then return end + local train_id = train_e.id - if global.active_alerts and global.active_alerts[train_e] then - global.active_alerts[train_e] = nil + if global.active_alerts and global.active_alerts[train_id] then + global.active_alerts[train_id] = nil if next(global.active_alerts) == nil then global.active_alerts = nil end end - local train_id = train_e.id if train_e.state == defines.train_state.wait_station then local stop = train_e.station if stop and stop.valid and stop.name == "train-stop" then