Shai Hulud
Senior Member
- Registriert
- 18.01.2015
- Beiträge
- 194
Ich schreibe gerade einen (minimalistischen) Parser für Dateien im D-Dialogformat. Dabei stolpere ich über ein Konstrukt, an dem ich mir bisher die Zähne ausbeiße und bei dem ich Hilfe bräuchte:
Die Mod „Balduran's Seatower“ verwendet in der Datei
Nach meinem Verständnis der WeiDU-Dokumentation zum D-Format sollte dieses Konstrukt aber gar nicht möglich sein und in der letzten Zeile beim
Eine
Das bedeutet also für den obigen Code, dass
Das heißt, das erste
Der nachfolgende Kommentar im Seeturm-Code wird nach WeiDU ignoriert und wir landen beim
Allerdings lässt sich die Mod installieren, ohne einen Fehler zu werfen, daher gehe ich davon aus, dass der Seeturm-Code korrekt ist und ich die Doku nicht richtig verstanden habe. (Eine andere Möglichkeit wäre, dass die Doku falsch ist, aber ich gehe zunächst mal von einem Verständnisproblem meinerseits aus.)
Kann einer von euch erkennen, wo mein Denkfehler liegt?
Die Mod „Balduran's Seatower“ verwendet in der Datei
bs-baldurans-seatower-veaob.6/bst/dialog/YSMCOOK1.d
in den Zeilen 3-12 folgenden Code:
Code:
CHAIN
IF ~Global("bsCookSawDwarf","GLOBAL",0)
OR(6)
Race(Player1,DWARF)
Race(Player2,DWARF)
Race(Player3,DWARF)
Race(Player4,DWARF)
Race(Player5,DWARF)
Race(Player6,DWARF)~ THEN ~YSMCOOK1~ dwarffun
@1227 /* ~Hey you! Dwarf! The alestore's locked so you can get your dirty carcass out of my kitchen NOW!!!~ */ DO ~SetGlobal("bsCookSawDwarf","GLOBAL",1)~
DO
gegen die CFG des D-Formats verstoßen, denn:Eine
CHAIN
wird nach WeiDU wie folgt definiert:
Code:
CHAIN [ IF [ WEIGHT #weight ] stateTriggerString THEN ] entryFilename entryLabel chainText list chainEpilogue
entryLabel
mit dem Wert dwarffun
belegt ist. Danach greift die Regel zur chainText list
:
Code:
[ IF transTriggerString THEN ] sayText = sayText ...
sayText
ist mit Umwegen über die Definitionen von text
und reference
mit dem Wert @1227
belegt, optionale weitere = sayText
sind nicht vorhanden.Der nachfolgende Kommentar im Seeturm-Code wird nach WeiDU ignoriert und wir landen beim
DO ~SetGlobal("bsCookSawDwarf","GLOBAL",1)~
, wo ich jetzt das Problem sehe. Wenn ich es richtig verstehe, erlaubt weder die Definition von chainText list
noch von chainEpilogue
das Vorhandensein eines DO
an dieser Stelle. Ein DO
wird nach WeiDU lediglich durch die Regel eines transFeature
erlaubt, welche hier aber keine Anwendung findet.Allerdings lässt sich die Mod installieren, ohne einen Fehler zu werfen, daher gehe ich davon aus, dass der Seeturm-Code korrekt ist und ich die Doku nicht richtig verstanden habe. (Eine andere Möglichkeit wäre, dass die Doku falsch ist, aber ich gehe zunächst mal von einem Verständnisproblem meinerseits aus.)
Kann einer von euch erkennen, wo mein Denkfehler liegt?