Merge pull request #14 from mamoniot/experimental

version 1.1.5
This commit is contained in:
Monica Moniot
2022-12-16 11:35:22 -06:00
committed by GitHub
16 changed files with 135 additions and 93 deletions

6
.vscode/launch.json vendored
View File

@@ -8,7 +8,7 @@
"type": "factoriomod", "type": "factoriomod",
"request": "launch", "request": "launch",
"name": "Factorio Mod Debug", "name": "Factorio Mod Debug",
"modsPath": "C:\\Users\\mmoni\\AppData\\Roaming\\Factorio\\mods", "modsPath": "~/.factorio/mods/",
"manageMod": true, "manageMod": true,
"adjustMods": { "adjustMods": {
"debugadapter": true, "debugadapter": true,
@@ -22,7 +22,7 @@
"type": "factoriomod", "type": "factoriomod",
"request": "launch", "request": "launch",
"name": "Factorio Mod Debug (Modded)", "name": "Factorio Mod Debug (Modded)",
"modsPath": "C:\\Users\\mmoni\\AppData\\Roaming\\Factorio\\mods", "modsPath": "~/.factorio/mods/",
"manageMod": true, "manageMod": true,
"adjustMods": { "adjustMods": {
"debugadapter": true, "debugadapter": true,
@@ -35,6 +35,7 @@
"type": "factoriomod", "type": "factoriomod",
"request": "launch", "request": "launch",
"name": "Factorio Mod Debug (Settings & Data)", "name": "Factorio Mod Debug (Settings & Data)",
"modsPath": "~/.factorio/mods/",
"hookSettings": true, "hookSettings": true,
"hookData": true, "hookData": true,
"adjustMods": { "adjustMods": {
@@ -48,6 +49,7 @@
"type": "factoriomod", "type": "factoriomod",
"request": "launch", "request": "launch",
"name": "Factorio Mod Debug (Profile)", "name": "Factorio Mod Debug (Profile)",
"modsPath": "~/.factorio/mods/",
"hookMode": "profile", "hookMode": "profile",
"adjustMods": { "adjustMods": {
"debugadapter": true, "debugadapter": true,

11
.vscode/settings.json vendored
View File

@@ -3,7 +3,7 @@
"factorio.versions": [ "factorio.versions": [
{ {
"name": "Steam", "name": "Steam",
"factorioPath": "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Factorio\\bin\\x64\\factorio.exe", "factorioPath": "~/.steam/steam/steamapps/common/Factorio/bin/x64/factorio",
"active": true "active": true
} }
], ],
@@ -19,8 +19,11 @@
], ],
"Lua.runtime.version": "Lua 5.2", "Lua.runtime.version": "Lua 5.2",
"Lua.workspace.library": [ "Lua.workspace.library": [
"c:\\Program Files (x86)\\Steam\\steamapps\\common\\Factorio\\data", "~/.steam/steam/steamapps/common/Factorio/data",
"c:\\Program Files (x86)\\Steam\\steamapps\\common\\Factorio\\data\\core\\lualib", "~/.steam/steam/steamapps/common/Factorio/data/core/lualib",
".vscode/factorio" "./.vscode/factorio"
],
"Lua.workspace.userThirdParty": [
"/home/mami/.config/Code/User/workspaceStorage/9536dbf0665a54126a4b0958ecd5829f/justarandomgeek.factoriomod-debug/sumneko-3rd"
] ]
} }

View File

@@ -63,7 +63,7 @@ If you like my work, consider supporting me on [ko-fi](https://ko-fi.com/lesbian
## Mod Details ## Mod Details
This mod adds a single new entity to the game, the cybernetic combinator. This combinator can be in one of 4 different possible control modes. While each mode has a purpose, the only modes you have to use are primary station control and depot control. This mod adds a single new entity to the game, the cybernetic combinator. This combinator can be in one of 5 different possible control modes. While each mode has a purpose, the only modes you have to use are primary station control and depot control.
### Station mode ### Station mode

3
TODO
View File

@@ -2,10 +2,9 @@ bugs:
request threshold is being bypassed somehow (hasn't been seen in a long time) request threshold is being bypassed somehow (hasn't been seen in a long time)
major: major:
do hardcore testing
models & art models & art
add a refueling option on depots
move to an event based algorithm move to an event based algorithm
debug output
minor: minor:
railloader compat railloader compat

View File

@@ -1,4 +1,11 @@
--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Version: 1.1.5
Date: 2022-12-16
Changes:
- Replaced lost train alert with more detailed alerts
- Added Nullius compat
- Added Pyanodon's compat
---------------------------------------------------------------------------------------------------
Version: 1.1.4 Version: 1.1.4
Date: 2022-12-9 Date: 2022-12-9
Changes: Changes:

View File

@@ -1,3 +1,4 @@
if mods["nullius"] then if mods["nullius"] then
-- Place combinator in the same subgroup as the regular train stop -- Place combinator in the same subgroup as the regular train stop
data.raw["recipe"][COMBINATOR_NAME].subgroup = data.raw["train-stop"]["train-stop"].subgroup data.raw["recipe"][COMBINATOR_NAME].subgroup = data.raw["train-stop"]["train-stop"].subgroup

View File

@@ -1,6 +1,6 @@
{ {
"name": "cybersyn", "name": "cybersyn",
"version": "1.1.4", "version": "1.1.5",
"title": "Project Cybersyn", "title": "Project Cybersyn",
"author": "Mami", "author": "Mami",
"factorio_version": "1.1", "factorio_version": "1.1",
@@ -9,6 +9,8 @@
"base", "base",
"flib >= 0.6.0", "flib >= 0.6.0",
"? space-exploration >= 0.6.90", "? space-exploration >= 0.6.90",
"? miniloader" "? miniloader",
"? nullius",
"? pypostprocessing"
] ]
} }

View File

@@ -44,10 +44,14 @@ cybersyn-locked-slots=Locked slots per cargo wagon
[cybersyn-messages] [cybersyn-messages]
missing-trains=Could not find a train to make a delivery from __2__ to __1__ missing-trains=Could not find a train to make a delivery from __2__ to __1__
lost-train=A train from depot __1__ has become lost
nonempty-train=A train is being held in the depot because it still has cargo 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 unexpected-train=A train has unexpectedly returned to the depot before completing its delivery
stuck-train=A train from depot __1__ is stuck 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.
[cybersyn-gui] [cybersyn-gui]
combinator-title=Cybernetic combinator combinator-title=Cybernetic combinator

View File

@@ -3,9 +3,10 @@ combinator_item = flib.copy_prototype(data.raw["item"]["arithmetic-combinator"],
combinator_item.icon = "__cybersyn__/graphics/icons/cybernetic-combinator.png" combinator_item.icon = "__cybersyn__/graphics/icons/cybernetic-combinator.png"
combinator_item.icon_size = 64 combinator_item.icon_size = 64
combinator_item.icon_mipmaps = 4 combinator_item.icon_mipmaps = 4
combinator_item.order = data.raw["item"]["decider-combinator"].order.."-b" combinator_item.subgroup = data.raw["item"]["train-stop"].subgroup
combinator_item.order = data.raw["item"]["train-stop"].order.."-b"
combinator_item.place_result = COMBINATOR_NAME combinator_item.place_result = COMBINATOR_NAME
if (mods["nullius"]) then if mods["nullius"] then
-- Enable item in Nullius and place next to the regular train stop -- Enable item in Nullius and place next to the regular train stop
combinator_item.order = "nullius-eca" combinator_item.order = "nullius-eca"
end end

View File

@@ -5,27 +5,14 @@ combinator_recipe.ingredients = {
{"electronic-circuit", 10}, {"electronic-circuit", 10},
} }
combinator_recipe.enabled = false combinator_recipe.enabled = false
if (mods["nullius"]) then combinator_recipe.subgroup = data.raw["recipe"]["train-stop"].subgroup
-- Enable recipe and place it just after regular station
combinator_recipe.order = "nullius-eca"
-- In Nullius, most combinators are tiny crafts
combinator_recipe.category = "tiny-crafting"
combinator_recipe.always_show_made_in = true
-- Use the same costs (minus the train stop) as for LTN
combinator_recipe.energy_required = 3
combinator_recipe.ingredients = {
{"arithmetic-combinator", 2},
{"green-wire", 4}
}
end
cybersyn_tech = flib.copy_prototype(data.raw["technology"]["automated-rail-transportation"], "cybersyn-train-network") cybersyn_tech = flib.copy_prototype(data.raw["technology"]["automated-rail-transportation"], "cybersyn-train-network")
cybersyn_tech.icon = "__cybersyn__/graphics/icons/tech.png" cybersyn_tech.icon = "__cybersyn__/graphics/icons/tech.png"
cybersyn_tech.icon_size = 256 cybersyn_tech.icon_size = 256
cybersyn_tech.prerequisites = { cybersyn_tech.prerequisites = {
"automated-rail-transportation", "rail-signals",
"circuit-network", "circuit-network",
} }
cybersyn_tech.effects = { cybersyn_tech.effects = {
@@ -34,20 +21,38 @@ cybersyn_tech.effects = {
recipe = COMBINATOR_NAME recipe = COMBINATOR_NAME
}, },
} }
cybersyn_tech.unit.count = 3*cybersyn_tech.unit.count cybersyn_tech.unit.ingredients = {
{ "automation-science-pack", 1, },
{ "logistic-science-pack", 1, }
}
cybersyn_tech.unit.count = 200
cybersyn_tech.order = "c-g-c" cybersyn_tech.order = "c-g-c"
if (mods["nullius"]) then
if mods["pypostprocessing"] then
cybersyn_tech.unit.ingredients[2] = nil
end
if mods["nullius"] then
-- Enable recipe and place it just after regular station
combinator_recipe.order = "nullius-eca"
-- In Nullius, most combinators are tiny crafts
combinator_recipe.category = "tiny-crafting"
combinator_recipe.always_show_made_in = true
combinator_recipe.energy_required = 3
combinator_recipe.ingredients = {
{"arithmetic-combinator", 2},
{"copper-cable", 10}
}
-- Enable technology -- Enable technology
cybersyn_tech.order = "nullius-" .. (cybersyn_tech.order or "") cybersyn_tech.order = "nullius-"..cybersyn_tech.order
cybersyn_tech.unit = { cybersyn_tech.unit = {
count = 100, count = 100,
ingredients = { ingredients = {
{ "nullius-geology-pack", 1 }, { "nullius-climatology-pack", 1 }, {"nullius-geology-pack", 1}, {"nullius-climatology-pack", 1}, {"nullius-mechanical-pack", 1}, {"nullius-electrical-pack", 1}
{ "nullius-mechanical-pack", 1 }, { "nullius-electrical-pack", 1 }
}, },
time = 25 time = 25
} }
cybersyn_tech.prerequisites = { "nullius-checkpoint-optimization", "nullius-traffic-control" } cybersyn_tech.prerequisites = {"nullius-checkpoint-optimization", "nullius-traffic-control"}
cybersyn_tech.ignore_tech_tech_cost_multiplier = true cybersyn_tech.ignore_tech_tech_cost_multiplier = true
end end

View File

@@ -533,7 +533,7 @@ local function tick_poll_comb(map_data)
tick_data.last_comb = comb_id tick_data.last_comb = comb_id
if comb and comb.valid then if comb and comb.valid then
combinator_update(map_data, comb) combinator_update(map_data, comb, true)
end end
end end
---@param map_data MapData ---@param map_data MapData

View File

@@ -137,7 +137,7 @@ function set_manifest_schedule(train, depot_name, d_surface_i, p_stop, r_stop, m
local is_r_on_t = t_surface_i == r_surface_i local is_r_on_t = t_surface_i == r_surface_i
local is_d_on_t = t_surface_i == d_surface_i local is_d_on_t = t_surface_i == d_surface_i
if is_p_on_t and is_r_on_t and is_d_on_t then if is_p_on_t and is_r_on_t and is_d_on_t then
train.schedule = {current = start_at_depot and 1 or 2, records = { train.schedule = {current = start_at_depot and 1 or 2--[[@as uint]], records = {
create_inactivity_order(depot_name), create_inactivity_order(depot_name),
create_direct_to_station_order(p_stop), create_direct_to_station_order(p_stop),
create_loading_order(p_stop, manifest), create_loading_order(p_stop, manifest),
@@ -153,8 +153,8 @@ function set_manifest_schedule(train, depot_name, d_surface_i, p_stop, r_stop, m
elseif IS_SE_PRESENT then elseif IS_SE_PRESENT then
local other_surface_i = (not is_p_on_t and p_surface_i) or (not is_r_on_t and r_surface_i) or d_surface_i local other_surface_i = (not is_p_on_t and p_surface_i) or (not is_r_on_t and r_surface_i) or d_surface_i
if (is_p_on_t or p_surface_i == other_surface_i) and (is_r_on_t or r_surface_i == other_surface_i) and (is_d_on_t or d_surface_i == other_surface_i) then if (is_p_on_t or p_surface_i == other_surface_i) and (is_r_on_t or r_surface_i == other_surface_i) and (is_d_on_t or d_surface_i == other_surface_i) then
local t_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = t_surface_i}) local t_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = t_surface_i})--[[@as {}]]
local other_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = other_surface_i}) local other_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = other_surface_i})--[[@as {}]]
local is_train_in_orbit = other_zone.orbit_index == t_zone.index local is_train_in_orbit = other_zone.orbit_index == t_zone.index
if is_train_in_orbit or t_zone.orbit_index == other_zone.index then if is_train_in_orbit or t_zone.orbit_index == other_zone.index then
local elevator_name = se_get_space_elevator_name(t_surface) local elevator_name = se_get_space_elevator_name(t_surface)
@@ -180,7 +180,7 @@ function set_manifest_schedule(train, depot_name, d_surface_i, p_stop, r_stop, m
is_train_in_orbit = not is_train_in_orbit is_train_in_orbit = not is_train_in_orbit
end end
train.schedule = {current = start_at_depot and 1 or 2, records = records} train.schedule = {current = start_at_depot and 1 or 2--[[@as uint]], records = records}
if old_schedule and not train.has_path then if old_schedule and not train.has_path then
train.schedule = old_schedule train.schedule = old_schedule
return false return false
@@ -198,7 +198,7 @@ function set_manifest_schedule(train, depot_name, d_surface_i, p_stop, r_stop, m
create_unloading_order(r_stop), create_unloading_order(r_stop),
}} }}
lock_train(train) lock_train(train)
send_lost_train_alert(train, depot_name) send_cannot_path_between_surfaces_alert(train, depot_name)
return true return true
end end
@@ -225,8 +225,8 @@ function add_refueler_schedule(train, stop, depot_name)
train.schedule = schedule train.schedule = schedule
return return
elseif IS_SE_PRESENT then elseif IS_SE_PRESENT then
local t_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = t_surface_i}) local t_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = t_surface_i})--[[@as {}]]
local other_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = f_surface_i}) local other_zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = f_surface_i})--[[@as {}]]
local is_train_in_orbit = other_zone.orbit_index == t_zone.index local is_train_in_orbit = other_zone.orbit_index == t_zone.index
if is_train_in_orbit or t_zone.orbit_index == other_zone.index then if is_train_in_orbit or t_zone.orbit_index == other_zone.index then
local elevator_name = se_get_space_elevator_name(t_surface) local elevator_name = se_get_space_elevator_name(t_surface)
@@ -252,7 +252,7 @@ function add_refueler_schedule(train, stop, depot_name)
--create an order that probably cannot be fulfilled and alert the player --create an order that probably cannot be fulfilled and alert the player
table_insert(schedule.records, i, create_inactivity_order(stop.backer_name)) table_insert(schedule.records, i, create_inactivity_order(stop.backer_name))
lock_train(train) lock_train(train)
send_lost_train_alert(train, depot_name) send_cannot_path_between_surfaces_alert(train, depot_name)
train.schedule = schedule train.schedule = schedule
end end
@@ -457,6 +457,22 @@ end
--[[alerts]]-- --[[alerts]]--
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
---@param train LuaTrain
---@param icon {}
---@param message {}
local function send_alert_with_sound(train, icon, message)
local loco = train.front_stock or train.back_stock
if loco then
for _, player in pairs(loco.force.players) do
player.add_custom_alert(
loco,
icon,
message,
true)
player.play_sound({path = ALERT_SOUND})
end
end
end
local send_missing_train_alert_for_stop_icon = {name = MISSING_TRAIN_NAME, type = "fluid"} local send_missing_train_alert_for_stop_icon = {name = MISSING_TRAIN_NAME, type = "fluid"}
---@param r_stop LuaEntity ---@param r_stop LuaEntity
@@ -474,19 +490,36 @@ end
local send_lost_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"} local send_lost_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"}
---@param train LuaTrain ---@param train LuaTrain
---@param depot_name string ---@param depot_name string
function send_lost_train_alert(train, depot_name) function send_cannot_path_between_surfaces_alert(train, depot_name)
local loco = train.front_stock or train.back_stock send_alert_with_sound(train, send_lost_train_alert_icon, {"cybersyn-messages.cannot-path-between-surfaces", depot_name})
if loco then
for _, player in pairs(loco.force.players) do
player.add_custom_alert(
loco,
send_lost_train_alert_icon,
{"cybersyn-messages.lost-train", depot_name},
true)
player.play_sound({path = ALERT_SOUND})
end
end
end end
---@param train LuaTrain
---@param depot_name string
function send_depot_of_train_broken_alert(train, depot_name)
send_alert_with_sound(train, send_lost_train_alert_icon, {"cybersyn-messages.depot-broken", depot_name})
end
---@param train LuaTrain
---@param depot_name string
function send_refueler_of_train_broken_alert(train, depot_name)
send_alert_with_sound(train, send_lost_train_alert_icon, {"cybersyn-messages.refueler-broken", depot_name})
end
---@param train LuaTrain
---@param depot_name string
function send_station_of_train_broken_alert(train, depot_name)
send_alert_with_sound(train, send_lost_train_alert_icon, {"cybersyn-messages.station-broken", depot_name})
end
---@param train LuaTrain
---@param depot_name string
function send_train_at_incorrect_station_alert(train, depot_name)
send_alert_with_sound(train, send_lost_train_alert_icon, {"cybersyn-messages.train-at-incorrect", depot_name})
end
local send_nonempty_train_in_depot_alert_icon = {name = NONEMPTY_TRAIN_NAME, type = "fluid"}
---@param train LuaTrain
function send_nonempty_train_in_depot_alert(train)
send_alert_with_sound(train, send_nonempty_train_in_depot_alert_icon, {"cybersyn-messages.nonempty-train"})
end
---@param train LuaTrain ---@param train LuaTrain
function send_unexpected_train_alert(train) function send_unexpected_train_alert(train)
local loco = train.front_stock or train.back_stock local loco = train.front_stock or train.back_stock
@@ -500,25 +533,6 @@ function send_unexpected_train_alert(train)
end end
end end
end end
local send_nonempty_train_in_depot_alert_icon = {name = NONEMPTY_TRAIN_NAME, type = "fluid"}
---@param train LuaTrain
function send_nonempty_train_in_depot_alert(train)
local loco = train.front_stock or train.back_stock
if loco then
for _, player in pairs(loco.force.players) do
player.add_custom_alert(
loco,
send_nonempty_train_in_depot_alert_icon,
{"cybersyn-messages.nonempty-train"},
true)
player.play_sound({path = ALERT_SOUND})
end
end
end
local send_stuck_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"} local send_stuck_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"}
---@param train LuaTrain ---@param train LuaTrain
---@param depot_name string ---@param depot_name string

