Jump to content

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


Empfohlene Beiträge

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...