Zonensystem für Ticketverkauf

Willkommen in der OMSI-WebDisk!
Als Gast kannst du nur Inhalte in deiner ausgewählten Sprache sehen. Registrierte Nutzer können die Sichtbarkeit anderer Sprachen in ihrem Kontrollzentrum aktivieren, weitere Infos hier.
Alle Themen sind in den Foren mit einer Sprachflagge gekennzeichnet: = Englisch [EN], = Deutsch [DE], = Französisch [FR]. Wenn du die angegebene Sprache nicht beherrschst, schreibe auf Englisch!
  • Hallo,

    neben den kleinen Scriptänderungen bin ich aktuell an etwas komplexerem Code für ein Zonensystem für den AFR200, welcher aber im Groben und ganzen mit einem Standard-Ibis-Script arbeitet.


    Grundsätzlich soll das so Funktionieren:

    - Wenn keine Route aktiv ist, gibt es keinen Ticketverkauf (die Berechnungen lösen in dem Fall Bereichsprüfungsfehler aus, von daher blieb mir nichts anderes übrig, ist aber auch realistisch).

    - Es gilt nicht Zielcode = Zone, wie man es aus dem GSÜH kennt, sondern viele Zielcodes sind einer Zone untergeordner (diese können aber theoretisch auch identisch sein, wenn man es so will).

    - Standardmäßig wird der Zielcode der letzten Haltestelle (im Script "Linienzielcode" genannt)

    - Das Script liest jeweils den Start- und Zielzielcode auus und prüft, ob diese in der gleichen Zone liegen (=Kurzstrecke) oder nicht (=normaler Fahrschein).

    - Um Änderungen an den Routen zu vermeiden ist es möglich, Haltestellen als "Zonengrenze" zu markieren, diese haben dann 2 Zielcodes für entsprechend 2 verschiedene Zonen.

    - Die Angabe in der Hofdatei erfolgt in String 4 (Zielcode) und 5 (Zone), dort wird entweder einfach der Zielcode/die Zone eingetragen, oder man trägt z.B. "#0011_0021" in Zielcode und "0001_0002" in Zielzone ein, das wäre dann die Zonengrenze. Das Script soll dann beide Zonen verarbeiten und jeweils alle möglichen Kombinationen abgleichen.

    - Für die Zielcodeeingabe benötigt außerdem jeder Zielcode einen eigenen Haltestelleneintrag, welcher als Ident den Zielcode, String 0 den Namen und String 1 die Zone enthält.


    Testen tue ich das ganze auf Grundorf mit diesem Konzept:


    Was bisher funktioniert (oder auch nicht):

    - Das Script erkennt die Route und Haltestellenanzahl korrekt

    - Daraus errechnet das Spiel die Startzielcodes korrekt

    - Bei den Linienzielcodes ist OMSI sehr Zickig. mit Route 7601 erkennt er gar keinen Linienzielcode, in die Rückroute erkennt er diesen nur auf den ersten Haltestellen, obwohl sich an dessen Berechnung im Verlauf der Route nichts ändern sollte. Ich konnte bereits herausfinden, dass es scheinbar am Macro "GetRouteBusstopIdent" bzw. der Berechnung drumherum liegt, da der String nach diesem teilw. komische Zahlen statt dem Haltestellennamen anzeigt. Diese könnten von einer der "Tachorouten", welche den Code 9907601 bzw. 9907602 hat und anstelle der HST-Namen die Distanzen enthalten hat, kommen, was mich aber wundert, weil das Script ja vor der Abfrage den Routenindex extra neu berechnet.

    - Irgendwo wirft das Script einen Bereichsprüfungsfehler aus, dieser wird aber nicht in die Logfile gespamt, sondern nur 2-3 Zeilen und ist dann wieder weg.


    Hier alle relevanten Scriptteile, bei Beadrf kann ich auch das gesamte AFR200-Script hochladen (hab bereits eine Erlaubnis von Protinus).


    Frame:

    Die Variable für den Reset wird z.B. bei der HST.-Fortschaltung oder einer neuen Routeneingabe aktiviert. Die Varibale "AFR_Verkauf_Mode" bestimmt die Art des Ticketverkaufs, 1=Zonensystem


    Macros:


    Und hier die Hofdatei:


    Konkrete Ideen, wo der Fehler liegt:

    Mir ist unklar, warum beim Linienzielcode der Routenindex der Tachoroute statt dem der normalen Route aufgerufen wird, das konnte ich mithilfe von einer "Debuganzeige" im Ticketdrucker herausfinden.

    EDIT: Ich musste eben Feststellen, dass der Routenindex für Fahrt 7601 korrekt mit "0" erkannt wird, dennoch wird als "Busstopident" die Endhaltestelle der Route 9907601 angegeben. Ich bin verwirrt....


    Über Hilfe würde ich mich freuen!

    LG Niklas