Kai Brendel Geschrieben 28. Februar Geschrieben 28. Februar Moin, habe jetzt schon viel rum probiert mit Ereignissen und Lua, komme aber noch zu keinem Endergebnis... Zug fährt in Depot A ein Ereignis wird ausgelöst Zug wird nach Depot B verschoben Verzögerung z.B. 30s Zug fährt aus Depot B wieder aus Bis zu dem Punkt das der Zug nach Depot B verschoben wird, komme ich... Eine automatische, verzögerte Ausfahrt nicht. Grundsätzlich könnte man das ja auch mit Portalen lösen, möchte mir aber die langen Gleise für die Pause sparen, und wenn man dann mehrere Züge reinschickt, gibt das Stau in Blöcken davor/dahinter... Na ja, das wäre dann halt ein Schattenbahnhof mit Parallelgleisen, und genau das soll ja nicht :-) Gruß Kai
Goetz Geschrieben 28. Februar Geschrieben 28. Februar Am 28.2.2025 um 07:44 schrieb Kai Brendel: Bis zu dem Punkt das der Zug nach Depot B verschoben wird, komme ich... Eine automatische, verzögerte Ausfahrt nicht. Erweitern Schwer zu sagen, warum das bei dir nicht klappt. Denn genau so, wie von dir beschrieben, ist es richtig: von Depot zu Depot.mbpFetching info... Eventuell hast du in deiner EV einen "Schreibfehler"? (z.B. falscher Parameter ausgewählt) Viele Grüße Götz
Kai Brendel Geschrieben 28. Februar Autor Geschrieben 28. Februar Schon mal Danke für die Anlage, werde ich mir später mal angucken. Manchmal sieht man den Wald ja vor lauter Bäumen nicht
Goetz Geschrieben 28. Februar Geschrieben 28. Februar Am 28.2.2025 um 09:47 schrieb Kai Brendel: Manchmal sieht man den Wald ja vor lauter Bäumen nicht Erweitern Und dann hilft es oft, wenn man zumindest weiß dass das angedachte Konzept richtig ist.
Kai Brendel Geschrieben 3. März Autor Geschrieben 3. März Moin... hatte es grundsätzlich richtig, mir war nur nicht bewusst das es bei Lua einen Punkt (.) und Doppelpunkt (:) gibt. Vor allem nicht das die damit Properties und Methods unterscheiden, kannte ich bisher so nicht... Gerade den Doppelpunkt kannte ich bisher nur von Inheritance...
Goetz Geschrieben 3. März Geschrieben 3. März Am 3.3.2025 um 06:13 schrieb Kai Brendel: Vor allem nicht das die damit Properties und Methods unterscheiden Erweitern Das ist nicht ganz richtig. Eigentlich kennt Lua nur Tabellen. Was Punkt und Doppelpunkt wirklich tun, hatte ich vor einer Weile mal in einem Video erklärt: Bitte sieh mir die teils schrägen Konstrukte in meinem Video nach. Sie sollen dazu dienen, die Zusammenhänge zu verdeutlichen. Natürlich hast du insofern recht, dass dieses Lua Konstrukt "Properties" und "Methods" ähneln soll. Und Neo verwendet es auch so, dass er wirkliche Eigenschaften und Methoden aus seinem MBS so an die Lua Tabellen übergibt, dass sie diesem etwas exotischen Tabellenkonstrukt entsprechen. Viele Grüße Götz
Kai Brendel Geschrieben 3. März Autor Geschrieben 3. März Hallo Götz, deine Erklärung macht es nicht wirklich besser Habe mir gerade mal den "Ansatz" von OOP auf Lua.org (https://www.lua.org/pil/16.html) angesehen, das ist ja nicht mal wirklich OOP, mehr Structs/Unions/Records, mit Function Members, aber egal, LUA ist für das was es tun soll verdammt schnell, thats it...
Goetz Geschrieben 3. März Geschrieben 3. März Am 3.3.2025 um 11:09 schrieb Kai Brendel: deine Erklärung macht es nicht wirklich besser Erweitern Es war auch nicht meine Absicht, Lua besser zu machen. Ich wollte dich vor Missverständnissen bewahren. Am 3.3.2025 um 11:09 schrieb Kai Brendel: das ist ja nicht mal wirklich OOP Erweitern Genau darum ging es mir. Die kindgerechte Form des Videos hat ihre Ursache darin, dass unerfahrene User in einem anderen Forum ziemlich hanebüchenes Zeug zum Doppelpunkt in Lua geschrieben hatten. Denen wollte ich damals auf die Sprünge helfen. Am 3.3.2025 um 11:09 schrieb Kai Brendel: LUA ist für das was es tun soll verdammt schnell Erweitern und es ist explizit dafür ausgelegt, in andere Programme integriert zu werden. Deshalb findest du es in einer Vielzahl von Anwenderprogrammen und Spielen, die von einer Steuerung per Skriptsprache profitieren.
Kai Brendel Geschrieben 8. März Autor Geschrieben 8. März (bearbeitet) Da das so wie oben beschrieben funktioniert, wollte ich das Ereignis erweitern, und zwar kann eine Lok bei der Einfahrt in das Depot entscheiden wo sie rauskommen möchte, gelöst über eine Objekt-Variable zur Lok. if not deferredCall then if vehicle.variables[self.name] ~= nil then target = vehicle.variables[self.name] else target = $("Depot Blumenbach 1") end target:add(vehicle) defer(60, "Delay") elseif deferredCall == "Delay" then if target.count > 0 then target:release(0) end end Die Krux daran ist, das "target" global sein muss, sonst klappt das "release" nach 60s nicht. "target" kann aber auch nicht neu ermittelt werden, da im zweiten Aufruf die Variable "vehicle" nicht mehr bekannt ist. Zu Problemen würde das führen: Wenn während der 60s Wartezeit eine zweite Lok einfährt und "target" ändert. Der gleiche Code in einem anderen Depot verwendet wird. Gut, kann man mit einer anderen globalen Variablen lösen Jemand eine Idee dazu? Mfg, Kai Brendel Bearbeitet 8. März von Kai Brendel
Neo Geschrieben 8. März Geschrieben 8. März Lagere den Defer-Aufruf inkl. Defer-Abarbeitung in ein benutzerdefiniertes Ereignis aus, mit target als Parameter. Jeder Aufruf eines benutzerdefnierten Ereignisses speichert seine eigenen Aufrufparameter, damit vermeidest du Seiteneffekte. Auch gehen globale Lua-Variablen bei einer Änderung der EV oder beim Laden der Anlage verloren. Viele Grüße, Neo
Kai Brendel Geschrieben 9. März Autor Geschrieben 9. März Moin, vielen Dank für den Hinweis, das hat gut funktioniert. Das habe ich gemacht, damit auch andere was davon haben :-) Ein Zug/Fahrzeug betritt virtuelles Depot "Depot Reisenhofen" local target = $("Depot Blumenbach 1") if vehicle.variables[self.name] ~= nil then target = vehicle.variables[self.name] end $("ReleaseFromDepot"):invoke(target, vehicle) Ein benutzerdefiniertes Ereignis ReleaseFromDepot: Parameter target, vehicle (Beide Typ "Objekt") if not deferredCall then target:add(vehicle) defer(60, "Delay") elseif deferredCall == "Delay" then if target.count > 0 then target:release(0) end end Das mit dem wahlfreien Depot klappt natürlich nur, wenn die einfahrende Lok eine Variable (Depot Reisenhofen) hat die genauso heißt wie das Ereignis, damit self.name greift, und diese Variable vom Typ Objekt und auf das andere Depot zeigt. Gruß, Kai
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden