AOQML-Manual: Unterschied zwischen den Versionen

Aus AntamarWiki
Wechseln zu: Navigation, Suche
(Sonstiges)
(AOQML-Tags)
 
(53 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''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: <nowiki><code xml>...</code></nowiki>. Will man dazu noch eine Zeilenanzeige, nutzt man dieses <nowiki><code xml n>...</code></nowiki>.
+
'''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: <nowiki><syntaxhighlight lang="xml">...</syntaxhighlight></nowiki>.
  
  
Zeile 8: Zeile 8:
 
Tags werden in spitze Klammern eingeschlossen. Jeder Tag erfordert ein öffnendes (z. B. &lt;challenge&gt;) und ein schließendes Element. Schließende Elemente werden mit einem / nach der Klammer begonnen (&lt;/challenge&gt;). 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:<br/>
 
Tags werden in spitze Klammern eingeschlossen. Jeder Tag erfordert ein öffnendes (z. B. &lt;challenge&gt;) und ein schließendes Element. Schließende Elemente werden mit einem / nach der Klammer begonnen (&lt;/challenge&gt;). 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:<br/>
 
'''richtig:'''
 
'''richtig:'''
<code xml>
+
<syntaxhighlight lang="xml">
 
<tag1>
 
<tag1>
 
   <tag2>
 
   <tag2>
 
   </tag2>
 
   </tag2>
 
</tag1>
 
</tag1>
</code>
+
</syntaxhighlight>
  
 
'''falsch:'''
 
'''falsch:'''
<code xml>
+
<syntaxhighlight lang="xml">
 
<tag1>
 
<tag1>
 
   <tag2>
 
   <tag2>
 
   </tag1>
 
   </tag1>
 
</tag2>
 
</tag2>
</code>
+
</syntaxhighlight>
  
 
Es gibt einige Tags, die kein zweites zum Schließen erfordern. Bei diesen wird das / an das Ende gesetzt:
 
Es gibt einige Tags, die kein zweites zum Schließen erfordern. Bei diesen wird das / an das Ende gesetzt:
<code xml><set attribute="cash" inc="20"/></code>
+
<syntaxhighlight lang="xml"><set attribute="cash" inc="20"/></syntaxhighlight>
 +
 
 +
Außerdem kann man eine Szene (beispielsweise nach einem include oder choice, das zu einer Abzweigung führt) vorzeitig abbrechen lassen, wenn folgender Code eingegeben wird:
 +
 
 +
<syntaxhighlight lang="xml"><quest status="continue" /></syntaxhighlight>
  
 
==Aufbau der XML-Datei==
 
==Aufbau der XML-Datei==
Zeile 32: Zeile 36:
  
 
Jede Datei muss mit diesem Grundgerüst beginnen:
 
Jede Datei muss mit diesem Grundgerüst beginnen:
<code xml>
+
<syntaxhighlight lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
<scene>
+
<scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://eisentrutz.antamar.eu/aoqml.xsd">
 
...
 
...
 
</scene>
 
</scene>
</code>
+
</syntaxhighlight>
Erst wird der Inhalt der datei als XML nach Sprachversion 1.0 definiert, danach folgt das Tag &lt;scene&gt;...&lt;/scene&gt;. Außerhalb dieses Tags darf nichts außer der XML-Definition stehen!
+
Erst wird der Inhalt der datei als XML nach Sprachversion 1.0 definiert, danach folgt das Tag &lt;scene&gt;...&lt;/scene&gt;. Außerhalb dieses Tags darf nichts stehen, mit Ausnahme der XML-Definition und Kommentare, die wie folgt gemacht werden können:
 +
<syntaxhighlight lang="xml">
 +
<!-- hier folgt eine Erklärung -->
 +
</syntaxhighlight>
  
 
===Formatierung===
 
===Formatierung===
 
Für bessere Lesbarkeit und Übersicht bitte alle Ebenen um zwei Stellen (zwei Leerzeichen) gegenüber der darüber liegenden Ebene einrücken:
 
Für bessere Lesbarkeit und Übersicht bitte alle Ebenen um zwei Stellen (zwei Leerzeichen) gegenüber der darüber liegenden Ebene einrücken:
<code xml>
+
<syntaxhighlight lang="xml">
 
<Ebene1>
 
<Ebene1>
 
   <Ebene2>
 
   <Ebene2>
Zeile 51: Zeile 58:
 
   </Ebene2>
 
   </Ebene2>
 
</Ebene1>
 
</Ebene1>
</code>
+
</syntaxhighlight>
  
 
===Zeichensatz===
 
===Zeichensatz===
Zeile 59: Zeile 66:
 
*Einrückungen immer zwei Leerzeichen
 
*Einrückungen immer zwei Leerzeichen
 
*keine Zeilenumbrüche im Text
 
*keine Zeilenumbrüche im Text
 +
 +
==HTML-Tags==
 +
 +
Viele üblichen (X)HTML-Tags können verwendet werden, um Text darzustellen und zu formatieren. So kann z. B. das HTML-&lt;p&gt;-Tag verwendet werden, um Textabsätze zu erzeugen. Der &lt;q&gt;-Tag sollte für wörtliche Rede benutzt werden. Anderes XHTML sollte aber sparsam verwendet werden, um das CSS-Design von Antamar berücksichtigen.
 +
 +
===String Interpolation===
 +
In allen Text-Inhalten kann sogenannte String-Interpolation verwendet werden, also Platzhalter (${...}) durch Variablen ersetzt werden:
 +
 +
'''String-Interpolation:'''
 +
<syntaxhighlight lang="xml">
 +
<store name="titel">Baron von Tannenbrück</store>
 +
<p>Dir wurde der Titel ${titel} verliehen.</p>
 +
</syntaxhighlight>
 +
 +
Dabei ist <store ...> ein AOQML-Tag, in diesem Fall zum Speichern des Textes "Baron von Tannenbrück" in einer Variable mit dem Namen "titel", die dann durch String-Interpolation (${titel}) wieder abgerufen wird. Zu AOQML-Tags mehr im folgenden Abschnitt.
  
 
==AOQML-Tags==
 
==AOQML-Tags==
Zeile 64: Zeile 86:
 
Bisher können folgende Tags benutzt werden (alphabetische Liste):
 
Bisher können folgende Tags benutzt werden (alphabetische Liste):
  
*case - für Fallunterscheidungen &rarr; [[switch]] und Zufallsauswahlen &rarr; [[random]]
+
*[[action]] - Aktionen die den Helden betreffen, z.B. Annahme einer Arbeit / Einsperren im Kerker
 +
*[[add-EP]] - geb. EP für Fertigkeiten vergeben
 +
*[[case]] - für Fallunterscheidungen &rarr; [[switch]] und Zufallsauswahlen &rarr; [[random]]
 
*[[challenge]] - für Proben auf Talente und Eigenschaften
 
*[[challenge]] - für Proben auf Talente und Eigenschaften
 +
*[[Chat (Tag)|chat]] - für das Einbinden eines Chatfensters.
 
*[[choice]] - gibt dem Spieler verschiedene Auswahlmöglichkeiten vor
 
*[[choice]] - gibt dem Spieler verschiedene Auswahlmöglichkeiten vor
*[[fight#death|death]] - Kampfergebnis: Held tot (noch nicht implementiert) &rarr; [[fight]]
+
*[[countdown]] - zeigt an, wie lange eine Variable noch besteht
 
*[[fight#defeat|defeat]] - Kampfergebnis: Held besiegt &rarr; [[fight]]
 
*[[fight#defeat|defeat]] - Kampfergebnis: Held besiegt &rarr; [[fight]]
 
*[[delay]] - Reise des Helden verzögern
 
*[[delay]] - Reise des Helden verzögern
*[[take_drop|drop]] - Gegenstand aus Ausrüstungsliste entfernen
+
*[[AOQML:desc|desc]] - Liefert eine Beschreibung
 +
*[[damage]] - verursacht Schadenspunkte beim Held (auf Wunsch mit/ohne Wunden)
 +
*[[debug]] - Inhalte zum Testen auf dem Testserver bereitstellen
 +
*[[div]] - erzeugt eine OOC-Box
 +
*[[drop]] - Gegenstand aus Ausrüstungsliste entfernen
 +
*[[eval]] - Tag zum berechnen einfacher und komplexer mathematischer Funktionen
 
*[[switch|else]] - Fallunterscheidungen: Default-Option &rarr; [[switch]]
 
*[[switch|else]] - Fallunterscheidungen: Default-Option &rarr; [[switch]]
 
*[[fight#escape|escape]] - Kampfergebnis: Held flüchtet &rarr; [[fight]]
 
*[[fight#escape|escape]] - Kampfergebnis: Held flüchtet &rarr; [[fight]]
 
*failure - Prüfergebnis / Probe negativ &rarr; [[challenge]], [[has]]
 
*failure - Prüfergebnis / Probe negativ &rarr; [[challenge]], [[has]]
 +
*[[for]] - Erstellen von Schleifen
 
*[[store_fetch|fetch]] - gespeicherten Wert abrufen &rarr; [[store_fetch|store]]
 
*[[store_fetch|fetch]] - gespeicherten Wert abrufen &rarr; [[store_fetch|store]]
 
*[[fight]] - Kampf
 
*[[fight]] - Kampf
*[[get_set|get]] - Attribute des Helden abfragen
+
*[[function]] - spezielle Funktionen
 +
*[[generateName]] - Zufallsnamen generieren
 +
*[[get]] - Attribute des Helden oder eines Gegenstandes oder eines Gebäudes abfragen
 
*[[has]] - auf vorhandene Ausrüstung und Talente prüfen
 
*[[has]] - auf vorhandene Ausrüstung und Talente prüfen
 +
*[[hero]] - Held aus Gruppe heraussuchen
 +
*[[if]] - für bedingte Text- oder Wertauswahl
 +
*[[img]]- um Bilder einzubinden
 
*[[include]] - andere Questdateien einbinden
 
*[[include]] - andere Questdateien einbinden
 +
*[[input]] - ein Eingabefeld anzeigen
 +
*[[inventar]]- Tag der verschiedene Gegenstände in sich speichert um z.B. Truhen oder ähnliches zu simulieren.
 +
*[[AOQML:item|item]] wählt ein zufälligen Gegenstand aus der DB
 +
*[[item-select]] - einen Gegenstand vom Spieler auswählen lassen
 +
*[[map]] - fügt eine Grafik ein, auf der Questlinks platziert werden (z.B. für grafische Dungeons)
 +
*[[maze]] - fügt eine Karte der gesehenen+erinnerten "Räume" aus Kachel-Grafiken ein (für grafische Dungeons)
 +
*[[paths]] - geografische Richtungsnavigation
 
*[[q]] - wörtliche Rede
 
*[[q]] - wörtliche Rede
*[[quest]] - zur Steuerung der Queste, z. B. um eine Quest als (noch nicht) abgeschlossen zu markieren
+
*[[Quest (Tag)|quest]] - zur Steuerung der Queste, z. B. um eine Quest als (noch nicht) abgeschlossen zu markieren
 
*[[random]] - Zufallsauswahl
 
*[[random]] - Zufallsauswahl
 +
*[[ranged-defence]] - NPCs attackieren den Held mit Fernkampfwaffen
 +
*[[Regeneration (AOQML)|regeneration]] - Stoppt die Regeneration für den Held in der Quest.
 +
*[[restrict]] - Stellt sicher das bestimmte AOQML-Teile nur einmal pro Held ausgeführt werden.
 
*[[retain_replay|replay]] - gespeicherte Aktionsfolge abrufen &rarr; [[retain_replay|retain]]
 
*[[retain_replay|replay]] - gespeicherte Aktionsfolge abrufen &rarr; [[retain_replay|retain]]
 
*[[retain_replay|retain]] - Aktionsfolge speichern &rarr; [[retain_replay|replay]]
 
*[[retain_replay|retain]] - Aktionsfolge speichern &rarr; [[retain_replay|replay]]
 
*[[reverse]] - Held muss an den zuletzt besuchten Ort zurückkehren
 
*[[reverse]] - Held muss an den zuletzt besuchten Ort zurückkehren
*[[fight#rivals|rivals]] - Kampf: Gegner festlegen
+
*[[fight#rivals|rivals]] - im Kampf Gegner festlegen
 
*[[scene]] - oberstes Tag, definiert Beginn und Ende der XML-Datei
 
*[[scene]] - oberstes Tag, definiert Beginn und Ende der XML-Datei
*[[get_set|set]] - Werte des Helden verändern
+
*[[select]] - Wahl des handelnden/betroffenen Helden in der Gruppe
 +
*[[set]] - Werte des Helden verändern
 +
*[[steal]] - Begleiter entfernen (= gemeiner Viehraub!)
 
*[[store_fetch|store]] - Wert speichern um später darauf zugreifen zu können &rarr; [[store_fetch|fetch]]
 
*[[store_fetch|store]] - Wert speichern um später darauf zugreifen zu können &rarr; [[store_fetch|fetch]]
 
*success - Prüfergebnis / Probe positiv &rarr; [[challenge]], [[has]]
 
*success - Prüfergebnis / Probe positiv &rarr; [[challenge]], [[has]]
 
*[[switch]] - Fallunterscheidung
 
*[[switch]] - Fallunterscheidung
*[[take_drop|take]] - Gegenstand in die Ausrüstungsliste legen
+
*[[take]] - Gegenstand in die Ausrüstungsliste legen
 +
*[[transfer]] - Austausch von Gegenständen zwischem Held und einem Behälter
 +
*[[travel]] - startet eine Reise
 +
*[[var-dump]] - gibt gesetzte Variablen aus -> hilft beim Debuggen
 
*[[fight#victory|victory]] - Kampfergebnis: Gegner durch Held besiegt
 
*[[fight#victory|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-&lt;p&gt;-Tag verwendet werden, um Textabsätze zu erzeugen. XHTML sollte aber sparsam verwendet werden und das CSS-Design von Antamar berücksichtigen.
 
  
 
==Sonstiges==
 
==Sonstiges==
Zeile 100: Zeile 149:
 
[[Besondere Werte]] (Würfelergebnisse berechnen, Zufall und Wahrscheinlichkeit, ..)
 
[[Besondere Werte]] (Würfelergebnisse berechnen, Zufall und Wahrscheinlichkeit, ..)
  
'''Zufallsauswahl aus mehreren Möglichkeiten'''
+
'''Zufälligen Gegenstand aus der Datenbank auswählen'''<br/>
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:  
+
s. [[AOQML:item|item-Tag]]
<take item="Einfacher Holzbecher|Schere|Hartwurst"/> (für variable Beutestücke)
+
 
<set quality="cash" inc="200|300|400|500"/> (wenn man genau 2, 3, 4 oder 5 D vergeben will)
+
'''Zählen'''<br/>
 +
 
 +
Beispiel eines [[AOQML-Zahlencounter]] zum zählen von irgendwas.
  
'''''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:
+
===Zufallsauswahl aus mehreren Möglichkeiten===
<code xml>
+
Will man z.B. einen von mehreren Gegenständen einer Liste abfragen, dann kann man einen [[random]]-Block vorschalten:
 +
<syntaxhighlight lang="xml">
 
<random>
 
<random>
 
  <case><store name="Gegenstand">Holzkamm</store></case>
 
  <case><store name="Gegenstand">Holzkamm</store></case>
Zeile 113: Zeile 165:
 
</random>
 
</random>
 
<take item="${Gegenstand}"/>
 
<take item="${Gegenstand}"/>
</code>
+
</syntaxhighlight>
--[[Benutzer:Handborons|Handborons]] 18:33, 24. Jul. 2008 (CEST)
 
 
 
 
 
'''Zufälligen Gegenstand aus der Datenbank auswählen'''<br/>
 
Zur Zeit nur über SQL-Befehle möglich, was die Datenbank-Administratoren nicht gerne sehen. Muss noch in AOQML umgesetzt werden. (s. Featurewünsche)
 
  
 +
Alternativ kann das [[take]] auch direkt in den jeweiligen case reingeschrieben werden.
  
'''ODER und UND'''<br/>
+
===ODER und UND===
Will man prüfen, ob der Held einen von mehreren möglichen Gegenständen bei sich trägt, kann man das mit dem Operator "|" erreichen:
+
Will man prüfen, ob der Held einen von mehreren möglichen Gegenständen bei sich trägt, kann man das mit dem Operator "|" (entspricht einem ODER) erreichen:
<code xml>
+
<syntaxhighlight lang="xml">
 
<has item="Messer|Dolch|Schwert">
 
<has item="Messer|Dolch|Schwert">
 
  <success>
 
  <success>
Zeile 132: Zeile 180:
 
  </failure>
 
  </failure>
 
</has>
 
</has>
</code>
+
</syntaxhighlight>
 
 
: Siehe oben - die ODER-Abfrage mit "|" funktioniert vorerst nur mit zwei Optionen. --[[Benutzer:Handborons|Handborons]] 10:18, 2. Okt. 2008 (CEST)
 
  
 
Man kann auch auf überprüfen, ob mehrere Gegenstände vorhanden sind:
 
Man kann auch auf überprüfen, ob mehrere Gegenstände vorhanden sind:
<code xml>
+
<syntaxhighlight lang="xml">
 
<has item="Messer+Dolch">
 
<has item="Messer+Dolch">
 
  <success>
 
  <success>
Zeile 146: Zeile 192:
 
  </failure>
 
  </failure>
 
</has>
 
</has>
</code>
+
</syntaxhighlight>
 +
 
 +
Das "+" entspricht also einem UND.<br />
 +
Das "|" entspricht einem ODER.
  
 +
Diese zwei Operatoren sind jedoch nur bei [[has|&lt;has&gt;]] und [[switch|&lt;switch&gt;]] verfügbar.
  
'''nützliche Listen'''
+
===nützliche Listen===
 
* [[Held Attribute]]
 
* [[Held Attribute]]
* [[Gegenstände|Gegenstandsliste]]
 
 
* [[NPC Liste]]
 
* [[NPC Liste]]
 
* [[Waffenliste]]
 
* [[Waffenliste]]
 +
* [[Aktuelle_Warenliste|Warenliste]]
  
== Wohin mit fertigen Questen? ==
+
[[Kategorie: AOQML]]
Fertige Questen, also vollständige Bündel von vielen durchgesehenen und korrekt codierten Dateien bitte gezippt an Athuran schicken. --[[Benutzer:Athuran|Athuran]] 13:05, 23. Jul. 2008 (CEST)
 
[[Kategorie:AOQML]]
 

Aktuelle Version vom 20. April 2022, 12:27 Uhr

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: <syntaxhighlight lang="xml">...</syntaxhighlight>.


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"/>

Außerdem kann man eine Szene (beispielsweise nach einem include oder choice, das zu einer Abzweigung führt) vorzeitig abbrechen lassen, wenn folgender Code eingegeben wird:

<quest status="continue" />

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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://eisentrutz.antamar.eu/aoqml.xsd">
...
</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 stehen, mit Ausnahme der XML-Definition und Kommentare, die wie folgt gemacht werden können:

<!-- hier folgt eine Erklärung -->

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.) Ohne BOM (Byte Order Mark).

