[setvar] ~Citaro(G) - Script-setvar

Das Forum befindet sich im reduzierten Betrieb. Die Addon- und Supportforen bleiben weiterhin verfügbar.
Bitte beachte, dass OMSI nicht mehr weiterentwickelt wird. Ein Teil der Entwickler widmet sich inzwischen der Entwicklung eines neuen Simulators. Weitere Informationen zum LOTUS-Simulator findest Du hier.
Ein communitybetriebenes Nachfolge-Forum wird hier verlinkt, sobald es gegründet und bereit ist.
  • N'abend allerseits,


    wie die Überschrift mal wieder erzählt, bin ich zurzeit dabei die Busse aus meinem Projekt zusammenzufügen, damit es nicht mehr als so viele sind.
    Aus diesem Beitrag wurde ich schon mal schlauer, wie man die Dateien per setvar ändern kann, nur halt ist das Problem, dass ich nicht weiter komme bei den Scripten


    Als Beispiel: Ich habe einmal eine Gorba (ISA) Matrix & eine LAWO-Matrix, d.h. ich habe unterschiedliche Bauteile und unterschiedliche Scripts, wie kann ich jetzt OMSI sagen, dass er wenn diese Variable dort steht, das dann auch die benötigten / erforderlichen Scripts dazu genommen werden?


    MfG Sven Daniel

  • Kannst du mir das kurz genauer erläutern, denn einerseits wohin muss das? In die model.cfg oder in die Matrix.osc?
    Also müsste es ja rein theoretisch so aussehen

    Code
    1. (L.L.var_matrix)
    2. {if}
    3. (M.L.LAWO_frame)
    4. {else}
    5. (M.L.Gorba_frame)
    6. {endif}


    Muss bei "M.L.Gorba_frame" & das andere nicht noch irgendwas hin oder muss das exakt so bleiben?

    :/


    Steige zurzeit erst in diese Materie ein deswegen die Fragen


    MfG Sven Daniel

  • Gut das ist mir jetzt klar geworden. Ich frage dich mal ein wenig aus, denn ich habe das jetzt so gemacht:


    Ich habe in der Main.osc "(M.L.ISA_frame)" & "(M.L.LAWO_frame)" eingefügt. Dies habe ich dann auch in den jeweiligen Matrix.osc gemacht ( also via Suche matrix_frame gesucht und um definiert ). Jetzt kommt mir nur die Frage, ich habe in der .Bus Datei ja weder noch z.B. wenn ich die LAWO Matrix so drin habe und jetzt via setvar sage ich will die Gorba / ISA drin haben, dann stehen ja in der .bus Datei das ja garnicht, oder wie muss ich das jetzt verstehen? Ignoriert er dann einfach was in der .bus Datei steht oder wie?


    MfG Sven Daniel

  • Wenn ich das dann komplett richtig verstanden habe muss ich dann alles Scripte in die .bus Datei einfügen, die main.osc entscheidet dann welches genommen wird. Soweit klar müssen die frames nur bei der osc. So heißen oder auch die dazugehörige varlist, stringvarlist, constfile? Oder wird diese auch gleichzeitig mit ausgewählt?
    Da ich erst später zu Hause bin kann es lange Dauern auf eine Antwort!


    MFG Sven Daniel

  • Sorry für die meinerseits verspätete Antwort, irgendwie ist mir der Thread durchgerutscht.
    Varlists, Constfiles usw. können nicht ausgetauscht werden. Es werden immer alle geladen, die in der *.bus-Datei aufgeführt sind.
    Der Name der Datei spielt dabei überhaupt keine Rolle, die Dateien müssen also nicht genauso wie der Frame heißen (das erleichtert lediglich den Überblick).


    Ich würde dir folgende Vorgehensweise empfehlen:
    1. Lege die (string)varlists beider Skripte zusammen und entferne doppelte Einträge.
    Zwar kann eine Variable auch mehrmals definiert werden, dies führt allerdings zu Problemen beim Neuladen einer gespeicherten Situation (Variable wird auf null gesetzt).
    2. Bei den Constfiles wird das Ganze etwas komplizierter. Zwar kann auch eine Konstante problemlos mehrfach definiert werden, allerdings wird logischerweise immer nur ein Wert gespeichert.
    Öffne also die beiden Constfiles und ersetze das Präfix "Matrix_" durch ein eindeutiges, also z.B. "LAWO_" in der einen Constfile und "Gorba_" in der zweiten.
    3. Zuletzt öffne noch die beiden Skripte und tausche dort bei den Konstanten ebenfalls das Präfix aus. Ersetze einfach "(C.L.Matrix_" durch "(C.L.LAWO_" bzw. "(C.L.Gorba_".
    Nun kann jedes Skript auf seine eigenen Konstanten zugreifen und wird nicht durch die des anderen gestört.

  • Moinsen,


    ich habe es Schritt für Schritt gemacht und habe nun den folgenden Fehler, dass der Bus nicht spawnt...


    Logfile:


    Ich weiß, dass er was faselt über falsche Variablen, das ist mir bewusst, aber wie behebe ich den Fehler?
    Muss ich alle Variablen in der Constfile und in der .osc ändern? (also dieses Matrix_ gedönse)
    Muss ich überhaupt die .osc verändern?


    Die Fragen hören sich auf dem ersten Lesen komplett bescheuert an ich weiß, aber das kann ich aus deiner Beschreibung nicht herauslesen!
    Bitte erkläre es nochmal ein bisschen genauer!


    MfG Sven Daniel

  • Ja, du musst die beiden .osc-Dateien öffnen und jeweils "(C.L.Matrix_" durch dein neues Präfix ersetzen, wie oben beschrieben.
    Das selbe musst du dann auch noch für "(F.L.Matrix_" machen, nach dem selben Schema.
    Du kannst dafür einfach die "Suchen & Ersetzen" Funktion des Editors verwenden, pass nur auf, dass du alles richtig schreibst und keine Klammern, Punkte, o.Ä. vergisst.

  • Moinsen,


    ja ich weiß ich melde mich auch etwas später

    ^^


    Ich habe das mal an dem Facelift von Helvete probiert (hat ja schließlich die gleichen Scripts und so) und wenn ich dann aber etwas in das Ziel eingeben möchte kommt folgendes:
    LOGFILE:


    Der Fehler ist ja"Fehler bei Bereichsüberprüfung" jetzt kommt mir nochmals die Frage:
    Muss die Constfiles auch zusammengefasst werden also
    CONSTFILE:


    so oder getrennt?
    Ja ich weiß das ich lästig sein kann, aber komme halt einfach weiter. Falls du die anderen Dateien auch noch zu Gesicht haben möchtes so schreibe es mir.


    MfG Sven Daniel

  • Daniel, dir fehlt einfach nur das Grundwissen über die Scripte.


    Also mal kurz ein kleiner Überblick.
    Normalerweise braucht man in einem Scriptordner nur 4 Dateien. Eine Script.osc, eine varlist.txt, eine stringvarlist.txt und eine constfile.txt. Mehr braucht es nicht. Allerdings leidet die Übersicht ganz erheblich darunter.
    Daher erstellt man mehrere Dateien, wo dann nur das eingetragen wird, was man für den entsprechenden Abschnitt benötigt.
    Ein Scheibenwischer besteht aus den Scheibenwischer selbst und einem Schalter. Hier werden der Übersicht wegen, die Teile, die eigentlich zusammengehören aufgeteielt.
    In der model.cfg steht das Objekt wiper_sw.o3d als Objekt drin. Da steht auch wie weit der Schalter sich bewegen soll. Die Bewegung kommt aber nicht von allein. Der Schalter befindet sich im Cockpit, also steht
    in der cockpit.osc drin das der Schalter etwas machen soll.
    {Trigger:wiper_sw}
    (L.L.wischer_schalter) ! (S.L.wischer_schalter) s1
    {end}
    Das ist nur der Abschnitt damit der Schalter sich bewegt und von einer Schaltstellung zur anderen umschaltet. Das [mouseevent] in der model.cfg heißt also wischer_schalter.
    Mit der Maus kann ich nun den schalter von einem Zustand in einen anderen Zustand schalten. Also von ausgeschaltet in eingeschaltet. Mehr passiert hier nichtmehr und auch im Bus nicht. Aber nicht erschrecken, wenn du in die cockpit.osc, des MB O305 reinschaust. da sind viele Trigger mit dem Wischer drin. Der Bus hat aber auch 3 Schalter und einen Taster dafür. Für den Taster gibt es zwei Trigger. Dafür funktioniert er auch nur solange wie man diesen gedrückt hält. Läst man diesen los, geht der Schalter in seine ursprüngliche Stellung zurück (aus).


    Allerdings passsiert auch mit den Wischern nichts. Im Macro werden die Schalterwirkung mit eine Funktion umgesetzt. Also die Schalterstellung "ein" bekommt eine Funktion. Und hier wird auch festgelegt, welche Funktion wann und wielange sie aktiv ist. Als Beispiel, nur solange der Fahrzeugstrom eingeschaltet ist, solange der Schalter auf ein steht, oder solange bis die Wischer ihre Nullposition erreicht haben.Die Bewegung der Wischerarme steht in der wiper.osc. Die Wirkung der Scheibenwischer, den Regen auf der Scheibe wegzuwischen, steht in dert rain.osc.


    Ein anderes Beispiel, eine Lichtkontrollleuchte. Ein Macro, kann viele Kontrollleuchten zusammenfassen. Jeder Abschnitt ist ein Macro allein. Aber sind zusammen in einem Macro eingetragen.
    Hier mal ein Beispiel für eine Abfahrtskontrolleuchte. Diese soll nur leuchten, wenn der Bus abfahrbereit ist. Dazu kann man sehr viele Anforderungen stellen: Zur besseren Übersicht, schreibe ich nicht die originalen Befehle rein, sondern die eigentliche Abfrage:
    (L.L.Strom_eingeschaltet)
    (L.L.Tür_0_zu) &&
    (L.L.Tür_1_zu) &&
    (L.L.Tür_2_zu) &&
    (L.L.Tür_3_zu) &&
    (L.L.Türentriegelung_01_aktiv) ! && (Ein Ausrufezeichen ändert eine 0 in eine 1 und umgedreht)
    (L.L.Türentriegelung_23_aktiv) ! &&
    (L.L. Motordrehzahl) 300 > && (also über 300U/min)
    (L.L.Fehlermeldung_Lichtkontrolle) ! &&
    (L.L.Haltestellenbremse_frei) &&
    (L.L.Feststellbremse_frei) &&
    (S.L.Abfahrtskontrolle_ein)
    Werden alle Fragen (L.L.Frage) mit JA (=1) beantwortet, dann ist das Ergebniss (S.L.Ergebniss) JA (=1). Wird bei diesem Beispiel auch nur eine Abfrage mit NEIN (=0) beantwortet, bleibt auch das Ergebniss NEIN (=0).


    Damit die Macros auch abgefragt werden, muß das Macro auch eingetragen werden. Das geschieht in einer Frame-Liste.
    {Macro:Uhrzeit_frame}
    M.L.Uhrzeit_frame
    Das Macro steht in dem Beireich eines Scriptes wo es hingehört und die Liste steht meist in der Main.osc, was auch nur ein Script ist.
    Dieses Script muß auch in der Busdatei stehen. Steht es dort nicht, wird es nicht beachtet. Steht das Script in der Busdatei, werden aber nur die Macro's beachtet, die in der Frame-Liste eingetragen sind. Damit Omsi mit den Befehlen etwas anfangen kann, muß jeder einzelne verwendete Befehl auch registriert werden. Also werden diese in der varlist.txt eingetragen:
    wischer_schalter
    Tür_0_zu
    Tür_1_zu
    usw


    Man kann im Bus zwei Uhren einbauen. Eine digitele und eine analoge. Beides sind aber nur Uhren. Und dennoch funktionieren diese unterschiedlich. Dazu braucht man dann zwei Macro's. eine für die Uhr mit Zeigern und eine für die digitaler Variante. Ich habe als zwei verscheidene Macros, die ich umschalten muß, wenn ich die Uhren austausche.


    Das selbe Austauschen hat SchulterSack mit den Matrixscripten gemacht. Da ich nur ein Script brauche, wird nur zwischen den Scripten hin und hergeschaltet.


    Heißt auf gut deutsch:
    (L.L.Abfrage des Befehls)
    {entweder}
    (L.L.Lawo_Matrix)
    {wenn nicht aktiv, dann}
    (M.L.Gorba_Matrix)
    {ende}
    in der CTI-Datei wird nur abgefragt:
    LAWO
    1
    Bedeutet LAWO JA - aktiv
    LAWO
    0
    Bedeutet Nein - naktiv


    Ich hoffe das erleichtert dir den Einstieg etwas. Es ist nur an der Oberfläche gekratzt. Und nichtmal vollständig. Es gibt noch mehr Möglichkeiten, die hier aber zu weit führen würden.


    Du kannst ein großes Matrixscript nutzen, oder zwei Matrixscripte. Du kannst eine Constfile verwenden oder zwei. Das ist dir überlassen. Mache das was übersichtlicher ist.
    Ein Script mit 10 Macros braucht genauso viel Performance, wie 2 Scripte mit 5 Macros.
    Für die Übersichtlichkeit empfehle ich dir zwei Matrixscripte, aber entscheide selber was dir mehr liegt.



    Gruß Tatra

    2 Mal editiert, zuletzt von Tatra ()

  • Ich gebe zu, ich habe mich jetzt noch nicht so viel mit dieser Materie auseinander gesetzt und ich danke SchulterSack & dir, Tatra, dass ihr mir das so gut wie möglich erklärt & hilft!
    Nicht das wir uns hier an dieser Stelle missverstehen o.ä., aber ich nehme alles Ernst was Ihr mir schreibt bzw. was ich zu euch schreibe!


    Jetzt aber erstmal zum Thema zurück, worum es hier auch geht. Ja, ich habe mir deinen Post , Tatra, angeschaut und durcharbeitet. Habe mithilfe dessen jetzt nochmal alles überarbeitet. ( + Logfile-Fehler etc. pp. gefunden )
    Klappt soweit alles. Der Bus kann wieder erstellt werden. Schonmal etwas. Das jetzige Problem ist, der Bus kann Schildern... aber nicht richtig... siehe Bilder.


    LAWO:


    ISA:


    Die Seiten und Heck zeigen jeweils nichts an. Was ich noch dazu sagen kann ist, dass er nur Ziele schildert und keine Linien (z.B. 466 und sowas halt)
    Ich werde denke ich mal davon ausgehen, dass dort ein kleiner Fehler drin ist, den ich aber so noch nicht finden kann / konnte! Denn in der Logfile stand weder noch ein Script-Fehler!


    Falls Ihr Einblicke in die Dateien haben wollt - anschreiben bitte.


    Noch eine zusätzliche nebensächliche Frage:
    Kann man auch passangercabin.cfg variieren mit setvar's? (Ja / Nein Antwort reicht erstmal, keine Erklärung dann erstmal nötig ^^)
    Ich hoffe es gibt dort eine Lösung für, oder ich fange des nochmal von vorne an.

  • Eine Passengercabin ist absolut einmalig, so wie eine model.cfg. Solche dateien werden zwar auch in der Bus-Datei eingetragen, aber nicht unter Scripte, da es keine Scripte sind. Du kannst aber jedem Bus immer nur eine model.cfg, Sound, passenger, Path usw zuweisen. Darum benötigt ein Gelenbus auch zwei Bus-Dateien.