summaryrefslogtreecommitdiff
path: root/durt/nodes
diff options
context:
space:
mode:
authorautocommitter <autocommitter@linux-forks.de>2025-05-15 00:00:02 +0200
committerautocommitter <autocommitter@linux-forks.de>2025-05-15 00:00:02 +0200
commit67dfe52759c24369a65786f4151a3334d1aebedb (patch)
tree5a2e573dd40b511832ba930572bcfc28d2cdf908 /durt/nodes
parent2b6aba7bc06572635d426f1fc36f135a1cd76ce4 (diff)
State at 2025-05-15
Diffstat (limited to 'durt/nodes')
-rw-r--r--durt/nodes/(-2204,8,-651).lua27
-rw-r--r--durt/nodes/(-2204,8,-676).lua29
-rw-r--r--durt/nodes/(-2209,9,-651).lua10
-rw-r--r--durt/nodes/(-2213,10,-728).lua2
4 files changed, 68 insertions, 0 deletions
diff --git a/durt/nodes/(-2204,8,-651).lua b/durt/nodes/(-2204,8,-651).lua
new file mode 100644
index 0000000..1607eaf
--- /dev/null
+++ b/durt/nodes/(-2204,8,-651).lua
@@ -0,0 +1,27 @@
+local cmd = {
+ "TREES_RUNAROUND",
+ "SHUNT_MAINLINE_REV",
+}
+__approach_callback_mode = 1
+
+if event.approach and not event.has_entered then
+ atc_set_ars_disable(true)
+ atc_set_lzb_tsr(1)
+ return
+end
+
+if event.train and atc_arrow then
+ if not F.has_rc("BYARD_NOID_SHUTTLE") then return end -- not our train, disregard
+ if not F.has_rc("TREES_RUNAROUND") then -- train has arrived from yard, split and runaround
+ split_off_locomotive("A0B0") --disable ARS to stop the rest of the train engaging the signal
+ F.add_rc(cmd) --add RC commands tomake the train runaround
+ atc_send("S3A1") --send the loco on its way to make the runaround
+ return
+ end
+ --else loco has returned from runaround
+ F.remove_rc(cmd) -- remove runaround RCs
+ atc_send("S0WRS1") --reverse the train and creep towards the other departure signal
+ step_fc() --step the fc forward to be ready for the autoyard
+ return
+end
+ \ No newline at end of file
diff --git a/durt/nodes/(-2204,8,-676).lua b/durt/nodes/(-2204,8,-676).lua
new file mode 100644
index 0000000..f4a3fe5
--- /dev/null
+++ b/durt/nodes/(-2204,8,-676).lua
@@ -0,0 +1,29 @@
+local notification_id = "NOID"
+local ind = POS(-2209,8,-651) -- IMPORTANT NB: remember to update this if you move the indicator mesecon switch
+local print_notification = true
+local function send_train()
+ set_rc("FREIGHT BYARD_NOID_SHUTTLE BYARD BY_COLLECT_NOID BY_RTS NIDTH NOIDEA IND TREES") -- RC string to overwrite when departing for the autoyard, remember to include the return RCs as well
+ atc_send("A1SM")
+ F.indicator(ind,false)
+end
+if event.ext_int then -- trigger event from the yard itself.
+ if event.message == "notify" then -- can also be a manual/other message, just edit this if statement
+ if print_notification then print(rwt.to_string(rwt.now()).. " "..notification_id.." RX Notification") end
+ if F.indicator(ind) then return end -- indicator is already lit, train hasn't collected the first set yet
+ if atc_id then --send the train to the yard for collection
+ send_train()
+ return
+ else -- set the indicator to await the returning train
+ F.indicator(ind,true)
+ return
+ end
+ end
+end
+if event.train and atc_arrow then
+ if F.indicator(ind) then
+ send_train()
+ return
+ end
+ atc_send("B0")
+ return
+end \ No newline at end of file
diff --git a/durt/nodes/(-2209,9,-651).lua b/durt/nodes/(-2209,9,-651).lua
new file mode 100644
index 0000000..391fab3
--- /dev/null
+++ b/durt/nodes/(-2209,9,-651).lua
@@ -0,0 +1,10 @@
+local users = {
+"gabriel",
+"survivalg",
+"Maverick2797"
+}
+if event.punch then
+for _,name in pairs(users) do
+if event.name==name then interrupt_pos(POS(-2204,8,-676),"notify") return end
+end
+end \ No newline at end of file
diff --git a/durt/nodes/(-2213,10,-728).lua b/durt/nodes/(-2213,10,-728).lua
new file mode 100644
index 0000000..23ac35d
--- /dev/null
+++ b/durt/nodes/(-2213,10,-728).lua
@@ -0,0 +1,2 @@
+if not F.has_rc("TREES_RUNAROUND") then return end
+atc_send("CplS1") \ No newline at end of file
opt">.ars_disable -- Note on ars_disable: -- Theoretically, the ars_disable flag would need to behave like the speed restriction field: it should be -- stored in lzbdata and updated once the train drives over. However, for the sake of simplicity, it is simply -- a value in the train. In this case, this is sufficient because once a train triggers ARS for the first time, -- resetting the path does not matter to the set route and ARS doesn't need to be called again. if spos and ars_enabled then --atdebug(id,"IL Spos (ARS)",spos,asp) il.ars_check(spos, train) end --atdebug("trav: ",pos, cn, asp, spos, "travsht=", lzb.travsht) local lspd if asp then --atdebug(id,"IL Signal",spos, asp, lzbdata, "trainstate", train.speed_restriction, train.is_shunt) local nspd = 0 --interpreting aspect and determining speed to proceed if travsht then --shunt move if asp.shunt then nspd = SHUNT_SPEED_MAX elseif asp.proceed_as_main and asp.main ~= 0 then nspd = asp.main travsht = false end else --train move if asp.main ~= 0 then nspd = asp.main elseif asp.shunt then nspd = SHUNT_SPEED_MAX travsht = true end end -- nspd can now be: 1. !=0: new speed restriction, 2. =0: stop here or 3. nil: keep travspd if nspd then travspd = nspd if nspd == -1 then travspd = nil else travspd = nspd end end --atdebug("ns,ts", nspd, travspd) lspd = travspd local udata = {signal_pos = spos} local callback = get_over_function(lspd, travsht, asp.type) lzbdata.il_shunt = travsht lzbdata.il_speed = travspd --atdebug("new lzbdata",lzbdata) advtrains.lzb_add_checkpoint(train, index, lspd, callback, lzbdata, udata) end end) -- Set the ars_disable flag to the value passed -- Triggers a path invalidation if set to false function advtrains.interlocking.ars_set_disable(train, value) if value then train.ars_disable = true else train.ars_disable = nil minetest.after(0, advtrains.path_invalidate, train) end end