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

  • 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?

  • 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...

  • 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 …

  • 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

  • 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?

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


    environment.script


    [Objekt].script


    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?

  • 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:


    tram_trafficlight_* sind dabei eigene Objekte.


    So sieht der Anschlussversuch aus:

  • 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 ;)

  • 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.

  • 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!


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

  • 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?

  • 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?

  • 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.

  • 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. :)

Jetzt mitmachen!

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