Beiträge von WernerK

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


    At last I have contacted UG and received an answer. This here is not the original code they gave me, but my own adaption - and - big surprise - it works! It should not be a secret, it is useful for all modders, so I publish it here:

    There were some mistakes in my own code. But the decisive one was proposal.old2new. The proposal entities start at 0! Who could know this?! And also the syntax is different from what UG has written in the wiki. And I had to guess where to get the params from: There are several possibilities, but some of them are wrong. I think the official documentation is a little poor. :|


    But just having finished this, I face a new problem: If you have got constructions with edges and nodes, the nodes will be cut. There is no more connection with the neighboring edges. This happens only with constructions with rigid edges, not with normal edges. So I'm looking for the cause, but I have no idea. Remove and insert the edges without their constructions is no good idea - it will crash the mod.


    Now I am searching for a structure which describes the connections between neighboring edges and a mechanism to reconnect them. Any idea?


    If you ask me why I need so difficult things: My project is to replace objects by themselves to update e.g. track styles. If you install a new track/street or track/street modifying mod, you normally don't have any chance to update already laid tracks/streets. So you have to replace them manually. :( I want to create a mod which does this work for me. ;) But you also can imagine other applications. You could create tools to cut - copy - paste streets, tracks end even whole cities - or repair maps which you have created with no more available mods.

    Nice to hear of you ;). If one could know the solution the one would be you because you have done so many similar things. So I have already cribbed from your source codes ;), and I have found out how to manage street and track poposals (I worked on it very long, because UG conceals that the type for tracks is 1 and not 0 8o), but construction proposals seem to be a different thing. No modder did use this before, not even you. ;) Anyway, I succeeded in removing a construction. This is very simple, you only have to insert the Entity ID and that's it! But I was not lucky with the "Add" proposal. I tried things like below, I think proposal.old2new could be right, because there is no error message, but I'm not sure. In proposal.constructionsToAdd there is absolutely a big error! I don't know how to associate the table with the entity ID. The example below will not work, newConstr is rejected. The function wants userdata, but I still don't know how to associate. :(


    By the way, I only want to update a single construction with each step, so I used -1. This should work as it does for streets and tracks. I also tried the constructionType ID instead of -1 or a construction entity, but all trials didn't work. :(

    Ich glaube aber es ist sinnvoll, sich die proposals vom Spiel anzuschauen. Dazu kann ich auf jeden Fall die CommonAPI mit dem Event Inspector empfehlen. Dann muss man sich nicht die stdout mit debugPrint vollschreiben ;)

    Das Problem dürfte sein, dass es momentan keine CommonAPI gibt, und ich auch nicht weiß, ob es noch mit einer alten ginge (die ich auch nicht mehr habe). Oder geht das auch mit der Dummy-Version? Für commonapi.dmp dürfte dasselbe gelten.


    Den Rest schau ich mir mal in Ruhe an.

    Zitat

    So wie ich die API Doku gelesen habe, müssen alle neuen Edges eindeutige Ids im Negativen Vorzeichen haben, überall -1 zu nehmen wird wohl nicht gehen.

    Ich schrieb ja auch, dass es in meinem Testfall nur eine Konstruktion gibt. Das dürfte analog zum Straßen-Ersetzen-Beispiel (im Wiki) funktionieren. Der Rest aber leider nicht.

    Zitat

    old2new würde sagen, = { { alteEntityid, constructionsToAddIndex }}

    Das hieße, da käme irgendein beliebiger ganzzahliger positiver Wert rein, der dann auch wieder bei constructionsToAdd auftauchen müsste. Ich fürchte nur, dann sagt mir die Fehlermeldung wieder, sie bräuchte "Userdata" (was immer das auch ist) und keine Nummer. Und wo käme dann der negative Wert rein, der mit Sicherheit auch irgendwo stehen muss? Bei Straßen gibt es noch einen Key in der entsprechenden Tabelle dafür, aber bei Konstruktionen eben nicht ... :/

    Zitat

    PS: Schön das ich anderen Moddern die Arbeit erleichtern kann, es wäre nett wenn das öfter Erwähnung findet, dann kann ich auch besser Prioritäten bei der Entwicklung setzen. :)

    Ich persönlich finde, es bringt letztendlich alle weiter, wenn sich die Modder angesichts der eher dürftigen offiziellen Doku gegenseitig helfen, da gibt es für mich auch kein Konkurrenzdenken. Ich will es vermeiden, die Leute von UG mit Anfragen zu nerven, weiß auch nicht, ob sie antworten. Ja, und deswegen ist deine Arbeit und deine Unterstützung auf jeden Fall zu würdigen [Bauchpinsel on :):):):):)]

    Meine Bemühungen, Objekte in einer Map global auszutauschen/zu verändern, wachsen und gedeihen. Bei Straßen und Schienen klappt's schon mal, jetzt bin ich bei Konstruktionen, und da hakt es noch. Für die Funktion SimpleProposal in Bezug auf Objekte habe ich keine Beispiele gefunden, womöglich hat noch nie jemand damit gearbeitet. Im Wiki steht im schönsten Schweizerdeutsch ^^ (oder ist es Fachchinesisch?):

    Und jetzt frage ich mich, was ich machen muss, um innerhalb eines Game Scripts (also nicht im Spiel über die normale Dialogeingabe) Konstruktionen zu ersetzen/upzudaten? proposal.old2new ist mir noch ein Rätsel. Dort werden offenbar zwei Zahlen in einer Tabelle erwartet, und ich hätte getippt, eine davon ist die EntityID der zu ersetzenden Konstruktion, und die andere -1, sofern es nur eine einzige neue Konstruktion gibt. Analog zum Ersetzen von Edges. Klappt aber scheinbar nicht. Oder muss da vielleicht gar nicht die EntityID, sondern die ID der Konstruktion selbst rein? Auch vergeblich versucht. :( Ich kann mir auch versuchsweise eine Tabelle ConstructionEntity mit passenden Parametern basteln, aber wie kriege ich die dann mit der neuen ID verknüpft? Bei Streets und Tracks gibt es api.type.SegmentAndEntity.new(), aber etwas Vergleichbares für Konstruktionen gibt es scheinbar nicht. ConstructionsToRemove klappt schon mal perfekt mit der aktuellen EntityID, aber was bei ConstructionsToAdd rein muss, ist mir völlig unklar. Zahlenwerte wurden jedenfalls abgelehnt, -1 geht nicht, auch Tabellen mag es nicht, gefragt ist nach Userdata, aber welche, und wie setze ich einen Zeiger darauf? Brauche ich überhaupt Add/Remove für die ganze Aktion? Fragen über Fragen. :rolleyes:


    Versteht jemand die Anleitung? Irgendjemand ne Idee? :/:?::?::?::?:

    Meiner persönlichen Erfahrung nach sind es nicht mehr als bei TPF - bei mir läuft es stabil (allerdings bin ich auch weitestgehend vorsichtig beim installieren von Mods).


    Aber wie schon zuvor beschrieben: Nicht jede Mod wurde konvertiert, nicht jede Mod lässt sich durch den Konverter für den Eigengebrauch konvertieren (zumindest nicht ohne erweiterte Kenntnisse) - und ob mir die neuen Features knapp 40€ wert sind sei mal dahingestellt - ich habe bei vergleichbarem bei TPF3 wohl nicht die Lust darauf...

    Ich kann auch nur sagen, dass es stabil läuft. Selbst mit den Mods habe ich keine Probleme. Natürlich kann man immer wieder über die Performance meckern. Aber auch da finde ich, dass halt jede Menge Daten einfließen, und die hervorragende Grafik halt ihren Tribut fordert. Und wenn eine große Map nicht läuft, dann fangt halt mit einer kleineren an und dreht die Grafik-Einstellungen ein wenig runter, dafür sind sie ja da.


    Was mich persönlich aber wirklich manchmal nervt, sind folgende Dinge:


    - So schön die KI auch manchmal ist: Gelegentlich hinterlässt sie ihre störenden "Duftmarken". Manchmal möchte ich keine Snap-Funktion bei Gleisen, dann drücke ich die Shift-Taste, und trotzdem hakt es irgendwie. Dann lieber nicht auf eine Taste legen, sondern irgendwo als temporäre Einstellung wählbar machen. Es nervt auch, dass die KI versucht, alle Edges irgendwie in Übergangsbögen umzuwandeln. Nicht nur bei Weichen stört es, auch aus einem kleinen eckigen Straßenkarree macht die KI eine Ellipse :cursing:usw.

    - Es sollte einfacher sein, 100 % gerade Gleise zu verlegen. Den Snap-Effekt finde ich hier zu gering. Nützlich wäre evtl. eine Extra-Einstellung wie bei den Straßen.

    - Gleichmäßige Steigungen und konsequente Gleisverlegung in der geraden Ebene sind eine Katastrophe, das Pfeilwerkzeug ist unpräzise. Generell wünsche ich mir die Option, so etwas präzise eingeben zu können, ggf. nummerisch. Eigentlich für alle Arten von Gleisverlegung und Streckenführung, auch Kurvenradien, Gleislängen etc.

    - Die Buckel beim Aneinandersetzen verschiedener Straßentypen in Steigungen sind unschön. Ich kann zwar verstehen, dass es mit den Nodes zu tun hat, und es bei Einmündungen auch Sinn macht, aber eben nicht bei normalen Straßen.

    - Schienenkreuzungen schlanker als 1:9 sollten möglich sein. (Geht momentan nicht, :( warum auch immer ...)

    - Kreuzungen zwischen Schmal- und Normalspur sollten vernünftig aussehen. Das gilt auch für BÜ mit Straßenbahnschienen.

    - Straßenbahnen sollten optisch nicht "entgleisen" :(, wenn sie an Haltestellen oder Endstationen in Kurven oder Kreuzungsbereiche hineinragen.

    - Brückendurchfahrten unter 12 m Höhe sind nur mit Trickserei zu erreichen. Aber auch dort mischt die KI wieder mit. Entfernt man eine Brücke, wird das Gelände teilweise wieder zugeschüttet. Mag anderswo sinnvoll sein, bei Brücken jedoch nicht.

    - Die eckigen Straßenbahngleise, die engen Kurven und die zu hohen Bürgersteige passen so gar nicht zu der ansonsten schönen Grafik. Auch die Oberleitung könnte dünner sein.

    - Zumindest bei den breiten Straßen sollten doppelgleisige Straßenbahnstrecken auch in der Mitte liegen können, wie es in Europa üblich ist.

    - Sollte ein Verkehrsmittel überfüllt sein, sollten die Fahrgäste binnen kürzester Zeit ihre Wahl überdenken und nach Alternativen suchen, statt sich bis zum Sankt-Nimmerleinstag an Haltestellen zu knubbeln.

    - Waggons sollten ingame um 180° im Zugverband drehbar sein, dann bräuchte man keine "Umkehrmodelle"

    - Alternative Verkehrsverbindungen und -träger sollten aber nicht dazu führen, dass sich das gesamte Verkehrsaufkommen ausschließlich dorthin verlagert. Beispiel: Wenn gelegentlich wegen Unterkapazität der Schiene ein LKW einen Stahltransport übernimmt, sollte dennoch nicht der gesamte übrige Verkehr mit Ganzzügen zusammenbrechen.

    - Programmier-Doku für Modder: Vieles muss man erraten oder woanders abgucken, vieles ist einfach unverständlich und unvollständig. Mehr Beispiele! Es nützt nichts, wenn es weltweit vielleicht zehn Leutchen gibt, die sich einigermaßen gut mit Mod-Programmierung auskennen. Apropos: Auch wenn UG auf eine internationale Community setzt - in der Schweiz spricht man doch auch Deutsch:?: ;)


    Mit mittlerer Priorität hätte ich noch folgende Wünsche:

    - Es sollte neben Standard und Country Straßen(typen) geben, an denen garantiert nichts gebaut und nichts geändert wird.

    - Reihenhäuser. Ich meine, mal gesehen zu haben, dass man in CitiesSkylines Häuser wirklich Wand an Wand setzen und sogar Hauswände dem Straßenverlauf anpassen kann.

    - Im Bereich der Weichen sollte es möglich sein, auch Spezialweichen zu bauen, z.B. Doppelweichen (bekannt als "asymmetrische Dreiwegweichen") oder Baeseler-DKWs. Auf jeden Fall aber EKWs, das dürfte recht einfach umsetzbar sein.

    - Die Signalverwaltung gerade bei eingleisigen Strecken könnte optimiert werden (dazu habe ich anderweitig was geschrieben) und um individuelle Schaltmöglichkeiten mit Kontakten o.ä. erweitert werden.

    - richtig funktionierende Drehscheiben

    - Fahrpläne, um Strecken optimal auszulasten.


    Und längerfristig:

    - eingleisige Straßenbahnstrecken, mit Oberleitungsmasten, Ausweichen und in Seitenlage. Gerade in der Schweiz sollte so etwas geläufig sein. Auch der nächste Punkt:

    - Kombination Eisenbahn - Straßenbahn (Kleinbahnen, Street Riding, Stadtbahnsysteme)

    - Obusse mit vernünftiger Oberleitung (nichts gegen die Mod, aber Oberleitung aus Assets ist halt eine Notlösung)

    - Kombinierte Verkehre (Rollbock, Culemeyer, Container, Huckepack, Autozüge, Fähren, Drei- und Vierschienengleise etc.)

    - Umsetzen von Loks als Alternative zu "180°-Schnellwenden", Rangier- und Kuppelmanöver

    - Straßenbahnzüge und auch Kfz-Anhänger sollten wie normale Züge kuppelbar sein und keine starren Einheiten.


    Ich persönlich finde es übrigens schon sinnvoll, Wünsche frühmöglichst zu äußern, bevor im wahrsten Sinne des Wortes der Zug in eine andere Richtung abfährt.


    Nachtrag: Ich hab noch Radwege (natürlich auch mit Radfahrern) und flexible Fahrspurenbreiten vergessen. Fällt aber eher unter längerfristig.

    Vordringlich stört mich aber noch, dass das untere Dialogfenster sich nicht verschieben lässt, und dass man außer im Fotomodus und bei Führerstandsmitfahrt die Perpektive eigentlich immer nur in einer leichten Schrägansicht von oben genießen kann.


    Weiterer Nachtrag: Unter "kurzfristig" wäre noch sinnvoll: Wegklickbare Straßenbahn-Abzweigungen. Sieht schrecklich aus, wenn an Kreuzungen ständig viel zu enge und häufig überflüssige Verbindungskurven eingezogen werden.

    Perfekt. Jetzt klappt es. :thumbup: Danke! Update war der richtige Weg! Aber du hattest es auch etwas anders strukturiert, als ich es in einem anderen Beispiel vorfand. Keine Ahnung, was da falsch war. Allerdings wird es mit Update permanent ausgegeben. Um die Daten einmalig abzufragen, bleibt wohl nichts anderes übrig, als ein Flag zu setzen. :| Ich hätte ja auf init getippt, von wegen einmalig, aber genau da hat es leider nicht funktioniert.


    Jetzt brauch ich eigentlich nur noch die Inhalte der Entities zu ändern, hahaha! :):):):):):)8o

    Spaß beiseite, das kann bestimmt noch lustig werden, denn alles hat irgendwie Haken und Ösen. :/ Mal sehen, ob ich mit dem Beispiel aus dem Wiki weiterkomme.

    Das soll laufen, sobald meine Map geladen ist. ;) Oder so früh wie möglich, aber vorher dürfte wohl nicht gehen.

    Ich tippe mal, dass ich noch die Callbacks brauche. Oder zumindest einen davon.

    Ich hab da auch mal versuchsweise bei einigen meine Abfrage mit debugPrint eingetragen. In den meisten Fällen erscheint da ständig <function> und sonst nichts.


    Aber ein Riesenfortschritt: Es stürzt nicht mehr ab! :)


    Den Lexikon-Eintrag habe ich mir schon mal angesehen, aber er hat mich zugegebenermaßen etwas abgeschreckt, weil da so viele Dinge drinstehen, die ich nicht brauche. Außerdem frage mich, ob commonapi.dmp (oder so ähnlich) noch funktioniert bzw. ob man die CommonAPI dazu braucht, die momentan nicht geht.

    Ja, Kleineisen wünsche ich mir auch. Besonders, seit die Mod von KarlCharlson weg ist. Braucht nicht mal ein komplett neues Gleissystem zu sein, das ginge ja auch per Modifier etc. Müsste nur jemand bereits vorhandene Kleineisen offiziell zur Verwendung freigeben. Die 760-mm-Gleise haben auch welche, bin mir aber nicht sicher, ob die sich auch für Normalspur umstricken ließen.

    Wo baut man denn die Anfrage nach den Entities ein?


    Ich hab mal eine mod.lua nur mit dem Infoblock aufgebaut und dann einen Ordner res/config/game_script mit dem namen wk_entity_test.lua

    Ich hab zwei Sachen versucht


    Code
    local entities = game.interface.getEntities({radius = 999999},{type = "BASE_EDGE"})
    debugPrint(entities)

    oder

    Code
    function data()
    local entities = game.interface.getEntities({radius = 999999},{type = "BASE_EDGE"})
    return entities
    end
    debugPrint(entities)

    In beiden Fällen wird attempt to index field 'interface' (a nil value) angemeckert. Was mache ich da falsch?


    Muss ich da noch irgendwas initialisieren? Oder muss ich das Ganze in postRunFn einbauen? :/:?::?:

    Warum gibt es nirgendwo einen einfachen Beispielrahmen? UG bringt ein Beispiel, wie man Entities anwendet, aber nicht, wie man sie abfragt und wo der Code hingehört. Das macht mich wahnsinnig! 8o

    Hat jemand von euch irgendeine Idee, ob und wie man Zugriff auf im Savegame installierte Gleise und Straßen bekommt? Das Savegame selber ist ja eine Black Box, an die man nicht drankommt. Ich hab schon Versuche mit den Entities gestartet, aber für normale Straßen und Gleise gibt es scheinbar keine Entities, wäre auch zu einfach ... ^^


    Was ich damit will? Es ließe sich ein Tool realisieren, mit dem man versehentlich eingebaute falsche Gleis- und Straßentypen nachträglich noch verändern könnte. Oder Ersatz schaffen, falls mal eine Mod nicht mehr da ist. Die Modifier sind hier keine Lösung, denn die ermöglichen nur eine Veränderung vor dem Einbau.

    Für mich war es eigentlich nicht die Frage, ob Modellbahn oder Sim. Beides lässt sich doch wunderbar miteinander kombinieren! ;) Wer hier nur willkürlich zusammengestellte Züge im Kreis durch abgelegene Landschaften fahren lässt, ist eben schnell pleite. Dadurch ist man gezwungen, vorbildnah zu bauen, was ich gar nicht schlecht finde. Bei "richtigen" Modellbahnern gibt es übrigens auch das Konzept "Spielen mit Sinn", wo eben auch gezielt Güter und Personen von A nach B transportiert werden müssen. Nur dort hat man den Nachteil der extremen Komprimierung. Ich fände es auf die Dauer langweilig, wenn Züge einfach nur herumfahren.


    Außerdem gibt es in TpF nicht nur eine beeindruckende Grafik, sondern als Zubehör auch hervorragende Modelle, die teilweise besser sind, als das, was die virtuelle Modellbahn-Konkurrenz bietet. Und das noch kostenlos. Eine Chance wäre vertan, wenn sowas wie viele ähnliche Spiele nur in der schnelllebigen WiSim-Zocker-Ecke enden würde.

    Sorry, aber statt einer Menge Fachchinesisch hätte ich mir gewünscht: "Aus technischen Gründen kann derzeit keine ohne kryptische Fummelei vielleicht funktionsfähige Version angeboten werden." Das lese ich jedenfalls daraus. Eine völlig subjektive Anregung - wohlgemerkt, ohne jemandem böse zu sein: ;) Sowas bitte auch für die ganz Doofen wie mich ;) auf die Downloadseite schreiben, damit man sich nicht jeden vielleicht schon wieder unaktuellen Informationskrümel aus der Tiefe irgendwelcher Fachdiskussionen einzeln heraussuchen muss.