From 95833e68ee4721f9b0a3d50bece7c265fac42afe Mon Sep 17 00:00:00 2001 From: mamoniot Date: Sun, 5 Feb 2023 18:49:52 -0500 Subject: [PATCH] fixed crash --- .vscode/settings.json | 7 ++-- cybersyn/scripts/central-planning.lua | 57 ++++++++++++++++----------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 25410be..e6ef28b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,7 +13,8 @@ "~/.steam/steam/steamapps/common/Factorio/data/core/lualib", "./.vscode/factorio", "./.vscode/flib", - "/home/mami/.config/Code/User/workspaceStorage/fdae937c5189f993d370b36f3104188f/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/library" + "/home/mami/.config/Code/User/workspaceStorage/fdae937c5189f993d370b36f3104188f/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/library", + "/home/mami/.config/Code/User/workspaceStorage/95c2a8450056100ba3db30ac2a468857/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/library" ], "Lua.workspace.userThirdParty": [ "/home/mami/.config/Code/User/workspaceStorage/fdae937c5189f993d370b36f3104188f/justarandomgeek.factoriomod-debug/sumneko-3rd", @@ -34,9 +35,9 @@ "Lua.runtime.special": { "__object_name": "type" }, - "Lua.runtime.plugin": "/home/mami/.config/Code/User/workspaceStorage/fdae937c5189f993d370b36f3104188f/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/plugin.lua", + "Lua.runtime.plugin": "/home/mami/.config/Code/User/workspaceStorage/95c2a8450056100ba3db30ac2a468857/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/plugin.lua", "Lua.diagnostics.disable": [ "lowercase-global" ], - "Lua.workspace.checkThirdParty": false + "Lua.workspace.checkThirdParty": true } diff --git a/cybersyn/scripts/central-planning.lua b/cybersyn/scripts/central-planning.lua index cf7f0fa..19f61dd 100644 --- a/cybersyn/scripts/central-planning.lua +++ b/cybersyn/scripts/central-planning.lua @@ -682,38 +682,49 @@ end function tick_poll_entities(map_data, mod_settings) local tick_data = map_data.tick_data - --NOTE: the following have undefined behaviour if the item on tick_data is deleted if map_data.total_ticks%5 == 0 then - local train_id, train = next(map_data.trains, tick_data.last_train) - tick_data.last_train = train_id - if train then - if train.manifest and not train.se_is_being_teleported and train.last_manifest_tick + mod_settings.stuck_train_time*mod_settings.tps < map_data.total_ticks then - if mod_settings.stuck_train_alert_enabled then - send_alert_stuck_train(map_data, train.entity) + if tick_data.last_train == nil or map_data.trains[tick_data.last_train] then + local train_id, train = next(map_data.trains, tick_data.last_train) + tick_data.last_train = train_id + if train then + if train.manifest and not train.se_is_being_teleported and train.last_manifest_tick + mod_settings.stuck_train_time*mod_settings.tps < map_data.total_ticks then + if mod_settings.stuck_train_alert_enabled then + send_alert_stuck_train(map_data, train.entity) + end + interface_raise_train_stuck(train_id) end - interface_raise_train_stuck(train_id) end + else + tick_data.last_train = nil end - local refueler_id, _ = next(map_data.each_refuelers, tick_data.last_refueler) - tick_data.last_refueler = refueler_id - if refueler_id then - local refueler = map_data.refuelers[refueler_id] - if refueler.entity_stop.valid and refueler.entity_comb.valid then - set_refueler_from_comb(map_data, mod_settings, refueler_id, refueler) - else - on_refueler_broken(map_data, refueler_id, refueler) + if tick_data.last_refueler == nil or map_data.each_refuelers[tick_data.last_refueler] then + local refueler_id, _ = next(map_data.each_refuelers, tick_data.last_refueler) + tick_data.last_refueler = refueler_id + if refueler_id then + local refueler = map_data.refuelers[refueler_id] + if refueler.entity_stop.valid and refueler.entity_comb.valid then + set_refueler_from_comb(map_data, mod_settings, refueler_id, refueler) + else + on_refueler_broken(map_data, refueler_id, refueler) + end end + else + tick_data.last_refueler = nil end else - local comb_id, comb = next(map_data.to_comb, tick_data.last_comb) - tick_data.last_comb = comb_id - if comb then - if comb.valid then - combinator_update(map_data, comb, true) - else - map_data.to_comb[comb_id] = nil + if tick_data.last_comb == nil or map_data.to_comb[tick_data.last_comb] then + local comb_id, comb = next(map_data.to_comb, tick_data.last_comb) + tick_data.last_comb = comb_id + if comb then + if comb.valid then + combinator_update(map_data, comb, true) + else + map_data.to_comb[comb_id] = nil + end end + else + tick_data.last_comb = nil end end end