Du hast auch ein Spielstand geladen? ![]()
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
-
-
Mal eine Development Version der CommonAPI2. Hui, schon 3 Monate... Die Zeit rennt einem irgendwie weg.
Ein grober Überblick:
- Ein paar Sachen für Steam Mod Mangement (Bulk subscribe, abschalten aller nicht vorhanden Mods)
- Das Inspektor Fenster kann nun mehr Daten anzeigen.- CrashDebug hilft nun bei ecs::SimPersonSystem::NoteWalkPersonsArrived !toEdges.empty() und ApplySimPersonMovingData transportMode == TransportMode::CAR debugging. Sprich CommonAPI2 sagt euch welche Entity da einen Fehler hat...
- Neue Einstellung: ConstructionAddon, damit kann Module um 3 Achsen drehen per Tastatur. (schaut einfach in den Ampelbuilder *)
Ein komplett neue Funktion ist der Animations Support für Konstruktionen, sprich es können Animationen im Labeltext definiert werden, die Quelle kann als Parameter kommen.
Dafür gibt es ein neues Animations Settings Fenster, dort könnt Ihr dann für eine Konstruktion eine Ampelkreuzung oder einen Bahnübergang als Quelle nutzen.
Damit Ihr was zum füttern der Funktion habt, gibt es hier auch mal ein Update des Straßenpakets, dieses nutzt den Animationssupport für Assets (Bahnschranken) und zusätzlich gibt es nun neu einen Ampelbaukasten. Hier könnt Ihr nun funktionierende Ampeln (sprich mit Animationsquelle) zusammen stellen.
Da der Ampelbaukasten auf Module basiert, kann man das dann mit Modulen erweitern, eigentlich wollte ich ne BOStrab Ampel bauen, aber ein Release war wichtiger...
Es wäre nett, wenn Ihr mal commonapi.utils.selftest() in der UG Konsole ausführen könnt,
da ich schon beim dritten Rewrite für ecs Daten bin, damit könnten ggf. Probleme mit LINE_DESTINATION und nicht vorhandenen Text repariert sein.
Es sollte Selftest: OK rauskommen...
Weitere Planung:
- Automatische Ampelmodelle verstecken (CommonAPI2) Abschalten geht nicht, da sonst TPF2 keine Ampelphasen definiert...
- Einfache BOStrab Ampel Modell.
Changelog ist diesmal sehr lang....

