Jump to content

Empfohlene Beiträge

Geschrieben

Hallo Neo,

gibt es eine Möglichkeit, einen (user-defined) event so zu definieren, dass er ohne weiteres Zutun einmal ausgeführt wird, nachdem die Anlage neu geladen wurde und erstmals gestartet wird?

Beste Grüße

Phrontistes

Geschrieben

Das Skript, welches man hier einrichten kann ...

StartSkript.jpg.7096467a862e5404b0062538262aa06d.jpg

... wird einmal abgearbeitet, nachdem die Anlage neu geladen wurde.
Es wird außerdem einmal abgearbeitet, nachdem man Änderungen im Skript vorgenommen hat.

Wer es lieber grafisch möchte, der legt ein Benutzerdefiniertes Ereignis an und löst dieses Ereignis dann mit einer Befehlszeile im oben genannten Skript aus:

$("my Startevent"):invoke()

Viele Grüße an alle interessierten Mitleser. Phrontistes muss leider warten, bis Neo ihm antwortet. :D
Götz

Geschrieben
  Am 8.6.2024 um 20:28 schrieb Goetz:

Phrontistes muss leider warten, bis Neo ihm antwortet. :D

Erweitern  

Sehr witzig. Nachdem Du Dich andauernd öffentlich darüber beschwerst, dass ich nicht mit Dir rede: Willst Du, dass ich öffentlich begründe, weshalb? Oder wozu soll das sonst gut sein?

Geschrieben
  Am 8.6.2024 um 20:40 schrieb Phrontistes:

Nachdem Du Dich andauernd öffentlich darüber beschwerst, dass ich nicht mit Dir rede

Erweitern  

Das tue ich doch nicht.
Niemand muss mir mir reden, wenn er es nicht möchte.

Aber ich will deutlich machen, warum du oftmals Beiträge schreibst die erkennen lassen, dass du meine vorangegangenen Beiträge nicht gelesen hast.

Geschrieben

Ein Beispiel:

  Am 8.6.2024 um 20:40 schrieb Phrontistes:

Nachdem Du Dich andauernd öffentlich darüber beschwerst

Erweitern  

Ich habe das gerade zweimal (kurz hintereinander) gemacht. Das waren die einzigen beiden Male.
Das wüsstest du, wenn du meine Beiträge aufmerksam lesen würdest.

Geschrieben

Hallo Spurwechsel,

Hallo streit_ross,

das ist nett. Aber was soll ich sonst machen? Obwohl ich seit einem Jahr nicht mit ihm rede und (bis vorhin) auf nichts direkt eingehe, was er schreibt, zerredet er systematisch jeden Beitrag von mir und sogar jeden Thread, den ich erstelle. Da kann ich mich doch nur zurückziehen.

Beste Grüße

Phrontistes

 

Geschrieben

Zwischen Dir lieber Phrontistes und Goetz liegen hier im Forum leider oft Welten. Damit meine ich nicht die zwischenmenschliche Kommunikation. Es wird immer Menschen geben mit denen man kann, und Menschen mit denen man nicht kann.

Du stellst hier z.B. eine Featurerequest der unnötig ist, weil Dein Wunsch ohne technische Klimmzüge bereits realisierbar ist. Statt den Hinweis anzunehmen, findet hier ein unnötiges Hauen und Stechen statt. Ob dieses Verhalten, das auf Ignoranz beruht, dem Studio, dem Forum, usw. "gut tut" muss jeder für sich selbst entscheiden. Ich behaupte "nein".

Ja, Du tüftelst gerne an den Möglichkeiten des Studios und entwickelst pfiffige Lösungen. Aber viele lässt Du alleine mit Deiner Spracheinstellung (Englisch) hier aussen vor. Die Einstellung ist für Dich sicherlich die passende, sonst Du sie sicherlich nicht gewählt. Aber für die breite Masse? Das Studio ist eine weitestgehend deutsche Software, die teilinternationalisiert (hier Englisch) ist. Du veröffentlichst Deine Tipps und Tricks, Deine Screenshots, auch bei offensichtlich "in deutscher Sprache Fragenden", grundsätzlich in Englisch. Erwartest Du, das der Fragesteller dann seine Locale ändert um Deine Wege nachvollziehen zu können?

Statt hier die beleidigte Leberwurst zu geben, schau Dir doch einfach einmal selbstkritisch Deinen Videocontent an, und Vergleiche ihn mit dem Content von Goetz. Wo glaubst Du nimmt der User "mehr mit"? Von einem in einer tollen Szenerie (mit tollen Kamerafahrten) aufgegleisten neuem Rollmaterial, oder von "Step by Step" aufgezeigten Lösungen? Auch wenn es oft nur ganz simple Dinge sind ... wie richte ich Fahrstrassen ein? Wendezugsteuerung in Brummis tollen Modulen, usw.

Nicht jeder der nicht Dein Claqueur ist, ist automatisch Dein Feind. Aber akzeptiere doch bitte einfach (und neidlos) das hier im Forum echte Skriptkapazitäten gibt, und "nimm mit". Es kostet nichts. Und es verpflichtet zu nichts.

