Eigenes Modding-Menü im Bus erstellen

Willkommen in der OMSI-WebDisk!
Als Gast kannst du nur Inhalte in deiner ausgewählten Sprache sehen. Registrierte Nutzer können die Sichtbarkeit anderer Sprachen in ihrem Kontrollzentrum aktivieren, weitere Infos hier.
Alle Themen sind in den Foren mit einer Sprachflagge gekennzeichnet: = Englisch [EN], = Deutsch [DE], = Französisch [FR]. Wenn du die angegebene Sprache nicht beherrschst, schreibe auf Englisch!
  • Moin,
    ich wollte mal in die Runde fragen, wie man ein Modding-Menü (Beispiel: MX C2, COD Matrix) selbst für sich erstellen kann. Wie muss der Modell-/Scripteintrag aussehen?

    Was ich dort gerne im Spiel ändern würde:

    - Rechter Außenspiegel (also langer, langer v2, kurzer)

    - Anzeigen/Verstecken von Gangwahltastern 1,2,3

    Ich bedanke mich schonmal im Voraus für alle Tipps,
    LG Jannik

  • Wie tief steckst du denn in der Materie Script/Blender? Ich schreibe dir jetzt einfach mal ein Beispiel und dann kannst du ja am Ende immer noch fragen, wenn du es nicht verstehst.


    Dein Script ist im Endeffekt ziemlich einfach:


    Code
    {trigger:changeMirror}
        (L.L.vis_spiegel) !
        {if}
            1 (S.L.vis_spiegel)
        {else}
            0 (S.L.vis_spiegel)
        {endif}
    {end}


    Du erstellst dir also zuerst einmal einen Trigger. Dieser Trigger kann verwendet werden, um hinterher ein [Mouseevent] auszulösen.


    Im Trigger-Rumpf brauchst du eine Fallentscheidung (also eine IF-Abfrage).


    Wenn vis_spiegel 0 ist, dann setze vis_spiegel auf 1 ansonsten setze vis_spiegel auf 0. Ansonsten heißt: Wenn vis_spiegel 1 ist, dann muss der Ursprungswert 0 wiederhergestellt werden.


    Jedes Mal wenn du jetzt das [Mouseeevent] auslöst, dann wird der Wert der Variable vis_spiegel geändert.


    Jetzt brauchst du natürlich noch zwei Spiegel Modelle.


    Ein Spiegel erhält folgenden Eintrag:


    Code
    [visible]
    vis_spiegel
    0


    Das andere Spiegel Model erhält folgenden Eintrag:


    Code
    [visible]
    vis_spiegel
    1



    Wenn du jetzt halt das [Mouseevent] auslöst, steuert der [Visible] Eintrag, anhand der Variable vis_spiegel, welches Spiegelmodel eingezeigt wird.


    In die visuals_varlist trägst du natürlich ebenfalls noch vis_spiegel ein


    Jetzt brauchst du nur noch irgendein Button, eine plane, ein objekt, ein cube, der auf das [Mouseevent] reagiert.


    Das erhält dann folgenden Eintrag:


    Code
    [mouseevent]
    changeMirror
  • Hey, cool das du mir hilfst.

    Im Thema Blender bin ich ausreichend fit, jedoch habe ich gar keine Ahnung von Scripts.
    Soll ich dafür eine eigene .txt/.osc erstellen? Soll das in die main.osc?

    Sorry für die dumme Frage aber bin halt noch relativ neu

  • Gibt keine dummen Fragen, nur dumme Antworten. Frag ruhig, soviel du möchtest.


    Würde dir empfehlen eine neue .osc + varlist anzulegen.


    moddingdisplay.osc

    moddingdisplay_varlist.txt


    Die musst du dann natürlich auch in der .bus Datei hinzufügen, und den Index um eins erhöhen.


    Am besten veränderst du keine andere Datei, dann kannst du nämlich dein Moddingmenü auch in anderen Fahrzeugen verwenden.

  • Dein Script ist im Endeffekt ziemlich einfach:

    Code
    {trigger:changeMirror} 
        (L.L.vis_spiegel) ! 
        {if} 
            1 (S.L.vis_spiegel) 
        {else} 
            0 (S.L.vis_spiegel) 
        {endif} 
    {end}

    Einfach, aber für den Fall hier nicht passend, da drei Optionen vorhanden sind. Eine ganz einfache Variante, das umzusetzen, ist folgender Schnipsel:

    Code
    {trigger:changeMirror}
        (L.L.vis_spiegel) 1 + 3 % (S.L.vis_spiegel)
    {end}

    vis_Spiegel ist, wie von Lazarus beschrieben, die Variable, mit der der gewünschte Spiegel ausgewählt wird.

    Die Zahl 3 legt fest, wie viele Optionen vorhanden sind. Mit jedem Klick auf den entsprechenden Klickspot wir die Variable um 1 hochgezählt, bis der Höchstwert (hier 3) erreicht wird. Ist dieser erreicht, wird die Variable auf 0 gesetzt.


    Dadurch wird bei jedem Klick wie folgt gezählt: 0, 1, 2, 0, 1, 2,...

    Wenn du z.B. nur zwei Optionen hast, kannst du die Zahl 3 auch einfach durch 2 ersetzen. Dann wird entsprechend so gezählt: 0, 1, 0, 1,...

  • Wenn du z.B. nur zwei Optionen hast, kannst du die Zahl 3 auch einfach durch 2 ersetzen. Dann wird entsprechend so gezählt: 0, 1, 0, 1,...

    Das geht noch kürzer - ! invertiert ja grundsätzlich, d.h. ein Trigger mit dem Inhalt
    (L.L.Deine_Variable) ! (S.L.Deine_Variable) wechselt immer zwischen 0 und 1, weil der Wert jeweils invertiert wird.

  • Darf ich kurz zwei Fragen einwerfen?

    Kann ich damit auch wie bei der CoD Matrix ein Buch umsetzen was eingeklappt irgendwo liegt und per Klick aufs Buch aufs Lenkrad gelegt und aufgeklappt wird?


    Muss ich im Script auch einen Frame oder ähnliches anlegen oder kann der Schnipsel wirklich für sich allein stehen?

  • Ian.Häusler.26.02 Ja, das musst du sogar machen. Hier wurde ja als Beispiel der Spiegel genommen. Letzten Endes ist das für das "Modding-Buch" dieselbe Geschichte. :-)


    Wie jannikk bereits erwähnt hat, muss der Schnippsel einzeln stehen. Es gibt verschiedene Abschnitte in einem Script, die auf unterschiedliche Art und Weise ausgeführt werden:


    {trigger:xyz} - Wird immer dann ausgeführt, wenn dieser Trigger durch ein mouseevent (entweder mittels Shortcut oder der Maus selber) aufgerufen wird.

    {macro:xyz} - Wird immer dann ausgeführt, wenn das Makro selber mittels (M.L.xyz) aufgerufen wird.

    {init} - Wird nur einmalig beim Bus spawnen ausgeführt (bei der Initialisierung).

    {frame} - Wird solange ausgeführt, wie der Bus in OMSI existiert.


    Deswegen gibt es die main-Dateien, welche jeweils einmal diesen {init}- und {frame}-Abschnitt mit den entsprechenden Makros ((M.L.xyz)) enthalten.

  • Zur letzten Frage kann ich schon sagen, dieser Script-Schnipsel der hier jetzt häufiger genannt wurde kann ganz alleine in eine eigene .osc Datei.

    Init ist ganz sinnvoll, dort könnte man bspw. einen Standardwert für eine Variable definieren. Möchtest du bspw. das vis_spiegel statt mit 0 (Standardwert) immer mit 2 initialisiert wird, dann kannst du genau das im Init tun.


    Code
    {macro:moddingMenu_init}
        2 (S.L.vis_spiegel) (S.L.vis_doors) (S.L.vis_lenkrad)
        3 (S.L.vis_matrix)
        1 (S.L.vis_Radkappen)
    {end}


    Das bindest du dann in der Main noch ein.


    Wenn du jetzt deinen Bus spawnst, wird das Fahrzeug bspw. schon mit Radkappen und einem anderen Spiegel gespawnt.