Hauptmenü öffnen

AntamarWiki β

Änderungen

AOQML für Anfänger

482 Bytes entfernt, 09:45, 8. Dez. 2021
Die Queste testen
[[Kategorie:AOQML]]
 
Dieser Leitfaden für jene, die sich in der edlen Kunst der AOQML-Programmierung versuchen wollen, wurde nach bestem Wissen und Gewissen von Neonix erstellt und von etlichen weiteren fleißigen AOQML-Kundigen korrigiert und erweitert. Garantien für die Vollständigkeit oder Korrektheit gibt es nicht (dies ist ein Wiki ;) ). Wer will und kann, darf Fehler korrigieren und Unklarheiten beseitigen - aber bitte nicht verschlimmbessern!
Im folgenden wird die Erstellung einer einfachen '''Queste''' beschrieben. '''Zufallsbegegnungen''' haben einige Besonderheiten, die [[ZB für Anfänger|hier]] erklärt werden. Für etwas anspruchsvollere Verwendungen von aoqml gibt es (bald) [[AOQML für Fortgeschrittene]].
=AOQML-Tutorial===1. Den Editor benutzen==
XML ist nicht so leicht lesbar, wie die Programmierer immer behaupten. Der [[AOQML-Editor]] erleichtert das Programmieren gerade für Einsteiger erheblich, da er einen geeigneten Rahmen bietet und zumindest einen Teil der üblichen Fehler im Vorfeld erkennen kann. Ladet ihn einfach herunter (http://aoqml.isonweb.de/) und speichert ihn in einem Ordner für eure eigenen Questen. Damit die nachfolgenden Schritte funktionieren braucht ihr '''Java ''' in einer einigermaßen aktuellen Version. Diese könnt ihr [http://www.java.com/de/ hier] herunterladen.
{| border="0" style="border-collapse:collapse; background-color:transparent;" cellpadding="0"
|}
Wenn man auf einem Netbook mit "kompaktem" Monitor arbeitet, so wie ich, kann es vom Platz her etwas eng werden... In dem Fall sollte man als erstes einige Leerzeilen unter </szenescene> setzen. Große Monitore sind deutlich von Vorteil. Man kann das Fenster verschieben und in der Größe verändern.
{| border="0" style="border-collapse:collapse; background-color:transparent;" cellpadding="0"
|}
==2. Die erste Szene schreiben==
Nachdem die Szene "start" geöffnet ist, beginnen wir mit einer einfachen Queste.
|}
==3. Szenen ordnen==
Das Fenster kann man vergrößern, den Zoom benutzen und die Dateien hin und her ziehen, bis sie gut liegen. Es sollte übersichtlich sein, etwa so:
Achtung, ein roter Rand zeigt an, dass keine Folgeszene angegeben wurde und die Quest nicht explizit mit < quest status=.. beendet wurde. Dies bedeutet ein totes Ende an dem der SC festhängt. Derart gekennzeichnete Szenen dürfen im Livesystem nicht vorkommen!
==4. Die Queste abbrechen==
Wenden wir uns der Szene "abbruch" zu. Wir öffnen sie per Doppelklick. Der | wird oberhalb von </scene> platziert und dann auf <quest.../> geklickt. Zwischen die "" tippen wir "ended" ein. Damit endet die Queste hier ohne weitere Fisematenten. Man könnte auch noch einen Abschlusstext eingeben, aber das lassen wir erst einmal.
Es gibt auch andere Möglichkeiten, eine [[Quest (Tag)|Quest zu beenden]], aber vorerst reicht ended völlig aus.
==5. Has-Abfragen==
Weiter geht es mit der Szene "zettel". Wir öffnen sie wie gehabt und bauen einen kleinen Text ein.
Wenn der SC aber die Fertigkeit beherrscht, steht noch nicht fest, ob er das Gekrakel auch entziffern kann. Dafür benutzen wir eine Probe.
==6. Proben==
Zwischen das <success></success> setzen wir per Klick auf <challenge...|> einen Rohling für eine Probe.
|}
==7. Variable setzen und Zeit verstreichen lassen==
Normalerweise vergeht die Zeit in einer Quest genau so schnell, wie der Spieler sich hindurch klicken kann. Manchmal muss der SC aber innerhalb einer Queste einige Stunden, Tage oder gar Monate mit etwas verbringen, dass ihn von anderen Tätigkeiten abhält - Reisen, Arbeit, Gefangenschaft... Eine Möglichkeit, dieses Verstreichen der Zeit zu simulieren, wird jetzt dargestellt. Zunächst einmal lassen wir den Wirt erklären, dass der Auftraggeber seine Kaninchenzucht einige Wegstunden außerhalb der Stadt betreibt.
Dann speichern wir eine Variable ein, die nach einiger Zeit verschwindet. Dafür klicken wir unter dem Text '''store''' und entfernen das mark (veraltet, dürfte bald aus dem Editor fliegen).  Das Expire beschreibt, wann die Variable sich selbst löscht. 5d bedeutet nach 5 Antamartagen oder 20 Minuten Realzeit. Wir ändern es in 3h, also 30 Sekunden Realzeit. Es werden nur h und d als Zeiteinheiten akzeptiert, für längere Zeiten dann also viele Tage. Wenn man auf das '''expire''' verzichtet, bleibt die Variable ewig bestehen! Das ist manchmal sinnvoll, wenn man eine permanente Veränderung speichern will, meist ist es aber sinnvoller, die Variablen nach einiger Zeit verschwinden zu lassen.
Der Name der Das Expire beschreibt, wann die Variable sollte so gewählt seinsich selbst löscht. 5d bedeutet nach 5 Antamartagen oder 15 Minuten Realzeit. Wir ändern es in 3h, dass nicht andere Questschreiber versehentlich den selben Namen benutzen - sonst wird also 30 Sekunden Realzeit. Es werden nur h und d als Zeiteinheiten akzeptiert, für längere Zeiten dann also viele Tage. Wenn man auf das '''expire''' verzichtet, bleibt die Variable noch von fremden Questen überschriebenewig bestehen! Auch Das ist manchmal sinnvoll, wenn diese Variable nur 30 Sekunden lang bestehen bleibtman eine permanente Veränderung speichern will, meist ist es aber sinnvoller, nehmen wir also einen eindeutigen Namendie Variablen nach einiger Zeit verschwinden zu lassen.
Als Inhalt hat die Variable derzeit nur '''...''' , was nicht sehr aussagekräftig ist. Man kann hier fast beliebige Texte einspeichern, sollte aber wiederum auf Umlaute verzichteninsbesonder auch andere AOQML-Befehle sowie HTML-Formatierungen. Für unsere Quest reicht aber die bloße Existenz Enthaltene Befehle werden auch umgehend ausgeführt, so dass das Ergebnis der Befehle in der Variable aussteht. Das ist zum Beispiel paraktisch, will man einen ganzen Absatz mit wörtlicher Rede ([[Q|<q>]]) speichern.
Zum store muss man Eine Variable hat immer auch ein scope angeben! Das beschreibteinen [[Store fetch|Scope]], mit welchem Bezug die Variable gespeichert wirdeinen Gültigkeitsbereich. Wir nehmen scope="Es gibt ''scene'', ''quest"'', ''hero'', die Variable wird also nur für dieses Quest gespeichert ''dungeon'' und danach direkt gelöscht''global''. Dadurch Standardmäßig wird verhindertder scope ''quest'' benutzt, dass die SC mit unnötigen Variablen vollgemüllt werdendieser muss als einziger nicht explizit angegeben. Alternativ könnte Im Regelfall ist dies der gewünschte scope und nur in seltenen Fällen wird zu einem anderen gegriffen, sie tauchen auch eher im "Fortgeschrittenen"-AOQML auf. Bei dem scope="''hero" genutzt '' muss in jedem Fall auf einen eindeutigen Namen geachtet werden, um die Variable am SC zu verankernz. Das ist dann sinnvoll, wenn die Variable länger bestehen bleiben soll, als das Quest dauertB. ''Autor_ZB-Name_meineVariable'Achtung:''' Der Editor erkennt ein scope im store immer noch als falsch - es ist dennoch richtig und notwendig! Das mag für Anfänger verwirrend sein, wird aber hoffentlich bald geändert. Dann sollte der Editor auch schon ein scope="hero" oder so vorgeben.
Am Ende setzen wir noch ein choice darunter, dass zur nächsten Szene führt.
|}
==8. Random==
Immer nur die selben Texte in einer Queste oder Zufallsbegegnung auszugeben wäre langweilig. Es gibt aber eine einfache Möglichkeit, sie zu variieren. Dafür ersetzen wir den einfachen Text durch eine Zufallsauswahl per Taste Random.
Es gibt auch noch andere Möglichkeiten der Zufallsverteilung, aber dazu später.
==9. Die Wahl der Taktik==
Eigentlich hat es weniger mit aoqml als vielmehr mit den Grundlagen der Questgestaltung zu tun, aber da die Stelle gerade günstig ist, hier ein wichtiger Hinweis:
|}
==10. Kämpfe==
Allen vorherigen Beteuerungen zum Trotz geht es jetzt dennoch direkt zum Kampf. Nach dem erklärenden Text stapft unser Held direkt auf die beiden Gegner zu und beginnt einen Kampf. Dafür wird per Taste '''fight''' zunächst einmal der Rohling erzeugt.
Die Namen der NSC lassen sich auch ändern. Wir nennen sie einfach Abgerissener Bandit und Verkommener Bandit. So merken die Spieler nicht, dass es sich um Standart-NSC handelt.
Per genergender="female" könnte man die NSC auch weiblich machen. Wir verzichten und löschen einfach das gender="".
Dafür fügen wir jeweils ein weapon="" ein und suchen uns aus der [[Waffenliste]] (leider auch nicht ganz vollständig oder aktuell...) geeignete billige Waffen aus: Beil (198) und Keule (1071). ansonsten würden die NSC die jeweiligen Standartwaffe erhalten (in diesem Fall Säbel). Wenn man die NSC nicht kennt kann man so einfach die verwendeten Waffen an die geplante Beute anpassen. Man muss nur etwas aufpassen, das man geeignete Waffen verwendet, die auch zu den Fähigkeiten der NSC passen. Bewährte Questschreiber erhalten auch Zugriff auf die entsprechenden detaillierten Listen, die aber nicht einfach im Wiki veröffentlicht werden sollen.
Für den Fall, das der SC besiegt wird, muss man sich noch eine Erklärung aus den Fingern saugen, warum er dennoch überlebt - bei Antamar sind SC (noch) unsterblich...
Leider erkennt auch hier der Editor die Angabe escape="true" bei fight als falsch, auch wenn sie korrekt ist. Das wird sicher bald geändert...
==11. Den SC ausplündern==
Gehen wir mal davon aus, dass der SC besiegt wird. Die Banditen rauben ihn aus und lassen ihn, schwer verletzt, liegen. Mittels <set attribute="cash" val="0"/> leeren wir seine Taschen, er hat keinen Gulden mehr. Per <drop item="*20%"/> nehmen wir ihm ca. 20% seines Gepäcks ab (wobei das ganze noch von anderen Faktoren abhängig ist), die Zahl ist wieder einmal variabel (1 bis 100%). <drop item="_Waffen"/> nimmt ihm Waffe und ggf. Schild weg.
Getragene Kleider, Rüstungsteile und Schmuckstücken kann man den SC noch nicht wegnehmen. Das erspart uns viele nackte SC...
==12. Beute vergeben==
Viel angenehmer ist es für die SC natürlich, sich die Taschen mit Beute zu füllen!
|}
== 13. Die Queste testen==
Tja, das wäre es erst einmal. Die restlichen Pfade können mit den bereits beschriebenen Mitteln programmiert werden. Am Ende sieht die ganze Quest dann in etwa so aus:
Bild 40 (wenn fertig...)
Bevor man die Quest aber implementieren lässt, sollte man sie vorher noch einmal testen! Dazu muss man zunächst in der Testumgebung ( '''[httphttps://forumspiel.antamar-community.deorg/viewtopic.php?f=77&t=8831Testserver] )''' einen Test-SC erstellen. Diesen kann man per maßgeschneiderter Queste mit Geld, Ausrüstung und EP versorgen und dann steigern. Hier ist so eine:
Link kommt noch...
|}
Dann per Quest starten die Quest starten und mit dem Test-SC testen. Entsprechende Fehler sind meist leicht erkennbar, manchmal auch schwerer. Falls der SC hängt, einfach die Quest deaktivieren (wenn das mal im Spiel so einfach wäre...).
==14. Die Queste implementieren lassen==
Nachdem die Queste geschrieben und getestet wurde, muss sie nur noch kontrolliert und implementiert werden. Dazu meldet euch im Forum oder stellt sie ins Wiki oder schickt eine PN an einen geeigneten Programmierer. Der wird dann, wenn er Zeit hat, noch einen Blick hinein werfen, Fehler korrigieren, ggf. bestimmte Details abklären und irgendwann die Queste implementieren. Je nach dem dauert das einige Stunden bis Tage.
Der Schreiber muss auch festlegen, wo, wann und wie oft die Queste auftritt. Inzwischen können Questen nicht nur in Kneipen und Läden sowie in der Stadt auftreten, sondern auch auf Reisen, auf Schiffen, an festen Orten oder gar durch das Anklicken eines Gegenstandes. All der Alkohol, der getrunken werden kann, die Fackeln, Tabaksdosen und Katzen sind im Grunde genommen einfach nur an Gegenstände gebundene Questen.
==15. AOQML für Fortgeschrittene==
Mit der oben stehenden Anleitung sollte es möglich sein, einfache Questen zu programmieren. Wer mehr Optionen benotigt, der findet sie beim [[AOQML-Manual]]. Auch die Seite [[AOQML]] enthält nützliche Links. Außerdem werde ich nach und nach in [[AOQML für Fortgeschrittene]] weitere Tipps Tricks für AOQML vorstellen.
8.912
Bearbeitungen