1.9.20250309-dev
- WINDOWS ONLY BUILD
- 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
- remove support for build 35915
Code: Drehroutine
Alles anzeigenlocal t1 -- Transformations Matrix (wird geändert) local variant = params.modules[childId].variant local nullvec = vec3.new(0, 0, 0) local v = variant if (v < 0) then v = bit32.bnot(v) end local ym = bit32.extract(v, 12, 8) local xm = bit32.extract(v, 20, 8) if (xm > 127) then xm = xm - 256 end if (ym > 127) then ym = ym - 256 end local stepspi = math.pi/32 local rt = vec3.new( (variant % 64) * stepspi, (ym % 64) * stepspi, (xm % 64) * stepspi) local rotation = transf.rotZYXTransl(rt, nullvec) t1 = transf.mul(t1, rotation) -
Beim ändern der UI Parameter wird eine neue Konstruktionsblaupause erstellt. Diese hat keine Möglichkeit auf Einflüsse wie Terrain oder Umgebung einzugehen.
Du wählst eine Construction im Tab
UI::ConstructionBuilder::setConstruction(conname, templateId) im Binärcode des Spiels wird gestartet. Dieser baut dir aus der ConstructionRep die ParamListComp (Siehst du Rechts als Auswahl)
Parameter Änderung in der UI change Event -> UI::ConstructionBuilder -> baut aus der ParamListComp eine Lua Tabelle "Parameter".
Es wird ein CreateProposal erstellt.
Ruft dann ConstructionDesc.updateFn auf.
-> Diese Funktion ruft dir deine LUA Update Funktion auf mit einer Parameter Tabelle
-> Die updateFn der Con Datei gibt lua Tabelle als "result" heraus.
-> Die Resultdaten haben eine Liste mit Modellen, Lanes, Labeltexte, das ist ein ConstructionResult und wird "eingelesen".
===> Blaupause.
Ein ConstructionResult wird dann mit der ConstructionDesc, Transformation zu den Prosposal im Baucursor
Hier greift dann auch die Einstellungen deferred Proposal.
Ein Proposal ist das was Du ggf. im gamescript Abfangen kannst.
Sobald du dann so ein Proposal hast,
gibt es im Spiel am Ende eine große Funktion: construction_builder::Apply.
Die nimmt denn so ein Proposal entgegen und meiselt dir dann echte Entity Objekte auf deiner Karte:
ecs::component::Construction
Dort liegt dann die Parameter con Dateinamen, lua::Tabelle der Parameter. Daraus kannst du dann ggf. eine Konstruktion per UI upgraden. (Hast du Module, wird dafür ggf. der ModulBuilder gestartet)
Alternativ:
Du sendest dir per eigener UI, via api.cmd ein Proposal an construction_builder::Apply
Technisch hast du keine Schnittstellen die ParamListComp via LUA zu beeinflussen. Sprich wenn X passiert, zeige nur Y.
Nicht alle UI Interaktionen führen zu UI Events im GameScript.
Du kannst aus keiner con Funktion die UI Elemente beeinflussen.
Technisch gesehen läuft die Con Datei in einem eigenen LUA State.
Auch wenn die Debug Funktion aktiv ist, werden dir lua Funktionen wie updateFn und co. neu geladen. Die ConstructionDesc aber niemals.
Auch ist es nicht möglich selber einen UI::ConstructionBuilder Baucursor zu starten. CommonAPI2 tut es aber sehr wohl, das ist im Endergebnis dann die Copy & Paste Funktion.
Ich merke, ich muss mal ein Glossar mit Fachbegriffen schreiben...
Siehe dazu die API Doku von UG.
ConstructionDesc => Ist das Result des Einlesen einer Con Datei, wird in die ConstructionRep beim Spielstart gelanden.
Hält die Funktionen wie updateFn, den Typ, eine Liste von ScriptParam, usw.
ConstructionRep => Hält eine Liste der von ConstructionDesc.
Proposal => Ein Objekt, das eine Liste von Änderungen an der Spielkarte enthält.
UI::ConstructionBuilder => Ein UI Objekt, dieses stellt in TPF2 den Baucursor für eine Konstruktion bereit. Ist für den Mauscursor zuständig, die Tastaturbefehle zum Drehen usw.
Auch auf der Karte für OK, Abbrechen bzw Tooltip.
(Beachte die UI Elemente am Cursor haben einen eigenen Thread und dürfen nicht per api.gui geändert werden! Es geht, aber TPF2 wird crashen... )
Erstellt intern ein Proposal um deinen Wunsch umzusetzen.
ConstructionResult => Das Ergebnis (result) eines updateFn Aufrufs.
ParamListComp => Eine Komponente die aus einer Liste von EditParam eine Liste von UI Elementen herstellt und Änderungsevents an die jeweils Elternelement weitergibt (ModList, UI::ModulBuilder usw )EditParam => Das Ergebnis nach der Konvertierung von ScriptParam (UI Parameter einer Konstruktion, Mod Parameter)
LUA State = Ein eigener LUA Interpreter (hat eigene Variablen, Funktionen, API Schnittstellen) ggf. eigener Thread.
-
Punkt 1 wird in der nächsten Version drin sein.
Du kannst leider aber nur ca. 64 Stück auf einmal abonnieren, bei mehr als 100 macht Steam zu und will nicht mehr. Laut Steamcmd Nutzer gibt es dort das selbe Problem, also liegt es nicht an meinem Dampf Client. Zurzeit hab ich mal 95 als Maximum eingestellt, das scheint noch zu laufen.
Du musst dann das Lademenü verlassen, und dann warten bis Steam bzw. TPF2 dir anzeigt das alle geladen ist.
Auch sollte es nicht mehr zu einem Crash kommen, wenn der Steam Client im Offline Modus ist.Hier und da sind kleinere Verbesserungen. Auch gibt es dann einen Button zum abschalten aller nicht gefundenen Mods...
Release für die nächste Version, keine Ahnung. Ich arbeite heftig an Animationsupport. Ggf. wird es eine Dev Version geben...
-
Das komische ist, der Binärcode für Windows & Linux ist ziemlich eindeutig.
#ifdef OS_LINUX
const char* vtablename_uniqueptrCGame = "St23_Sp_counted_ptr_inplaceISt10unique_ptrI5CGameSt14default_deleteIS1_EESaIS4_ELN9__gnu_cxx12_Lock_policyE2EE";
#else
const char* vtablename_uniqueptrCGame = ".?AV?$_Ref_count_obj@V?$unique_ptr@VCGame@@U?$default_delete@VCGame@@@std@@@std@@@std@@";
#endif
Sprich ich wüsste nicht wie es passieren kann, das es nicht gefunden wird. (Es ist auch nicht eines der ersten Fragmente, d.h. die Funktion die Speicherposition zu finden muss auch nicht total daneben liegen)
Es kann eigentlich nur mit ASLR zusammenhängen und das zu debuggen wird schwierig.
Der TPF2 Prozess muss dann genau wieder an die Adresse im Speicher geladen werden, der diesen Fehler triggern könnte.
Bedeutet:
Code- Passiert das bei nochmaligen starten des Spiels ohne PC Neustart? Nein -> Könnte AV Software sein Ja -> - Passiert dieses nach Neustart des Rechners? Nein -> Könnte ein Fehler im Zusammenhang mit ASLR liegen Ja -> Dann wird die Build nicht unterstützt, changelog.txt anschauen.Mir fällt da gerade keine Lösung bzw. Weg ein...
Wer dazu Ideen hat, gerne...Bitte sowohl CommonAPI2 als auch TPF2 Build bei Fehlermeldungen anheften. (Stdout.txt bei so etwas ist auch nicht verkehrt, wobei nur die Linux Version zurzeit das gefundene Speicherlayout anzeigt)
-
Problemlos ist relativ. Mir wäre kein Update bekannt, seit Änderung von Steam kann man aber nicht mehr sehen ob UG neue Builds vorbereitet. Man sieht nur noch das Endergebnis bei Release.
Zumindest hat UG keine Änderungen bekannt gegeben und die Testing Version wurde auf Release zurückgestellt.
Starte mal den Computer neu und schaue ob du weiterhin ein Fehler hast, welche TPF2 Version (Build) und CommonAPI2 Version hast du genau?
Die CGame Hooks werden für eine Menge Funktionen genutzt, das zu ignorieren ist eher suboptimal... Spätestens beim Laden eines weiteren Spielstands gibt es Chaos...
-
Das kommt auf die Einstellung LayerView Patch an:
https://commonapi2.bytetransfer.de/#/features/LayerView
0 = CommonAPI2 macht nix
Bei 1 kann man es in der UI via Farbeimer abschalten
Bei 2 ist es abgeschaltet und man kann per Farbeimer alles weiß einfärben
-
Und mich bitte auch noch hinzufügen, ich brauch so etwas ggf auch (aber dann mit Animationen für rot und grün wie bei Ampeln)...