View File

@@ -29,7 +29,7 @@ STATUS_NAMES_DEFAULT = "entity-status.disabled"
---@param comb LuaEntity ---@param comb LuaEntity
---@param player LuaPlayer ---@param player LuaPlayer
function gui_opened(comb, player) function gui_opened(comb, player)
combinator_update(global, comb) combinator_update(global, comb, true)
local rootgui = player.gui.screen local rootgui = player.gui.screen
local selected_index, signal, check, switch_state = get_comb_gui_settings(comb) local selected_index, signal, check, switch_state = get_comb_gui_settings(comb)

View File

@@ -27,7 +27,7 @@ local function on_depot_broken(map_data, depot_id, depot)
if train_id then if train_id then
local train = map_data.trains[train_id] local train = map_data.trains[train_id]
lock_train(train.entity) lock_train(train.entity)
send_lost_train_alert(train.entity, depot.entity_stop.backer_name) send_depot_of_train_broken_alert(train.entity, depot.entity_stop.backer_name)
remove_train(map_data, train_id, train) remove_train(map_data, train_id, train)
end end
map_data.depots[depot_id] = nil map_data.depots[depot_id] = nil
@@ -76,7 +76,7 @@ local function on_refueler_broken(map_data, refueler_id, refueler)
if not train.se_is_being_teleported then if not train.se_is_being_teleported then
remove_train(map_data, train_id, train) remove_train(map_data, train_id, train)
lock_train(train.entity) lock_train(train.entity)
send_lost_train_alert(train.entity, train.depot_name) send_refueler_of_train_broken_alert(train.entity, train.depot_name)
else else
train.se_awaiting_removal = train_id train.se_awaiting_removal = train_id
end end
@@ -151,7 +151,7 @@ local function on_station_broken(map_data, station_id, station)
if not train.se_is_being_teleported then if not train.se_is_being_teleported then
remove_train(map_data, train_id, train) remove_train(map_data, train_id, train)
lock_train(train.entity) lock_train(train.entity)
send_lost_train_alert(train.entity, train.depot_name) send_station_of_train_broken_alert(train.entity, train.depot_name)
else else
train.se_awaiting_removal = train_id train.se_awaiting_removal = train_id
end end
@@ -391,7 +391,8 @@ end
---@param map_data MapData ---@param map_data MapData
---@param comb LuaEntity ---@param comb LuaEntity
function combinator_update(map_data, comb) ---@param reset_display boolean?
function combinator_update(map_data, comb, reset_display)
local unit_number = comb.unit_number--[[@as uint]] local unit_number = comb.unit_number--[[@as uint]]
local control = get_comb_control(comb) local control = get_comb_control(comb)
local params = control.parameters local params = control.parameters
@@ -399,7 +400,7 @@ function combinator_update(map_data, comb)
local has_changed = false local has_changed = false
local stop = map_data.to_stop[comb.unit_number] local stop = map_data.to_stop[comb.unit_number]
if stop then if reset_display and stop then
id = stop.unit_number id = stop.unit_number
station = map_data.stations[id] station = map_data.stations[id]
if station then if station then
@@ -414,7 +415,6 @@ function combinator_update(map_data, comb)
control.parameters = params control.parameters = params
end end
end end
if params.operation == MODE_PRIMARY_IO_ACTIVE or params.operation == MODE_PRIMARY_IO_FAILED_REQUEST then if params.operation == MODE_PRIMARY_IO_ACTIVE or params.operation == MODE_PRIMARY_IO_FAILED_REQUEST then
params.operation = MODE_PRIMARY_IO params.operation = MODE_PRIMARY_IO
end end
@@ -652,7 +652,7 @@ local function on_paste(event)
if not entity or not entity.valid then return end if not entity or not entity.valid then return end
if entity.name == COMBINATOR_NAME then if entity.name == COMBINATOR_NAME then
combinator_update(global, entity) combinator_update(global, entity, true)
end end
end end
@@ -689,8 +689,8 @@ local function setup_se_compat()
IS_SE_PRESENT = remote.interfaces["space-exploration"] ~= nil IS_SE_PRESENT = remote.interfaces["space-exploration"] ~= nil
if not IS_SE_PRESENT then return end if not IS_SE_PRESENT then return end
local se_on_train_teleport_finished_event = remote.call("space-exploration", "get_on_train_teleport_finished_event") local se_on_train_teleport_finished_event = remote.call("space-exploration", "get_on_train_teleport_finished_event")--[[@as string]]
local se_on_train_teleport_started_event = remote.call("space-exploration", "get_on_train_teleport_started_event") local se_on_train_teleport_started_event = remote.call("space-exploration", "get_on_train_teleport_started_event")--[[@as string]]
---@param event {} ---@param event {}
script.on_event(se_on_train_teleport_started_event, function(event) script.on_event(se_on_train_teleport_started_event, function(event)
@@ -742,7 +742,7 @@ local function setup_se_compat()
if train.se_awaiting_removal then if train.se_awaiting_removal then
remove_train(map_data, train.se_awaiting_removal, train) remove_train(map_data, train.se_awaiting_removal, train)
lock_train(train.entity) lock_train(train.entity)
send_lost_train_alert(train.entity, train.depot_name) send_station_of_train_broken_alert(train.entity, train.depot_name)
return return
elseif train.se_awaiting_rename then elseif train.se_awaiting_rename then
rename_manifest_schedule(train.entity, train.se_awaiting_rename[1], train.se_awaiting_rename[2]) rename_manifest_schedule(train.entity, train.se_awaiting_rename[1], train.se_awaiting_rename[2])

View File

@@ -348,10 +348,14 @@ interface.add_refueler_schedule = add_refueler_schedule
------------------------------------------------------------------ ------------------------------------------------------------------
interface.send_missing_train_alert = send_missing_train_alert interface.send_missing_train_alert = send_missing_train_alert
interface.send_lost_train_alert = send_lost_train_alert
interface.send_unexpected_train_alert = send_unexpected_train_alert interface.send_unexpected_train_alert = send_unexpected_train_alert
interface.send_nonempty_train_in_depot_alert = send_nonempty_train_in_depot_alert interface.send_nonempty_train_in_depot_alert = send_nonempty_train_in_depot_alert
interface.send_stuck_train_alert = send_stuck_train_alert interface.send_stuck_train_alert = send_stuck_train_alert
interface.send_cannot_path_between_surfaces_alert = send_cannot_path_between_surfaces_alert
interface.send_depot_of_train_broken_alert = send_depot_of_train_broken_alert
interface.send_refueler_of_train_broken_alert = send_refueler_of_train_broken_alert
interface.send_station_of_train_broken_alert = send_station_of_train_broken_alert
interface.send_train_at_incorrect_station_alert = send_train_at_incorrect_station_alert
remote.add_interface("cybersyn", interface) remote.add_interface("cybersyn", interface)

View File

@@ -4,7 +4,7 @@ local INF = math.huge
---@param map_data MapData ---@param map_data MapData
---@param station Station ---@param station Station
---@param manifest Manifest ---@param manifest Manifest?
---@param sign int? ---@param sign int?
local function set_comb1(map_data, station, manifest, sign) local function set_comb1(map_data, station, manifest, sign)
local comb = station.entity_comb1 local comb = station.entity_comb1
@@ -238,12 +238,12 @@ local function on_train_arrives_station(map_data, station_id, train_id, train)
on_failed_delivery(map_data, train_id, train) on_failed_delivery(map_data, train_id, train)
remove_train(map_data, train_id, train) remove_train(map_data, train_id, train)
lock_train(train.entity) lock_train(train.entity)
send_lost_train_alert(train.entity, train.depot_name) send_train_at_incorrect_station_alert(train.entity, train.depot_name)
end end
elseif mod_settings.react_to_train_at_incorrect_station then elseif mod_settings.react_to_train_at_incorrect_station then
--train is lost somehow, probably from player intervention --train is lost somehow, probably from player intervention
remove_train(map_data, train_id, train) remove_train(map_data, train_id, train)
send_lost_train_alert(train.entity, train.depot_name) send_train_at_incorrect_station_alert(train.entity, train.depot_name)
end end
end end