Verhalten von Skripten bei Route Streaming (aus "Flexible Bahnhöfe/Bahnsteige gesucht")

    • Offizieller Beitrag

    Random thought ohne jetzt zu wissen, wie die Bahnsteige technisch funktionieren, ich spekuliere jetzt einfach mal dass sie, wenn ein Zug in diesem Rahmen zum stehen kommt, diesen manuell be und entladen, die Türani abspielen und halt Fahrgäste in den verbundenen Flächen erscheinen oder auflösen lassen.


    Wenn das der Fall ist, dann würd ich folgendes tun:


    Was in Spielernähe (sichtbar) ist, ist geladen. Hier ändert sich rein gar nichts.

    Und für KI Züge würde ich den Command so ändern, dass dieser selbsttätig den be/entladevorgang durchführt, nachdem der Haltepunkt, der ja nichts weiteres wie ein Trackmark wäre, erreicht wurde.

    Das Problem scheint ja zu sein, dass der Master, der ja alles übernimmt, nun mal ein Objekt ist und somit KI Züge nicht behandeln wird, wenn diese außerhalb der Sichtweite sind, da KI Züge von sich aus nur Tracksides in ihrem Pfad laden. Aber gerade eben weil der Spieler das nicht sieht wenn die KI am Bahnsteig ist, reicht es ja völlig, ohne viel Schabernack die Beladung zu ändern und den Zug etwas warten zu lassen.



    Aber wiegesagt nur ein flotter Gedanke, ich hab diese Bahnsteige nie benutzt geschweige denn mich mit ihrer Funktionsweise beschäftigt.




    Greets, Mika

    Student in Vollzeit, Straßenbahnfahrer in Teilzeit. Skripte für Trainz wenn Motivation da ist...


    "It's always more fun to share with everyone" -Jack Johnson

  • Was in Spielernähe (sichtbar) ist, ist geladen

    Genau das ist eben nicht der Fall! Das hat Chris eindeutig gesagt, es hat erstmal nichts mit der Spielernähe zu tun! In den meisten Fällen wird das so klappen, es ist aber nicht explizit so programmiert, dass es immer der Fall sein muss.

    Was eben doof ist, wieso die World-Klasse keine Message an sich selbst schickt, wenn ein Objekt ge- oder entladen wird. Mit ner sowas wie:
    "MapObject", "Loaded" und in der Soup ne GameObjectID mit dem entsprechenden Objekt... man man man :grinning_squinting_face:

    Da die Objekte in Trainz auch keinen Destruktor haben kann man sich sowas auch nicht selbst bauen... :frowning_face:

    • Offizieller Beitrag

    Also ich weiss nicht wann und wo Chris dies geschrieben hat. Könntest du mir eventuell einen Link schicken? Ansonsten orientiere ich mich am Wiki, welches die Sichtweite (Umgebung um den Spieler) als einen Bereich beschreibt, in dem Objekte auch Skripttechnisch existieren.

    Zitat

    (if it) is not meaningful for objects that are outside the user's view, it likely does not require any modification. Any APIs which may require loading data from outside the user's immediate locale (are) being reworked to allow asynchronous operation; scripts which use these functions will need to be reworked to allow asynchronous searches and to minimise the number and scope of searching performed


    Klingt ja auch logisch, was man als Spieler sehen kann, sollte auch vollständig geladen sein. Natürlich wenn die Kamera sehr schnell oder die Hardware schlecht ist, laden Skripte der Objekte auch unter Umständen erst etwas später rein so wie es sich mit den Meshes selbst verhält.


    Meiner Meinung (und dem Wiki nach) nach sollten daher alle kommunizierenden Objekte in nächster Nähe davon nicht wirklich beeinträchtigt werden. Es ist natürlich immer eine Randoption möglich bei der der Master zwar in der Sichtweite und geladen ist, der Empfänger aber nicht und die Nachricht somit nie ankommt. Sollte aber in solch einem Fall wie dem Bahnsteig, der erst tätig wird, wenn ein Zug dort hält, auch keine größeren Schwierigkeiten verursachen.


    Lediglich alte Suchmethoden um die anderen Objekte zu finden müssten warscheinlich umgearbeitet werden.



    Was passiert eigentlich, wenn ein Objekt entladen und wieder geladen wird? Pausiert der Skript einfach und setzt genau dort fort wenn er wieder geladen wird oder startet das Objekt von Null mit seinen gespeicherten Daten so wie das der Fall wäre, wenn man eine Session speichert und wieder lädt? In letzterem Fall müsste ja der Init wieder aufgerufen werden.



    Greets, Mika

    Student in Vollzeit, Straßenbahnfahrer in Teilzeit. Skripte für Trainz wenn Motivation da ist...


    "It's always more fun to share with everyone" -Jack Johnson

  • Der Artikel ist von Chris.

    Klingt ja auch logisch, was man als Spieler sehen kann, sollte auch vollständig geladen sein.

    Das passt doch gar nicht zu dem was ich gesagt habe, was du sehen kannst ist natürlich geladen. ABER ist denn auch alles geladen? DAS ist der springende Punkt.


    Das was du zitierst und sagst sagt genau das aus, was ich gesagt habe! Es sollte gehen, muss aber nicht.

    Die Wiki sagt dazu nämlich: "Sobald wie möglich", nicht "sie werden sofort geladen".

    Mir geht es darum, dass ich vorher in der Lage war vorab zu überprüfen, ob ein Setup später funktioniert oder nicht. Dies ist entfallen und damit entfällt auch einiges an Nutzerfreundlichkeit meiner Arbeiten. Ich konnte also im Editor schon auf etwaige Misskonfigurationen hinweisen, was nun nicht mehr so einfach geht, weil ich nicht weiß, wie die Map im Fahrer am Ende tatsächlich aussieht.


    So wie ich das bis jetzt verstanden habe, werden die Objekte entladen, als würden Sie von der Map verschwinden, also einen Call auf "GetProperties" kriegen, wo man Zustände speichern kann und nach dem Laden wieder einen Call auf "SetProperties".

    Ich habe aber bei weitem keine ausreichend große Strecke, um da irgendwas selbst zu testen und da ich nicht weiß, wann Trainz mir ein Objekt rauskicked, kann ich auch nicht wirklich zielgerichtet etwas beobachten.


    Man braucht keine Suchmethoden mehr, Trainz gibt einem an den entsprechenden Stellen die notwendigen Arrays ohne irgendwelche Calls auf sowas wie "GetNamedObjectList" (die ja neu hinzugekommen ist). PropertyObjects und Menus können mit den entsprechenden Parametern bereits darauf getrimmt werden, Objektlisten zu nutzen.

    2 Mal editiert, zuletzt von callavsg ()