Beiträge von eis_os

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


    Irgendwelche NodeDaten sind da nicht?

    -> CommonAPI Menü unten links, Nodes -> Select base Node by mouse -> Ist da irgendwo ein blauer Kreis?


    -> CommonAPI Menü -> Inspector Aufrufen -> 100697 links eintragen in das Textfeld und show drücken. Fenster aufziehen, screenshot machen um zu schauen, was die Entity denn sein könnte.



    Ggf. kann es helfen die CommonAPI2 komplett temporärer zu deinstallieren.

    Mir ist noch nie ein Node oder Edge ohne Shape untergekommen, somit kann es sein da CommonAPI2 da gerne Daten sehen würden,

    warum diese nicht da sind keine Ahnung. Wenn es sich ohne CommonAPI2 löschen lässt, bitte um Bugreport.



    WernerK

    Shape List sind die eigentlichen "Mesh" Daten einer Straße oder eines Gleise, inkl. Position. Das Mesh wird dann daraus erstellt und dann dem Spieler angezeigt.

    Eigentlich haben alle TPF2 BASE_NODES und BASE_EDGES eine Shape List (auch wenn sie leer ist)


    Für Gleise werden da in den Attributes die tatsächlichen Brückentyp. Wo die Fahrdrahtmasten stehen usw. abgespeichert. Das ist was ich als Notizen dazu habe, da ich mich sehr mit Straßen beschäftigt habe, ist dort die Datenlage größer:

    Ich hab den Eintrag mal freigeschaltet, ich komme gerade zu gar nichts.

    Ich hab deinen Wunsch angelesen und dann hab ich bis gerade eben nicht wieder in der Moderationsliste nachgeschaut.


    Ich würde gerne direkt so einen Scriptwunsch erfüllen wenn mir meine Todoliste nicht schon überquellen würde.


    Bei mir liegen schon zu viele Projekte auf Halde,

    seit melectro Schiffsbrücke liegt bei mir nun auch noch das funktionierende Konzept von Wasserstraßen herum, sprich Kanäle.


    Es ist schade, das viele Projekte nicht umgesetzt werden können.

    Ich werde heute Abend mal zwei Stunden investieren, ob ich aber was passendes basteln kann. Keine Ahnung.


    Mit Animationen aus Modellsicht kenne ich mich nicht aus. Also ich kann dir nicht eine Modell animieren oder exportieren.

    Die Animation anschließen an ein Script aber schon.


    Und ich hab halt immer das andere Problem, ich habe ne Idee im Kopf und nie passende Modelle...


    -edit 19:55-

    Sabon hat ne private Nachricht mit einem Prototypen für ein Schiffsdepot...

    Please note, that it is currently not possible to select the lane of streets that are defined by edges in the construction for the vehicle node. By default, the vehicleNode will be placed on the first lane that is most likely a sidewalk.

    Also du wirst keine Verbindung zwischen einer Straße gebaut mit result.edgeLists und einem Terminal hinbekommen (Du kannst die Lane in der Straße nicht festlegen und hast daher dann ein Terminal mit einer Verbindung zum Bürgersteig als Haltepunkt für Fahrzeuge), es muss dann ein Lane aus einer mdl sein.

    Hauptmenü:

    -> ModBrowser

    oben gibt es eine Tableiste:, Steam Workshop, Mod.io und das Veröffentlichen

    Bei mod.io, muss man unten rechts eingeloggt sein, sonst geht das abonnieren mit mod.io nicht.

    Bei Steam muss der Steam Client Online sein.


    -> CommonAPI2:

    Wenn CommonAPI2 erkennt das ein Steam Workshop Mod im Ladedialog -> Erweiterte Optionen fehlt, kann man diese Abonnieren.

    Das Herunterladen fängt an, wenn man im Spielhauptmenü ist oder das Spiel beendet. (Im Ladedialog kann man wegen des UG Ladedialog keine Workshop Mods herunterladen)

    Neue Version 20250404


    Konstruktionen via ConstructionAddon können nun Dinge bzw. Fahrzeuge einfärben.

    Sprich Konstruktionen können nun map_cblend_dirt_rust Einstellungen per Model vornehmen.


    Damit kann nun technisch jedes Fahrzeug und auch PKWs in jeder Farbe als Asset gebaut werden, darüber hinaus könnt ihr auch den Wartungszustand einstellen.

    Also auch Assets rosten lassen :)

    Darüber hinaus können nun für Straßen und Schienenfahrzeuge die Lichter ausgeschaltet werden.


    Als Beispiel habe ich in einem Fork des Vehicle-Asset-Builder_1 von VacuumTube diese Funktionen eingebaut. *

    https://github.com/eis-os/Vehicle-Asset-Builder_1




    Diese Funktion ist für alle Modelle möglich, technisch könntet Ihr auch einen Bahnhof anstreichbar machen, wenn Ihr als Material map_cblend_dirt_rust nutzen würdet.

    Ohne CommonAPI2 gibt es dann aber nur Ruhrpottbahnhöfe in Kohlenstaub schwarz.


    Vielleicht gibt es ja irgendwann mal ne Asset Brücke mit einstellbaren Bauwerkszustand. Die Brücken in TPF2 sehen so überhaupt nicht echt aus ...


    Viel Spaß



    New Version 20250404


    Constructions by using ConstructionAddon are now able to color map_cblend_dirt_rust textures by model.

    So it is now possible to recolor every vehicle including private car model in TPF2 as asset.


    Additional the maintenance state can be set, this means asset /construction models can rust.

    Lights for street and rail vehicles can be disabled.


    As example there is a fork of Vehicle-Asset-Builder_1

    https://github.com/eis-os/Vehicle-Asset-Builder_1


    Technical it's possible for all Construction models, so it would be possible to recolor a station if the map_cblend_dirt_rust material is used.


    Maybe someday a asset bridge will allow to change it's maintenance state, because TPF2 bridges look to be good to be true.


    Have fun



    Changelog:


    1.9.20250404

    - Remove NewAnimations setting and merge with ConstructionAddon

    - ConstructionAddon: add maintenance (rust) support by tag @@maintenance

    - ConstructionAddon: add recoloring support by tag @@color

    - ConstructionAddon: add @@nolights support in labelText

    - ConstructionAddon: Disable terrainAligment patch

    - NodeWindow: fix current traffic light type selected in combobox

    - FlexStreets: add custom TrafficLightTransformator to hide trafficlights

    - NodeWindow: hide traffic light crossing



    Downloads:

    >>> CommonAPI2 Download

    >>> Streetpackage Download

    >>> Tram Tracks Download


    * Slider werden nicht genutzt, da dieses Invalid Entity Fehler verursachen.

    Not all animations are used in TPF2.


    A road vehicle will not use animal animations, but drive and doors animation.


    Technical:

    A ModelInstanceList has a Transformator. Each Transformator does run the Animation.


    For RoadVehicle, we have drive + doors Animation

    For Animals, it uses a list of model_metadata::Animal -> movementTypes

    /home/USER/.var/app/com.valvesoftware.Steam/.local/share/Steam/userdata/

    doesn't look right when clicking open user data folder.

    You should have a steam user id and the game id


    With your paths, a full path should look like this to mods:


    /home/<linux user>/.var/app/com.valvesoftware.Steam/.local/share/Steam/userdata/<steamusernumber>/1066780/local/mods


    https://www.transportfever2.co…ocations#folder_locations


    You should see a settings.lua, a savegame folder, crash_dump folder in:

    /home/<linux user>/.var/app/com.valvesoftware.Steam/.local/share/Steam/userdata/<steamusernumber>/1066780/local/

    Wie schon so oft geschrieben, das ist das Spiel, das sagt, beim Zugriff fehlt eine Komponente, sprich ein ecs::component::* Du wirst ne Zeile "it != components.end()" nie in LUA finden. LUA funktioniert nicht im Prinzip wie STL C++ Containern...


    Haben wir aber auch im Lexikon:

    stdout.txt - Erklärung & typische Fehlermeldungen


    Und natürlich passiert das wenn man die Simulation wieder startet, dann werden alle noch "aufgestauten" Befehle abgearbeitet...


    Weitere Informationen wie Entity ist 0 ist auch nicht hilfreich, das ist die World Entity

    Vom ecs::component Type wäre es ein Asset, aber das passt halt nicht zu einer World Entity, da diese nie eine Asset Komponente hat.

    Mit Update, nach Update ist es kaputt gegangen, da wkm_geoutil_v1_6 von cbutil.lua verlangt wird.


    Das liegt daran das scheinbar beim Update die Datei wkm_geoutil_v1_6 fehlt...

    daher kann CommonAPI2 die LUA Datei nicht mehr laden.


    commonapi2.utils: ...melectro_creek_bridge_eraB_1/res/scripts/util/cbutil.lua:4: module 'wkm_geoutil_v1_6' not found:

    no field package.preload['wkm_geoutil_v1_6']

    1.9.20250322

    Liebe Community,

    eine neue CommonAPI2 Version mit noch mehr Funktionen, lange hat es gedauert…


    Ein neues Animationssystem mit Ampelkreuzungen und Bahnübergängen als Quelle*,

    damit ist es nun möglich Asset Ampel Konstruktionen zu bauen, die an eine Ampelschaltung gebunden werden kann. (Technisch an ein Ampelmodel)


    In Gegensatz zu anderen Lösungen wird eine Animation genutzt, kein Konstruktionsumbau,

    auch gibt es ohne CommonAPI2 keine Möglichkeit an die TrafficLight Daten heranzukommen.

    Die eigentliche Logik ist aber immer noch im Spiel „versteckt“.

    Es gibt in meinem Straßenpaket nun eine Asset Konstruktion für den modularen Ampelbau,

    damit könnt Ihr euch eine Ampelmast selbst zusammen klicken...



    Auch gibt es Asset Schranken, Ihr könnt also ne Ampel an ein Bahnübergang binden, oder eine Schranke an eine Ampelkreuzung…


    NodeEditor:


    Ihr könnt Ihr nun einen bestimmten Ampeltyp für eine Kreuzung wählen.

    TPF2 hat keine Informationen zu bieten, weder Namen noch UI Bildchen noch eine feste ID Zuordnung.




    Für Savegames:

    Es können nun Steam Workshop Mods (bis zu 90 Stück) abonniert werden. Geht zurück ins Hauptmenü, wartet bis die Mods heruntergeladen wurden, und abonniert ggf. noch weitere.

    Ist der Steam Client im Offline Modus gibt es keinen Crash mehr beim abonnieren.


    Auch gibt es ne Möglichkeit alle Mods zu deaktivieren, die nicht vorhanden sind.



    CrashDebug:

    Fehlerausgabe der Entity bei „ecs::SimPersonSystem::NoteWalkPersonsArrived !toEdges.empty() assert“ und „ApplySimPersonMovingData transportMode == TransportMode::CAR“


    Inspect:

    Zeigt in MODEL_INSTANCE_LIST, die mdl Dateien und man kann die Position auf der Karte zeigen lassen.

    Kann die TrafficLight Daten anzeigen




    1.9.20250322

    - Support Build 35924 only

    - AnimationSettings window: pass entityId to window in construction configure window

    - NewAnimations: add setting

    - NodeData: Add basic traffic light selector


    - ConstructionAddon: enable rotating of modules in all axis via variant

    - ConstructionAddon: support iaHint for module descriptions

    - add AnimationSettings window

    - add commonapi.supports.CONANIMATION

    - add SelectionTools to unify entity selection code

    - CopyPasteWindow: use SelectionTools

    - inspect window: set default tab

    - inspect window: show BASE_NODE_TRAFFIC_LIGHT state

    - inspect window: fix global usage t in MODEL_INSTANCE_LIST

    - inspect window: create traffic light state info

    - inspect window: show MODEL_INSTANCE_LIST models, add support for linebreaks

    - inspect window: TRANSPORT_NETWORK hightlight edge anchor positions

    - add commonapi.utils.selftest()

    - add commonapi.utils.unsubscribeAll()

    - ModCommonListWindow: Subscribe to all steam mods, disable all missing

    - dampf client: use LuaObject locking for callback

    - dampf client: add UnsubscribeItem method

    - dampf client: handle null return in offline mode (prevent crash)

    - simplify ModListHandling by using CustomGameSettingsCompOverlay, adding locking to avoid race conditions

    - native: add ecs.installTransportTrafficLightDataAddon() for accessing StreetGeometry::TrafficLightData

    - native: add ecs.getTransportGeometryPosition

    - native: lua interface ConstructionAddon.isEnabledAnimation for newAnimations

    - native: fix ecs ComponentManager::ICompVec for linux build 35915

    - native: add a lot of struct layouts for transformator_util::GenericTransformator

    - CrashDebug windows: add entity display for ecs::SimPersonSystem::NoteWalkPersonsArrived !toEdges.empty() assert

    - CrashDebug windows: add entity display for ApplySimPersonMovingData transportMode == TransportMode::CAR assert

    - NewAnimations: support NewAnimations _aniSRC for ecs::component::RailroadCrossing

    - NewAnimations: support NewAnimations _aniSRC for ecs::component::BaseNodeTrafficLight

    - NewAnimations: shortcut @@ani2-redgreen, @@ani2--openclose

    - NewAnimations: support negation of state

    - Nodedata: Add name of nodedata when rejecting lane connections



    Downloads:

    >>> CommonAPI2 Download

    >>> Streetpackage Download

    >>> Tram Tracks Download

    Hier mal ein Beispiel, ich hab es auf die meiner Meinung nach problematischen Bereiche eingedampft.


    https://github.com/MarkMcWire/…pt/timetable_gui.lua#L682


    Nun sieht man hoffentlich was ich hier beanstande.


    ComboBox ist in einer Tabelle in einer Zeile von constraintHeaderTable

    In ComboBox:onIndexChanged gibt es ein call zu clearConstraintWindow -> das löscht alle Rows.


    Sobald die ComboBox geändert wird, sollte TPF2 abstürzen mit Fehlermeldung, das man Element nicht in einem Event löschen soll.


    Wenn das nicht passiert, hast du ein Speicherleck. Das durch UG Funktionen verursacht wird bzw. durch die Verschachtlung nicht direkt offensichtlich ist.


    PS: mehrere invokeLater calls hat man schon mal verschachtelt, um zu Warten bis die Höhe der Elemente errechnet werden, um dann ein UI Element an die Größe der Elemente anzupassen, das macht man halt 2 Frames später...

    Vorweg: Ich nutze Timetables nicht, aber vom durchlesen und mal kurz drüber schauen des Codes und des Fehlers:

    Code
    Warning: a UI element has destroyed itself during handling an event, this leads to undefined behaviour!


    Erklärung dazu:


    Ihr habt ein uiElement:onChange oder onIrgendEtwas event.

    In der eventFn() wird dann initIrgendwas() aufgerufen.


    initIrgendwas löscht dann die ganze UI einer Tabelle und baut den ganzen Kram neu auf. Wenn uiElement in der Tabelle steckt, ist das ganze nicht möglich. Wenn die gebundene Event Funktion eines UIElement fertig ist, wo ist dann das UIElemtent hin? Das ist die Fehlermeldung dort.


    Man kann UI Element ständig neu bauen, das macht alles in UI2 der CommonAPI2 auch so. Aber Events werden bei mir komplett anders verarbeitet. Eher Asyncron. Sprich ein Event wird gespeichert und dann später abgearbeitet. Das ist nicht sinnvoll, aber mein UI Layer funktioniert in weiten Teilen wie ImGUI. Also ich würde meinen Inspektor nicht nutzen können, wenn der ständig crashen würde...




    Für die Stabilisierung:

    Trennt Änderungen und Update


    onChange()

    -> ändert den Wert

    - anstatt nun die UI zu ändern:

    if (luaobj.needsUpdate ~= true) then

    uiwindow:invvokeLater(function()

    luoobj:refresh()

    end)

    luaobj.needsUpdate = true

    end


    function luaobj:refresh()

    self.needsUpdate = false

    -- umbau der Tabelle mit neuen Daten.

    end


    Die Idee dahinter, der Neuaufbau der UI wird ein Frame später ausgeführt. Die invokeLater Funktion ist am Fenster gebunden, also wird nicht zerstört egal was mit den Element passiert. Wenn ein Event für einen Refresh schon da ist, braucht es nicht nochmalig ein neues Refresh.



    Randnotiz: Durch UGs Konsolen UI Update werden beim Verlassen von Steuerelementen ein Change Ereignis ausgelöst.Egal ob man etwas ändert! Deswegen seht ihr bei meinen UIs meistens ein Apply oder Refresh Knopf, damit die UI nicht ständig neu aufgebaut werden muss. Ggf solltet Ihr den Wert überprüfen, ob sich etwas geändert hat.