diff --git a/Zuggreifer.lua b/Zuggreifer.lua index 8e61301..3ebcfbe 100644 --- a/Zuggreifer.lua +++ b/Zuggreifer.lua @@ -1,8 +1,3 @@ -function ZuggreiferMelden(...) - local Zeitstempel = string.format("%02d:%02d:%02d", EEPTimeH, EEPTimeM, EEPTimeS) - print(Zeitstempel," Zuggreifer: ",...) -end - -- Erwartet im Anlagenscript definierte Zuggreifer-Tabelle: -- Schluessel ist die Signal-ID -- Wert ist eine Liste von Gleisen vor dem Signal @@ -23,13 +18,13 @@ function ZuggreiferInstallieren(Optionen) if Optionen == nil then Optionen={} end for Signal, Schienen in pairs(Zuggreifer) do if EEPGetSignal(Signal) == 0 then - ZuggreiferMelden("finde Signal "..Signal.." nicht") + print("Zuggreifer findet Signal "..Signal.." nicht") end -- Schienen fuer die Gleisbesetztabfrage registrieren for i=1,#Schienen do local SchienenID = math.abs(Schienen[i]) if not EEPRegisterRailTrack(SchienenID) then - ZuggreiferMelden("Signal "..Signal.." findet Gleis "..SchienenID.." nicht") + print("Zuggreifer "..Signal.." findet Gleis "..SchienenID.." nicht") end end -- Vorherigen Callback retten @@ -49,13 +44,12 @@ function ZuggreiferInstallieren(Optionen) -- Nix tun, wenn das Signal auf Halt gestellt wurde local Fahrt, V_max = leseSignal(Signal) if not Fahrt then return end - if type(V_max) ~= "number" then V_max = Optionen.V end if type(V_max) ~= "number" then V_max = 40 end -- Zug ermitteln local Zugname, Richtung = ZuggreiferAbfragen(Zuggreifer[Signal]) -- Erfolg melden if Optionen.Melden then - ZuggreiferMelden("Signal ",Signal," hat ",Zugname and Zugname or "ins Leere"," gegriffen") + print("Signal ",Signal," hat ",Zugname and Zugname or "ins Leere"," gegriffen") end -- Abfahrbefehl erteilen if Zugname then @@ -101,7 +95,7 @@ function ZuggreiferAbfragen(Schienen) -- Richtung des Fahrzeugs im Zug ermitteln, benoetigt EEP 15 Plugin 1 local FahrzeugVorwaerts = true if type(EEPRollingstockGetOrientation) == "function" then - _, FahrzeugVorwaerts = EEPRollingstockGetOrientation(FahrzeugName) + local ok, FahrzeugVorwaerts = EEPRollingstockGetOrientation(FahrzeugName) end -- Richtung zusammenmultiplizieren und mit Zugnamen zurueckgeben return Zugname, SchienenMap[Gleis] * ( FahrzeugRichtung > 0 and 1 or -1) * (FahrzeugVorwaerts and 1 or -1) diff --git a/Zuglenkung.lua b/Zuglenkung.lua index f07aeac..fea3be6 100644 --- a/Zuglenkung.lua +++ b/Zuglenkung.lua @@ -1,14 +1,8 @@ require("Serializer") -Zuglenkung_Slot = Zuglenkung_Slot or 991 +Zuglenkung_Slot = 991 Zuglenkung_Auftreage = ladeTabelle(Zuglenkung_Slot) --- Extrafunktion, damit der User das ueberschreiben kann -function ZuglenkungMelden(...) - local Zeitstempel = string.format("%02d:%02d:%02d", EEPTimeH, EEPTimeM, EEPTimeS) - print(Zeitstempel," Zuglenkung: ",...) -end - function Zuglenkung(...) local Weg = {...} if #Weg % 2 == 1 then @@ -17,49 +11,38 @@ function Zuglenkung(...) end local Auftrag=nil for i=#Weg-1,1,-2 do - Auftrag={Weg[i],Weg[i+1],0,Auftrag} + Auftrag={Weg[i],Weg[i+1],Auftrag,0} end - ZuglenkungAuftrag(Auftrag) + Zuglenkung_Auftreage[Auftrag[1]]=Auftrag speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage) end -function ZuglenkungAuftrag(Auftrag) - if Zuglenkung_Auftreage[Auftrag[1]] ~= nil then - ZuglenkungMelden("Stellauftrag ", Auftrag[1], " verworfen") - end - Zuglenkung_Auftreage[Auftrag[1]]=Auftrag - if type(Auftrag[2]) == "number" then - ZuglenkungMelden("Anmeldung ",string.format("FS %04d-%02d",Auftrag[1],Auftrag[2])) - else - ZuglenkungMelden("Anmeldung ",string.format("FS %04d",Auftrag[1])," zu ",__tostring(Auftrag[2])) - end -end - -function ZuglenkungMain() +function Zuglenkung_Main(Optionen) local ZuStellen={} for k, Auftrag in pairs(Zuglenkung_Auftreage) do local Stellung = EEPGetSignal(Auftrag[1]) -- Rumheulen, falls es unser FSignal nicht gibt if Stellung == 0 then - ZuglenkungMelden("FSignal ", Auftrag[1], " nicht gefunden") + print("Zuglenkung verworfen: FSignal ",Auftrag[1]," nicht gefunden") Zuglenkung_Auftreage[k]=nil -- Merken, das wir das FS-Signal schonmal aufgeloest gesehen haben elseif Stellung == 1 then - Auftrag[3]=1 + Auftrag[4]=1 local Ziel = Auftrag[2] if type(Ziel) == "number" then Ziel={Ziel} end table.insert(ZuStellen, {Auftrag[1], Ziel[math.random(#Ziel)]}) -- Stellung > 1 und wir haben es vorher auf 1 gesehen -> wir waren das - elseif Auftrag[3] == 1 then - ZuglenkungMelden(string.format("FS %04d-%02d",Auftrag[1],Stellung-1)," geschaltet") - Auftrag = Auftrag[4] + elseif Auftrag[4] == 1 then + if Optionen.Meldung=true then + print("Zuglenkung: ", Auftrag[1], " auf ", Stellung, " gestellt") + end + Auftrag = Auftrag[3] Zuglenkung_Auftreage[k]=nil if Auftrag then - ZuglenkungAuftrag(Auftrag) - return + Zuglenkung_Auftreage[Auftrag[1]]=Auftrag end end end @@ -72,7 +55,7 @@ function ZuglenkungMain() -- Stellversuche durchfuehren for i=1, #ZuStellen do - EEPSetSignal(ZuStellen[i][1], ZuStellen[i][2]+1, 1) + EEPSetSignal(ZuStellen[i][1], ZuStellen[i][2]) end speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage)