From fcb3dec0c075e86e6a223e2e8df0eb89d06a6466 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Sat, 9 Feb 2019 19:24:10 +0100 Subject: Fixes regarding signal assignments/tcbs - No longer crashes when assigned tcb is removed - don't forbid modification just because signal is assigned --- advtrains_interlocking/database.lua | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'advtrains_interlocking/database.lua') diff --git a/advtrains_interlocking/database.lua b/advtrains_interlocking/database.lua index ba2a318..bd354b2 100644 --- a/advtrains_interlocking/database.lua +++ b/advtrains_interlocking/database.lua @@ -422,6 +422,9 @@ function ildb.remove_from_interlocking(sigd) end end advtrains.interlocking.show_tcb_marker(sigd.p) + if tcbs.signal then + return false + end return true end @@ -461,9 +464,7 @@ end function ildb.may_modify_tcbs(tcbs) - if tcbs.signal then - return false - elseif tcbs.ts_id then + if tcbs.ts_id then local ts = ildb.get_ts(tcbs.ts_id) if ts and not ildb.may_modify_ts(ts) then return false @@ -509,7 +510,15 @@ end -- returns the sigd the signal at pos belongs to, if this is known function ildb.get_sigd_for_signal(pos) local pts = advtrains.roundfloorpts(pos) - return signal_assignments[pts] + local sigd = signal_assignments[pts] + if sigd then + if not ildb.get_tcbs(sigd) then + signal_assignments[pts] = nil + return nil + end + return sigd + end + return nil end function ildb.set_sigd_for_signal(pos, sigd) local pts = advtrains.roundfloorpts(pos) -- cgit v1.2.3