Hilfe beim Skripten benötigt


Abonniere unseren Kanal auf WhatsApp (klicke hier zum abonnieren).
  • Hallo Kollegen,


    da ich sehr gern mit meinem Modell voran kommen möchte, frage ich jetzt einfach mal um Hilfe ;)


    Mittlerweile bekomme ich es dank Hilfe gut hin über "Call activate node" entliche Lichtfunktionen inkl. Bremslicht zu schalten.


    Jetzt benötige ich noch 2 Tips:


    einmal wie ich ein Blinken über Script erzwingen kann wenn ich Schalter "X" betätige


    und wie ich einen Befehl über zwei Schalter mit einer "und" oder "oder" verknüpfung auslösen kann.


    Was das blinken angeht, habe ich die Passagen von Signal Skripten rauskopiert und angepasst. Aber es tut sich leider nix. Ich habe mal die Passagen die ich für nötig halte angefügt:



    Die "und" bzw "oder" Funktion habe ich folgendermaßen versucht:



    Ich würde mich riesig freuen wenn jemand helfen könnte :)

  • Code
    if Call ("*:GetControlValue", "xxx", 0) == 1 and if Call ("*:GetControlValue", "xxx2", 0) == 1 then

    Ich habe von Lua keine Ahnung, aber mir erscheint das komisch.
    ich würde das eher so machen:

    Code
    if (Call ("*:GetControlValue", "xxx", 0) == 1) and (Call ("*:GetControlValue", "xxx2", 0) == 1) then

    Egal, wie weit Draußen man die Wahrheit über Bord wirft, irgendwann wird sie irgendwo an Land gespült.

  • Hallo,


    Wenn du etwas zum Blinken bringen willst brauchst du eine Variable die raufzählt und dann wieder zurückgesetzt wird.



    So ungefähr kann sowas aussehen (Bsp. für PZB85 ML blinken), das ganze musst du aber in die time function packen. Und nicht vergessen die Variablen vorher zu definieren.


    Und du kannst mit Call ("*:GetControlValue", "xxx", 0) auch die Werte in Variablen schreiben dass dann viel übersichtlicher ist.



    Code
    VariableXY = Call ("*:GetControlValue", "xxx", 0);
    
    
    -- Man kann auch mithilfe von Variablen ControlValues setzen
    
    
    Call ("SetControlValue", "xxx", 0, VariableYX )



    LG
    Taurus

  • wäre ja toll wenn es nur die fehlenden klammern wären :D

    Ob die fehlenden Klammern falsch sind, weiß ich nicht.
    Das 2. "if" ist aber definitiv falsch:


    if Call ("*:GetControlValue", "xxx", 0) == 1 and if Call ("*:GetControlValue", "xxx2", 0) == 1 then

    Egal, wie weit Draußen man die Wahrheit über Bord wirft, irgendwann wird sie irgendwo an Land gespült.

  • Hallo,

    Man hat relativ viel Spielraum, was die Definition der Variablen angeht. Wenn Du Dich an eine vorhandene Funktion hältst, dann wird das für Dich sicher einfacher. Du musst aber im ursprünglichen Skript schauen, wo überall die Variablen verwendet wurden, denn diese Skriptbereiche werden alle (!) auch für das Blinken benötigt.
    Im ersten Schritt solltest Du versuchen das entsprechende Licht nur ein und aus zu schalten.
    Wenn das Funktioniert, dann kannst Du Dich um das Blinken kümmern.


    Bei den obigen Variablen legen die ersten beiden die Aus- und Einschaltdauer des Lichtes fest. Diese vorgegebenen Zeiten werden später in der Updatefunktion mit dem aufsummierten Wert verglichen. Die Variable gTimeSinceLastFlash speichert die aufsummierte Zeit (siehe Beispiel von Taurus 0815). gLightFlashOn speichert den aktuellen Status der Lichtnode. Die letzte Variable gFirstLightFlash startet das erste Blinken, damit der Rhythmus in Gange kommt.
    Zum Beispiel nur der Teil zum Blinken:


    Code: Blinken.txt
    if  (gTimeSinceLastFlash  > LIGHT_FLASH_OFF_SECS and gLightFlashOn) then
       Call( "xxx:Activate", 0)
       gTimeSinceLastFlash = 0
       gLightFlashOn = false
    elseif (gTimeSinceLastFlash > LIGHT_FLASH_ON_SECS and not gLightFlashOn) or gFirstLightFlash then
       Call( "xxx:Activate", 1)
       gTimeSinceLastFlash = 0
       gLightFlashOn = true
       gFirstLightFlash = false
    end

    Wenn das Blinken per Schalter beendet werden soll, dann müssen die obigen Variablen, die mit "g" beginnen wieder auf die Startwerte gesetzt werden.


    Gruß Schuster

  • wow jungs danke :thumbsup:


    ich werde mich gleich mal ransetzen und so viel wie möglich probieren ;)


    EDIT:


    Es gibt gute und schlechte Nachrichten.


    Die gute, die "und" bzw "oder" Funktion funktioniert *jippy*


    Die schlechte, das Blinken will einfach nicht. Mir fehlt da irgendwie der Grundaufbau ;(


    Ich habe es so versucht:



    Ich bin auf jeden Fall dankbar für eure Geduld :)

  • so, ich habe mich jetzt eine ganze weile damit beschäftigt und so langsam vergeht mir die lust *heul* insgesamt sitze ich an dem "blinkversuch" schon seit januar dran


    @Schuster, das schalten von lichtern (nodes und point bzw spotlights als child) funktioniert super über skript.


    ich habe es jetzt so versucht wie es im wiki steht:



    ich habe auch noch viele andere skripts versucht die ich gefunden habe. z.b.:



    aber egal was ich mache, das licht leuchtet vor sich hin. selbst wenn ich "gFirstLightFlash" auf true oder false setze passiert nix. schalten über Call ( "*:ActivateNode", xxx, 0 ); lässt es sich wie geschrieben wunderbar.


    in erster linie möchte ich ja nur das das licht blinkt. egal ob mit oder ohne schalter.


    plan B der mir noch einfällt wäre, das blinken über eine animation zu steuern. jedoch muss diese dann auch über ein skript angesprochen werden. wenn das auch so eine komplizierte geschichte ist, dann sehe ich für mein projekt leider schwarz. denn eine tram ohne blinker ist nix halbes und nix ganzes.

  • Hallo,


    also der 1. Skript ist richtig und sollte funktionieren.
    Ich gehe davon aus, dass der Call-Aufruf nicht richtig ist.

    Call ( "ActivateNode", "xxx", 0 )

    Vielleicht fehlt hier der Childname. Zum Beispiel so:


    Code
    Call ( "Name_des_Child:ActivateNode", "xxx", 0 )

    Da musst du mal in die BIN-Datei schauen, ob die Licht-Node vielleicht über ein Child-Objekt eingebunden ist.
    Vielleicht stimmt auch der Lichtnode-Name nicht.


    Der Blink-Skript funktioniert jedenfalls. *dhoch*


    Gruß Schuster

  • super. vielen dank :thumbsup:


    die aussage das das skript in ordnung ist war sehr hilfreich :)


    jetzt funktioniert alles. ich kann die blinker (links und rechts) wie gewollt an und abschalten 8o dafür musste ich zwar einiges umschreiben aber wenn das skript erstmal steht, kommt man irgendwann hinter die logik.


    eine frage hätte ich noch. ich versuche gerade einen input mapper zu schreiben, jedoch lässt sich mein modell nicht davon beeindrucken.


    muss ich in irgend einer xml den pfad vom input mapper reinschreiben? für mich ist nicht ersichtlich wie ein modell mit dem input mapper verlinkt wird.

  • Folgendes gemacht: im Explorer im assets-Ordner Nach inputmapper gesucht. Mehrere Ordner gefunden, darin immer eine .bin
    Die Bin des Inputpappers angeschaut, da gibts am Anfang eine Zeile mit remapper und einer >Kennung<
    Die Verknüpfung dazu ist in der .bin der Lok da findest Du wiederum remapper und die >Kennung< .
    Wenn Du nichts einträgst wird der oder die globale(n) Inputmapper genommen.
    Hoffentlich hilft das.

    Keine Hilfe und Auskunft per PN, da meist von allgemeinem Interesse. Diese Fragen bitte im Forum stellen.

    Einmal editiert, zuletzt von StS ()

  • ich muss euch wohl doch noch mal auf den pelz gehen :D


    wie sprecht ihr bei einer lok animierte warnleuchten an? zum beispiel pzb?


    ich habe gelesen das man über skript keine "cab-leuchten" ansprechen kann?


    der grund wieso ich frage ist ganz einfach. ich habe wie oben geschrieben die blinkleuchten zum laufen bekommen und nun bin ich dabei die ganzen warnleuchten zu konfigurieren. alles, was normal leuchtet, tut es auch schon.


    geht es vielleicht doch über skript?

  • Moin,


    die Animation für die Warnleuchten musst du an einen ControlValue binden, den du mit

    Code
    Call("*:SetControlValue", "meinLeuchtmelderControlValue", 0, wert)

    wie jeden anderen auch entsprechend ändern kannst. So habe ich das am DT2 von TobiasM und mir gelöst und es funktioniert einwandfrei.


    Ich hoffe, ich kann dir damit weiterhelfen :)


    Gruß
    benp98