Standardisiertes Schema beim Umgang mit Sonderansagen
Ein kleines Tutorial zur Implementierung von Sonderansagen in der ANNOUCEMENT-Klasse.
Es wurde gemeinsam ein Konzept entwickelt, um die **Sonderansagen** mit in der **'ANNOUNCEMENT' - Klasse** auszuliefern. Dies soll primär dazu dienen, dass **alle IBIS Geräte mit der gleichen** [[1]]-Datei die gleichen Sonderansagen abspielen können, ohne dass für jedes IBIS eine neue spezielle [[2]] angelegt werden muss. Diese Informationen werden **innerhalb der Zusatz-Strings** vermerkt.
[https://www.lotus-simulator.de/index.php?attachment/18172-screenshot-28988jvb-png/ "screenshot_28988jvb.png"]
Hierfür gilt folgendes:
Das ganze wird im INI-Format verfasst. Hierbei werden **Blöcke mit den jeweiligen Daten** gebildet. Dieser startet immer mit
`[SpecialAnnouncement]`. Darauf folgt dann der Aufbau, der im unten stehenden Spoiler zu erkennen ist. Anschließend **folgt eine Leerzeile und der nächste Block beginnt.**
Du kannst auch Kommentare in jeder Zeile einleiten. Dies funktioniert wie folgt:
`; Kommentar`
Zudem existiert ebenfalls die Möglichkeit eine Sektion als `[SpecialAnnouncementDefaults]` zu deklarieren. Hier kann man generell geltende Werte der oben stehenden Tabelle festlegen.
Hier nochmal ein konkretes Beispiel vom Aufbau von 2 Blöcken und dem Default-Block:
Code: Aufbau
1. [[4]]; Global geltende Werte 2. [[5]][SpecialAnnouncementDefaults] 3. [[6]]ContentUserID=5750029 4. [[7]] 5. [[8]]; Erste Sonderansage 6. [[9]][SpecialAnnouncement] 7. [[10]]EventID=7 8. [[11]]Text="Aus Lichtschranke treten" 9. [[12]]ContentSubID=13001 10. [[13]]Code=753 11. [[14]]Target=0 12. [[15]] 13. [[16]]; Zweite Sonderansage 14. [[17]][SpecialAnnouncement] 15. [[18]]EventID=9 16. [[19]]Text="Ausbildungsfahrt, nicht einsteigen" 17. [[20]]; Abweichende CUID 18. [[21]]ContentUserID=5750030 19. [[22]]ContentSubID=13002 20. [[23]]Code=42 21. [[24]]Target=1
Alles anzeigen
Bild dazu
[https://www.lotus-simulator.de/index.php?attachment/18173-screenshot-290vekjr-png/ "screenshot_290vekjr.png"]
Freundlicherweise wurde von Teneberus ein fertiges Script zur Verfügung gestellt, um die Elemente der Liste auszulesen und in einem Array zu speichern (Skript ist im Anhang zu finden). Dieses Script sollte **1:1 in den Code eingelesen werden.** Anschließend sind die Inhalte eines SpecialAnnouncement-Elements mit folgenden Variabeln aufrufbar:
Zu erwartender Inhalt ---|---|--- SpecialAnnouncement[0].EventID | integer |
7
SpecialAnnouncement[0].Text | string | Aus Lichtschranke treten SpecialAnnouncement[0].ContentUserID | integer | 0 (Weil nicht definiert, stattdessen sollte die Default abgefragt werden) SpecialAnnouncementDefaults.ContentUserID | integer | 5750029 SpecialAnnouncement[0].ContentSubID | integer | 13001 SpecialAnnouncement[0].Code | integer | 753 SpecialAnnouncement[0].Target | integer | 0 SpecialAnnouncement[1].EventID | integer | 9 SpecialAnnouncement[1].Text | string | Ausbildungsfahrt, nicht einsteigen SpecialAnnouncement[1].ContentUserID | integer | 5750030 SpecialAnnouncement[1].ContentSubID | integer | 13002 SpecialAnnouncement[1].Code | integer | 42 SpecialAnnouncement[1].Target | integer | 1 |
Vergiss nicht: der Array-Index fängt immer bei 0 an. Also der erste Eintrag ist immer mit [0] aufrufbar, der zweite mit [1], usw.
- Was passiert, wenn ich was falsch mache?** ****
Prinzipiell ist der Parser von Teneberus gut geschrieben. Also wenn du nach einem Element vergisst ihm einen Wert zuzuweisen, z.B. `EventID=` schreibst, wird der nicht vorhandene Wert durch -1 ersetzt. Wenn du beim Text die Anführungsstriche "" weglässt, wird der Text trotzdem richtig zugewiesen.
Falls du ein ganzes Element weglassen solltest, ist beim Aufruf von diesem einfach kein Inhalt vorhanden oder eine 0 (bei Integer).
- Mögliche kommende Änderungen:**
Hinzufügen eines weiteren Strings, der an Innenanzeigen gebroadcastet werden kann.