-
Nochmalig, bitte komplett mal ohne CommonAPI2 versuchen...
-
Ohne CommonAPI2 versuchen.
adding archive E:/SteamLibrary/steamapps/workshop/content/1066780/1916488459/res/res.zip
adding archive E:/SteamLibrary/steamapps/workshop/content/1066780/2390643136/res/construction/station/rail/modular_station.zip
adding archive E:/SteamLibrary/steamapps/workshop/content/1066780/2390643136/res/scripts/modules.zip
sehen nicht richtig aus... Zip archive in mods haben in der Vergangenheit das Spiel beeinflusst...
Da hier irgendein Mod alle Mdls abklappert, vielleicht mal 2587594880 (WorkshopID) deaktivieren:
E:/SteamLibrary/steamapps/workshop/content/1066780/2587594880/res/models/model/ed250.mdl
MinidumpCallback: dumpPath "C:/Program Files (x86)/Steam/userdata/381106804/1066780/local/crash_dump/", minidumpId "5db91c22-db29-4283-abc5-75808408efbd", succeeded 1
local time is Tue Feb 11 17:18:44 2025
Calling thread crashtrace handlers
All thread handlers called
Minidump Callback
-
Im Beschreibungstext der Verbesserte Linienbezeichnungen:
Verbesserte Linienbezeichnungen (Update 06.05.23)
Falls ein bestimmtes Fahrzeug von den Änderungen ausgenommen werden soll, kann der Name seiner .mdl auf die 'blacklist' in der mod.lua dieser Mod gesetzt werden.
Für Modder: Standardmäßig werden alle Labels mit LINE_NAME und NEXT_STOP modifiziert, sofern sie sich außerhalb des Fahrzeugs befinden (berechnet mittels der boundigInfo und einer kleinen Reserve). Soll ein einzelnes Label nicht modifiziert werden, kann 'dontModify = true' zu diesem Label hinzugefügt werden.
-
Vielleicht hilft ein dontModify = true an der richtigen Stelle. (Siehe Beschreibungstext)
Beachte, eis_os_linedestinationpatcher sollte keinesfalls zusätzlich geladen wenn Verbesserte Linienbezeichnungen genutzt wird.
Ich benutze den Mod nicht, da ich Änderungen im Verhalten von CommonAPI2 direkt beobachten muss.
-
Nochmalig zum Punkt zu kommen und diese sinnlose sich im Kreis drehende Diskussion zu stoppen. Die Materialliste ist der Lane Verarbeitung egal...
Ne hohe Priorität hat die Fussgängerlane da Umzuschalten nicht.
Erst mal muss ich schauen ne neue Version zu veröffentlichen, eigentlich war ich fertig und wollte erst mal ein Trammasten Mod erstellen.
Nun debugge ich irgendwelchen Fehler hinterher, irgendwas mit einem toEmpty() crash...