VG, Cafépause 

Geschrieben

Hallo Phrontistes,

ein explizites Start-Event gibt es nicht, nur der Weg über Lua, wobei es sich hier auch nicht um ein explizites Starten handelt. Es handelt sich hier um eine Lua-Eigenschaft, bei der ein Skript ausgeführt wird, wenn es kompiliert wird. Und Skripte werden beim Start und nach jeder Änderung in der EV neu kompiliert, dein Start-Code würde daher mehrfach ausgeführt werden.

So ein Start-Event hatte ich damals bei der Neuentwicklung der EV bereits im Hinterkopf, habe mich davon zunächst aber wieder distanziert, weil das eventuell Probleme für den Nutzer mitbringen könnte. Der Nutzer würde nach dem Laden einer Anlage diese nicht mehr so wieder vorfinden, wie er sie nach dem Speichern verlassen hat. Bisher vermag ich noch nicht so richtig abzuschätzen, ob und welche negativen Auswirkungen das hat.

Vielleicht kannst du aber etwas detaillierter beschreiben, was du mit einem Start-Event vorhast.

Viele Grüße,

Neo

Geschrieben

Hallo Neo,

Danke für die Rückmeldung.

  Am 9.6.2024 um 08:40 schrieb Neo:

ein Start-Code würde daher mehrfach ausgeführt werden

Erweitern  

Das ist natürlich keine Lösung.

  Am 9.6.2024 um 08:40 schrieb Neo:

nach dem Laden einer Anlage diese nicht mehr so wieder vorfinden, wie er sie nach dem Speichern verlassen hat.

Erweitern  

Genau dieses Problem hat mich veranlasst, über einen Start-event nachzudenken:

Autos werden von einem Kontakt auf 0 gebremst und tröpfchenweise entlassen (Speed jeweils currentSpeed):

Screenshot2024-06-09104922.jpg.c7090bc321128b3ab138c68550521f41.jpg

Während der Verzögerung wird die Anlage gespeichert. Ein Auto steht auf dem Kontakt. Defer ist natürlich nicht gespeichert. Also muss ich nach dem Laden das erste Auto anschubsen:

Screenshot2024-06-09104952.jpg.11f94ec56465fc82165c713decc2aab4.jpg

Das geht natürlich mit einem Schalter, aber automatisch nach dem Laden oder starten wäre halt schöner.

Beste Grüße

Phrontistes

Geschrieben
  Am 9.6.2024 um 09:01 schrieb Phrontistes:

Während der Verzögerung wird die Anlage gespeichert. Ein Auto steht auf dem Kontakt. Defer ist natürlich nicht gespeichert.

Erweitern  

Aktive Verzögerungen werden auch in der Anlage gespeichert und nach dem Start normal weiter ausgeführt. Hast du ein Beispiel, wo das nicht der Fall ist?

Viele Grüße,

Neo

Geschrieben

Hallo Neo,

  Am 9.6.2024 um 09:04 schrieb Neo:

Aktive Verzögerungen werden auch in der Anlage gespeichert und nach dem Start normal weiter ausgeführt.

Erweitern  

OK, wenn ich darüber nachdenke, kann es nicht anders sein, sonst herrschte Chaos :$. Ich hatte halt beobachtet, dass manchmal nach dem Laden der Anlage ein Auto auf einem der beiden Kontakte steht und sich nicht bewegt und hatte mir (unsinnig) zusammengereimt, dass es an der Verzögerung liegt.

Aber ein Start-Event wäre trotzdem schön. Ich habe z.B. auch diesen (lt. Goetz überflüssigen) Code auf einem Schalter, der sein muss, bis Du das (lt. Goetz bereits behobene) Problem beseitigt hast und den ich auch in einen Start-Event legen würde, so es einen gäbe.

local t = layout:getEntitiesByKeyword("Signal with TC")
for i, Iter in ipairs(t) do
  local pos = Iter.transformation.position
  pos["z"] = pos["z"] + 10
  Iter.transformation.position = pos
  pos["z"] = pos["z"] - 10
  Iter.transformation.position = pos
