"DoorsOpenClose" modifizieren

  • Hallo,


    ich habe mich gerade mal dran gesetzt und probiert, ob man es nicht doch irgendwie (zumindest behelfsmäßig) hinbekommt,
    dass man die Türen eines Zuges manuell schließen kann. Ich habe das ganze an der BR 628-4 getestet. Ich habe also in den
    Input-Mapper der 628 zwei neue Einträge für "Key_T" (für die linke Seite) und Control + "Key_T" (für die rechte Seite) eingefügt, die jeweils das Control "DoorsOpenCloseLeft" bzw.
    "DoorsOpenCloseRight" togglen und jeweils bei diesen Controls "ApplyToConsist" auf true gesetzt. Dazu habe ich nun zwei Fragen.
    1.) Wenn ich im Spiel jetzt T drücke öffnen sich die Türen auf der linken Seite wie gewollt, jedoch nur an der 628 des Triebwagens, in den der Fahrer ist. Die Türen an der entsprechenden 928 öffnen sich nicht.
    Gleichzeitig öffnen sich die Türen des 2. Triebwagens (Doppeltraktion) ständig, springen dann wieder sofort zu und öffnen sich wieder. Das Ganze geht solange, bis ich erneut T drücke. Kann man das irgendwie beheben?
    2.) Das Ganze, wie oben beschrieben, funktioniert nur außerhalb von Bahnhöfen. Wenn ich an einem Bahnhof halte, bewirkt das Drücken von T genau das, was es vorher hat. Die Türen öffnen sich korrekt und schließen sich nach Ablaufen der Haltezeit wieder. Gibt es da irgendeinen Weg, wie man es bewerkstelligen kann, dass da trotzdem die manuelle Kontrolle greift und gleichzeitig dennoch der Load/Unload-Vorgang aktiviert wird (diesen könnte man evtl. auch vernachlässigen, dann könnte man zwar keine Szenarien mehr fahren, aber man könnte die Züge immernoch im Freeroam benutzen)?


    MfG


    ProfessorX

  • Eine andere Möglichkeit als ein Script gibt es eigentlich nicht. Die Frage ist eher was du damit bewirken willst und wofür?


    Wenn du ApplyToConsist auf true setzt dann ist das das gleiche Theater wie bei den Metronom Wagen ^^ Da gehen die Türen auch immer schön auf und zu *dumm*

  • Zitat

    Da gehen die Türen auch immer schön auf und zu

    Ja, das hab ich gemerkt :) .

    Zitat

    Die Frage ist eher was du damit bewirken willst und wofür?

    Naja ich finde es einfach realistischer. Kann sein, dass die Türen im Fernverkehr vom Zugbegleitpersonal geschlossen werden, aber auf ner kleinen
    RB-Strecke macht das dann halt doch der Tf. Auf jeden Fall macht es mir deswegen auch gleich viel mehr Spaß einen EL-Wagen von vR zu fahren.
    Nun wollte ich dieses nette Feature halt auf andere Wagen ausweiten und da es ja zumindest mit dem ersten Wagen funktioniert, dachte ich mir, dass
    man das auch irgendwie ohne Skript hinbekommt (oder dass man vllt. den TS selbst ändern kann, sodass "T" nicht mehr mit der Load/Unload-Funktion verknüpft ist,
    sondern nur noch mit den Türen).


    MfG


    ProfessorX

  • Ja aber ohne passendes Script wird das halt nichts. Auch kannst du nirgendwo abkupfern da sowohl TTB als auch vR ihre Sripts entsprechend verschlüsselt haben damit andere sich nicht mit fremden Federn
    schmücken. Entweder man macht selbst oder kennt jemanden der es kann ansonsten vergiss die ganze Sache.

  • Hi, ich bins nochmal.


    Ich habe mir nun mal die Sache mit den Skripts angeschaut und hätte dazu noch ein Paar Fragen.
    Erstmal versthe ich die Funktion OnControlValueChange nicht ganz.


    Ich verstehe die so, dass sie sobald ein Control geändert wurde aufgerufen wird,
    dann überprüft, ob es dieses Control gibt und wenn ja den Wert desselben nochmal ändert.
    Könnt ihr mir sagen, wo da mein Denkfehler ist? :)


    Die zweite Frage wäre, ob es möglich ist einer Engine in der ScriptComponent-Sektion ein zweites Skript hinzuzufügen
    (, das dann z.B. ein eigens erstelltes Control überprüft und ggf. die Türanimation ansteuert).


    MfG


    ProfessorX

  • OnControlValueChange kenn ich gar nicht als Befehl bei den lua´s. *denk*


    Ich kenne " GetControlValue" und "SetControlValue". Der erste Befehl holt sich einen Wert aus der Lok und der zweite setzt einen Wert für einen Schalter z.B.


    Bei Deinem Türproblem musst du aber ganz woanders ansetzen. Hier ist vor allem die Animation zu steuern. D.h. hier musst du mit dem Befehl "AddTime" und "Reset" arbeiten. Wie diese beiden Befehle funktionieren ist ganz gut bei den Signalen im RSC Wiki erklärt.


    Vielleicht bin ich aber was OnControlValueChange angeht auf dem Holzweg. *denk*


    Ich glaube, und hier lasse ich mich gerne korrigieren, dass man innerhalb eines Skripts auf ein weiteres verweisen kann. Aber es geht nicht, um deine Frage zu beantworten, ein zweites Skript in das EngineBlueprint einzutragen.

  • Danke für die Antwort. Also amerikanischen TS-Forim steht:

    Zitat

    OnControlValueChange is called when a control - those things in the
    blueprints - changes value. Controls are variables the RW interface
    provides.

    Zitat

    Bei Deinem Türproblem musst du aber ganz woanders ansetzen. Hier ist vor
    allem die Animation zu steuern. D.h. hier musst du mit dem Befehl
    "AddTime" und "Reset" arbeiten. Wie diese beiden Befehle funktionieren
    ist ganz gut bei den Signalen im RSC Wiki erklärt.


    Ja die Animation wollte ich schon mit AddTime steuern, jedoch muss ich das ja erstmal auslösen. Dazu habe ich mir zwei eigene Controls (für jede Seite) gemacht und wollte die Animation auslösen, wenn eines dieser Controls geändert wird. Ich fürchte jedoch wird es dann nicht funktionieren, da das ursprüngliche Skript ja kompiliert ist und ich es deshalb nicht mehr bearbeiten, also auch auf kein weiteres verweisen, kann. Wenn das mit dem zweiten Skript im Blueprint nicht geht, bliebe ja dann nur noch die Möglichkeit im zweiten Skript auf das erste zu verweisen. Der TS müsste das dann halt erkennen, aber ich glaube nicht, dass das geht (lasse mich da gerne berichtigen :) ).


    MfG


    ProfessorX

  • Ehrlich gesagt, glaube ich, kann das gar nicht funktionieren, da das zweite Script ja nie vom Simulator geladen wird.
    Aber eine ganz andere Frage: könnte mir vllt. doch noch jemand erklären, was genau die OnControlValueChange-Funktion macht,
    ist sicher wichtig das genau zu verstehen, für eventuelle zukünftige Versuche.


    MfG


    ProfessorX

  • Ich mutmaße mal:


    Der Call OnControlValueChange gibt an, wenn sich ein Schalter ändert, dann tue dieses oder jenes. Aber ich glaube den braucht man wirklich nicht, da du dies auch erreichen kannst, wenn du den Wert mit GetControlValue abfragst.


    Aber wie gesagt, ich habe diesen Call noch nie verwendet und kann nicht wirklich etwas dazu sagen, dies sind nur vermutungen.

  • Hi,


    ja das habe ich schon verstanden, komisch erscheint mir nur der Inhalt, der standardmäßig (lauf Dev. docs) eingefügt werden soll.

    Zitat

    if Call( "*:ControlExists", name, index ) then


    Call( "*: SetControlValue", name, index, value );


    end

    Das bedeutet doch, dass, wenn sich ein Wert geändert hat, überprüft wird, ob es diesen überhaupt gibt (wass ja sowieso sein muss, da er sich ja sonst nicht hätte ändern können),
    und wenn es ihn gibt (also immer) er nochmal gesetzt wird (was ja wiederum überflüssig ist, da die Funktion ja erst ausgeführt wird, wenn er bereits geändert wurde). Da muss also irgendwo
    irgendwas nicht stimmen, oder?


    MfG


    ProfessorX