Skript zum Auslesen von platzierten Industrien.

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 an alle Profis.


    wieder einmal habe ich eine Map erstellt, und wieder einmal stehe ich vor dem "Problem" präzises visualisiertes platzieren von Industrien.


    Kurze Erklärung.
    Ich habe/möchte eine Karte mit vorgegebenen Städten und Industrien erstellen.
    Städte sind nicht das Problem, und Industrien wären es auch nicht, wenn ich diese nicht cm-genau platzieren wollen würde.


    Es wurde mir schon mal der Tipp (von @Xanos bzw. indirekt von @tomdotio ) gegeben ein Skript zu schreiben/nutzen, welches die Koordinaten der Industrien ausließt.
    Nur habe ich nicht den geringsten Schimmer, wie dieses Skript aufgebaut sein müsste (Der Tipp in die Kampagnen-Skripte zu schauen, hilft mir da leider gar nicht), oder wie ich dieses dann auch effektiv einsetze.


    Im Grunde hätte ich also etwas, bei dem ich erst artig alle Industrien (zB. im Pausemodus) im Spiel selbst platziere, und wenn ich fertig bin (Wie auch immer das definiert wird), ich mir aus einer Ausgabedatei, die genauen Koordinaten und Ausrichtung (Drehung) herauskopieren und in die map.lua eintragen kann.


    Da ich wie schon erwähnt keine Ahnung habe, wie ich das schlussendlich bewerkstelligen soll, hab ich auch keine Ahnung, ob es überhaupt so in der Form möglich ist.


    Bitte helft mir Obi-Wan... ähh liebe Community... Ihr seid meine letzte Hoffnung. :saint:



    Ps: Bitte erspart mir, Kommentare wie: "Nutz doch Xanos Map-Tool" (Das lässt nicht die nötige Präzision zu), oder "Trage alles manuell ein." (Das würde zu sehr in Try-and-Error ausarten.)

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Hmm, also wenn es jetzt die Städte wären oder die Stationen wäre es sehr einfach.


    An eine Information der Industrie müsstest Du per game.interface.getEntity(EntityID) kommen,


    dafür bräuchtest Du aber die ID, die hat UG für die Missionen fest verdrahtet.



    Vielleicht über game.interface.getEntities und dann alle durchlaufen. TpF hat auch irgendwo eine Funktion getBuildingType und getBuildingTypes, da kann ich aber auch auf dem Holzweg sein

  • Hei,


    ich habe da vor ein zwei Wochen mal damit herum gespielt und es hat funktioniert. Es sind halt noch alle Überbleibsel von der Original Kampagne drinnen. Es schreibt das Ergebnis dann in C:\Program Files (x86)\Steam\userdata\....\446800\local\crash_dump in stdout.txt


    ich hoffe das Hilft dir weiter.


    Liebe grüße Beni

    Dateien

    • beni.zip

      (11,07 kB, 227 Mal heruntergeladen, zuletzt: )
  • @beni92
    Wenn Du mir jetzt noch beschreiben könntest, wie ich das praktisch anwende, bzw. auch mit meiner Karte zusammen gestartet bekomme (und es womöglich auch noch so funktioniert, wie ich mir das vorstelle), ist Dir mein Dank auf ewig gewiss. :)

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Du musst den Folder in Campagne C:\Program Files (x86)\Steam\steamapps\common\Transport Fever\res\campaign


    Hier sollte der Ordner beni liegen in dem sich der Ordner 01 und info.lua befindet.


    dann musst du einen Speicherstand von dem du die Industrien Auslesen möchtest (du kannst auch Problem los einen leeren Speicherstand verwenden und dann im Spiel die Industrien hinzufügen) in den Ordner C:\Program Files (x86)\Steam\steamapps\common\Transport Fever\res\campaign\beni\01 legen.


    Dann musst du das File info.lua bearbeiten. In dem File steht die Zeile: 'savegame = "beni/01/vlbgnoindus.sav", ' hier musst du nur anstatt vlbgnoindus den Namen von deinem Savegame angeben.


    Dann kannst du bei Kampagnen im Spiel eine neue Sehen. Diese besteht dann aus deiner Karte.


    Die Mission (ich glaube Bahnhof bauen) erst starten sobald du alle deine Industrien gesetzt hast. Ich glaube du solltest nichts anderes außer Industrien setzten.


    Das Skript ist wenn ich mich nicht irre nur in einer Kampagne möglich da in einem Freiem Spiel die globale Variable Game nicht gesetzt ist.


    Ich habe das ganze nur einmal verwendet also ich gebe keine Garantie auf unerwartets verhalten. Ich habe aber die Ausgelesen Daten nie verwendet also auch da kann ich nicht garantieren dass sie richtig sind. Haben aber ganz gut ausgesehen ;)


    Viel Spaß

  • Soweit so gut... ich habe Testweise mal so 6-8 Industrien gesetzt.
    Allerdings konnte ich in der stdout.txt nicht finden, was auf meine platzierten Industrien hinweist. :/


    Das mit meiner Karte als Kampagne zu starten klappte Problemlos. (Spielstand im Pausemodus)
    Ich habe die Mission auch erst einmal nicht gestartet, sonder die Industrien platziert.
    Anschließend habe ich die Mission begonnen, und das Spiel dann verlassen. (Vermutlich war das falsch?)


    Wie gesagt in der stdout.txt keine Hinweise.
    Vermute, das ich irgendwo noch etwas "falsch" gemacht habe. :/

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Jupp funktioniert SUPER! :thumbsup:
    Damit hast Du den Map-Moddern einen großen Dienst erwiesen.




    Wenn man jetzt den Industrien in der map.lua noch einen "Namen" geben könnte .. zB: statt "Stadtname Ölraffinerie" sowas wie "Raffinerie BASF", wäre es perfekt. :D
    Oder eben das "leidige" Thema Wälder via map.lua "pflanzen".

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Das habe ich zugegeben "noch" nicht getestet.
    Aber soweit ich das anhand der Koordinaten abschätzen kann, scheint es hinzukommen.
    Bin heute und Morgen auch leider etwas indisponiert. (Der Weihnachtsstress beginnt so langsam. :( )


    @beni92
    So mal kurz die Daten aus der stdout.txt in meine Karte eingefügt.
    Fazit:
    - Position stimmen. :thumbup:
    - Drehung leider nicht. 8|


    Ich bin auch noch nicht sicher in welchem Verhältnis die Drehung verschoben ist.
    Das müsste ich beim nächsten mal etwas genauer "notieren" und vergleichen.

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

    Einmal editiert, zuletzt von Jey_Bee ()

  • Cool, Immerhin die Position. Wie schon gesagt ich habe das noch nie getestet und einfach mal ausprobiert. Das mit der Drehung kann gut sein dass es nicht so funktioniert wie ich es mir vorgestellt habe :)


    Das ist der Code für die Drehung. Vlt. kennt sich ja jemand aus und sieht was mein Fehler ist. Ich habe leider keine Zeit zum das ganze nochmals durch zu denken ;)


  • Sorry, no, I'm not.


    I Trying place chemical plant, but use Map viewer (or Photoshop and Excel), or campain and stdout.txt, game not placed this industrial :( maybe too close city or road? i dont know.

  • Jey_Bee:
    Also die Funktion rechnet für den Vektor vec2 den Winkel in der x-y-Ebene aus, wenn man das ganze in Zylinderkoordinaten darstellt. Das Industriegebäude soll ja um die Hochachse (z-Achse) gedreht werden, dementsprechend soll dieser Wert (Winkel) angepasst werden. Den Rückgabewert der Funktion kannst du als Referenzgröße dafür benutzen, inwiefern und um wie viel die Drehung verschoben ist (Vergleich Ist-/Sollwert).

    5 Mal editiert, zuletzt von GreenCity ()

  • Die Frage ist aber um wie viel anpassen? Denn sonst bin ich in Sachen Ausrichtung (Drehung) wieder am Anfang und muss wieder nach try-and-error gehen, was bei voraussichtlich über 60-100 Industrien eine Zeitaufwändige Sache wird, weshalb dieses Skript einem ja die Arbeit abnehmen sollte.
    Wenn sich die Industrien aber "willkürlich" beim übertragen (Zwischen platzieren, übertragen der Daten und erneute berechnete Platzierung) drehen, ist das eigentliche Ziel verfehlt.
    Denn auf meiner Karte ist eine präzise Ausrichtung, auf Grund "sehr" vieler Gewässer unumgänglich.


    Ich werde aber nachher noch einmal einige Tests durchführen, um das genauer zu analysieren.

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Meinst du damit, dass die jeweiligen Drehungen von den entsprechenden Positionen der Industrien abhängen? In dem Fall, dass diese Drehungen vom Terrain abhängen, wird man wahrscheinlich nicht viel Anderes als Try-and-Error machen können - ob per Hand oder automatisiert per Skript (je nach dem wie diese berechnet werden).

    4 Mal editiert, zuletzt von GreenCity ()

  • Das weiß ich eben "noch" nicht.
    Fakt ist, das beim Übertragen der ausgelesenen Daten, die Industrien anders gedreht waren, als ich sie platziert hatte.
    In welchen "Verhältnis" will/werde ich noch testen "müssen", in der Hoffnung, das da ein System zu erkennen ist.


    Edit:
    @beni92
    Vielleicht hilft der praktische "optische" Vergleich ehr.

    Oben, Testplatzierung von links nach rechts, beginnend mit keiner "Drehung" (Also Grundausrichtung)
    Unten, nach Übertrag in die map.lua


    Das die 3. Industrie komplett fehlt, führe ich "vorerst" auf die Straßengenerierung zurück.
    Wirklich interessant an der Sache ist aber, das 1+2 eigentlich nur um 90° versetzt sind, im Ergebnis aber 180°.


    Hier der Code:

    Code
    { pos = {	-4920.75390625	,	-428.11666870117	}, angle = 	4.7123889803847	, fileName ="industry/steel_mill.con"},
    { pos = {	-4695.8852539063	,	-424.10272216797	}, angle = 	1.570796251297	, fileName ="industry/steel_mill.con"},
    { pos = {	-4450.70703125	,	-423.05133056641	}, angle = 	3.141592979377	, fileName ="industry/steel_mill.con"},
    { pos = {	-4181.2788085938	,	-430.80108642578	}, angle = 	6.2831843415804	, fileName ="industry/steel_mill.con"},

    Vielleicht hilft das ja etwas weiter.
    Da die 1. Industrie gar nicht gedreht wurde, hätte diese doch angle = 0 (oder glatt 1?) haben müssen, oder Irre ich da?
    Ich kenne mich mit den (für mich nicht nachvollziehbaren) Werten nicht aus.

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

    Einmal editiert, zuletzt von Jey_Bee ()

BlueBrixx