Skip to content

Commit fa26897

Browse files
author
Optera
committed
Version: 1.18.2
Date: 2023-01-05 Bugfixes: - skip over not existing position signals with error message instead of crashing
1 parent c32e1f8 commit fa26897

File tree

6 files changed

+61
-58
lines changed

6 files changed

+61
-58
lines changed

changelog.txt

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
---------------------------------------------------------------------------------------------------
2+
Version: 1.18.2
3+
Date: 2023-01-05
4+
Bugfixes:
5+
- skip over not existing position signals with error message instead of crashing outright
6+
---------------------------------------------------------------------------------------------------
27
Version: 1.18.1
38
Date: 2022-12-13
49
Bugfixes:

data-final-fixes.lua

+15-39
Original file line numberDiff line numberDiff line change
@@ -8,64 +8,41 @@ local flib = require('__flib__.data-util')
88

99
local icon_encoded_position = { { icon = "__LogisticTrainNetwork__/graphics/icons/encoded-position.png", icon_size = 64, tint = {r=1, g=1, b=1, a=1} } }
1010

11-
local lococount = 0
12-
for _, loco in pairs(data.raw["locomotive"]) do
13-
lococount=lococount+1
11+
local function create_signal(prototype, order)
1412
local signal = {
1513
type = "virtual-signal",
16-
name = "ltn-position-"..loco.name,
17-
icons = flib.create_icons(loco, icon_encoded_position) or icon_encoded_position,
14+
name = "ltn-position-"..prototype.name,
15+
icons = flib.create_icons(prototype, icon_encoded_position) or icon_encoded_position,
1816
icon_size = nil,
1917
subgroup = "ltn-position-signal",
20-
order = "a"..string.format("%02d", lococount),
21-
localised_name = {"virtual-signal-name.ltn-position", loco.localised_name or {"entity-name." .. loco.name}}
18+
order = order,
19+
localised_name = {"virtual-signal-name.ltn-position", prototype.localised_name or {"entity-name." .. prototype.name}}
2220
}
2321
data:extend({signal})
2422
end
2523

24+
local lococount = 0
25+
for _, loco in pairs(data.raw["locomotive"]) do
26+
lococount=lococount+1
27+
create_signal(loco, "a"..string.format("%02d", lococount))
28+
end
29+
2630
local wagoncount = 0
2731
for _, wagon in pairs(data.raw["cargo-wagon"]) do
2832
wagoncount=wagoncount+1
29-
local signal = {
30-
type = "virtual-signal",
31-
name = "ltn-position-"..wagon.name,
32-
icons = flib.create_icons(wagon, icon_encoded_position) or icon_encoded_position,
33-
icon_size = nil,
34-
subgroup = "ltn-position-signal",
35-
order = "b"..string.format("%02d", wagoncount),
36-
localised_name = {"virtual-signal-name.ltn-position", wagon.localised_name or {"entity-name." .. wagon.name}}
37-
}
38-
data:extend({signal})
33+
create_signal(wagon, "b"..string.format("%02d", wagoncount))
3934
end
4035

4136
local wagoncount_fluid = 0
4237
for _, wagon in pairs(data.raw["fluid-wagon"]) do
4338
wagoncount_fluid=wagoncount_fluid+1
44-
local signal = {
45-
type = "virtual-signal",
46-
name = "ltn-position-"..wagon.name,
47-
icons = flib.create_icons(wagon, icon_encoded_position) or icon_encoded_position,
48-
icon_size = nil,
49-
subgroup = "ltn-position-signal",
50-
order = "c"..string.format("%02d", wagoncount_fluid),
51-
localised_name = {"virtual-signal-name.ltn-position", wagon.localised_name or {"entity-name." .. wagon.name}}
52-
}
53-
data:extend({signal})
39+
create_signal(wagon, "c"..string.format("%02d", wagoncount_fluid))
5440
end
5541

