Tramkatzes gesammelte Werke zu Scriptfragen

  • Moin.

    Ich habe in letzter Zeit einige Sachen versucht zu scripten und bin bei vielen Sachen gescheitert. Daher erstelle ich hier einen Sammelthread, in dem ich alle meine nicht funktionstüchtigen Versuche darlege und um Hilfe bitte.

    Bitte schlagt mich nicht, wenn irgendwo eine wichtige Angabe fehlen sollte ^^°

    LG

  • Tach,


    ich hab auch nur hinweise zum weiteren debugging:


    zu 1: hast du das objekt mal neu geladen oder das content tool neugestartet? wenn man so eine skripttextur neu einrichtet, muss man das leider einmal machen, weil der die texID_draw.... dinger sonst nicht richtig setzt und somit die falsche textur zu sehen ist.


    zu 2: findet der die spezielle fis denn? also ist das temp in der initialize größer als -1 nach dem getindexbyclass?


    zum rest weiß ich nix. ich weiß garnicht, ob das vor dir überhaupt mal jemand ausprobiert hat, ein modul in einem modul zu setzen. da müssen andere helfen ^^

  • Zu 3:

    Wird der Wert denn Korrekt vom Dash gesendet? Was sagt der Scriptplotter dazu? WIrd nur kein Wert empfangen oder die Recieve Methode auch nicht aufgerufen?

    Warum verwendest du da eigentlich erst eine Message auf einmal nen Broadcast, ist irgendwie komisch? Hast du schonmal Probiert, dass das Dashboard und der Tacho per SendMessageToChild kommunizieren? Oder das Fahrzeug und Tacho direkt nur über einen Broadcast kommunizieren?


    Allgemein zum Broadcast und Messanges:

    Wichtig ist zu wissen, dass die Message-Befehle performancemäßig nicht völlig "egal" sind! Insofern sollten auch wirklich nur dann Message-Prozeduren aufgerufen werden, wenn es auch wirklich nötig ist. So muss z.B. die im IBIS eingestellte Liniennummer nicht bei jedem Frame an das Fahrzeug übertragen werden, sondern nur, wenn sie auch geändert wurde!

    Ich bekomme da schon Bauchschmerzen, wenn du die Geschwidigkeit in jedem Simstep gleich durch zwei Message-Befehle jagst.


    Zu 4:

    Könntest du einmal die Liste der Modulslots (aus dem CT unter Objekt Einstellungen) für Fahrzeug und Dashboard zeigen? Bzw, auch ma die Objekteinstellungen der Tachos?


    Und noch ein allgemeiner Hinweis zu deinem Script des Hauptfahrzeugs (gekürzt) (aus 4.)

    Da die Variable TachoOld: integer; in Z.3 (innerhalb des Simsteps) deklariert wird, ist sie eine lokale Variable des Simsteps. Heißt: Am ende der Methode wird sie gelöscht und erst bei nächsten aufruf des Simsteps wieder neu deklariert. Dann hat sie erstmal den Wert 0. Beim Vergleich in Z.8 ist TachoOld also IMMER 0.

    Hier solltest du

    Code
    1. var
    2. TachoOld: integer;

    einfach aus der Methode raus ziehen, damit der Wert über einen Simtep hinaus gespeichert wird.



    Ich würde dir aber empfehlen, die Tachos eher per Fahrzeugkonstante umzusetzen. Da es ja eh ein feste Anzahl ist, die in deinem Simstep Hartgecodedet ist. Hier besteht also nichtmal die Möglichkeit fremde Module einzubinden. Es ist also nicht notwendig überhaupt Module zu verwenden.


    1. und 2. ist nicht so meine Baustelle. Das überlasse ich dann gerne Tene.

    Ja äh, hier irgendwas mit Dingen und so...

  • Erstmal danke für die ausführlichen Antworten ^^

    zu 1: hast du das objekt mal neu geladen oder das content tool neugestartet? wenn man so eine skripttextur neu einrichtet, muss man das leider einmal machen, weil der die texID_draw.... dinger sonst nicht richtig setzt und somit die falsche textur zu sehen ist.

    Ja habe ich, hat leider auch nichts gebracht.


    zu 2: findet der die spezielle fis denn? also ist das temp in der initialize größer als -1 nach dem getindexbyclass?

    Tatsächlich ist Temp -1, was aber insofern seltsam ist, dass ich keinen Fehler finden kann. Die Klasse ist SBFKA_Zielfilm, die Basis-FIS-Datei ist im Simulator ausgewählt.


    Zu 3:

    Wird der Wert denn Korrekt vom Dash gesendet? Was sagt der Scriptplotter dazu? WIrd nur kein Wert empfangen oder die Recieve Methode auch nicht aufgerufen?

    Warum verwendest du da eigentlich erst eine Message auf einmal nen Broadcast, ist irgendwie komisch? Hast du schonmal Probiert, dass das Dashboard und der Tacho per SendMessageToChild kommunizieren? Oder das Fahrzeug und Tacho direkt nur über einen Broadcast kommunizieren?

    Das mit dem Broadcast liegt daran, dass ich es vorher mit einer Message ausprobiert hatte, was aber ebenfalls nicht funktioniert hat, wodurch ich es mit dem Broadcast probiert habe. Dass Fahrzeug und Tacho direkt kommunizieren, habe ich noch nicht versucht.


    Allgemein zum Broadcast und Messanges:

    Wichtig ist zu wissen, dass die Message-Befehle performancemäßig nicht völlig "egal" sind! Insofern sollten auch wirklich nur dann Message-Prozeduren aufgerufen werden, wenn es auch wirklich nötig ist. So muss z.B. die im IBIS eingestellte Liniennummer nicht bei jedem Frame an das Fahrzeug übertragen werden, sondern nur, wenn sie auch geändert wurde!

    Ich bekomme da schon Bauchschmerzen, wenn du die Geschwidigkeit in jedem Simstep gleich durch zwei Message-Befehle jagst.

    Das ist mir bekannt, jedoch ist das jetzige Script ja nur ein simples Testscript, was so nicht bleibt. Aber danke für die Erinnerung.


    Ich würde dir aber empfehlen, die Tachos eher per Fahrzeugkonstante umzusetzen. Da es ja eh ein feste Anzahl ist, die in deinem Simstep Hartgecodedet ist. Hier besteht also nichtmal die Möglichkeit fremde Module einzubinden. Es ist also nicht notwendig überhaupt Module zu verwenden.

    Das ist eine sinnvolle Idee. Daher ist der Rest eigentlich obsolet, aber ich antworte trotzdem auf die anderen Teile des Beitrags, damit, eventuell spätere Probleme gar nicht erst entstehen. Zudem ist das ja vielleicht dem ein oder anderen, der das Gleiche machen will, nützlich. ^^


    Zu 4:

    Könntest du einmal die Liste der Modulslots (aus dem CT unter Objekt Einstellungen) für Fahrzeug und Dashboard zeigen? Bzw, auch ma die Objekteinstellungen der Tachos?

    Bitte sehr:


    Modulslot des Dashboards:


    Modulslot des Fahrzeugs (das Dashboard funktioniert einwandfrei):


    Objekteinstellungen des Tachos:


    Und noch ein allgemeiner Hinweis zu deinem Script des Hauptfahrzeugs (gekürzt) (aus 4.)

    Da die Variable TachoOld: integer; in Z.3 (innerhalb des Simsteps) deklariert wird, ist sie eine lokale Variable des Simsteps. Heißt: Am ende der Methode wird sie gelöscht und erst bei nächsten aufruf des Simsteps wieder neu deklariert. Dann hat sie erstmal den Wert 0. Beim Vergleich in Z.8 ist TachoOld also IMMER 0.

    Hier solltest du

    Code
    1. var
    2. TachoOld: integer;

    einfach aus der Methode raus ziehen, damit der Wert über einen Simtep hinaus gespeichert wird.

    Danke für den Hinweis, das wusste ich nicht.

  • Moin,

    Ich habe mich heute nochmal an der Matrix versucht, aber das Problem besteht immer noch. Dabei habe ich mir mal die Logfile angesehen und bin auf folgenden Eintrag gestoßen:

    Warning: SelTex: Cursor id invalid

    Könnte das eventuell etwas damit zu tun haben, dass die Matrix partout keinen Text und nur eine Textur anzeigen will?

  • Und noch was kleineres: Im Lexikon-Artikel zur FIS steht bei den Ansagen, dass die Variable Announcement_UserID global definiert sei. Ich bekomme bei Import des dort angegebenen Scripts aber trotzdem die Fehlermeldung "Unknown identifier: 'Announcement_UserID'".

    Oder muss ich die Variable doch deklarieren?

  • Guten Morgen ^^

    Moin,

    Ich habe mich heute nochmal an der Matrix versucht, aber das Problem besteht immer noch. Dabei habe ich mir mal die Logfile angesehen und bin auf folgenden Eintrag gestoßen:

    Warning: SelTex: Cursor id invalid

    Könnte das eventuell etwas damit zu tun haben, dass die Matrix partout keinen Text und nur eine Textur anzeigen will?

    Ich weiß nicht genau, was die Meldung bedeutet, aber zu deinem letzten Satz folgende Anmerkung, weil er mich irgendwie irritiert und ich sichergehen möchte, dass du das mit den Texturen richtig verstanden hast: Du kannst entweder eine Script-Textur oder eine Text-Textur definieren, aber nicht beides in einem ;-)


    Und noch was kleineres: Im Lexikon-Artikel zur FIS steht bei den Ansagen, dass die Variable Announcement_UserID global definiert sei. Ich bekomme bei Import des dort angegebenen Scripts aber trotzdem die Fehlermeldung "Unknown identifier: 'Announcement_UserID'".

    Oder muss ich die Variable doch deklarieren?

    Das bedeutet nur, dass du die global in deinem Skript deklarieren musst, weil die UserID darin gespeichert wird.

  • Ich weiß nicht genau, was die Meldung bedeutet, aber zu deinem letzten Satz folgende Anmerkung, weil er mich irgendwie irritiert und ich sichergehen möchte, dass du das mit den Texturen richtig verstanden hast: Du kannst entweder eine Script-Textur oder eine Text-Textur definieren, aber nicht beides in einem ;-)

    Mit dem letzten Satz meinte ich, ob es etwas damit zu tun haben könnte, dass die Matrix keinen (im Script ausgewählten) Font sondern nur irgendeine Textur, die ich so nie definiert habe, anzeigt. ;) Oder ich habe das tatsächlich falsch verstanden und schreibe nur Müll, das kann natürlich auch sein. :D


    Das bedeutet nur, dass du die global in deinem Skript deklarieren musst, weil die UserID darin gespeichert wird.

    Ah okay, dann hatte ich das falsch verstanden. ^^

  • Habs grade nochmal geprüft, die beiden Variablen sind definitiv gleich. ;)


    Habe gerade festgestellt, dass wenn ich die Alpha-Transparenz aktiviere, eine tatsächlich fremde Textur (die des Matrixkastns) angezeigt wird, ansonsten die in Blender als Platzhalter eingestellte Textur.

  • So, habe jetzt nochmal ein bisschen rumprobiert (vor allem auch mit der Texturgröße der Platzhaltertextur) und es hat nichts gebracht.

    Der Vorgang ist also der folgende:

    - Ich starte das Content Tool und importiere die x3d-Datei.

    - Ich lege in den Objekteinstellungen eine Scripttextur an (Höhe 27px weil Platzhaltertextur und Font auch 27px haben, Breite 256px weil Standardeinstellung, texID_draw-Variable weil die im Script auch so heißt)

    - Ich lege in den Materialeinstellungen der Platzhaltertextur die Variable texID_draw anstelle der normalen Textur fest (das Face mit der Textur wird schwarz) und stelle Alpha-Transparenz ein, worauf das Face mit der Textur durchsichtig wird

    - Ich starte das Content Tool neu (weil Aktualisieren der Textur und so)

    - Die Textur ist nun verstellt, bei aktivierter Alpha-Transparenz ist die Textur des Matrixkastens zu sehen,


    bei deaktivierter Alpha-Transparenz folgende Textur:


    Habe einfach mal die Logfile angehängt (vielleicht hilfts ja).


    Ich vermute dass da wohl irgendwo ein Fehler liegt.

  • Ich hab das ganze jetzt nicht vollständig verfolgt, aber mir ist trotzdem eine Unstimmigkeit aufgefallen. Und zwar ist deine Script-Textur als Text-Textur eingerichtet. In den Materialeigenschaften muss "Text-Textur? (sonst Script-Textur)" abgewählt werden. Ob das jetzt des Rätsels Lösung ist kann ich nicht sagen, aber wie gesagt, der Haken sollte eigentlich nicht drin sein.

  • Ich hab das ganze jetzt nicht vollständig verfolgt, aber mir ist trotzdem eine Unstimmigkeit aufgefallen. Und zwar ist deine Script-Textur als Text-Textur eingerichtet. In den Materialeigenschaften muss "Text-Textur? (sonst Script-Textur)" abgewählt werden. Ob das jetzt des Rätsels Lösung ist kann ich nicht sagen, aber wie gesagt, der Haken sollte eigentlich nicht drin sein.

    Hast recht, habe ich ergänzt. Geholfen hats freilich nicht, auch nicht als ich das Gerät nochmal neu angelegt habe.

  • Mir ist noch etwas aufgefalle: Im Script wählst du die Script-Textur mit dem Index 1, obwohl es bei dir im CT die 0 ist.
    So sollte es aussehen.

  • Mir ist noch etwas aufgefalle: Im Script wählst du die Script-Textur mit dem Index 1, obwohl es bei dir im CT die 0 ist.
    So sollte es aussehen.

    Sodala, das hat funktioniert! Danke sehr! Ich kann jetzt immerhin Rechtecke malen. :D


    Das mit dem Font funktioniert noch so mittel. Wenn ich im Script den Befehl TexWriteLn(Self, 'TESTABC', 0, 0, Font, true, 3) aus dem Kommentar in die Init-Prozedur hole und den TexClear rausnehme, und das dann kompiliere, passiert erstmal nichts. Erst wenn ich z.B. den Befehl TexDrawRect in die Init-Prozedur packe, den TexWriteLn-Befehl wieder rausnehme und das dann kompiliere, werden mir Text und Rechteck angezeigt. Plus noch Reste vom vorher an anderer Stelle gezeichneten Text (scheinbar alles außerhalb des Rechtecks der aktuellen Buchstaben). Skurril. Oder geht der Write-Befehl einfach nur außerhalb der Initialize?

  • Oh, das ist spannend. Was passiert, wenn du in der Init vor! dem TexWriteLn das TexClear drin lässt oder alternativ ein TexDrawRect oder so ausführst?


    Ich hatte mal das Problem, dass TexWriteLn nur dann funktionierte, wenn ich direkt vorher einen der anderen Zeichenbefehle benutzt hab. Hab das aber schon seit Ewigkeiten nicht mehr überprüft, ob das immer noch so ist.

  • Oh, das ist spannend. Was passiert, wenn du in der Init vor! dem TexWriteLn das TexClear drin lässt oder alternativ ein TexDrawRect oder so ausführst?

    Yep, das funzt, aber es bleiben die Reste des Rechtecks, wenn ich das CT nicht neu starte. Aber immerhin wird das Rechteck nicht mehr angezeigt. Dankeschön für die Hilfe.


    Ich hatte mal das Problem, dass TexWriteLn nur dann funktionierte, wenn ich direkt vorher einen der anderen Zeichenbefehle benutzt hab. Hab das aber schon seit Ewigkeiten nicht mehr überprüft, ob das immer noch so ist.

    Das scheint immer noch so zu sein. ;)

  • Janine

    Hat das Thema geschlossen