Sonstige Formalitäten

  • Einrückungen immer zwei Leerzeichen
  • keine Zeilenumbrüche im Text

HTML-Tags

Viele üblichen (X)HTML-Tags können verwendet werden, um Text darzustellen und zu formatieren. So kann z. B. das HTML-<p>-Tag verwendet werden, um Textabsätze zu erzeugen. Der <q>-Tag sollte für wörtliche Rede benutzt werden. Anderes XHTML sollte aber sparsam verwendet werden, um das CSS-Design von Antamar berücksichtigen.

String Interpolation

In allen Text-Inhalten kann sogenannte String-Interpolation verwendet werden, also Platzhalter (${...}) durch Variablen ersetzt werden:

String-Interpolation:

<store name="titel">Baron von Tannenbrück</store>
<p>Dir wurde der Titel ${titel} verliehen.</p>

Dabei ist <store ...> ein AOQML-Tag, in diesem Fall zum Speichern des Textes "Baron von Tannenbrück" in einer Variable mit dem Namen "titel", die dann durch String-Interpolation (${titel}) wieder abgerufen wird. Zu AOQML-Tags mehr im folgenden Abschnitt.

AOQML-Tags

Bisher können folgende Tags benutzt werden (alphabetische Liste):

  • action - Aktionen die den Helden betreffen, z.B. Annahme einer Arbeit / Einsperren im Kerker
  • add-EP - geb. EP für Fertigkeiten vergeben
  • case - für Fallunterscheidungen → switch und Zufallsauswahlen → random
  • challenge - für Proben auf Talente und Eigenschaften
  • chat - für das Einbinden eines Chatfensters.
  • choice - gibt dem Spieler verschiedene Auswahlmöglichkeiten vor
  • countdown - zeigt an, wie lange eine Variable noch besteht
  • defeat - Kampfergebnis: Held besiegt → fight
  • delay - Reise des Helden verzögern
  • desc - Liefert eine Beschreibung
  • damage - verursacht Schadenspunkte beim Held (auf Wunsch mit/ohne Wunden)
  • debug - Inhalte zum Testen auf dem Testserver bereitstellen
  • div - erzeugt eine OOC-Box
  • drop - Gegenstand aus Ausrüstungsliste entfernen
  • eval - Tag zum berechnen einfacher und komplexer mathematischer Funktionen
  • else - Fallunterscheidungen: Default-Option → switch
  • escape - Kampfergebnis: Held flüchtet → fight
  • failure - Prüfergebnis / Probe negativ → challenge, has
  • for - Erstellen von Schleifen
  • fetch - gespeicherten Wert abrufen → store
  • fight - Kampf
  • function - spezielle Funktionen
  • generateName - Zufallsnamen generieren
  • get - Attribute des Helden oder eines Gegenstandes oder eines Gebäudes abfragen
  • has - auf vorhandene Ausrüstung und Talente prüfen
  • hero - Held aus Gruppe heraussuchen
  • if - für bedingte Text- oder Wertauswahl
  • img- um Bilder einzubinden
  • include - andere Questdateien einbinden
  • input - ein Eingabefeld anzeigen
  • inventar- Tag der verschiedene Gegenstände in sich speichert um z.B. Truhen oder ähnliches zu simulieren.
  • item wählt ein zufälligen Gegenstand aus der DB
  • item-select - einen Gegenstand vom Spieler auswählen lassen
  • map - fügt eine Grafik ein, auf der Questlinks platziert werden (z.B. für grafische Dungeons)
  • maze - fügt eine Karte der gesehenen+erinnerten "Räume" aus Kachel-Grafiken ein (für grafische Dungeons)
  • paths - geografische Richtungsnavigation
  • q - wörtliche Rede
  • quest - zur Steuerung der Queste, z. B. um eine Quest als (noch nicht) abgeschlossen zu markieren
  • random - Zufallsauswahl
  • ranged-defence - NPCs attackieren den Held mit Fernkampfwaffen
  • regeneration - Stoppt die Regeneration für den Held in der Quest.
  • restrict - Stellt sicher das bestimmte AOQML-Teile nur einmal pro Held ausgeführt werden.
  • replay - gespeicherte Aktionsfolge abrufen → retain
  • retain - Aktionsfolge speichern → replay
  • reverse - Held muss an den zuletzt besuchten Ort zurückkehren
  • rivals - im Kampf Gegner festlegen
  • scene - oberstes Tag, definiert Beginn und Ende der XML-Datei
  • select - Wahl des handelnden/betroffenen Helden in der Gruppe
  • set - Werte des Helden verändern
  • steal - Begleiter entfernen (= gemeiner Viehraub!)
  • 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
  • transfer - Austausch von Gegenständen zwischem Held und einem Behälter
  • travel - startet eine Reise
  • var-dump - gibt gesetzte Variablen aus -> hilft beim Debuggen
  • victory - Kampfergebnis: Gegner durch Held besiegt

Sonstiges

Besondere Werte (Würfelergebnisse berechnen, Zufall und Wahrscheinlichkeit, ..)

Zufälligen Gegenstand aus der Datenbank auswählen
s. item-Tag

Zählen

Beispiel eines AOQML-Zahlencounter zum zählen von irgendwas.

Zufallsauswahl aus mehreren Möglichkeiten

Will man z.B. einen von mehreren Gegenständen einer Liste abfragen, dann kann 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}"/>

Alternativ kann das take auch direkt in den jeweiligen case reingeschrieben werden.

ODER und UND

Will man prüfen, ob der Held einen von mehreren möglichen Gegenständen bei sich trägt, kann man das mit dem Operator "|" (entspricht einem ODER) erreichen:

<has item="Messer|Dolch|Schwert">
 <success>
  Entweder Messer oder Dolch oder Schwert vorhanden.
 </success>
 <failure>
  Weder Messer noch Dolch noch Schwert vorhanden.
 </failure>
</has>

Man kann auch auf überprüfen, ob mehrere Gegenstände 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>

Das "+" entspricht also einem UND.
Das "|" entspricht einem ODER.

Diese zwei Operatoren sind jedoch nur bei <has> und <switch> verfügbar.

nützliche Listen