5642
local wagoncount_artillery = 0
5743
for _, wagon in pairs(data.raw["artillery-wagon"]) do
5844
wagoncount_artillery=wagoncount_artillery+1
59-
local signal = {
60-
type = "virtual-signal",
61-
name = "ltn-position-"..wagon.name,
62-
icons = flib.create_icons(wagon, icon_encoded_position) or icon_encoded_position,
63-
icon_size = nil,
64-
subgroup = "ltn-position-signal",
65-
order = "d"..string.format("%02d", wagoncount_artillery),
66-
localised_name = {"virtual-signal-name.ltn-position", wagon.localised_name or {"entity-name." .. wagon.name}}
67-
}
68-
data:extend({signal})
45+
create_signal(wagon, "d"..string.format("%02d", wagoncount_artillery))
6946
end
7047

7148
-- sum items, fluids and train composition signals for number of slots required in stop output
@@ -85,5 +62,4 @@ for type, type_data in pairs(data.raw) do
8562
end
8663

8764
data.raw["constant-combinator"]["logistic-train-stop-output"].item_slot_count = 4 + lococount + wagoncount + wagoncount_fluid + wagoncount_artillery + itemcount + fluidcount
88-
log("[LTN] found "..tostring(itemcount).." items, "..tostring(fluidcount).." fluids, "..tostring(lococount).." locomotives, "..tostring(wagoncount + wagoncount_fluid + wagoncount_artillery).." wagons")
89-
65+
log(string.format("[LTN] found %d items, %d fluids, %d locomotives, %d cargo wagons, %d fluid wagons, %d artillery wagons.", itemcount, fluidcount, lococount, wagoncount, wagoncount_fluid, wagoncount_artillery))

info.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "LogisticTrainNetwork",
3-
"version": "1.18.1",
3+
"version": "1.18.2",
44
"title": "LTN - Logistic Train Network",
55
"author": "Optera",
66
"contact": "https://forums.factorio.com/memberlist.php?mode=viewprofile&u=21729",

locale/de/base.cfg

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ error-stop-output-truncated=[LTN] Fehler: Inventar von Zug __1__ in Haltestelle
6060
error-invalid-delivery=[LTN] Fehler: Entferne ungültige Lieferung von Haltestelle __1__
6161
error-invalid-stop-index=[LTN] Fehler: Haltestelle mit ungültiger unit_number __1__ in global.LogisticTrainStops.
6262
error-invalid-request-index=[LTN] Fehler: Ungültiger Index __1__ in global.Dispatcher.Requests.
63+
error-invalid-position-signal=[LTN] Error: Positionssignal __1__ existiert nicht.
6364

6465
warning-dispatcher-disabled=[LTN] Warnung: Disponent deaktiviert. Es werden keine Lieferungen erstellt.
6566

locale/en/base.cfg

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ error-stop-output-truncated=[LTN] Error: Inventory of train __2__ at stop __1__
6060
error-invalid-delivery=[LTN] Error: Removing invalid delivery from stop __1__
6161
error-invalid-stop-index=[LTN] Error: Invalid stop unit_number __1__ in global.LogisticTrainStops.
6262
error-invalid-request-index=[LTN] Error: Invalid index __1__ in global.Dispatcher.Requests.
63+
error-invalid-position-signal=[LTN] Error: position signal __1__ does not exist.
6364
6465
warning-dispatcher-disabled=[LTN] Warning: Dispatcher disabled. No deliveries will be created.
6566

script/stop-update.lua

