1. Dashboard
  2. Forum
  3. Filebase
  4. Lexikon
  5. Artikel
  6. Spieletest
  7. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  8. Zur Transport Fever Community
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Filebase-Eintrag
  • Lexikon
  • Artikel (Bewertungssystem)
  • Erweiterte Suche
  1. WiSim Welt
  2. Forum
  3. Spiele
  4. Cities in Motion
  5. Modding und Erweiterungen
  6. Modding-Hilfen

Breite Straßenbahn-Gleise ohne Straße in Mod verwenden

  • Apfelchips
  • 31. Mai 2012 um 15:15
1. offizieller Beitrag
  • Apfelchips
    Gast
    • 31. Mai 2012 um 15:15
    • #1

    Hallo zusammen,

    bekanntlich gibt es es CiM drei Gleistypen für Straßenbahnen/Trams:
    GRID_ITEM_AVENUE_TRAM, GRID_ITEM_LARGE_TRAM und GRID_ITEM_SMALL_TRAM

    Über den onPlace-Eventhandler kann man in einem Mod Objekte einbinden, die zuvor geladen wurden. Ein Mod verwendet diesen Handler beispielsweise um Metro-Tracks einzubinden:

    PHP
    event this.onPlace::($c) {
      $c[] = GRID_ITEM_GROUND_METRO; $c[] = -4; $c[] = 0; $c[] = -1; $c[] = 0x04000000;
    }

    Ich möchte nun gern auf dieser ohne einer ähnlichen Art ein Tram-Gleis vom Typ GRID_ITEM_LARGE_TRAM in meinen Mod einbinden. Eine einfache Abänderung des Eventhandlers scheint dabei nicht zu funktionieren:

    PHP
    event this.onPlace::($c) {
      $c[] = GRID_ITEM_LARGE_TRAM; $c[] = -4; $c[] = 0; $c[] = -1; $c[] = 0x04000000;
    }

    Denn nun passiert nichts — es erscheint kein Gleis. Vermutlich liegt das an der fehlenden Straße, auf der Gleis ja sonst gesetzt wird.

    Nun habe ich mir eis_os' trampuzzle-Mod angeschaut, wo ja u. a. dieser Gleistyp unabhängig von Straßen gebaut werden kann. Allerdings kann ich auch davon nicht ableiten, wie ich nun diesen Tram-Track in meinen Mod reinbringen kann.

    Kann mir hier jemand helfen?

    • Zitieren
  • eis_os
    Profi
    Beiträge
    1.025
    Filebase Einträge
    2
    • 31. Mai 2012 um 15:25
    • #2

    Auf die schnelle würde ich sagen, die Direction Bits ($c = 0x) stimmen nicht. In CIM Internals müsste ich Sie glaube ich beschrieben haben unter this.connection
    -edit-
    Sind Beschrieben...


    PS: Und nein, ich kenne noch keine Möglichkeit den Tramtrack Builder Cursor zu überreden nur GRID_ITEM_LARGE_TRAM tracks zu bauen, in einer onPlace Routine muss es gehen...

    4 Mal editiert, zuletzt von eis_os (31. Mai 2012 um 15:30)

    • Zitieren
  • Apfelchips
    Gast
    • 31. Mai 2012 um 16:22
    • #3

    Du hast Recht — danke!
    So geht's:

    environment.script

    PHP
    $grid.loadGridObject("tramtracklarge", "metro/objects/tracks/large_basic.object");

    [Objekt].script

    PHP
    $c[] = "tramtracklarge"; $c[] = 0; $c[] = 0; $c[] = -1; $c[] = 0x4400;

    Jetzt hab ich aber ein anderes Problem:
    Ich kann das Gleis nicht um 90 Grad drehen, da an der Stelle ja schon die connection map steht. Oder gibt's da eine andere Möglichkeit?

    Edit:
    Wie hier zu lesen ist kann ich mir die Angabe 0x4400 jetzt wohl sparen. Drehen klappt aber trotzdem (noch) nicht …

    Einmal editiert, zuletzt von Apfelchips (31. Mai 2012 um 16:26)

    • Zitieren
  • eis_os
    Profi
    Beiträge
    1.025
    Filebase Einträge
    2
    • 31. Mai 2012 um 17:35
    • #4

    Nein, entweder du nimmst ein String mit einer Rotation und baust ein einfaches Objekt
    oder Du nimmst eine GRID Konstante und die Connection Bits. Beides mischen geht nicht!

    Und Du willst erst gar nicht das Objekt mit dem selben Script unter einen anderen Namen laden, denn bekommst Du oder später deine Benutzer massiv ärger da dein Tram Teil das normale überschreibt!

    Nimm entweder den Namen den CIM auch nutzt oder die GRID Konstante, lade niemals eine Strasse Metro oder Tram Teil mit einem anderen Namen!

    -edit-
    Vielleicht wäre es einfacher wenn Du erklärst was Du genau machen möchtest. Detailliert.

    -edit2-

    Einfache Faustregel für alle: loadGridObject nur nutzen wenn einem das Objekt gehört oder:
    a) Ist es ein Fahrzeug? Denn ist es in der Regel ohne Auswirkungen, nicht vergessen die Strings oder Daten zu ändern, sonst hat der Benutzer das Fahrzeug doppelt.
    b) es ist ein einfaches Objekt, warum willst Du es überhaupt nochmalig laden?

    Bestimme Sachen eines Verkehrswegs können auch nicht nachträglich geändert werden, zum Beispiel der this.type oder this.variation

    6 Mal editiert, zuletzt von eis_os (31. Mai 2012 um 17:48)

    • Zitieren
  • Apfelchips
    Gast
    • 31. Mai 2012 um 18:20
    • #5

    Okay, ich versuche es mal:

    Ich möchte ein von mir erstelltes Straßenbahn-Bahnsteig-Objekt in die "Lücke" zwischen den beiden Gleisen des large_basic.object von CiM packen, um eine Art Doppelbahnsteig zu realisieren. Links und rechts sollen Objekte platziert werden, die den Übergang von dieser breiten Gleisaufteilung auf eine normale, schmale Gleisaufteilung ermöglichen:


    Erst schmal-auf-weit (large_small_basic), dann weit (large_basic) und dann wieder weit-auf-schmal (large_small_basic) — und quasi mittendrin mein selbst-gebasteltes Bahnsteigobjekt.


    Über die GRID-Konstante erhalte ich ja nur "large_basic" (in Form von GRID_ITEM_LARGE_TRAM), nicht aber das Übergangsstück von small auf large (bzw. von GRID_ITEM_SMALL_TRAM auf GRID_ITEM_LARGE_TRAM).

    Im Übrigen scheint das mit der GRID-Konstante hier auch gar nicht so richtig zu funktionieren (sofern ich das richtig mache und Deine/eis_os' CIMInternals richtig verstehe). Folgendes führt jedenfalls dazu, dass im Spiel rein gar nichts erscheint:

    PHP
    event this.onPlace::($c) {
    $c[] = GRID_ITEM_LARGE_TRAM; $c[] = -5; $c[] = 0; $c[] = 1; $c[] = 0x00000400;
    }


    Wie sollte ich jetzt am besten Vorgehen?

    2 Mal editiert, zuletzt von Apfelchips (31. Mai 2012 um 18:29)

    • Zitieren
  • eis_os
    Profi
    Beiträge
    1.025
    Filebase Einträge
    2
    • 31. Mai 2012 um 18:58
    • #6

    tram_small_deadend
    tram_large_small_basic

    tram_large_small_basic
    tram_small_deadend


    letztes $c entweder:
    0
    1
    2
    3

    • Zitieren
  • Apfelchips
    Gast
    • 31. Mai 2012 um 19:04
    • #7

    Also doch Objekte unter einem anderen Namen laden (small_deadend als tram_small_deadend)?

    • Zitieren
  • eis_os
    Profi
    Beiträge
    1.025
    Filebase Einträge
    2
    • 31. Mai 2012 um 19:08
    • #8

    NEIN!

    Lese default-roads.script und erkenne das der Dateiname nicht gleich dem benutzen Objekt Namen in CIM ist...

    • Zitieren
  • Apfelchips
    Gast
    • 31. Mai 2012 um 20:45
    • #9

    Danke für die klare und direkte Antwort. Für die Nachwelt:

    environment.script

    PHP
    echo "Loading " +this.scriptFilename;
    
    
    $grid = MAIN.$grid;
    $level = MAIN.$level;
    $objectpath = extractFileDir(extractFileDir(this.scriptFilename));
    
    
    // Load object
    $level.loadBuilding("railway", "Hochbahnsteig", "/addons/Hochbahnsteig/Hochbahnsteig");
    
    
    echo "Done loading " + this.scriptFilename;
    Alles anzeigen

    [Objekt].script

    PHP
    ...
    
    
    // Event handler
    event this.onPlace::($c) {
    
      $c[] = "tram_large_small_end"; $c[] = -9; $c[] = 0; $c[] = 2; $c[] = 1;
      $c[] = "tram_large_small_basic"; $c[] = -3; $c[] = 0; $c[] = 1; $c[] = 1;
    
      $c[] = "tram_large_basic"; $c[] = 7; $c[] = 0; $c[] = 1; $c[] = 0;
      $c[] = "tram_large_basic"; $c[] = 15; $c[] = 0; $c[] = 1; $c[] = 0;
    
      $c[] = "tram_large_small_basic"; $c[] = 23; $c[] = 0; $c[] = 1; $c[] = 3;
      $c[] = "tram_large_small_end"; $c[] = 33; $c[] = 0; $c[] = 2; $c[] = 1;
    
    }
    
    
    ...
    Alles anzeigen

    So sieht das jetzt bei mir aus:

    Nun muss ich es nur noch hinbekommen, dass man "meine" Gleise mit evtl. Bestehenden der Karte, welche mit dem normalen Tool im Spiel erstellt wurden, verbunden werden können.
    Wie man auf dem Screenshot sieht sind die jeweils etwas versetzt. Vielleicht kann ich da über die Positionierung noch was anpassen.

    Aber selbst wenn: Reicht das aus, um den Spieler zu ermöglichen eine Verbindung zwischen den Gleisen herzustellen?

    2 Mal editiert, zuletzt von Apfelchips (31. Mai 2012 um 20:49)

    • Zitieren
  • Apfelchips
    Gast
    • 2. Juni 2012 um 18:06
    • #10

    Ich bekomme es leider nicht hin die Gleise so anzuordnen, dass man sie im Spiel auch mit dem normalen Tool ans Straßenbahnnetz anschließen kann — obwohl ich erst ein tram_small_deadend und dann ein
    tram_large_small_basic bzw. anderesherum gebaut habe. Das deadend habe ich dabei auch von allen Richtungen getestet — leider vergeblich.

    Ich glaube ohne Hilfe komme ich hier nicht weiter … bitte gebt mir Hinweise!

    Meine onPlace-Funktion sieht so aus:

    PHP
    event this.onPlace::($c) {
    
    
      $c[] = "tram_trafficlight_left"; $c[] = 2; $c[] = 0; $c[] = 0; $c[] = 0;
      $c[] = "tram_trafficlight_walker"; $c[] = 2; $c[] = 0; $c[] = 5; $c[] = 2;
    
      $c[] = "tram_trafficlight_walker"; $c[] = 27; $c[] = 0; $c[] = 0; $c[] = 0;
      $c[] = "tram_trafficlight_left"; $c[] = 27; $c[] = 0; $c[] = 5; $c[] = 2;
    
      $c[] = "tram_small_deadend"; $c[] = -10; $c[] = 0; $c[] = 2; $c[] = 0;
      $c[] = "tram_small_basic"; $c[] = -8; $c[] = 0; $c[] = 2; $c[] = 0;
      $c[] = "tram_large_small_basic"; $c[] = -4; $c[] = 0; $c[] = 1; $c[] = 1;
    
      $c[] = "tram_large_basic"; $c[] = 5; $c[] = 0; $c[] = 1; $c[] = 0;
      $c[] = "tram_large_basic"; $c[] = 13; $c[] = 0; $c[] = 1; $c[] = 0;
      $c[] = "tram_large_basic"; $c[] = 16; $c[] = 0; $c[] = 1; $c[] = 0;
    
      $c[] = "tram_large_small_basic"; $c[] = 24; $c[] = 0; $c[] = 1; $c[] = 3;
      $c[] = "tram_small_basic"; $c[] = 34; $c[] = 0; $c[] = 2; $c[] = 0;
      $c[] = "tram_small_deadend"; $c[] = 38; $c[] = 0; $c[] = 2; $c[] = 4;
    
    }
    Alles anzeigen

    tram_trafficlight_* sind dabei eigene Objekte.

    So sieht der Anschlussversuch aus:

    2 Mal editiert, zuletzt von Apfelchips (2. Juni 2012 um 18:11)

    • Zitieren
  • mediziner
    Administrator
    Reaktionen
    2
    Beiträge
    1.924
    Filebase Einträge
    10
    Einträge
    4
    • 2. Juni 2012 um 18:17
    • Offizieller Beitrag
    • #11

    versuche mal folgendes: this.flags sollte evtl. GRID_ITEM_ALIGN_4 erhalten.

    und die toten Enden würde ich durch das Spiel platzieren lassen:

    Code
    event this.onPlace::($c, $x, $y, $z, $a) {
      // OBJECTID , X, Y, Z, ROTATION/ANSCHLÜSSE
      $c[] = GRID_ITEM_SMALL_TRAM; $c[] = 0; $c[] = 0; $c[] = 4; $c[] = 0x00000001;
      $c[] = GRID_ITEM_SMALL_TRAM; $c[] = 0; $c[] = 0; $c[] = -4; $c[] = 0x00000010;
    }

    Ah und natürlich eigene Werte für $x $y $z einsetzen ;)

    2 Mal editiert, zuletzt von mediziner (2. Juni 2012 um 19:36)

    • Nächster offizieller Beitrag
    • Zitieren
  • Apfelchips
    Gast
    • 2. Juni 2012 um 19:27
    • #12

    Danke, mediziner!
    Die linke Seite kann nun angeschlossen werden, die rechte aber nicht.

    Was ich aber nicht verstehe: Laut eis_os' CIMInternals steuert man mit bei 0xDDCCBBAA mit DD Anschlüsse ans Metronetz — nicht aber an das der Tram. Warum funktioniert das dann trotzdem?

    Edit: 0x00000400 bzw. 0x00004000 funktioniert genauso gut — bzw. auf der rechten Seite genauso gut nicht. Naja. Wenn jetzt noch das mit dem Anschluss des rechten Gleisteils klappen würde … :)

    Edit 2: Für die korrekten Daten siehe Posting von mediziner weiter unten.

    3 Mal editiert, zuletzt von Apfelchips (2. Juni 2012 um 20:28)

    • Zitieren
  • mediziner
    Administrator
    Reaktionen
    2
    Beiträge
    1.924
    Filebase Einträge
    10
    Einträge
    4
    • 2. Juni 2012 um 19:35
    • Offizieller Beitrag
    • #13

    Ja stimmt. Hab das aus meinem S-Bahn Mod kopiert ;)
    Korrekt muss es so heissen:
    0x00000001;
    0x00000010;

    Mein fehler :whistling: Ich korrigiere das oben mal.
    eventuell bist du bei der einen Seite um ein Kästchen verrutscht?

    • Vorheriger offizieller Beitrag
    • Zitieren
  • Apfelchips
    Gast
    • 2. Juni 2012 um 20:25
    • #14

    So passt es — nochmals besten Dank!
    Ich war tatsächlich um ein Kästchen verrutscht. Werde das morgen mal alles gradebiegen und testen. Sieht aber schon relativ funktionsfähig aus. ;)

    Edit:
    Meine onPlace-Funktion sieht jetzt wie folgt aus — und sie funktioniert!

    PHP
    event this.onPlace::($c) {
    
    
      // Tracks left
      $c[] = GRID_ITEM_SMALL_TRAM; $c[] = -4; $c[] = 0; $c[] = 2; $c[] = 0x00000001;
      $c[] = "tram_small_basic"; $c[] = -4; $c[] = 0; $c[] = 2; $c[] = 0;
      $c[] = "tram_large_small_basic"; $c[] = 0; $c[] = 0; $c[] = 1; $c[] = 1;
    
      // Tracks center
      $c[] = "tram_large_basic"; $c[] = 10; $c[] = 0; $c[] = 1; $c[] = 0;
      $c[] = "tram_large_basic"; $c[] = 16; $c[] = 0; $c[] = 1; $c[] = 0;
      $c[] = "tram_large_basic"; $c[] = 22; $c[] = 0; $c[] = 1; $c[] = 0;
    
      // Tracks right
      $c[] = "tram_large_small_basic"; $c[] = 30; $c[] = 0; $c[] = 1; $c[] = 3;
      $c[] = "tram_small_basic"; $c[] = 40; $c[] = 0; $c[] = 2; $c[] = 0;
      $c[] = GRID_ITEM_SMALL_TRAM; $c[] = 40; $c[] = 0; $c[] = 2; $c[] = 0x00000010;
    }
    Alles anzeigen

    Im Spiel führt das dann zu folgender Darstellung (man beachte die Schienen, nicht den Bahnsteig):

    Einmal editiert, zuletzt von Apfelchips (3. Juni 2012 um 13:48)

    • Zitieren
  • CiM-player
    Schüler
    Beiträge
    119
    Filebase Einträge
    1
    • 3. Juni 2012 um 17:06
    • #15

    Die Idee finde ich grundsätzlich nicht schlecht, aber was bringt uns das? So müssen die Fahrgäste immer die Gleise überqueren und halten den Verkehr auf ?(

    • Zitieren
  • Apfelchips
    Gast
    • 3. Juni 2012 um 17:21
    • #16
    Zitat von CiM-player

    So müssen die Fahrgäste immer die Gleise überqueren und halten den Verkehr auf ?(

    Ist doch super: Eine neue Herausforderung. ;)

    Im Ernst: Ich baue diesen Hochbahnsteig für ein Vamos-Modell für CiM, mit welchem ich in Kürze starten werde. Der Vamos kann nur Hochbahnsteige anfahren (in der Realität dank ausklappbarer Trittstufen zwar nicht, aber das lässt sich ja leider noch nicht in CiM in Form eines Mods abbilden), die "normalen" Haltestellen aus dem Spiel passen daher (optisch) nicht.

    Und da der Vamos in Bielefeld fällt und ich Bielefeld ziemlich gut kenne, weiß ich, dass dort diese Art von Haltestellen durchaus üblich ist. Die Haltestelle aus dem Screenshot sollte in Form einer Insel zwischen zwei Straßen (in der Realität wohl eher zwischen zwei Spuren) platziert werden. Straßenbahnampeln, die ich zusammen mit dem Mod erstelle/erstell habe, sorgen (in der Realtiät) dafür, dass die Fußgänger ein Warnsignal erhalten, wenn die Straßenbahn "grün" hat. Ich bin mir aber sicher, dass es so etwas nicht nur in Bielefeld gibt. ;)

    Ich werde bald einen neuen Thread für diesen Mod aufmachen und dann später auch ausführlicher erläutern, was ich mir dabei gedacht habe — evtl. auch in Form eines Video-Tutorials.

    … Und für den Fall der Fälle gibt es dann auch noch eine Abwandlung des Hochbahnsteiges für den Straßenrand:


    Edit:
    Ich stehe leider vor einem neuen Problem: Wie auf dem Screenshot zu sehen ist liegen die Bahnsteige auf der Innenseite der Gleise. Da diese Gleisart ja zur "großen Straße" gehört, wo die Haltestelle außen platziert ist, öffnet sich nun auch bei mir die Tür auf der Außenseite — was natürlich nicht so sein sollte.
    Kann bestimmt werden, dass sich die Türen auf der Innenseite, also genau auf der anderen Seite, öffnen?

    Einmal editiert, zuletzt von Apfelchips (3. Juni 2012 um 19:06)

    • Zitieren
  • Tramffm
    Anfänger
    Beiträge
    21
    • 3. Juni 2012 um 22:39
    • #17

    Hallo,
    finde deine Haltestellen sehr schön und in CIM in neueren Zeiten (ab den 90er Jahren) realistischer, gerade auch bei Doppeltraktionen.

    • Zitieren
  • Apfelchips
    Gast
    • 3. Juni 2012 um 22:47
    • #18

    Dankeschön Tramffm!
    Natürlich werden noch Bänke, Papierkörbe und Überdachungen auf dem Bahnsteig platziert — das nur als Randbemerkung.

    Vorher muss ich allerdings noch das Problem mit der Türöffnung auf der richtigen Seite lösen. Ich habe mich da mal in der .script der unterirdischen Station der U-Bahn umgesehen, da dort ja die Türen auf der Innenseite geöffnet werden. Hilfreich war das allerdings leider nicht.

    Die Türsteuerung muss logisch gesehen ja von der Station selbst ausgehen.
    Im Worst-Case-Fall kann die Straßenbahn die Türen auch nur außen, also rechts öffnen, da es ja — wenn ich das richtig sehe — gar keinen Fall gibt, in dem sie links geöffnet werden müssten. Bei allen Kombinationsmöglichkeiten von Haltestellentyp und Straßentyp ist der Ausstieg immer rechts.

    Weiß jemand Rat in dieser Hinsicht? Lässt sich bei der Tram die Seite des EInstiegs/Ausstiegs beeinflussen?

    • Zitieren
  • Tutendorf
    Schüler
    Beiträge
    116
    • 3. Juni 2012 um 22:52
    • #19
    Zitat von Apfelchips

    Bei allen Kombinationsmöglichkeiten von Haltestellentyp und Straßentyp ist der Ausstieg immer rechts.


    Bei der U-Bahn ist es nicht so, wenn du da die U-Bahn auf das (von der Fahrtrichtung aus gesehene)linke Haltestellengleis fahren lässt und es an der Station ankommt, öffnen sich auch die Türen links, ist mir mal so nebenbei aufgefallen.
    Müsste man nur gucken, ob sich das auch auf die Tram-Haltestellen bzw. Trams übertragen lässt.

    Gruß TD
    _______________________________________________________________________________

    Aktuelles (bald abgegebenes) Projekt:
    Hunting; die kleine feine Stadt + Region - klich mich

    Ich wohne an meinem PC; wo der steht, ist die andere Frage :P 8)
    Und was ich mache? Ihn quälen! :whistling:

    • Zitieren
  • Apfelchips
    Gast
    • 3. Juni 2012 um 23:01
    • #20
    Zitat von Tutendorf

    Bei der U-Bahn ist es nicht so, wenn du da die U-Bahn auf das (von der Fahrtrichtung aus gesehene)linke Haltestellengleis fahren lässt und es an der Station ankommt, öffnen sich auch die Türen links, ist mir mal so nebenbei aufgefallen.

    Stimmt! Bei der U-Bahn ist also bei allen Haltestellentypen die Öffnung der linken oder rechten Türen möglich.
    Ich werde mir mal anschauen, ob ich doch noch etwas Nützliches in dieser Hinsicht finde.

    Denn es wäre wirklich schade, wenn dieser Mod an dem Öffnen der richtigen Türen scheitern würde …
    Wenn in der Zwischenzeit jemand Ideen hat, möge er sich bitte melden. Auch im Interesse des Kollektivs. :)

    • Zitieren

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Twitch

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™