AOQML-Manual
Wichtig für die Bearbeitung und Darstellung hier im Wiki: Es gibt ein SyntaxDarstellungssystem. Um wunderbare Beispiele anzeigen zu lassen, muss ein xml-Code lediglich von diesem Tag umschlossen sein: <code xml>...</code>. Will man dazu noch eine Zeilenanzeige, nutzt man dieses <code xml n>...</code>.
Inhaltsverzeichnis
AOQML Syntax
Das Grundprinzip von AOQML entspricht dem von HTML/XML: Texte zwischen den Tags werden grundsätzlich, d.h. ggf. unter den durch die Tags bestimmten Bedinungen, ausgegeben, also dem Spieler angezeigt. Alle Texte, die vom Programm ausgewertet werden, sind also als Attribute angegeben. Auch diese werden ggf. ausgegeben, aber eben erst nach einer Bearbeitung durch den ZB-XML-Player. Mit anderen Worten: Steuerwerte befinden sich niemals zwischen den Tags.
Tags werden in spitze Klammern eingeschlossen. Jeder Tag erfordert ein öffnendes (z. B. <challenge>) und ein schließendes Element. Schließende Elemente werden mit einem / nach der Klammer begonnen (</challenge>). Alles, was zwischen den beiden Tags steht, ist der Bedingung oder Aktion unterworfen, die das Tag bestimmt. Tags können verschachtelt werden, dabei muss darauf geachtet werden, dass die Ebenen sauber getrennt sind. Das heißt, man darf kein Tag schließen, wenn nicht alle unterhalb dieses Tags geöffneten geschlossen sind:
richtig:
<tag1>
<tag2>
</tag2>
</tag1>
falsch:
<tag1>
<tag2>
</tag1>
</tag2>
Es gibt einige Tags, die kein zweites zum Schließen erfordern. Bei diesen wird das / an das Ende gesetzt:
<set attribute="cash" inc="20"/>
Aufbau der XML-Datei
link: Beispiel einer Zufallsbegnung in aoqml zur Veranschaulichung
Grundgerüst
Jede Datei muss mit diesem Grundgerüst beginnen:
<?xml version="1.0" encoding="UTF-8"?>
<scene>
...
</scene>
Erst wird der Inhalt der datei als XML nach Sprachversion 1.0 definiert, danach folgt das Tag <scene>...</scene>. Außerhalb dieses Tags darf nichts außer der XML-Definition stehen!
Formatierung
Für bessere Lesbarkeit und Übersicht bitte alle Ebenen um zwei Stellen (zwei Leerzeichen) gegenüber der darüber liegenden Ebene einrücken:
Ebene1
Ebene2
Ebene3
Ebene4
/Ebene4
/Ebene3
/Ebene2
/Ebene1
Zeichensatz
Im Kopf der Datei wird als Kodierung UTF-8 festgelegt. Das muss dann auch eingehalten werden. Das lässt sich in den (Speichern-)Optionen eures Editors einstellen. (Kodierung, Format, Zeichensatz oder wie auch immer das benannt ist.)
Sonstige Formalitäten
- Einrückungen immer zwei Leerzeichen
- keine Zeilenumbrüche im Text
AOQML-Tags
Bisher können folgende Tags benutzt werden (alphabetische Liste):
- case - für Fallunterscheidungen → switch und Zufallsauswahlen → random
- challenge - für Proben auf Talente und Eigenschaften
- choice - gibt dem Spieler verschiedene Auswahlmöglichkeiten vor
- death - Kampfergebnis: Held tot (noch nicht implementiert) → fight
- defeat - Kampfergebnis: Held besiegt → fight
- delay - Reise des Helden verzögern
- drop - Gegenstand aus Ausrüstungsliste entfernen
- else - Fallunterscheidungen: Default-Option → switch
- escape - Kampfergebnis: Held flüchtet → fight
- failure - Prüfergebnis / Probe negativ → challenge, has
- fetch - gespeicherten Wert abrufen → store
- fight - Kampf
- get - Attribute des Helden abfragen
- has - auf vorhandene Ausrüstung und Talente prüfen
- include - andere Questdateien einbinden
- q - wörtliche Rede
- quest - zur Steuerung der Queste, z. B. um eine Quest als (noch nicht) abgeschlossen zu markieren
- random - Zufallsauswahl
- replay - gespeicherte Aktionsfolge abrufen → retain
- retain - Aktionsfolge speichern → replay
- reverse - Held muss an den zuletzt besuchten Ort zurückkehren
- rivals - Kampf: Gegner festlegen
- scene - oberstes Tag, definiert Beginn und Ende der XML-Datei
- set - Werte des Helden verändern
- store - Wert speichern um später darauf zugreifen zu können → fetch
- success - Prüfergebnis / Probe positiv → challenge, has
- switch - Fallunterscheidung
- take - Gegenstand in die Ausrüstungsliste legen
- victory - Kampfergebnis: Gegner durch Held besiegt
Weiter können auch die üblichen (X)HTML-Tags verwendet werden um Text zu formatieren. Es kann z. B. das HTML-<p>-Tag verwendet werden, um Textabsätze zu erzeugen. XHTML sollte aber sparsam verwendet werden und das CSS-Design von Antamar berücksichtigen.
Attribute
In vielen Tags werden Attribute - bzw deren Werte - abgefragt, geprüft oder verändert. Hier ist die Liste:
- 'name': der komplette Name des Helden
- 'height': seine Größe in Schritt
- 'weight': sein Gewicht in Stein
- 'gender': sein Geschlecht
- 'race': seine Rasse
- 'cash': wieviel Geld der Held bei sich hat (immer in Heller)
- 'site': der Ort an dem sich der Held befindet
- 'fame': sein derzeitiger Ruhm
- 'AP': seine derzeitigen AP (Gesamt)
- 'LEP': seine derzeitigen Lebenspunkte
- 'AUP': seine derzeitigen Ausdauerpunkte
- alle Eigenschaften (MU, KL, IN, CH, FF, GE, KO, KK)
- alle Talentwerte über ihre Bezeichnung
- Einstellungen zum Verhalten des Helden:
- 'vorgehen': offen, schleichen
- 'gesinnung': getreu (nicht "gesetzestreu"!), phexisch
- 'kampf': aktiv,passiv
- 'moral': gesittet, lebensfroh
Sonstiges
Würfelergebnisse berechnen und ausgeben
$[3W6] errechnet - na, was wohl?
$[3W6+5] Ist auch selbsterklärend, denke ich. Leider noch nicht implementiert. Um z. B. 2W6+5 SP zu erzeugen, kann man den Schaden zuerst berechnen und dann von der LE abziehen:
<set name="Schaden" value="$[2W6]" show="none"/>
<set name="Schaden" inc="5" show="none"/>
<set attribute="LEP" dec="${Schaden}"/>
Zufall und Wahrscheinlichkeit
Um einen zufälligen Wert zu erzeugen, gibt es den Operator "...". Das funktioniert z. B. so:
<set name="zufall" value="10...20"/>
Damit wird ein Zufallswert von 10 bis 20 in der Variablen "zufall" gespeichert.
ODER und UND
Will man prüfen, ob der Held einen von zwei möglichen Gegenständen bei sich trägt, kann man das mit dem Operator "|" erreichen:
<has item="Messer|Dolch">
<success>
Entweder Messer oder Dolch vorhanden.
</success>
<failure>
Weder Messer oder Dolch vorhanden.
</failure>
</has>
Man kann auch auf überprüfen, ob beide vorhanden sind:
<has item="Messer+Dolch">
<success>
Messer und Dolch vorhanden.
</success>
<failure>
Entweder nur Messer oder nur Dolch oder keins von beiden vorhanden.
</failure>
</has>
Zufallsauswahl aus mehreren Möglichkeiten Will man z.B. einen von mehreren Gegenständen einer Liste abfragen, muss man einfach nur eine normale Abfrage wie bei einem Gegenstand machen und jeweils ein | zwischen die unterschiedlichen Namen setzen. Sollte auch bei Gegnern, Waffen oder anderem klappen. Beispiele: <take item="Einfacher Holzbecher|Schere|Hartwurst"/> (für variable Beutestücke) <set attribute="cash" inc="200|300|400|500"/> (wenn man genau 2, 3, 4 oder 5 D vergeben will)
So einfach ist es leider nicht! Die Auswahl mit dem "|" funktioniert nur für zwei Möglichkeiten. Für mehrere muss man einen <random>-Block vorschalten:
<random>
<case><store name="Gegenstand">Holzkamm</store></case>
<case><store name="Gegenstand">Dolch</store></case>
<case><store name="Gegenstand">Amboss</store></case>
</random>
<take item="${Gegenstand}"/>
--Handborons 18:33, 24. Jul. 2008 (CEST)
Zufälligen Gegenstand aus der Datenbank auswählen
Zur Zeit nur über SQL-Befehle möglich, was die Datenbank-Administratoren nicht gerne sehen. Muss noch in AOQML umgesetzt werden. (s. Featurewünsche)
nützliche Listen
Wohin mit fertigen Questen?
Fertige Questen, also vollständige Bündel von vielen durchgesehenen und korrekt codierten Dateien bitte gezippt an Athuran schicken. --Athuran 13:05, 23. Jul. 2008 (CEST)