Fahrscheinverkauf

  • Der Fahrscheinverkauf gliedert sich in drei Bereiche:
    - Anlegen eines Tarif-Systems
    - Konfiguration der Karte im MapEditor
    - Konfiguration und Programmierung für das Fahrzeug

    1 Anlegen eines Tarif-Systems

    Neue Tarifsysteme werden im ContentTool angelegt. Dafür auf "Zus. Karten-Content" klicken und dort auf "Tarifsysteme".



    Zunächst können oben ein paar allgemeine Einstellungen vorgenommen werden: Ein Klarname, die Anzahl der Haltestellen, die unter Verwendung der Kurzstrecke erlaubt sind, sowie wie hoch die generelle Wahrscheinlichkeit ist, dass die Fahrgäste Fahrscheine kaufen möchten.


    Als nächstes können sowohl die verfügbaren Tarifzonen als auch die verfügbaren Fahrscheine definiert werden.


    Tarifzonen verfügen momentan nur über die Eigenschaft "Name".


    Fahrscheine verfügen über die folgenden Eigenschaften:


    • Wert: So viel kostet dieser Fahrschein
    • Mindest- und Höchstalter
    • Kaufwahrscheinlichkeit: Hierbei handelt es sich um eine Wichtung, d.h. es handelt sich nicht um Wahrscheinlichkeits-Prozente, sondern die Wahrscheinlichkeit für den Kauf des Tickets wird relativ zu den Wichtungen der anderen (verfügbaren) Tickets berechnet.
    • Fahrscheintyp/Gültigkeitsbereich/Zusatz: Gültigkeits"charakter" des Fahrscheins. "keine Zone" bedeutet hierbei, dass der Fahrschein-Typ unabhängig von einer Tarifzone ist, z.B. bei einer Kurzstrecke. Die Auswahl unter "Gültigkeitsbereich" ist somit irrelevant.

    2 Konfigurieren der Map

    Entrypoints

    Damit der eigene Bus mit dem korrekten Tarifsystem ausgestattet wird (verfügbare Fahrscheine usw.), muss für jeden Entrypoint eingestellt werden, welches Tarifsystem für ein dort platziertes Fahrzeug ausgewählt werden. Hiervon hängt ab, welche Fahrscheine verfügbar sind und wie z.B. der Drucker repainted werden soll.


    Hierfür muss links unter "Allg. Konfiguration" und "Entrypoints" oben der entsprechende Entrypoint und dann eines der installierten/erstellten Tarifsysteme ausgewählt werden:



    2.1 Stationen

    Damit die Fahrgäste wissen, dass und welche Tickets sie kaufen sollen, müssen die Stationen entsprechend konfiguriert werden. Hierzu ist das Eigenschaftsfenster der zu konfigurierenden Station aufzurufen:


    • Zunächst muss für die Station angegeben werden, zu welchem Tarifsystem sie gehört (oben).
    • Zusätzlich sollte die Station einer Tarifzone zugewiesen werden. Dies wird später für etwaige konkrete Berechnungen der passenden Fahrscheinbestellungen benötigt. Momentan ist diese Einstellung aber noch nicht relevant.
    • Nun sind nacheinander alle Gleise/Haltestellen auszuwählen und einzustellen, welche Fahrscheine dort seitens der Fahrgäste gekauft werden:
      • Unten rechts befindet sich eine Liste sämtlicher Fahrscheine des Tarifsystems. Mittels der Pfeil-Schaltflächen können der Listen "Plausible Fahrscheine" und "Zu den Zielen passende Fahrscheine" Fahrscheine hinzugefügt oder entfernt werden.
      • Plausible Fahrscheine sind jene Fahrscheine, die von Fahrgästen dort auch gekauft werden, z.B. müssen Ort der Haltestelle und Tarifzone zusammen passen. Mit "C" und "V" können die plausiblen Fahrscheine kopiert und bei anderen Stationen/Haltestellen/Gleisen eingefügt werden.
      • In der Liste "Zu den Zielen passende Fahrscheine" kann jedem der "Standardziele" ein oder mehrere Fahrscheine zugeordnet werden. In LOTUS können dann die Fahrgäste auch Fahrscheine bestellen, in dem sie ein solches "Standardziel" bestellen ("Bitte eine Fahrkarte zum Flughafen!").

    3 Fahrzeug

    3.1 Fahrzeug konfigurieren

    Für den Fahrscheinverkauf müssen zwei Modul-Slots mit fest vorgegebenen Daten angelegt werden, nämlich jeweils einer für das vom Fahrgast und einer für das vom Fahrer gegebene Geld.


    Die Eigenschaften müssen wie folgt sein:

    • Der Name der Modulklasse muss jeweils "MONEY_GIVEN" bzw. "MONEY_CHANGE" lauten
    • Die Position entspricht dem Mittelpunkt der Fläche, wo sich das Geld befinden soll. Die Z-Koordinate sollte leicht angehoben sein (ca. 5mm)
    • Der Haken "unsichtbar" sollte gesetzt werden
    • Lichtraum und Animation wie üblich einstellen
    • kein Standard-Modul auswählen!

    In den Objekteigenschaften gibt es außerdem die Möglichkeit, jeweils die Varianz einzustellen, damit die Münzen nicht immer exakt auf dieselbe Stelle fallen.


    Außerdem muss beim entsprechenden Pfadpunkt, wo die Fahrgäste beim Fahrscheinverkauf stehen sollen, in den Pfadeigenschaften der Haken bei "Hier findet der Fahrkartenverkauf statt" gesetzt werden.

    4 Script

    Ein großer Anteil der Ausstattung eines Fahrzeuges mit einer Verkaufsmöglichkeit erfolgt "leider" per Script, wobei zu beachten ist, dass sich die Scriptblöcke primär in den Modulen für den Drucker und den Wechsler befinden.

    4.1 Ticket Code

    Wichtig ist in diesem Zusammenhang die Bedeutung des "Ticket Code": hierbei sind die drei Fahrscheinkriterien Fahrscheintyp/Gültigkeitsbereich/Zusatz in einer Zahl, dem Ticket-Code kodiert: ZTTTGGG, wobei die einzelnen Buchstaben für die jeweiligen Kriterien stehen. Hierbei ist der Listenindex des jeweiligen Kriteriums einzusetzen (so, wie er im ContentTool zu sehen ist, nullbasiert gezählt). Somit hat also eine ermäßigte Tageskarte für 7 Waben die Kodierung 1002011.

    4.2 Fahrschein-Herausgabe

    Damit ein beliebiges Modul oder das eigentliche Fahrzeug LOTUS mitteilen kann, welcher Fahrschein "präsentiert" werden soll (damit der User ihn nehmen kann), wird seitens des Moduls/Fahrzeuges der Broadcast "SetTicket" in der BusId "TICKET" mit dem gewünschten Ticket-Code gesendet.


    LOTUS seinerseits sendet den Broadcast "RemoveTicket" in derselben BusId, wenn der Fahrgast das Ticket genommen hat, damit das Ticket auch optisch vom Fahrzeug/Modul entfernt werden kann.


    Für die Druckerbedienung gibt es außerdem folgende Script-Prozeduren:

    • procedure FareSystemGetContentID(self: integer; var user, sub: integer);') – Ermittelt die ContentID des Tarifsystems, welches beim Platzieren des Fahrzeuges diesem zugewiesen wurde (über die Entrypoint-Eigenschaften)
    • function FareGetValue(self: integer; fareCode: integer): single; – ermittelt den Wert des mit "fareCode" kodierten Fahrscheins, z.B. um den Geldbetrag auf dem Display anzuzeigen, wenn man einen Fahrschein ausgewählt hat

    4.3 Geld

    Um dem Fahrgast (Wechsel-)Geld zu "geben", schickt man einen Single-Broadcast ebenfalls auf BusId "TICKET" mit dem Namen "AddChangeMoney", wobei man als Wert den Wert der Münze sendet.


    LOTUS seinerseits sendet die folgenden Integer-Broadcasts, ebenfalls auf der BusId "TICKET", mit denen insbesondere die entsprechenden Sounds abgespielt werden können:

    • "MoneyGiven": Der Fahrgast hat sein Geld auf den Zahltisch gelegt
    • "RemoveGivenCoin": Der User hat durch Anklicken einer vom Fahrgast hingelegten Münze diese weggenommen (z.B. in den Galoppwechsler)
    • "RemoveChangeCoin": Der User hat durch Anklicken einer vom User ausgeworfenen Münze diese wieder zurückgenommen

    4.4 Individualisierung des Fahrscheindruckers

    Mittels ein paar neuer Möglichkeiten lässt sich der Fahrscheindrucker in hohem Maße an das Tarifsystem anpassen. Im Falle des Almex-Druckers gibt es hierbei zwei entscheidende Punkte:

    • Die Zuordnung und Beschriftung der Tasten mit konkreten Fahrscheinen und
    • die Fahrschein-Namen, wie sie im Display erscheinen sollen.

    Die Vorgehensweise wird hier am Beispiel des Almex-Druckers und des Tarifsystems "Berlin 2022" erläutert. Hierzu wird der Drucker erstmal mit einer Blanko-Textur ausgeliefert: Drucker_Almex_Blanco.bmp & Drucker_Almex_Blanco_alpha.bmp. Außerdem wird die entsprechende individualisierte Textur importiert und die ContentID notiert (1000:186513005): Drucker_Almex.bmp.


    Nun wird im Export-Ordner eine Textdatei angelegt, welche die individuellen Konfigurationsdaten für die spezielle Verbindung "Almex-Drucker" + "Berlin 2022" enthält. Diese erhält den Dateinamen "#4000#FareForAlmex_Berlin_2022.txt". Wichtig ist hierbei, dass zwar der Anfang korrekt sein muss – 4000 ist die ContentSubID dieser Textdatei (die ist nachher aber unwichtig) – aber ansonsten völlig egal ist, wie sie benannt ist. Importiert wird sie dann mittels der Funktion "Text File" im ContentTool.


    Aufgebaut ist sie so:


    Wichtig: Der Aufbau der Textdatei kann vom Fahrscheindrucker-Entwickler völlig beliebig definiert werden! Obwohl die erste Zeile eine Sonderrolle spielt, gilt diese "Freiheit" für sämtliche Zeilen!


    Die erste Zeile ist im Falle des Almex-Druckers so aufgebaut: [UserID:SubID#ALMEX], wobei sich UserID und SubID auf das Tarifsystem beziehen, auf welches das Fahrzeug aktuell konfiguriert ist. Sehr wichtig ist diese erste Zeile deshalb, weil sie die Möglichkeit bietet, seitens des Scripts heraus eine derartige Textdatei zu finden. Denn im Script finden sich folgende Zeilen:

    Code
    1. FareSystemGetContentID(Self, user, sub);
    2. TextFileGetContentIDByTag(IntToStr(user) + ':' + IntToStr(sub) + '#ALMEX', FContentIDUserFareText, FContentIDSubFareText);

    Im ersten Schritt wird ermittelt, welches Tarifsystem dem Fahrzeug aktuell zugewiesen ist und die Werte in user und sub geschrieben.

    Im Anschluss wird die ContentID der Textdatei ermittelt, welche hier "passt". Hierzu wird die erste Zeile "zusammengebaut" und werden mit dem Befehl User- und SubID ermittelt. LOTUS verwendet dabei diesen zusammengebauten String und vergleicht ihn jeweils mit der ersten Zeile aller vorhandenen Textdateien (keine Angst, hierfür werden nicht alle Textdateien extra geladen! ;-) ).


    Wenn im Beispiel das "Berlin 2022"-Tarifsystem ausgewählt ist, dann werden über die erste Zeile user = 1000 und sub = 893584872 ermittelt. Daraus wird dann der String "1000:893584872#ALMEX" zusammengebaut – und voilà: Bei der Suche wird er eben jene Textdatei finden, die wir gerade erstellt haben, und die beiden Teile der ContentID schreiben.


    Ist dies soweit vorbereitet, lässt sich der Inhalt der Textdatei zeilenweise lesen. Hierfür gibt es die folgende Funktion:


    function TextFileGetLine(contentUserID, contentSubID: integer; line: integer): string;


    Wir haben nun also die Möglichkeit, per Script abhängig vom eingestellten Tarifsystem auf eine beliebige Textdatei beliebig zuzugreifen, wobei diese sowohl individuell auf das Gerät als auch das Tarifsystem gestaltet werden kann.


    Die folgende Struktur ist (ebenfalls) beliebig gewählt; insofern ist die Struktur der Datei nur insofern interessant, wenn man entweder den Fahrscheindrucker auf ein anderes Tarifsystem anpassen möchte, oder einfach als Inspiration, wie die Struktur aussehen könnte.


    Der ersten Zeile folgen die UserID und die SubID der Tauschtextur, damit die Tasten entsprechend beschriftet werden. Es folgen dann eine Leerzeile und dann immer paarweise Displaytext und Ticket-Code der jeweiligen Taste. Da mittels "Umschalt" drei Ebenen durchgeschaltet werden können, gibt es drei Blöcke mit jeweils zwölf Doppelzeilen, getrennt durch jeweils zwei Leerzeilen.