+38-18
Original file line numberDiff line numberDiff line change
@@ -381,45 +381,65 @@ function UpdateStopOutput(trainStop, ignore_existing_cargo)
381381
if #carriages < 32 then --prevent circuit network integer overflow error
382382
if trainStop.parked_train_faces_stop then --train faces forwards >> iterate normal
383383
for i=1, #carriages do
384-
local type = carriages[i].type
385-
if encoded_positions_by_type[type] then
386-
encoded_positions_by_type[type] = encoded_positions_by_type[type] + 2^(i-1)
384+
local signal_type = format("ltn-position-any-%s", carriages[i].type)
385+
if game.virtual_signal_prototypes[signal_type] then
386+
if encoded_positions_by_type[signal_type] then
387+
encoded_positions_by_type[signal_type] = encoded_positions_by_type[signal_type] + 2^(i-1)
388+
else
389+
encoded_positions_by_type[signal_type] = 2^(i-1)
390+
end
387391
else
388-
encoded_positions_by_type[type] = 2^(i-1)
392+
if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_type}) end
393+
log(format("Error: signal \"%s\" not found!", signal_type))
389394
end
390-
local name = carriages[i].name
391-
if encoded_positions_by_name[name] then
392-
encoded_positions_by_name[name] = encoded_positions_by_name[name] + 2^(i-1)
395+
local signal_name = format("ltn-position-%s", carriages[i].name)
396+
if game.virtual_signal_prototypes[signal_name] then
397+
if encoded_positions_by_name[signal_name] then
398+
encoded_positions_by_name[signal_name] = encoded_positions_by_name[signal_name] + 2^(i-1)
399+
else
400+
encoded_positions_by_name[signal_name] = 2^(i-1)
401+
end
393402
else
394-
encoded_positions_by_name[name] = 2^(i-1)
403+
if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_name}) end
404+
log(format("Error: signal \"%s\" not found!", signal_name))
395405
end
396406
end
397407
else --train faces backwards >> iterate backwards
398408
n = 0
399409
for i=#carriages, 1, -1 do
400-
local type = carriages[i].type
401-
if encoded_positions_by_type[type] then
402-
encoded_positions_by_type[type] = encoded_positions_by_type[type] + 2^n
410+
local signal_type = format("ltn-position-any-%s", carriages[i].type)
411+
if game.virtual_signal_prototypes[signal_type] then
412+
if encoded_positions_by_type[signal_type] then
413+
encoded_positions_by_type[signal_type] = encoded_positions_by_type[signal_type] + 2^n
414+
else
415+
encoded_positions_by_type[signal_type] = 2^n
416+
end
403417
else
404-
encoded_positions_by_type[type] = 2^n
418+
if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_type}) end
419+
log(format("Error: signal \"%s\" not found!", signal_type))
405420
end
406-
local name = carriages[i].name
407-
if encoded_positions_by_name[name] then
408-
encoded_positions_by_name[name] = encoded_positions_by_name[name] + 2^n
421+
local signal_name = format("ltn-position-%s", carriages[i].name)
422+
if game.virtual_signal_prototypes[signal_name] then
423+
if encoded_positions_by_name[signal_name] then
424+
encoded_positions_by_name[signal_name] = encoded_positions_by_name[signal_name] + 2^n
425+
else
426+
encoded_positions_by_name[signal_name] = 2^n
427+
end
409428
else
410-
encoded_positions_by_name[name] = 2^n
429+
if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_name}) end
430+
log(format("Error: signal \"%s\" not found!", signal_name))
411431
end
412432
n=n+1
413433
end
414434
end
415435

416436
for k ,v in pairs (encoded_positions_by_type) do
417437
index = index+1
418-
table.insert(signals, {index = index, signal = {type="virtual",name="ltn-position-any-"..k}, count = v })
438+
table.insert(signals, {index = index, signal = {type="virtual",name=k}, count = v })
419439
end
420440
for k ,v in pairs (encoded_positions_by_name) do
421441
index = index+1
422-
table.insert(signals, {index = index, signal = {type="virtual",name="ltn-position-"..k}, count = v })
442+
table.insert(signals, {index = index, signal = {type="virtual",name=k}, count = v })
423443
end
424444
end
425445

0 commit comments

Comments
 (0)