-
-
Die werden technisch an einer anderen Stelle verbunden, bin mir nicht sicher wie ich das dort ändern könnte.
-
Ggf falsche oder alte Versionen installiert, alle Modabhängigkeiten inkl Version beachtet ?
https://steamcommunity.com/sha…s/?l=german&id=2342281568
Siehe auch dazu:
https://steamcommunity.com/wor…1568/2996548763043643898/
und
-
Technical this has never happened. And Trams in the middle do have a normal CAR Lane.
Only tram only streets could technical act like this, but my test did not show this behaviour.
- Please make a backup of your current save game. IMPORTANT LATER!
Do not overwrite this savegame, we need it!
- Replace all my tram streets, specially only tram streets and try again.
- Does it work?
- If not, please try to remove all person only streets.
- Does it work now?
(In Train Fever I did try to make such streets, and they crashed the game)
- Try the game without CommonAPI2.
Does it work now?
- Send me your backup savegame via swisstransfer
Link via private message please, and a description how to solve the problem, like replacing a street. Removing X.Note: It's important to find the problem. This can only work if players of CommonAPI2 do try to investigate time...
Anyway: I highly doubt it is a problem in CommonAPI2 but I do want to investigate it. I think it's a forced spawn point, interacting badly.
Maybe I even build a patch to pinpoint where this problem happens. But for this I need a reliable crashing game with time to "uncrash" it by removing things and test things.
-
Die erweiterten Hotkeys kommen dort aus dem C++ Teil der CommonAPI und verändern den module variant Wert. Da du kein Zugriff auf die Interna der Module Builder / Cursor hast, wird das aus LUA ggf. nicht möglich sein.
Außerhalb ohne aktiven ConstructionBuilder
Technisch könntest du versuchen via lua setInputActionHandler zu nutzen, der ia Namen erhältst du aus der settings_keys_v2.lua (Das hat UG irgendwann mal hinzugefügt, ob es klappt, keine Ahnung)
-edit-
https://transportfever2.com/wi…ent:setInputActionHandler
-/edit-
Ganz neue Hotkeys (sprich IA_<deinmod>) kann man nicht definieren.
So mache ich das zumindest in der C++ Seite auch
Ggf. reichen dir aber auch paramX und paramX aus: (einfach nach suchen)
https://www.transportfever2.co…ding:constructionbasics&s[]=paramX
-
Assertion Failure: Assertion `transportMode == TransportMode::CAR' failed.
Any streets without street traffic used? Person only streets?
Please check the setting SimPerson in CommonAPI2, disable it, save the settings, restart the game and try again. I doubt this is the problem, but anyway...
-
Unter dem verlinkten Light Rail System Mod gibt es eine zip Datei zum Download Namens pantograf_tram_rail_system_1_4.zip
Da gibt es nur pa_trs_einzelmast_standard_era_c.mdl
Ich habe scheinbar auf meinem Rechner noch eine ältere pantograf_light_rail_system_1_3.zip 11.1.2025 Dateidatum
Da gibt es zwar eine lrs Datei, die hat aber auch keine Querverstrebung so wie auf deinem Screenshot.
Ich hab den Mast Builder schon extrahiert. Ggf. gibt es ein paar Sachen wie Drehungen von Teilen nur mit CommonAPI2. Sonst sollte alles auch sogar ohne CommonAPI2 funktionieren...
Ich spiele ohne NEP2...