Jump to content

Ausfahrt aus Bahnhof von einem zufälligem Gleis bzw. Einfahrt in Bahnhof auf ein zufälliges freies Gleis


Recommended Posts

Folgendes Skriptmodul dient zur Steuerung einer Ausfahrt aus einem Bahnhof von einem zufälligem Gleis bzw. Einfahrt in Bahnhof auf ein zufälliges freies Gleis.

1. Definiere Fahrstraßen mit Schlagwort "Ausf_lks" bzw. "Einf_lks" von jedem Gleis im Schattenbahnhof bis zum ersten Signal

2. Aktionen im Trigger (beispielsweise Zug fährt ein, Taster oder Timer):

ausfahrt("Ausf_lks")

bzw.

einfahrt("Einf_lks")

3. Code im Modul

function ausfahrt(fskeyword)
  local routes = { }
  -- alle passenden Fahrstraßen zusammentragen
  local fs=layout:getRoutesByKeyword(fskeyword)
  for k,f in ipairs(fs) do
    print("Fahrstraße "..f.name.." gefunden!")
    -- print("Erstes Gleis: "..f.tracks[1].name)
    -- steht ein Zug bereit?
    if #layout:getVehiclesOn(f.tracks[1]) > 0 then table.insert(routes, f) end
  end
  -- zufällige Fahrstraße auswählen
  local random_number = math.random(#routes)
  local random_route = routes[random_number]
  random_route.active = true
  -- bestehende Aktivierung aufrecht erhalten
  random_route.autoActivate = true

  print("Funktion Ausfahrt hat Fahrstraße "..random_route.name.." aktiviert")
end

function einfahrt(fskeyword)
  local routes = { }
  -- alle passenden Fahrstraßen zusammentragen
  local fs=layout:getRoutesByKeyword(fskeyword)
  for k,f in ipairs(fs) do
    print("Fahrstraße "..f.name.." gefunden!")
    -- print("Letztes Gleis: "..f.tracks[#route.tracks].name)
    -- freies Gleis?
    if #layout:getVehiclesOn(f.tracks[#route.tracks]) = 0 then table.insert(routes, f) end
  end
  -- zufällige Fahrstraße auswählen
  local random_number = math.random(#routes)
  local random_route = routes[random_number]
  random_route.active = true
  -- bestehende Aktivierung aufrecht erhalten
  random_route.autoActivate = true

  print("Funktion Einfahrt hat Fahrstraße "..random_route.name.." aktiviert")
end

Idee von Ruud Boer für EEP, Umsetzung für 3D-Modellbahnstudio ist von mir.

Viel Spaß damit!

 

Link to comment
Share on other sites

  • 4 months later...

@Magnetilo Servus, ich habe Dein script ausprobiert. Aber bereits mit der function einfahrt() habe ich Probleme. Ich habe bemerkt, dass die locale "routes" im code danach mit "route" angesprochen wird. Aber nach Änderung bekomme ich diese Meldung im Protokoll.

 

scriptfehler.jpg.5fce28f125ffe9752604853ffd3e63ce.jpg

Vielleicht findest Du Zeit Dir das anzuschauen.

LG

Paul

Link to comment
Share on other sites

  • 2 weeks later...

Vielen Dank @paul5102 für den Hinweis.

Ich habe das korrigiert und noch ein paar Verbesserungen eingefügt:

  • Wenn alles belegt, dann trotzdem eine Fahrstraße auswählen, da der Zug sonst ewig wartet
  • Erst autoactivate und dann active aufrufen, sonst kommt es zu Problemen
function einfahrt(fskeyword)
  local routes = { }
  local fs=layout:getRoutesByKeyword(fskeyword) -- alle passenden Fahrstraßen zusammentragen

  for k,f in ipairs(fs) do
    -- print("Fahrstraße "..f.name.." gefunden!")
    -- print("Letztes Gleis: "..f.tracks[#route.tracks].name)
    -- freies Gleis?
    if #layout:getVehiclesOn(f.tracks[#f.tracks]) == 0 then table.insert(routes, f) end
  end
  print(#routes.." freie Fahrstraßen gefunden!")

  local random_number = 0
  local random_route = Nil

  if #routes == 0 then
    random_number = math.random(#fs) -- zufällige Fahrstraße auswählen, selbst wenn belegt
    random_route = fs[random_number]
  else
    random_number = math.random(#routes) -- zufällige freie Fahrstraße auswählen
    random_route = routes[random_number]
  end

  random_route.autoActivate = true -- bestehende Aktivierung aufrecht erhalten
  random_route.active = true

  print("Funktion Einfahrt hat Fahrstraße "..random_route.name.." aktiviert")
end

 

 

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
 Share

×
×
  • Create New...