Jump to content

attempt to index a nil value (global 'os')


Recommended Posts

Hallo,

Das script von @Goetz über den zufälligen Abruf eines Zuges aus dem SB war mir nicht Zufall genug. Deshalb habe ich in den Lua Foren den Befehl  math.randomseed(os.time())   gefunden. Den habe ich vor dem random-Aufruf eingesetzt.
Doch damit bekomme ich den Fehler  "attempt to index a nil value (global 'os')"

Hier das script wie es jetzt ist. 

local WarteListe = {}
local SignalListe = {$("Signal SB-Ausfahrt Gleis 02"), $("Signal SB-Ausfahrt Gleis 03"), $("Signal SB-Ausfahrt Gleis 04"),
                     $("Signal SB-Ausfahrt Gleis 05"), $("Signal SB-Ausfahrt Gleis 06"), $("Signal SB-Ausfahrt Gleis 07"),
                     $("Signal SB-Ausfahrt Gleis 08"), $("Signal SB-Ausfahrt Gleis 09"), $("Signal SB-Ausfahrt Gleis 10"),
                     $("Signal SB-Ausfahrt Gleis 11"), $("Signal SB-Ausfahrt Gleis 12"), $("Signal SB-Ausfahrt Gleis 13"),
                     $("Signal SB-Ausfahrt Gleis 14"), $("Signal SB-Ausfahrt Gleis 15"), $("Signal SB-Ausfahrt Gleis 16"),
                     $("Signal SB-Ausfahrt Gleis 17"), $("Signal SB-Ausfahrt Gleis 18"), $("Signal SB-Ausfahrt Gleis 19"),
                     $("Signal SB-Ausfahrt Gleis 20"), $("Signal SB-Ausfahrt Gleis 21"), $("Signal SB-Ausfahrt Gleis 22"),
                     $("Signal SB-Ausfahrt Gleis 23"), $("Signal SB-Ausfahrt Gleis 24"), $("Signal SB-Ausfahrt Gleis 25"),
                     $("Signal SB-Ausfahrt Gleis 26"), $("Signal SB-Ausfahrt Gleis 28"), $("Signal SB-Ausfahrt Gleis 29"),
                     $("Signal SB-Ausfahrt Gleis 30"), $("Signal SB-Ausfahrt Gleis 31"), $("Signal SB-Ausfahrt Gleis 32"),
                     $("Signal SB-Ausfahrt Gleis 33"), $("Signal SB-Ausfahrt Gleis 34"), $("Signal SB-Ausfahrt Gleis 35"),
                     $("Signal SB-Ausfahrt Gleis 36")}

for i, Signal in ipairs(SignalListe) do

    if #layout:getVehiclesOn(Signal) > 0 then
      table.insert(WarteListe, Signal)
    end
end

local Anzahl = #WarteListe
math.randomseed(os.time())

if Anzahl > 0 then
  local Zufall = math.random(1, Anzahl)
  local Signal = WarteListe[Zufall]
  print(Zufall)
  Signal.variables["FS Ausfahrt"].autoActivate = true
  Signal.variables["FS Ausfahrt"].active = true
end

Kann es sein, dass das script nicht auf die Systemvariable os.time zugreifen kann?

Gruß Jürgen

Link to comment
Share on other sites

Hallo Jürgen,

die OS-Bibliothek steht aus Sicherheitsgründen im Studio nicht zur Verfügung, aber du brauchst Randomseed nicht aufzurufen, das macht das Studio automatisch bei Anlagenstart.

Viele Grüße,

Neo

Link to comment
Share on other sites

Hallo @Neo,

bei Start scheint aber nicht genug, denn es kommen aus den 36 SB Gleisen oft die Züge in gleicher Folge. Gibt es nicht die Möglichkeit das vor jedem random Aufruf zu machen? 

Gruß Jürgen 

Link to comment
Share on other sites

Hallo Jürgen,

ein Zufallsgenerator wird immer nur einmalig initialisiert, eine mehrmalige Initialisierung bringt dir keinen Gewinn. Erst recht garantiert eine erneute Initialisierung nicht, dass eine Zahl nicht doppelt vorkommt, so funktionieren die Zufallsgeneratoren in Computern leider nicht. Wenn du doppelte Aktivierungen vermeiden willst, musst du aktivierte Signale aus der Warteliste löschen.

Viele Grüße,

Neo

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...