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
(L.L.IBIS_Route) 0 = !
(L.L.IBIS_LinieKurs) (L.L.AFR_Leerfahrtlinie) = ||
{if}
(L.L.ticketprinter_reset)
{if}
(M.L.Ticketprinter-Reset)
{endif}
(L.L.AFR_Zone_calc)
{if}
(M.L.Ticketprinter_zone_calculate)
{endif}
(L.L.AFR_Preis_calc)
{if}
(M.L.Ticketprinter_preis_calculate)
{endif}
{endif}
Alles anzeigen
Macros:
{macro:Ticketprinter-Reset}
0 (S.L.ticketprinter_reset)
(L.L.AFR_Verkauf_Mode) 0 =
{if}
0 (S.L.ticketprinter_ticket_preselection)
{else}
(L.L.AFR_Verkauf_Mode) 1 =
{if}
0 (S.L.zielcode_input_count)
' #### Errechnung der Starthaltestelle & -Zone ####
(L.L.IBIS_LinieKurs) 100 * (L.L.IBIS_Route) +
(M.V.GetRouteIndex)
(L.L.IBIS_busstop)
(M.V.GetRouteBusstopIdent)
(M.V.GetBusstopIndex) s0
l0 4 (M.V.GetBusstopString) (S.$.AFR_Startcode_String)
l0 5 (M.V.GetBusstopString) (S.$.AFR_Startzone_String)
' Auf Zonengrenze Prüfen & Zielcodes/Zonen speichern
(L.$.AFR_Startcode_String) 1 $SetLengthL "#" $=
{if}
(L.$.AFR_Startcode_String) 1 $cutBegin 4 $SetLengthL $StrToFloat (S.L.AFR_Startcode)
(L.$.AFR_Startcode_String) 4 $SetLengthR $StrToFloat (S.L.AFR_Startcode2)
(L.$.AFR_Startzone_String) 4 $SetLengthL $StrToFloat (S.L.AFR_Startzone)
(L.$.AFR_Startzone_String) 4 $SetLengthR $StrToFloat (S.L.AFR_Startzone2)
{else}
(L.$.AFR_Startcode_String) $StrToFloat (S.L.AFR_Startcode) (S.L.AFR_Startcode2)
(L.$.AFR_Startzone_String) $StrToFloat (S.L.AFR_Startzone) (S.L.AFR_Startzone2)
{endif}
' #### Errechnung der Linienendhaltestelle & -Zone ####
(L.L.IBIS_LinieKurs) 100 * (L.L.IBIS_Route) +
(M.V.GetRouteIndex) (S.L.AFR_Testvar)
(M.V.GetBusstopCount) 1 - (S.L.AFR_Testvar2)
(M.V.GetRouteBusstopIdent) (S.$.AFR_Teststring) (M.V.GetBusstopIndex) s0
l0 4 (M.V.GetBusstopString) (S.$.AFR_Linienzielcode_String)
l0 5 (M.V.GetBusstopString) (S.$.AFR_Linienzielzone_String)
' Auf Zonengrenze Prüfen & Zielcodes/Zonen speichern
(L.$.AFR_Zielcode_String) 1 $SetLengthL "#" $=
{if}
(L.$.AFR_Linienzielcode_String) 1 $cutBegin 4 $SetLengthL $StrToFloat (S.L.AFR_Linienzielcode)
(L.$.AFR_Linienzielcode_String) 4 $SetLengthR $StrToFloat (S.L.AFR_Linienzielcode2)
(L.$.AFR_Linienzielzone_String) 4 $SetLengthL $StrToFloat (S.L.AFR_Linienzielzone)
(L.$.AFR_Linienzielzone_String) 4 $SetLengthR $StrToFloat (S.L.AFR_Linienzielzone2)
{else}
(L.$.AFR_Linienzielcode_String) $StrToFloat (S.L.AFR_Linienzielcode) (S.L.AFR_Linienzielcode2)
(L.$.AFR_Linienzielzone_String) $StrToFloat (S.L.AFR_Linienzielzone) (S.L.AFR_Linienzielzone2)
{endif}
1 (S.L.AFR_Zone_calc)
{else}
{endif}
{endif}
{end}
{macro:Ticketprinter_zone_calculate}
(L.L.AFR_Verkauf_Mode) 0 =
{if}
{else}
(L.L.AFR_Verkauf_Mode) 1 =
{if}
' #### Verkaufsberechnungen ####
' Prüfen, ob Eingabe erfolgt
(L.L.zielcode_input_count) 0 <=
{if}
(L.L.AFR_Linienzielcode) (S.L.AFR_Zielcode)
(L.L.AFR_Linienzielcode2) (S.L.AFR_Zielcode2)
(L.L.AFR_Linienzielzone) (S.L.AFR_Zielzone)
(L.L.AFR_Linienzielzone2) (S.L.AFR_Zielzone2)
1 (S.L.AFR_Zielcode_valid)
{else}
' Zielzone Auslesen
(L.L.zielcode_input) (S.L.AFR_Zielcode) (S.L.AFR_Zielcode2)
(L.L.AFR_Zielcode) $IntToStr (M.V.GetBusstopIndex) s0
l0 0 <
{if}
0 (S.L.AFR_Zielcode_valid)
{else}
l0 1 (M.V.GetBusstopString) $StrToFloat (S.L.AFR_Zielzone) (S.L.AFR_Zielzone2)
1 (S.L.AFR_Zielcode_valid)
{endif}
{endif}
' Zonenanzahl Prüfen
(L.L.AFR_Zielcode_valid)
{if}
(L.L.AFR_Startzone) (L.L.AFR_Zielzone) =
(L.L.AFR_Startzone2) (L.L.AFR_Zielzone) = ||
(L.L.AFR_Startzone) (L.L.AFR_Zielzone2) = ||
(L.L.AFR_Startzone2) (L.L.AFR_Zielzone2) = ||
{if}
1 (S.L.AFR_Tarif)
{else}
0 (S.L.AFR_Tarif)
{endif}
1 (S.L.AFR_Preis_calc)
{else}
(T.L.ev_IBIS_pieperror)
1 (S.L.ticketprinter_reset)
{endif}
' Prüfen, welche Zielhaltestelle verwendet werden soll
(L.L.AFR_Startzone) (L.L.AFR_Zielzone2) =
(L.L.AFR_Startzone2) (L.L.AFR_Zielzone2) = ||
{if}
1 (S.L.AFR_Doppelzone_Mode)
{else}
0 (S.L.AFR_Doppelzone_Mode)
{endif}
{else}
{endif}
{endif}
0 (S.L.ticketprinter_resettimer)
{end}
{macro:Ticketprinter_preis_calculate}
(L.L.AFR_Tarif) (S.L.ticketprinter_ticket_preselection)
0 (S.L.ticketprinter_resettimer)
{end}
Alles anzeigen
Und hier die Hofdatei:
Diese Datei wurde mit der HOF Suite von Rumpelhans geschrieben.
This file was written with HOF Suite by Rumpelhans.
*****************************************
* H O F F i l e p r o p e r t i e s *
*****************************************
[name]
Grundorf
[servicetrip]
Betriebsfahrt
[global_strings]
6
Grundorf
Grundorf
4
stringcount_terminus
26
stringcount_busstop
9
*****************
* T e r m i n i *
*****************
[addterminus_list]
{ALLEX} 0 Empty LEERFELD Blanko.tga Leerfeld
{ALLEX} 13 Betriebsfahrt BETRIEBSFAHRT BETRIEBSFAHRT BETRIEBSFAHRT Betriebsfahrt.tga Betriebsfahrt
{ALLEX} 206 Schulbus SCHULBUS SCHULBUS SCHULBUS Schulbus.tga Schulbus
102 Saganoallee SAGANOALLEE SAGANOALLEE SAGANOALLEE Gru_Saganoallee.tga Saganoallee
103 Thalesstr THALESSTRASSE THALESSTRASSE - FERNSEHTURM - THALESSTRASSE Gru_Thalesstr.tga Thalesstraße
104 Bhf Newtondorf BHF. NEWTONDORF BAHNHOF NEWTONDORF BHF. NEWTONDORF Gru_Bhf Newtondorf.tga Bhf. Newtondorf
105 Krankenhaus KRANKENHAUS EINSTEINDORF KRANKENHAUS KRANKENHAUS Gru_Krankenhaus.tga E.-Dorf Krankenhaus
106 Niemastr NIEMASTRASSE ARCHIMEDESDORF NIEMASTR. NIEMASTR. Gru_Niemastr.tga Arch.-Dorf Niemastr.
107 Bauernhof BAUERNHOF NORDSPITZE BAUERNHOF NORDSP. BAUERNH. Gru_Bauernhof.tga Nordsp. Bauernhof
108 Nordspitze BHF. NORDSPITZE BAHNHOF NORDSPITZE BHF. NORDSPITZE Gru_Bhf Nordspitze.tga Bhf. Nordspitze
109 Newtondorf NEWTONDORF NEWTONDORF A.-EINSTEIN-STR. NEWTOND. A.E.STR Gru_Newtondorf.tga Albert-Einstein-Str.
110 Fallatuwasistr FALLATUWASISTR. PLATONDORF FALLATUWASISTR. PLATOND. F.-STR. Gru_Fallatuwasistr.tga Fallatuwasistraße
111 Curiedorf BHF. CURIEDORF BAHNHOF CURIEDORF BHF. CURIEDORF Gru_Bhf Curiedorf.tga Bhf. Curiedorf
112 Loeptener Str LÖPTENER STRASSE PYTHAGORASDORF LÖPTENER STR. PYTH-D. LÖP-STR. Gru_Loeptener Str.tga Pyth.D. Löptener Str
113 Flugplatz FLUGPLATZ FLUGPLATZ GRUNDORF FLUGPLATZ Gru_Flugplatz.tga Flugplatz Grundorf
114 Krummelstr KRUMMELSTRASSE BERNERDORF KRUMMELSTRASSE BERNERD. K.-STR. Gru_Krummelstr.tga Bernerd. Krummelstr. ................
{ALLEX} 29 Betriebsfahrt GRUNDORFER VB. GRUNDORFER VERKEHRSBETRIEBE GRUNDORFER VB. Blanko.tga Grundorfer VB. grundorfer_vb.bmp
{ALLEX} 28 Betriebsfahrt JANINEJANINE JANINEJANINE JANINEJANINE JANINEJANINE Blanko.tga JanineJanineJanine jani.bmp
{ALLEX} 49 Fahrschule FAHRSCHULE FAHRSCHULE FAHRSCHULE Fahrschule.tga Fahrschule
1001 Tutorial Blanko.tga 2_Tutorial.bmp
[end]
*******************
* B u s s t o p s *
*******************
[addbusstop_list]
Bauernhof NORDS. BAUERNHOF Nordspitze Bauernhof Nordsp. Bauernhof 27 2
Nordspitze NORDSPITZE BHF. Nordspitze Bahnhof Bhf. Nordspitze 26 2
Elsterplatz ELSTERPLATZ Elsterplatz Elsterplatz #0015_0025 0001_0002
Gaussdorf GAUSSDORF Gaussdorf Gaussdorf #0014_0024 0001_0002
Einsteindorf Ausbau E.DORF AUSBAU Einsteindorf Ausbau Einsteindorf Ausbau 13 1
Einsteindorf Marktpl E.DORF MARKTPL. Einsteindorf Marktplatz E.-dorf Marktplatz 12 1
Krankenhaus E.DORF KRK.HAUS Einsteindorf Krankenhaus E.-dorf Krkhaus 11 1
1 Zone A 1
2 Zone B 2
11 Einst. Krankenhaus 1
12 Einst. Marktplatz 1
13 Einst. Ausbau 1
14 Gaussdorf Zone A 1
15 Elsterplatz Zone A 1
24 Gaussdorf Zone B 2
25 Elsterplatz Zone B 2
26 Nordspitze Bhf. 2
27 Nordsp. Bauernhof 2
#AFR-Options Template Name des VB Art der HST-Fortschaltung Verkaufsmodus werden Suffixe verwendet? Ansagen aktiv? Ansagenverzoegerung?
#AFR-Options VB Grundorf 1 1 1 1 1
#AFR-Codes Template Besonderes Suffix (s. Readme) Leerfahrt-Linie
#AFR-Codes 7107900 999
Haltestellentemplate Name IBIS1 Innenanz1 Innenanz2 Ibis2 Zielcode Zone
[end]
===============================================================================
76:
===============================================================================
Bauernhof - Krankenhaus
-----------------------------------
[infosystem_trip]
7601
BAUERNHOF-KRANKENHAUS
105
TML
................
[infosystem_busstop_list]
7
Bauernhof
Nordspitze
Elsterplatz
Gaussdorf
Einsteindorf Ausbau
Einsteindorf Marktpl
Krankenhaus
Krankenhaus - Bauernhof
-----------------------------------
[infosystem_trip]
7602
KRANKENHAUS-BAUERNHOF
107
76
................
[infosystem_busstop_list]
6
Krankenhaus
Einsteindorf Ausbau
Gaussdorf
Elsterplatz
Nordspitze
Bauernhof
Bauernhof - Krankenhaus
-----------------------------------
[infosystem_trip]
9907601
BAUERNHOF-KRANKENHAUS
105
TML
................
[infosystem_busstop_list]
7
50
275
260
160
325
140
70
Krankenhaus - Bauernhof
-----------------------------------
[infosystem_trip]
9907602
KRANKENHAUS-BAUERNHOF
107
76
................
[infosystem_busstop_list]
6
50
150
370
180
200
350
Alles anzeigen
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