Ich denke das Fried mir das verzeiht.
Hab heute meinen großzügigen Tag.
Hallo Holger,
ich glaube nicht, dass EEPGetTrainyardItemsCount fehlerhaft arbeitet. Der Fehler liegt meiner Meinung nach darin, dass sich Zugnamen auch bei der Einstellung "Zugname nicht ändern" manchmal ändern. Oder ich hab die Logik darin noch nicht wirklich verinnerlicht.
Es sind 3 Züge im Depot: Zug1, Zug2 und Zug3. Angenommen Zug1 fährt aus und wird damit im Depot auf "in Fahrt" gestellt. Unterwegs ändert der Zug seinen Namen in Zug1;001. Wenn nun nicht, wie Botho vorschlägt, wieder in Zug1 umbenannt wird (hierzu später noch eine Anmerkung), dann fährt jetzt ein Zug1;001 ins Depot, der vorher noch nie im Depot war. Also kann sich auch nicht "abmelden". Ihn gab's ja noch nicht. Damit müsste es jetzt 4 Züge im Depot geben, wobei Zug1 weiter an 1.Stelle auf "in Fahrt" gelistet ist und Zug1;001 wartend an 4. Stelle stehen müsste. Ausfahren tut ein Zug erst dann, wenn der Zufallsgenerator eine 2, 3 oder 4 würfelt.
Das wäre für mich logisch.
Jetzt kommt Radio Eriwan ins Spiel. Ich weiß, dass EEP die Züge nicht nach ihrem Namen sondern (zumindest teilweise) nach einer internen ID handelt, mit der der nach außen sichtbare Name irgendwie verbandelt ist.
ABER ich weiß nicht, ob sich bei der Namensumbenennung trotz "Zugname nicht ändern" auch die interne Zug_ID ändert? Und ob für die Abmeldung der Name oder die ID herangezogen wird?
Um etwas Licht ins Dunkle zu bringen, möchte ich dir 2 Sachen vorschlagen:
Lass dir vor der Zufallszugauswahl mal alle Züge und ihren Status ausgeben.
function AusfahrtDepot1()
local AnzZuegeDepot = EEPGetTrainyardItemsCount(1)
print("Zuege im Depot ", AnzZuegeDepot)
for n = 1, AnzZuegeDepot do
local Name = EEPGetTrainyardItemName(1, n)
local Status = EEPGetTrainyardItemStatus(1, "", n)
print(Name, ": ",Status)
end
Ausfahrt = false
-- weiter wie oben
10 Sekunden als Verzögerungszeit im KP zur Zugausfahrt sind für einen Computer eine lange Zeit. Aber je nach Geschwindigkeit und Länge eventuell nicht für einen Zug. um beim Start der Funktion auch vollständig im Depot zu sein. Nur um das mit Sicherheit auszuschließen, setze bitte den KP auf "Zugschluss", wenn du das nicht eh schon getan hast.
Für das Ziel einen zufälligen Zug aus einem Depot zu holen, dürfte es letztlich egal sein, wieviel Züge im Depot gelistet sind. Hauptsache es ist mindestens 1 "wartend" im Depot.
Diese Absicherung fehlt noch in deinem Skript in #19. repeat kann leicht bis in alle Ewiigkeit laufen.
Ich persönlich würde in der Funktion AusfahrtDepot erst eine leere Tabelle wartendeZüge{} anlegen. Darin dann in einer Schleife über gelisteten die Position der "wartenden" Züge eintragen. Wenn Anzahl > 0, würde ich dann daraus einen per Zufall auswählen.