end
print(#t .. " Signalpositionen repariert")

Beste Grüße

Phrontistes

Geschrieben

Hallo Phrontistes,

Ich schreibe meinen Initialisierungs Code in das main skript. Der wird dann genau einmal ausgeführt, oder nach neu kompilieren wie Goetzgeschrieben hat.

Dort geht schon alles, bis auf "print()"

Grüße vom Liftboy 

Geschrieben
  Am 9.6.2024 um 09:29 schrieb liftboy:

genau einmal ausgeführt

Erweitern  
  Am 9.6.2024 um 08:40 schrieb Neo:

nach jeder Änderung in der EV neu kompiliert, dein Start-Code würde daher mehrfach ausgeführt werden

Erweitern  

"in der EV" gibt es bei mir ständig Änderungen. Ich verstehe Neo so, dass nach jeder Änderung in der EV die gesamte EV (samt Skript) neu kompiliert wird. Dann ist das main script keine Lösung.

Geschrieben

nach meiner Beobachtung wird immer das geänderte Skript neu kompiliert.

In einer strukturierten Programmierung gibt es genau ein main-skript, das kann 10 zeilen oder 100 zeilen lang sein, aber man muß es einfach nur manchmal anpassen, aber nicht ständig ändern, weil: es enthält eigentlich keinen Ablaufcode, sonder eben nur Initialisierungscode und der wird ja nicht ständig geändert.

Oder habe ich deine Frage nach einem einmaligem Startskript falsch verstanden ?

 

Geschrieben (bearbeitet)

Hallo,

  Am 10.6.2024 um 16:45 schrieb liftboy:

Oder habe ich deine Frage nach einem einmaligem Startskript falsch verstanden ?

Erweitern  

Phrontistes möchte gerne ein "Korrekturskript" laufen lassen, das mit dem (Neu-) Aufruf der Anlage einmalig gestartet wird...

  Am 10.6.2024 um 16:45 schrieb liftboy:

es enthält eigentlich keinen Ablaufcode

Erweitern  

... dieses würde eine Ablaufcode enthalten!

Neo verweist darauf, daß dieses Skript mit jeder (gespeicherten) Änderung der EV (nicht nur dieses Skriptes) ausgeführt werden würde (was nach meinen Versuchen auch so ist)...

... es hat also nichts mit einem Initialisierungscode zu tun.

Gruß
EASY

Bearbeitet von EASY
Geschrieben

Hallo EASY,

  Am 10.6.2024 um 19:18 schrieb EASY:

was nach meinen Versuchen auch so ist

Erweitern  

Danke, dass Du es getestet hast. Das Ergebnis entspricht dem, was Neo geantwortet hatte. Die Antwort auf meine Eingangsfrage ist, dass es keinen Event gibt, der ohne weiteres Zutun einmal ausgeführt wird, nachdem die Anlage neu geladen wurde und erstmals gestartet wird. Das "und" gehört auch zu meiner Frage, denn bloßes Laden muss, wie Neo immer betont, dazu führen, dass sich die Anlage exakt im gespeicherten Zustand befindet.

Mein Featurerequest war nicht "unnötig" und Goetzens Antwort falsch, seine Häme umso deplatzierter. So, jetzt dürft ihr gerne weiter den "echten Skriptkapazitäten" zujubeln. Ich mische mich nicht mehr ein und wenn ich Vorschläge für die Weiterentwicklung habe, dann bekommt sie Neo direkt.

Beste Grüße

Phrontistes

Geschrieben
  Am 9.6.2024 um 09:20 schrieb Phrontistes:

den ich auch in einen Start-Event legen würde, so es einen gäbe

Erweitern  

Hast du deinen Reparatur-Code einmal in ein globales Skript gepackt? Dass so ein Skript auch nach einer Änderung in der EV ausgeführt wird, erscheint mir bei deinem Code nicht nachteilig.

Unabhängig davon wird so ein Reparatur-Code natürlich auch wieder hinfällig, sobald die Fehler beseitigt wurden.

Viele Grüße,

Neo

Geschrieben

Hallo Neo,

Nur zu meinem Verständnis: mit "globalen Skript" meinst du das Skript direkt unter "Ereignisse", das wäre das was ich mit "main skript" bezeichne!

Zu welchem Zeitpunkt und aus welcher Position wird das ausgeführt wenn ein "print()" Aufruf mit " attempt to call a nil value (global print)" gestempelt wird ?

Grüße vom Liftboy

Geschrieben

Vielleicht einmal ein anderer Lösungsvorschlag:

In meinen Anlagen gibt es einen Start-Timer, der auf 2 Sekunden steht. Nach Ablauf wird ein Start-Event ausgeführt, der nacheinander benutzerdefinierte Events zum Starten des Bahnverkehrs, des Straßenverkehrs und ggf. anderer Belange aufruft. Danach wird der Start-Event deaktiviert.

Möchte ich den Start-Event nicht ausführen, setze ich den Starttimer auf Null. Soll z.B. zum Testen nur der Straßenverkehr gestartet werden, setze ich die anderen benutzerdefinierten Ereignisse auf deaktiviert. 
Ich bin mit dieser Lösung zufrieden.

Viele Grüße, Wolfgang

Geschrieben

Definiere einen Timer und einen Event, der bei Ablauf des Timers aktiv wird. Dort rufst Du nacheinander die benutzerdefinierten Events auf, die den Bahnverkehr hochfahren (Eigenschaften der Züge, wie z.B. Animationstexte für Türen öffnen eintragen, Schattenbahnhöfe/Depots starten), den Straßenverkehr (Animationstexte für Blinker etc, Geschwindigkeit setzen, Automatische Beschleunigung/Verzögerung). Details findest Du in meiner Anlage Basissteuerungen (Id gerade nicht greifbar).

Meine Anlagen sind immer pausiert, so dass man erst den Play-Button drücken muss. Mir gibt es aber die Gelegenheit, den Starttimer auszuschalten, wenn ich etwas ändern möchte.

Viele Grüße, Wolfgang 

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...