Beiträge von TransportTycoonJoker

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


    Hi Markus,


    Dir fehlen diverse Mods, die Du mal im Savegame geladen hattest bzw referenziert werden. z.B. Cargo Asset Set von Kaleut1988

    Dann fehlen dir noch diverse Models bspw.

    Code
    [RESOURCE ERROR] Referenced model not found: 'vehicle/train/epcargo_193.mdl' in 'vehicle/train/Rtb_193_791.mdl (key: groupFileName)'
    [RESOURCE ERROR] Referenced model not found: 'vehicle/train/epcargo_193.mdl' in 'vehicle/train/Rtb_193_791_fake.mdl (key: groupFileName)'
    [RESOURCE ERROR] Referenced model not found: 'vehicle/train/epcargo_193.mdl' in 'vehicle/train/Rtb_193_791_vorspann.mdl (key: groupFileName)'
    [..]
    Texture load error: file not found: res/textures/ui/tracks/kanshi_depot.tga
    Texture load error: file not found: res/textures/ui/tracks/high_speed_no_mast.tga
    Texture load error: file not found: res/textures/ui/construction/categories/ice_werk.tga
    Texture load error: file not found: res/textures/ui/construction/categories/ice-werk.tga
    Texture load error: file not found: res/textures/ui/streets/depot_trolley_new.tga

    Zum Spielabsturz führt dann letztlich ein UI Element Fehler. Was genau weiss ich leider nicht. Wird wohl auch ein Fehlerhafter Mod sein oder schlichtweg die fehlenden Models.

    Hi Eric,
    weiss nicht genau ob das deine Frage beantwortet oder ob es Einfluss auf die Animation hat, aber es gibt im Model Repository einen Parameter departureDelay = <Zeit in Millisekunden>, der wird aber offenbar vom Spiel an sich vergeben. In der .mdl Datei ist er jedenfalls nicht enthalten. Evtl. lässt der sich jedoch über einen Modifier beim laden anpassen.


    LG


    Joker

    Hi all,


    I was stumbling over an interesting fact: The remaining value of a vehicle does not equal to the remaining lifetime in percent * the price. It also does not seem to follow any known depreciation methods as all of them (the ones I know and could find) reach 0 at the end of the lifetime. It seems to be possible to have a remaining value of >1% after the end of lifetime.

    Does anyone of you have an idea of this is really calculated?

    Von was möchtest Du denn die Länge messen? Die API gibt für den Pfad eines Fahrzeugs beispielsweise eine Liste aller Edges zurück. :

    Code
    api.engine.getComponent(vehicleID,66) -- TYPE: MOVE_PATH ... alle edges auf dem nächsten Abschnitt (Zwischen letzter und nächster Station)
    api.engine.getComponent(edgeId,52).edges[1].geometry.length -- TYPE: TRANSPORT_NETWORK ... Länge der einzelnen Edge


    Mit einem kleinen Script lässt sich beispielsweise die Länge einer Linie berechnen

    ehm. neee :-D Werde ich gleich mal ausprobieren. edit: mit -1 gehts... wieso ist das mal wieder nicht dokumentiert? -.-
    Aktuell speichere ich die Dinge noch im SaveGame, aber das kostet auf Dauer Performance. Wenn ich es ins Journal schreiben würden, könnte ich mir das speichern und laden sparen (So mal meine Überlegung).

    Und ja mit den game.interface funktionieren viele Dinge einfacher, schneller und zuverlässiger. Ist an sich eine gute Ergänzung zur anderen API

    Edit 2:
    Ergänzung zum JournalEntry: "time" muss -1 sein. Immer. Wird dann vom Spiel automatisch auf die aktuelle Spielzeit gesetzt. (Nachträglich was reinbuchen geht nicht)
    api.cmd.make.bookJournalEntry: akzeptiert neben der PlayerEntity auch jede andere Entity die ein Journal hat. Damit der Betrag aber dem Spielerkonto gutgeschrieben/abgezogen wird muss er auch noch beim Spieler eingebucht werden.

    Hallo zusammen,
    habe folgendes Problem: Ich möchte meine Mod auf die neue API ändern und statt dem alten game.interface.book() den api.cmd.make.bookJournalEntry verwenden. Problem ist allerdings, dass egal wie ich den verwende immer die folgende Fehlermeldung kommt (und das Spielabstürzt):

    Error message: Assertion `cmd.journalEntry.time == -1' failed.


    Dabei ist unerheblich welchen Wert journalEntry.time eigentlich hat, er kann 0, 1000, 1000000 oder sonst irgendwas sein, die Fehlermeldung kommt trotzdem. (Wert wird auf die aktuelle Spielzeit in Millisekunden gesetzt)

    Hat jemand den command schon erfolgreich verwendet und kann mir sagen wo hier der Trick liegt?

    besten Dank


    Joker

    Nur, dass ich das richtig verstehe:

    Bahnhof A (Rohöl) => Zug => Bahnhof B (Abladen Rohlöl, Aufladen Treibstoff) => Bahnhof A (Abladen Treibstoff, aufladen Rohöl) ?

    Mit der Konfiguration kann dein Zug niemals voll werden, da du ja gar nicht genügend Treibstoff produzierst. Verhältnis von Rohöl zu Treibstoff ist ja 2:1. Bei den Stops kannst du im Linienmanager einstellen zu wieviel % sie laden sollen (pro Rohstoff), kannst da ja mal 50% einstellen.

    Hallo zusammen,


    ich hab ein kleines, mir nicht verständliches Problem. Ich habe eine Tabelle die ich vom Engine State ins Savegame / GUI State kopieren möchte. Bisher hat das immer geklappt, am Wochenende hab ich jetzt meine Mod von einer anderen getrennt und ein paar Dinge von Grund auf neu gestaltet. Ich habe 2 separate Tabellen:

    Code
    local engineState = {
        LastLinesRefreshMonth = 0,
        }
    
    local guiState = {
        updList =0,
    }

    An sich kein Problem wenn ich die Tabellen speichere klappt das.

    Code
    save = function ()
            -- save data to shareState
            return {engineState = engineState, guiState = guiState}
        end,

    Füge ich jetzt allerdings meine Tabelle hinzu kommt die nachfolgende Meldung.

    Code
    save = function ()
            -- save data to shareState
            if not engineState["lineInfo"] then engineState.lineInfo = { } end
            if lineInfo then
                engineState["lineInfo"] = lineInfo
            end
            return {engineState = engineState, guiState = guiState}
        end,

    Dabei ist unerheblich ob ich die Tabelle jetzt erst im Save der übergeordneten Tabelle hinzufüge oder das beim erstellen direkt in den engineState reinschreib. Es kommt jedes mal die folgende Fehlermeldung.

    Assertion `m_data->gameStates[1]->ScriptSave() == m_data->gameStates[0]->ScriptSave()' failed.


    Interessant ist, wenn ich mir die Tabelle via debugPrint ausgeben lasse und aus der stdout in die savegame.lua kopiere ( oder einfach den Eintrag .lineInfo ={ } manuell erstelle) läd & speichert er die neuen Daten einwandfrei.


    Hat da jemand ne Idee woran das liegen kann?


    ...

    Während ich das hier schreibe, hat sich das Problem gelöst (vorerst). Savegame einmal ohne mod geladen und gespeichert (um zu schauen was im anderen mod gespeichert wird) und wieder zum aktuellen Projekt gewechselt. Jetzt klappts einwandfrei. Auch ein neues Spiel angefangen => klappt jetzt. Ging am WE nicht.

    Hallo zusammen,


    da ich nicht alle meine Gui Objekte als "globale" lokale speichern möchte, dachte ich, dass ich die "api.gui.getById" Funktion nutzen kann, um sie später wieder aufzurufen. Das klappt bei einfachen Dingen wie einer TextView bisher reibungslos. Andere Components wie z.B.: der ToggleButton werden nicht als solches zurückgegeben, Funktionen wie bspw. setSelected(bool,bool), sind nicht verfügbar. Andere Objekte wie bspw. Tabellen werden bedingt korrekt zurückgeben. Es kann sein, dass es 5 mal in folge klappt, beim 6. Mal gibts dann ein CTD ohne Fehlermeldung/stdout Eintrag etc. War Recht mühsam und frustrierend rauszufinden wo genau jetzt der Fehler liegt (ein Stückweit natürlich auch gut, da man so versucht den Code zu optimieren und vereinfachen.


    Hat jemand mehr Infos welche Objekte da genau betroffen sind?

    Hallo zusammen,


    keine Ahnung ob das ein bekanntes Problem ist und andere das auch haben, oder ob meine Kiste einfach ne Macke hat. Ich hab ab und an (mehr oder weniger zufällig) das Problem, dass das Spiel konstant die GPU zu 100% auslastet. Normalerweise pendelt sie irgendwo zwischen 30 & 60% je nachdem was angezeigt wird. Das Problem besteht dann auch über die komplette Laufzeit (also sehr kurz :D ) des Spiels und war bisher unabhängig von Mods oder Spielständen. Ein Neustart des Spiels hat jedes Mal geholfen. stdout folgt beim nächsten Mal, war zu schnell im neustarten.

    Da die styleSheets ebenfalls lua-scripte sind, könnte es sein, dass du das entsprechende Stylesheet sogar "prozedural" aus den definierten Farben generieren könntest.


    Allerdings habe ich noch nicht getestet ob das von der Ladereihenfolge her funktioniert (game config vor stylesheets)

    Das wäre natürlich eine Idee. Werde ich evtl mal probieren. Hab die 81 Farben von LINX jetzt in 5 min in Excel in ein Copy Paste fähiges Format gebracht. Hardcoded wäre doch unterm Strich schneller gewesen ...

    Das ist aktuell im nicht-Lua-Teil in zwei Schritten gemacht:

    1. Bezug des Farbwertes analog zu local lineColor = api.engine.getComponent(objectID,64).color 
    2. Zuweisen dieses Farbwertes zur backgroundColor1 der Component.

    Zweiteres ist wie oben bereits gesagt aktuell nicht via lua machbar. Es geht entsprechend aktuell nur über den Umweg via styleSheetClasses, d.h. man müsste in einem Stylesheet Farbklassen für diese 81 Farben anlegen und dann die passende zuweisen.

    Ok, danke für die Bestätigung und vorallem für die schnelle Rückmeldung. Dann kann ich meine Suche nach einer Möglichkeit einstellen und die beiden Hauptmods mit den Farben in ein StyleSheet aufnehmen.

    Bei den Kreisen handelt es sich nicht um ColorChooserButtons, letztere sind die rechteckigen Balken die du in der Linienbearbeitung rechts bzw im Liniendetaildialog oben siehst:


    Für die kreisrunden Indikatoren wird eine normale Componente mit dem name "LineColorComp" genutzt. Die kreisrunde Formatierung wird via stylesheet erledigt:

    Code
        a("LineColorComp", {
            size = { 14, 14 },
            margin = { 0, 0, 0, hp },
            backgroundImage1 = { fileName = "ui/design/buttons/line_surface.tga" },
        })

    Zusätzlich wird noch die backgroundColor1 gesetzt. Weitere Informationen zum Styling mit backgroundImage1 und backgroundColor1 findest du hier:

    https://www.transportfever2.co…:userinterface#background

    Danke für die Erläuterung! Dass das irgendwie so im Spiel umgesetzt wird hab ich mir noch, gedacht (via Debugger kommt man ja an den Namen) und den Zitierten Eintrag habe ich im entsprechenden StyleSheet auch schon entdeckt. Jedoch ist für mich noch nicht ganz klar wie(& ob) man als Modder die gleiche Funktionalität nachbauen kann. Wie erhält der Kreis beim Linienmanager die Info über die aktuelle Farbe, wenn z.B. Per mod 81 weitere Farben hinzugefügt wurden?

    TransportTycoonJoker mit welchen Paramtetern rufst du ColorChooserButton.new auf? Ich wollte mir das für den Fahrplan mod auch mal anschauen. Bekomme es aber nicht hin einen zu erstellen :(

    Die Referenz ist hier zu echt mies. Empfehle hier via Debug Mode + Console zu gehen, dort sind in der Regel die richtigen Parameter aufgeführt


    Code
    local lineColor = api.engine.getComponent(objectID,64).color 
    local lElement = api.gui.comp.ColorChooserButton.new({lineColor},lineColor,-1,false,false)

    Parameter 1: Gibt die Farben die zur Auswahl stehen an (als Array von Vector3f (x,y,z))

    Parameter 2: Gibt die ausgewähle Farbe an

    Parameter 3: die Breite (WidthOrMinusOne)

    Parameter 4: Reset Button (boolean)

    Parameter 5: Inner ResetButton

    via :setEnabled(false) kannst du es als reine Anzeige definieren


    An sich ganz nett, aber wie man das sinnvoll mit anderen Elementen verwenden kann um z.B. den kleinen Linienkreis zu erhalten habe ich noch nicht rausgefunden.

    Das Vorgehen klingt schon sinnvoll.

    Also, das Problem ist noch, dass das farbige Element quadratisch ist und nicht rund? (Screenshot?)

    Das triffts so ziemlich. Kann es mittels Stylesheet größer / kleiner machen und hin und herschieben, aber nichts an der Tatsache ändern, dass es nicht rund ist. Icon / Bilder, die ich mittels ImageView einfüge, lassen sich meines wissens ja nicht im StyleSheet einfärben, oder?

    Hallo zusammen,


    ich bastel gerade an einer Übersicht in der ich die Linien und verschiedene Infos zur Linie, den Haltestellen, sowie den Zielen der Fahrgäste (mit der Linie und Anschlusslinien bis zum Ziel) darstellen möchte. Da es doch einfacher ist die Linie anhand der Farbe & Name zu identifizieren als nur über den Namen, möchte ich wie in der Standardansicht auch, einen kleinen Kreis mit der Liniefarbe verwenden. Anhand der vorhandenen Texturen und sonstigen Vorgehensweise wie bei Buttons wäre mein Ansatz jetzt gewesen:

    1. ColorChooserButton als Component der Tabelle hinzufügen, Liniefarbe zuweisenund auf Inaktiv setzen (soll ja nur die Farbe anzeigen). Name bzw StyleClass zuweisen

    2. Im zugehörigen StyleSheet die Klasse / Namen definieren und backgroundImage1/2 setzen (z.b. ui/design/buttons/[email protected])


    Soweit so gut. Klappt nicht. Es wird einfach der komplette Component ausgefüllt. Hab es mit einem Abosultem Layout versucht und einfach nen Bild mit transparenter Mitte drüber gelegt. Klappt aber auch nur bedingt.


    Hat jemand vielleicht eine Idee wie man die Farbe darstellen kann bzw wie UG das macht?

    Fest im StyleSheet verankert wie es z.B. der Timetable mod macht, möchte ich das ungern.

    Wenn man die "ui/design/buttons/[email protected]" im eigenen Mod anpasst werden alle Linien "Kreise" überschrieben und sind entsprechend verfärbt. Sprich UG macht das mit dem Bild. Wäre schön wenn gewisse Dinge irgendwo dokumentiert wäre bzw die API Referenz auch korrekt wäre.