AOQML-Manual: Unterschied zwischen den Versionen

Aus AntamarWiki
Wechseln zu: Navigation, Suche
(Sonstige Abfragen aus der A&O-Datenbank)
Zeile 95: Zeile 95:
  
 
Manchmal benötigt man spezielle Angaben aus der Datenbank. Die dazu benötigten Angaben sollen hier aufgelistet werden.
 
Manchmal benötigt man spezielle Angaben aus der Datenbank. Die dazu benötigten Angaben sollen hier aufgelistet werden.
 +
 +
Edit Spacewolf: Bitte keine direkten SQL-Befehle verwenden. Besser dann dafür eine Funktion bereitstellen die den Befehl kapselt.
  
 
'''Zufälligen Gegenstand aus der Datenbank auswählen'''
 
'''Zufälligen Gegenstand aus der Datenbank auswählen'''

Version vom 3. Juni 2008, 23:05 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: <code xml>...</code>. Will man dazu noch eine Zeilenanzeige, nutzt man dieses <code xml n>...</code>.


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 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.)

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_fetch
  • 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 → store_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.

Sonstige Abfragen aus der A&O-Datenbank

Manchmal benötigt man spezielle Angaben aus der Datenbank. Die dazu benötigten Angaben sollen hier aufgelistet werden.

Edit Spacewolf: Bitte keine direkten SQL-Befehle verwenden. Besser dann dafür eine Funktion bereitstellen die den Befehl kapselt.

Zufälligen Gegenstand aus der Datenbank auswählen

<take item="$(name FROM ant_ware WHERE preis -le 5 AND NOT att_selten AND NOT att_rare)"/>

Der Befehl hinter dem "$" ist eine SQL-Abfrage. Sie liefert den Namen eines zufällig ausgewählten Gegenstands aus der Tabelle ant_ware mit einem Preis von höchstens 5 Heller (-le = lower or equal) und ohne die Attribute selten (att_selten) oder rare (att_rare). Mit

<take item="...">

wird der Gegenstand ins Inventar des Helden gelegt.

Mit den Optionen -ge (greater or equal), -lt (lower than) und -gt (greater than) kann man dementsprechend zufällige Dinge auswählen, die 5H oder mehr, bzw. weniger oder mehr wert sind. (Möglicherweise wird das später noch in eine einfachere Form gegossen.)