CodeSnippets: Unterschied zwischen den Versionen
Guur (Diskussion | Beiträge) (→Sonstiges) |
(→Heldenspezifisches) |
||
(28 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt) | |||
Zeile 5: | Zeile 5: | ||
===Einfacher ZB-Grundaufbau=== | ===Einfacher ZB-Grundaufbau=== | ||
Einführungstext (Z4), dann erste Talentprobe (Z5) und wenn diese gelingt, eine weitere (Z11), danach EP-Vergabe (Z14,18) und wenn beide Proben positiv verliefen, auch Gewinn eines Gegenstands (Z19); Texte nur zwischen p und /p: | Einführungstext (Z4), dann erste Talentprobe (Z5) und wenn diese gelingt, eine weitere (Z11), danach EP-Vergabe (Z14,18) und wenn beide Proben positiv verliefen, auch Gewinn eines Gegenstands (Z19); Texte nur zwischen p und /p: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
<!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) --> | <!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) --> | ||
<scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd"> | <scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd"> | ||
− | <p></p> | + | <p></p> |
− | <challenge talent="X"> | + | <challenge talent="X"> |
− | + | <failure> | |
− | + | <p></p> | |
− | + | </failure> | |
− | + | <success> | |
− | + | <p></p> | |
− | + | <challenge talent="X"> | |
− | + | <failure> | |
− | + | <p></p> | |
− | + | <set attribute="EP" inc="X"/> | |
− | + | </failure> | |
− | + | <success> | |
− | + | <p></p> | |
− | + | <set attribute="EP" inc="X"/> | |
− | + | <take item="X"/> | |
− | + | </success> | |
− | + | </challenge> | |
− | + | </success> | |
− | </challenge> | + | </challenge> |
</scene> | </scene> | ||
− | </ | + | </syntaxhighlight> |
===Einfacher ZB-Grundaufbau mit variierenden Textstücken=== | ===Einfacher ZB-Grundaufbau mit variierenden Textstücken=== | ||
Viele Begegnungen haben variierende Textinhalte, die aber das gleiche beschreiben, dadurch wird für Abwechselung innerhalb einer ZB gesorgt und es ist nicht immer der gleiche langweilige Text, den man sofort erkennt. Die ist noch besser einsetzbar für gleichwertige Ereignisse, wo also nicht jeder Text innerhalb der ZB aufeinander aufbauen muss und sich auch von den gleichwertigen cases unterscheiden kann. | Viele Begegnungen haben variierende Textinhalte, die aber das gleiche beschreiben, dadurch wird für Abwechselung innerhalb einer ZB gesorgt und es ist nicht immer der gleiche langweilige Text, den man sofort erkennt. Die ist noch besser einsetzbar für gleichwertige Ereignisse, wo also nicht jeder Text innerhalb der ZB aufeinander aufbauen muss und sich auch von den gleichwertigen cases unterscheiden kann. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
<!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) --> | <!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) --> | ||
<scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd"> | <scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd"> | ||
− | <p> | + | <p> |
− | <random> | + | <random> |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | </random> | + | </random> |
− | </p> | + | </p> |
− | <challenge talent="" mod="+X"> | + | <challenge talent="" mod="+X"> |
− | + | <failure> | |
− | + | <p> | |
− | + | <random> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | </random> | |
− | + | </p> | |
− | + | </failure> | |
− | + | <success> | |
− | + | <p> | |
− | + | <random> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | <case></case> | |
− | + | </random> | |
− | + | </p> | |
− | + | </success> | |
− | </challenge> | + | </challenge> |
</scene> | </scene> | ||
− | </ | + | </syntaxhighlight> |
===ZB mit Voraussetzung=== | ===ZB mit Voraussetzung=== | ||
In Z2 wird eine Talentvoraussetzung (auch möglich: Gegenstand X muss vorhanden sein - has item="X|Y|Z") abgefragt, der Char muss als eines der angegebenen Talent auf dem angegeben Mod haben, sonst wird der success-Zweig nicht ausgeführt (in dem der Charakter einen Gegenstand erhält) und es bleibt nur ein Trösttext (in diesem Falle mit einer anderen Probe, um noch etwas EP zu erhalten)... | In Z2 wird eine Talentvoraussetzung (auch möglich: Gegenstand X muss vorhanden sein - has item="X|Y|Z") abgefragt, der Char muss als eines der angegebenen Talent auf dem angegeben Mod haben, sonst wird der success-Zweig nicht ausgeführt (in dem der Charakter einen Gegenstand erhält) und es bleibt nur ein Trösttext (in diesem Falle mit einer anderen Probe, um noch etwas EP zu erhalten)... | ||
− | < | + | <syntaxhighlight lang="xml"> |
<has talent="X|Y" mod="+X"> | <has talent="X|Y" mod="+X"> | ||
<success> | <success> | ||
Zeile 93: | Zeile 93: | ||
</failure> | </failure> | ||
</has> | </has> | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | ===Einfacher ZB-Grundaufbau für Gruppen=== | ||
+ | Einführungstext (Z4), dann eine Talentprobe (Z5), wobei im Erfolgsfall geschaut wird, welcher Held diese am besten besteht (Z10), danach EP-Vergabe (Z11); Texte nur zwischen p und /p: | ||
+ | |||
+ | <syntaxhighlight lang="xml"> | ||
+ | <?xml version="1.0" encoding="UTF-8"?> | ||
+ | <!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) --> | ||
+ | <scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd"> | ||
+ | <p></p> | ||
+ | <challenge talent="X" id="P1"> | ||
+ | <failure> | ||
+ | <p></p> | ||
+ | </failure> | ||
+ | <success> | ||
+ | <p><hero output="name" by-challenge="P1" select="best" /> hat die Probe am Besten geschafft.</p> | ||
+ | <set attribute="EP" inc="X"/> | ||
+ | </success> | ||
+ | </challenge> | ||
+ | </scene> | ||
+ | </syntaxhighlight> | ||
+ | |||
==Talente== | ==Talente== | ||
===Einfache Talentprobe=== | ===Einfache Talentprobe=== | ||
− | < | + | <syntaxhighlight lang="xml"> |
<challenge talent="Talent" mod="+X"> | <challenge talent="Talent" mod="+X"> | ||
<success> | <success> | ||
Zeile 106: | Zeile 127: | ||
</failure> | </failure> | ||
</challenge> | </challenge> | ||
− | </ | + | </syntaxhighlight> |
===Erleichterte Talentprobe durch Gegenstände=== | ===Erleichterte Talentprobe durch Gegenstände=== | ||
In Z1 wird abgefragt, ob einer der angegebenen Gegenstände vorhanden ist, wenn ja, wir die Probe erleichtert (Z3), ansonsten erschwert durchgeführt (Z13): | In Z1 wird abgefragt, ob einer der angegebenen Gegenstände vorhanden ist, wenn ja, wir die Probe erleichtert (Z3), ansonsten erschwert durchgeführt (Z13): | ||
− | < | + | <syntaxhighlight lang="xml"> |
<has item="X|Y"> | <has item="X|Y"> | ||
<success> | <success> | ||
Zeile 133: | Zeile 154: | ||
</failure> | </failure> | ||
</has> | </has> | ||
− | </ | + | </syntaxhighlight> |
===Alternative Talentabfrage=== | ===Alternative Talentabfrage=== | ||
Anmerkung: Dies betrifft vor allem Talente, die eher selten sind und wo der Held auf ein Talent ausweichen kann, das er ziemlich sicher hat. Ansonsten könnte im failure-Zweig des ersten has talent auch ein zweites has talent eingebaut werden. | Anmerkung: Dies betrifft vor allem Talente, die eher selten sind und wo der Held auf ein Talent ausweichen kann, das er ziemlich sicher hat. Ansonsten könnte im failure-Zweig des ersten has talent auch ein zweites has talent eingebaut werden. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<has talent="Talent1"> | <has talent="Talent1"> | ||
<success> | <success> | ||
<challenge talent="Talent1"> | <challenge talent="Talent1"> | ||
<success> | <success> | ||
− | + | ... | |
</success> | </success> | ||
<failure> | <failure> | ||
− | + | ... | |
</failure> | </failure> | ||
+ | </challenge> | ||
</success> | </success> | ||
<failure> | <failure> | ||
<challenge talent="Talent2"> | <challenge talent="Talent2"> | ||
<success> | <success> | ||
− | + | ... | |
</success> | </success> | ||
<failure> | <failure> | ||
− | + | ... | |
</failure> | </failure> | ||
+ | </challenge> | ||
</failure> | </failure> | ||
</has> | </has> | ||
− | </ | + | |
+ | </syntaxhighlight> | ||
===Verbesserte modifizierte Probe=== | ===Verbesserte modifizierte Probe=== | ||
Zeile 164: | Zeile 188: | ||
Mit dieser Methode kann man eine Probe recht übersichtlich mit mehreren Faktoren modifizieren. Neben Ausrüstung sind auch andere Sachen wie Variablen oder unterstützende Talente möglich. | Mit dieser Methode kann man eine Probe recht übersichtlich mit mehreren Faktoren modifizieren. Neben Ausrüstung sind auch andere Sachen wie Variablen oder unterstützende Talente möglich. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<store name="probenvariable_1" scope="quest">5</store><!-- Probe ohne Ausrüstung um 5 erschwert. --> | <store name="probenvariable_1" scope="quest">5</store><!-- Probe ohne Ausrüstung um 5 erschwert. --> | ||
Zeile 170: | Zeile 194: | ||
<has item="XXX"><!-- Man kann auch anderes mit has oder switch abfragen. --> | <has item="XXX"><!-- Man kann auch anderes mit has oder switch abfragen. --> | ||
<success> | <success> | ||
− | + | <set name="probenvariable_1" dec="2" show="none"/><!-- Malus wird um 2 erleichtert. --> | |
</success> | </success> | ||
<failure> | <failure> | ||
− | + | <!-- Fehlt der Gegenstand, wird nicht modifiziert. --> | |
</failure> | </failure> | ||
</has> | </has> | ||
Zeile 179: | Zeile 203: | ||
<has item="YYY"><!-- Man kann auch anderes mit has oder switch abfragen. --> | <has item="YYY"><!-- Man kann auch anderes mit has oder switch abfragen. --> | ||
<success> | <success> | ||
− | + | <set name="probenvariable_1" dec="2" show="none"/><!-- Malus wird um 2 erleichtert. --> | |
</success> | </success> | ||
<failure> | <failure> | ||
− | + | <!-- Fehlt der Gegenstand, wird nicht modifiziert. --> | |
</failure> | </failure> | ||
</has> | </has> | ||
− | <challenge talent="AOQML-Programmierung" mod="${probenvariable_1}"><!-- Als Modi wird der Inhalt der Variable gezogen, also 5 ohne Ausrüstung und weniger (also leichter) wenn geeignete Ausrüstung vorhanden. --> | + | <challenge talent="AOQML-Programmierung" mod="${probenvariable_1}"> |
+ | <!-- Als Modi wird der Inhalt der Variable gezogen, also 5 ohne Ausrüstung und weniger (also leichter) wenn geeignete Ausrüstung vorhanden. --> | ||
<success> | <success> | ||
− | + | <!-- Hier dann Ergebnis Erfolg. --> | |
</success> | </success> | ||
<failure> | <failure> | ||
− | + | <!-- Hier Misserfolg. --> | |
</failure> | </failure> | ||
</challenge> | </challenge> | ||
− | </ | + | </syntaxhighlight> |
+ | ==Heldenspezifisches== | ||
+ | ===Den Solohelden namentlich ansprechen=== | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <get attribute="name"/> | ||
+ | </syntaxhighlight> | ||
− | |||
===Mann oder Frau?=== | ===Mann oder Frau?=== | ||
In Z3 wird der Text für Männer ausgegeben, in Z6 der für Frauen. | In Z3 wird der Text für Männer ausgegeben, in Z6 der für Frauen. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<switch attribute="gender"> | <switch attribute="gender"> | ||
<case value="male"> | <case value="male"> | ||
Zeile 211: | Zeile 240: | ||
</else> | </else> | ||
</switch> | </switch> | ||
− | </ | + | </syntaxhighlight> |
Oder auch direkt in den Text einbinden: | Oder auch direkt in den Text einbinden: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<if attribute="gender" equals="female" null="Ein geschlechtsloses Wesen" then="Eine junge Frau" else="Ein junger Mann"/> kommt dir entgegen. | <if attribute="gender" equals="female" null="Ein geschlechtsloses Wesen" then="Eine junge Frau" else="Ein junger Mann"/> kommt dir entgegen. | ||
− | </ | + | </syntaxhighlight> |
===Hat der Held soundsoviel Geld?=== | ===Hat der Held soundsoviel Geld?=== | ||
Wenn es wichtig ist, ob der Held einen Mindestbetrag an Geld dabei hat. | Wenn es wichtig ist, ob der Held einen Mindestbetrag an Geld dabei hat. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<has attribute="cash" min="X"> | <has attribute="cash" min="X"> | ||
<success> | <success> | ||
Zeile 229: | Zeile 258: | ||
</failure> | </failure> | ||
</has> | </has> | ||
− | </ | + | </syntaxhighlight> |
===Wurde der Held verletzt?=== | ===Wurde der Held verletzt?=== | ||
Wenn es wichtig ist, ob der Held in einem Kampf Schadenspunkte bekommen hatte. | Wenn es wichtig ist, ob der Held in einem Kampf Schadenspunkte bekommen hatte. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<store name="LEPvorher" scope="quest"><get attribute="LEP"/></store> | <store name="LEPvorher" scope="quest"><get attribute="LEP"/></store> | ||
− | + | <!-- Prügelei ... --> | |
<switch Attribute="LEP"> | <switch Attribute="LEP"> | ||
<case min="${LEPvorher}"> | <case min="${LEPvorher}"> | ||
− | + | <!-- Fall: vorher so viele LEP wie nachher oder mehr --> | |
</case> | </case> | ||
<else> | <else> | ||
− | + | <!-- Fall: nachher weniger LEP als vorher --> | |
</else> | </else> | ||
</switch> | </switch> | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | ===Gottheitsspezifische Begrüßung=== | ||
+ | Je nach eingestellter Gottheit, wird die Grußformel entsprechend gesetzt. Ergebnis ist dann z. B. ein "Bei Athos, ..." | ||
+ | |||
+ | <syntaxhighlight lang="xml"> | ||
+ | <store name="gottheit" scope="quest"><get attribute="gottheit"/></store> | ||
+ | <switch name="gottheit"> | ||
+ | <case val="Atheist"> | ||
+ | <store name="output_gottheit" scope="quest" >Bei allen Dämonen und Untoten</store> | ||
+ | </case> | ||
+ | <case val="Religionsphilosoph"> | ||
+ | <store name="output_gottheit" scope="quest" >Bei allen Göttern und Göttinnen</store> | ||
+ | </case> | ||
+ | <else> | ||
+ | <store name="output_gottheit" scope="quest" >Bei <get attribute="gottheit"/></store> | ||
+ | </else> | ||
+ | </switch> | ||
+ | <p><fetch name="output_gottheit"/>, ...</p> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Kälteschutz=== | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <switch attribute="KS"> | ||
+ | <case min="1" max="2"> | ||
+ | Viel zu dünne Kleidung. | ||
+ | <set attribute="LEP" dec="1...2"/> | ||
+ | </case> | ||
+ | <case min="3" max="4"> | ||
+ | Etwas zu dünn angezogen. | ||
+ | <set attribute="LEP" dec="1"/> | ||
+ | </case> | ||
+ | <case min="5"> | ||
+ | <!-- Alles ok, dick genug angezogen --> | ||
+ | </case> | ||
+ | <else> | ||
+ | <!-- 0-2 Kälteschutz --> | ||
+ | Der Kälte aufgrund deiner viel zu dünnen Kleidung auch noch schutzlos ausgeliefert. | ||
+ | <set attribute="LEP" dec="2...4"/> | ||
+ | </else> | ||
+ | </switch> | ||
+ | </syntaxhighlight> | ||
==nützliche Gegenstands-Kombinationen== | ==nützliche Gegenstands-Kombinationen== | ||
===Schreibzeug?=== | ===Schreibzeug?=== | ||
Für Schreibzeug gibt es viele Kombinationen, daher steht dafür ein Makro zur Verfügung | Für Schreibzeug gibt es viele Kombinationen, daher steht dafür ein Makro zur Verfügung | ||
− | < | + | <syntaxhighlight lang="xml"> |
<store name="hatSchreibzeug"/> | <store name="hatSchreibzeug"/> | ||
− | <p>Der Held hat | + | <p>Der Held hat |
<include target="/lib/_hatSchreibzeug"/> | <include target="/lib/_hatSchreibzeug"/> | ||
<switch name="hatSchreibzeug"> | <switch name="hatSchreibzeug"> | ||
<case val="true"> | <case val="true"> | ||
− | + | Schreibzeug dabei und könnte also etwas aufschreiben. | |
</case> | </case> | ||
<else> | <else> | ||
− | + | leider kein Schreibzeug dabei und könnte daher nichts aufschreiben. | |
</else> | </else> | ||
</switch> | </switch> | ||
</p> | </p> | ||
− | </ | + | </syntaxhighlight> |
Ggf. stellt der Editor die Include-Datei als nicht vorhanden dar. Das bitte einfach ignorieren. Zum einen liegt das daran, dass der absolute Pfad noch nicht richtig aufgelöst wird, zum anderen daran, dass diese Datei ggf. lokal gar nicht zur Verfügung steht. | Ggf. stellt der Editor die Include-Datei als nicht vorhanden dar. Das bitte einfach ignorieren. Zum einen liegt das daran, dass der absolute Pfad noch nicht richtig aufgelöst wird, zum anderen daran, dass diese Datei ggf. lokal gar nicht zur Verfügung steht. | ||
Zeile 270: | Zeile 340: | ||
===Zufallstexte=== | ===Zufallstexte=== | ||
Eine normale Zufallsauswahl, jeder Case ist gleichberechtigt. | Eine normale Zufallsauswahl, jeder Case ist gleichberechtigt. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<random> | <random> | ||
<case> | <case> | ||
Zeile 285: | Zeile 355: | ||
</case> | </case> | ||
</random> | </random> | ||
− | </ | + | </syntaxhighlight> |
===Prozentuale Zufallsauswahl=== | ===Prozentuale Zufallsauswahl=== | ||
− | Wenn man die Ereignisse einer Zufallsauswahl etwas steuern will, weil manches häufiger als anderes auftreten soll. | + | Wenn man die Ereignisse einer Zufallsauswahl etwas steuern will, weil manches häufiger als anderes auftreten soll. Das Beispiel zeigt eine 80%/20%-Lösung. Die Zahlen können je nach Bedürfnis angepasst werden, weitere Fälle können per zusätzlichem <case> ebenfalls gesetzt werden. |
− | + | ||
− | < | + | <syntaxhighlight lang="xml"> |
− | + | <random> | |
− | < | + | <case factor="8"> |
− | + | <!-- ...für 8 mal im Pot ... --> | |
− | |||
− | < | ||
− | <case | ||
− | |||
</case> | </case> | ||
− | <case | + | <case factor="2"> |
− | + | <!-- ...für 2 mal im Pot... --> | |
</case> | </case> | ||
− | + | </random> | |
− | + | </syntaxhighlight> | |
− | |||
− | </ | ||
− | </ | ||
==Bewertung unterschiedlicher Ausrüstung bei Proben== | ==Bewertung unterschiedlicher Ausrüstung bei Proben== | ||
Bei Proben sind unterschiedliche Gegenstände oft unterschiedlich nützlich. Folgendes System erlaubt eine einfache aber detaillierte Nutzung verschiedener Gegenstände. Man muss nur noch die entsprechenden Gegenstände einfügen (Getrennt mit | wenn mehrere in Frage kommen) und den Modi auf die Probe festlegen. Bei fehlender Ausrüstung entscheidet der Schreiber, ob und wie es weiter geht (hoher Malus auf die Probe oder einfach nicht möglich): | Bei Proben sind unterschiedliche Gegenstände oft unterschiedlich nützlich. Folgendes System erlaubt eine einfache aber detaillierte Nutzung verschiedener Gegenstände. Man muss nur noch die entsprechenden Gegenstände einfügen (Getrennt mit | wenn mehrere in Frage kommen) und den Modi auf die Probe festlegen. Bei fehlender Ausrüstung entscheidet der Schreiber, ob und wie es weiter geht (hoher Malus auf die Probe oder einfach nicht möglich): | ||
− | < | + | <syntaxhighlight lang="xml"> |
<has item="Gute Ausrüstung|Andere gute Ausrüstung"> | <has item="Gute Ausrüstung|Andere gute Ausrüstung"> | ||
Zeile 319: | Zeile 382: | ||
<failure> | <failure> | ||
<p>Mangels geeigneter Ausrüstung kannst du das gleich vergessen!</p> | <p>Mangels geeigneter Ausrüstung kannst du das gleich vergessen!</p> | ||
− | Weiter im Text/Versagt/Was auch immer... | + | <!-- Weiter im Text/Versagt/Was auch immer... --> |
</failure> | </failure> | ||
<success> | <success> | ||
Zeile 347: | Zeile 410: | ||
</challenge> | </challenge> | ||
− | </ | + | </syntaxhighlight> |
==Mehrmaliges Verwenden mit <store> und <switch> verhindern== | ==Mehrmaliges Verwenden mit <store> und <switch> verhindern== | ||
Zeile 353: | Zeile 416: | ||
Mittels <store> und <switch> kann man zB eine mehrmalige Benutzung bzw. mehrmaligen Besuch eines Ortes unterbinden. | Mittels <store> und <switch> kann man zB eine mehrmalige Benutzung bzw. mehrmaligen Besuch eines Ortes unterbinden. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<switch name="ValName"> | <switch name="ValName"> | ||
− | + | <null> | |
− | + | <!-- Text beim ersten Durchlauf! --> | |
− | + | <store name="ValName">ja</store> | |
− | + | </null> | |
− | + | <case> | |
− | + | <!-- Text beim erfüllter Bedingung! --> | |
− | + | </case> | |
− | + | <else> | |
− | + | <!-- Alternativer Text! --> | |
+ | </else> | ||
</switch> | </switch> | ||
− | </ | + | </syntaxhighlight> |
''ValName''stellt den Variablennamen dar, dieser kann frei vergeben werden. | ''ValName''stellt den Variablennamen dar, dieser kann frei vergeben werden. | ||
Zeile 374: | Zeile 438: | ||
Alternativ kann man auch das [[has|has-Tag]] verwenden. | Alternativ kann man auch das [[has|has-Tag]] verwenden. | ||
− | + | Im folgenden Beispiel wird jemand am Betreten einer Lokalität gehindert. In diesem Beispiel gibt es nur zwei Möglichkeiten, der ''<case>''-Fall wird somit unnötig. | |
− | < | + | <syntaxhighlight lang="xml"> |
<switch name="besuchtTaverne"> | <switch name="besuchtTaverne"> | ||
− | + | <null> | |
− | + | <!-- Hier die einmalige Möglichkeit in der Schmiede fragen zu stellen. --> | |
− | + | <store name="besuchtTaverne">ja</store> | |
− | + | </null> | |
− | + | <else> | |
− | + | <p>Der Schmied guck dich nur dumm an, was du schon wieder hier willst.</p> | |
− | + | </else> | |
</switch> | </switch> | ||
− | </ | + | </syntaxhighlight> |
==Gruppenzeug== | ==Gruppenzeug== | ||
===Alle Helden durchgehen=== | ===Alle Helden durchgehen=== | ||
− | < | + | <syntaxhighlight lang="xml"> |
<for all="${sys:heroes}" name="heldid"> | <for all="${sys:heroes}" name="heldid"> | ||
<select hero="${heldid}"/> | <select hero="${heldid}"/> | ||
<p>Name: <get attribute="name"/></p> | <p>Name: <get attribute="name"/></p> | ||
</for> | </for> | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | ===Einer Gruppe (von selektierten) Helden X eines Gegenstandes wegnehmen=== | ||
+ | Die Nachfolgende Routine entfernt von den selektierten Helden insgesamt eine gewünschte Anzahl Gegenstände. Sind nicht genug Gegenstände vorhanden, werden alle entfernt. Die Anzahl entfernter Gegenstände wird gespeichert. Um die Routine auf die gesamte Gruppe anzuwenden, entweder ein ''<select all="true"/>'' einfügen oder ''selected-'' in der for-Schleife entfernen. | ||
+ | |||
+ | '''Achtung Stolperstein:''' Nach Aufruf dieser Routine ist nur noch ein Held selektiert. Außerdem wird die Variable ''anzahl_wegzuwerfen'' überschrieben (verringert)! | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <!-- Routine wirft bis zu "anzahl_wegzuwerfen" Gegenstände "wegzuwerfender_gegenstand" weg. Bonus: Speichert die Anzahl tatsächlich weggeworfenen Gegenstände in "anzahl_weggeworfen". Funktioniert auch für Einzelhelden. --> | ||
+ | <retain name="entferne_x_dieses_gegenstandes" id="entferne_gegenstaende"> | ||
+ | <store name="anzahl_weggeworfen">0</store> | ||
+ | <for all="${sys:selected-heroes}" name="CodeSnippet_held_id"> | ||
+ | <select hero="${CodeSnippet_held_id}"/> | ||
+ | <store name="temp"><function name="ermittle-item-anzahl" param1="${wegzuwerfender_gegenstand}"/></store> | ||
+ | <switch name="anzahl_wegzuwerfen"> | ||
+ | <case val="0"> | ||
+ | <!-- Kein Inhalt, da nichts getan werden muss. Fall vorhanden, da sonst ELSE-Zweig ausgeführt würde. --> | ||
+ | </case> | ||
+ | <case min="1" max="${temp}"><!-- Held hat mindestens so viele Gegenstände, wie weggeworfen werden sollen und es soll mindestens einer weggeworfen werden. --> | ||
+ | <set name="anzahl_weggeworfen" inc="${anzahl_wegzuwerfen}" show="none"/> | ||
+ | <drop item="${wegzuwerfender_gegenstand}" count="${anzahl_wegzuwerfen}"/> | ||
+ | <set name="anzahl_wegzuwerfen" val="0" show="none"/><!-- Es muss nichts mehr weggeworfen werden. --> | ||
+ | </case> | ||
+ | <else><!-- Falls der selektierte Held weniger Gegenstände hat, als noch wegzunehmen sind. --> | ||
+ | <drop item="${wegzuwerfender_gegenstand}" count="${temp}"/><!-- Held werden so viele geklaut, wie er halt hat, da er weniger hat als noch insgesamt wegzuwerfen sind. Keine Ausgabe, falls ihm nichts geklaut wird.--> | ||
+ | <set name="anzahl_weggeworfen" inc="${temp}" show="none"/> | ||
+ | <set name="anzahl_wegzuwerfen" dec="${temp}" show="none"/> | ||
+ | </else> | ||
+ | </switch> | ||
+ | </for> | ||
+ | </retain> | ||
+ | </syntaxhighlight> | ||
− | |||
==Sonstiges== | ==Sonstiges== | ||
Zeile 408: | Zeile 501: | ||
Datei 1: | Datei 1: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<q>Text informiert SC darüber, dass er einige Zeit in der Queste verbleiben muss.</q> | <q>Text informiert SC darüber, dass er einige Zeit in der Queste verbleiben muss.</q> | ||
<store name="held_wird_eingesperrt" scope="quest" expire="2h">...</store> | <store name="held_wird_eingesperrt" scope="quest" expire="2h">...</store> | ||
− | <countdown | + | <countdown name="held_wird_eingesperrt"/><!-- Anzeige, damit der Spieler weiß, wie lange noch. --> |
<ul> | <ul> | ||
<li><choice target="raus">Darf ich gehen?</choice></li> | <li><choice target="raus">Darf ich gehen?</choice></li> | ||
</ul> | </ul> | ||
− | </ | + | </syntaxhighlight> |
Datei 2 (raus.xml): | Datei 2 (raus.xml): | ||
− | < | + | <syntaxhighlight lang="xml"> |
<has name="held_wird_eingesperrt"> | <has name="held_wird_eingesperrt"> | ||
<success><!-- Variable existiert noch, Held bleibt eingesperrt. --> | <success><!-- Variable existiert noch, Held bleibt eingesperrt. --> | ||
− | + | <q>NEIN!</q> | |
− | + | <countdown name="held_wird_eingesperrt"/> | |
− | + | <ul> | |
− | + | <li><choice target="raus">Darf ich gehen?</choice></li> | |
− | + | </ul> | |
</success> | </success> | ||
<failure> | <failure> | ||
− | + | <q>Text Held darf gehen/wacht auf.</q> | |
− | + | <quest status="ended"/> <!-- Oder weiter in der Queste, je nachdem. --> | |
+ | </failure> | ||
+ | </has> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Jahreszeiten === | ||
+ | |||
+ | Für jahreszeitabhängige Texte... | ||
+ | |||
+ | '''Achtung:''' | ||
+ | ''Nordhalbkugel'' | ||
+ | |||
+ | <syntaxhighlight lang="xml"> | ||
+ | |||
+ | <switch attribute="monat"> | ||
+ | <case val="Ehrenmond|Hoffnungsmond|Wassermond"> | ||
+ | <!-- Frühling --> | ||
+ | </case> | ||
+ | |||
+ | <case val="Liebesmond|Weisheitsmond|Erdenmond"> | ||
+ | <!-- Sommer --> | ||
+ | </case> | ||
− | </ | + | <case val="Heilungsmond|Ahnenmond|Feuermond"> |
+ | <!-- Herbst --> | ||
+ | </case> | ||
− | + | <else> | |
+ | <!-- Winter --> | ||
+ | </else> | ||
+ | </switch> | ||
+ | |||
+ | </syntaxhighlight> | ||
− | Für | + | Für die ''Südhalbkugel'' gilt entsprechend der nachfolgende Quelltext. Beachte bitte, dass der Äquator ''sehr'' weit im Süden verläuft und nicht zwischen den zwei Kontinenten, siehe dazu [[Antamar_Welt#Der_Kontinent|hier]] einige Karten. |
− | < | + | <syntaxhighlight lang="xml"> |
<switch attribute="monat"> | <switch attribute="monat"> | ||
+ | <case val="Heilungsmond|Ahnenmond|Feuermond"> | ||
+ | <!-- Frühling --> | ||
+ | </case> | ||
+ | |||
<case val="Herdfeuermond|Maskenmond|Lichtmond"> | <case val="Herdfeuermond|Maskenmond|Lichtmond"> | ||
− | + | <!-- Sommer --> | |
</case> | </case> | ||
<case val="Ehrenmond|Hoffnungsmond|Wassermond"> | <case val="Ehrenmond|Hoffnungsmond|Wassermond"> | ||
− | + | <!-- Herbst --> | |
− | |||
− | |||
− | |||
− | |||
</case> | </case> | ||
<else> | <else> | ||
− | + | <!-- Winter --> | |
</else> | </else> | ||
</switch> | </switch> | ||
− | </ | + | </syntaxhighlight> |
=== Zufällige Zuweisung einer anderen ZB === | === Zufällige Zuweisung einer anderen ZB === | ||
Zeile 467: | Zeile 588: | ||
Folgende Funktion gilt für ZBs, um es zu ermöglichen, dass bei einer misslungenen Startbedingung, statt der ursprünglichen ZB, eine andere, zufällige ZB ausgeführt wird. | Folgende Funktion gilt für ZBs, um es zu ermöglichen, dass bei einer misslungenen Startbedingung, statt der ursprünglichen ZB, eine andere, zufällige ZB ausgeführt wird. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<failure> | <failure> | ||
− | <quest status="rejected"/> | + | <quest status="rejected"/> |
</failure> | </failure> | ||
− | </ | + | </syntaxhighlight> |
=== Abfrage der Landessprache === | === Abfrage der Landessprache === | ||
Zeile 477: | Zeile 598: | ||
AOQML ermöglichst eine Abfrage der Region, in der sich ein Char gerade befindet, nicht aber der dort vorwiegend gesprochenen Landessprache. Folgender Code speichert die Landessprache in der Variable "name" ab. Ob der Held diese spricht, ist in der Variable "kannsprache" gespeichert. | AOQML ermöglichst eine Abfrage der Region, in der sich ein Char gerade befindet, nicht aber der dort vorwiegend gesprochenen Landessprache. Folgender Code speichert die Landessprache in der Variable "name" ab. Ob der Held diese spricht, ist in der Variable "kannsprache" gespeichert. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<switch attribute="site_staatenbund"> | <switch attribute="site_staatenbund"> | ||
<case val="Heiliges Kaiserreich"> | <case val="Heiliges Kaiserreich"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Nuovo Imperio Aurecciani"> | <case val="Nuovo Imperio Aurecciani"> | ||
− | + | <store name="sprache" scope="quest">Aurento</store> | |
</case> | </case> | ||
<case val="Großsultanat Emreia"> | <case val="Großsultanat Emreia"> | ||
− | + | <store name="sprache" scope="quest">Bajidai</store> | |
</case> | </case> | ||
<case val="Kaiserreich des Südsterns"> | <case val="Kaiserreich des Südsterns"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Godentum Nordahejmr"> | <case val="Godentum Nordahejmr"> | ||
− | + | <store name="sprache" scope="quest">Nordahejmisch</store> | |
− | + | <has talent="Nordahejmisch" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Orkreich"> | <case val="Orkreich"> | ||
− | + | <store name="sprache" scope="quest">Orkisch</store> | |
− | + | <has talent="Orkisch" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Zollunion Goblinia"> | <case val="Zollunion Goblinia"> | ||
− | + | <store name="sprache" scope="quest">Goblinisch</store> | |
− | + | <has talent="Goblinisch" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Adelsrepublik Grauland"> | <case val="Adelsrepublik Grauland"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Aivarunenlande"> | <case val="Aivarunenlande"> | ||
− | + | <store name="sprache" scope="quest">Avarun</store> | |
<has talent="Avarun" min="6" show="none"> | <has talent="Avarun" min="6" show="none"> | ||
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Xetoka"> | <case val="Xetoka"> | ||
− | + | <store name="sprache" scope="quest">Xeanhatl</store> | |
− | + | <has talent="Xeanhatl" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Eiskönigreich"> | <case val="Eiskönigreich"> | ||
− | + | <store name="sprache" scope="quest">Urelfisch</store> | |
− | + | <has talent="Urelfisch" min="6" show="none"> | |
− | + | <success> | |
<store name="kannsprache" scope="quest">ja</store> | <store name="kannsprache" scope="quest">ja</store> | ||
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Emirat El-Ahil"> | <case val="Emirat El-Ahil"> | ||
− | + | <store name="sprache" scope="quest">Bajidai</store> | |
</case> | </case> | ||
<case val="Emirat Karkasso"> | <case val="Emirat Karkasso"> | ||
− | + | <store name="sprache" scope="quest">Bajidai</store> | |
</case> | </case> | ||
<case val="Emirat Seydjuk"> | <case val="Emirat Seydjuk"> | ||
− | + | <store name="sprache" scope="quest">Bajidai</store> | |
</case> | </case> | ||
<case val="Fürstentum Herzstein"> | <case val="Fürstentum Herzstein"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Fürstentum Thelessa"> | <case val="Fürstentum Thelessa"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Fürstentum Exondria"> | <case val="Fürstentum Exondria"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Großfürstentum des Südmeers"> | <case val="Großfürstentum des Südmeers"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Herzogtum Galfar"> | <case val="Herzogtum Galfar"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Kalifat Dorien"> | <case val="Kalifat Dorien"> | ||
− | + | <store name="sprache" scope="quest">Bajidai</store> | |
</case> | </case> | ||
<case val="Königreich Lothrinien"> | <case val="Königreich Lothrinien"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Königreich Lúnasadh"> | <case val="Königreich Lúnasadh"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Königreich Westendar"> | <case val="Königreich Westendar"> | ||
− | + | <store name="sprache" scope="quest">Aurento</store> | |
</case> | </case> | ||
<case val="Echsenreich"> | <case val="Echsenreich"> | ||
− | + | <store name="sprache" scope="quest">ZheeZ</store> | |
− | + | <has talent="ZheeZ" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Sartogasso"> | <case val="Sartogasso"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
<case val="Sawajidden-Kalifat"> | <case val="Sawajidden-Kalifat"> | ||
− | + | <store name="sprache" scope="quest">Bajidai</store> | |
</case> | </case> | ||
<case val="Shogunate"> | <case val="Shogunate"> | ||
− | + | <store name="sprache" scope="quest">Oda</store> | |
− | + | <has talent="Oda" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Elfen"> | <case val="Elfen"> | ||
− | + | <store name="sprache" scope="quest">Elfisch</store> | |
− | + | <has talent="Elfisch" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Zwerge"> | <case val="Zwerge"> | ||
− | + | <store name="sprache" scope="quest">Zwergisch</store> | |
− | + | <has talent="Zwergisch" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</case> | </case> | ||
<case val="Magokratie Wiesczarna"> | <case val="Magokratie Wiesczarna"> | ||
− | + | <store name="sprache" scope="quest">Imperial</store> | |
</case> | </case> | ||
</switch> | </switch> | ||
Zeile 624: | Zeile 745: | ||
<has name="sprache" val="Imperial" show="none"> | <has name="sprache" val="Imperial" show="none"> | ||
<success> | <success> | ||
− | + | <has talent="Imperial" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</success> | </success> | ||
</has> | </has> | ||
Zeile 634: | Zeile 755: | ||
<has name="sprache" val="Aurento" show="none"> | <has name="sprache" val="Aurento" show="none"> | ||
<success> | <success> | ||
− | + | <has talent="Aurento" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</success> | </success> | ||
</has> | </has> | ||
Zeile 644: | Zeile 765: | ||
<has name="sprache" val="Bajidai" show="none"> | <has name="sprache" val="Bajidai" show="none"> | ||
<success> | <success> | ||
− | + | <has talent="Bajidai" min="6" show="none"> | |
− | + | <success> | |
− | + | <store name="kannsprache" scope="quest">ja</store> | |
− | + | </success> | |
− | + | </has> | |
</success> | </success> | ||
</has> | </has> | ||
− | </ | + | </syntaxhighlight> |
=== Heldeneinstellungen bei Kämpfen im Orkreich beachten === | === Heldeneinstellungen bei Kämpfen im Orkreich beachten === | ||
Zeile 658: | Zeile 779: | ||
Diese Vorlage dient zur Abfrage der Heldeneinstellungen (Auftreten: offen-heimlich; im Kampf: aggressiv-beschwichtigend). Um einen Konsens zu finden, wie man die Heldeneinstellungen berücksichtigen könnte, werden Richtlinien angeboten. Jeder Autor ist jedoch frei in seinen Entscheidungen und kann auch von den Richtlinien abweichen. | Diese Vorlage dient zur Abfrage der Heldeneinstellungen (Auftreten: offen-heimlich; im Kampf: aggressiv-beschwichtigend). Um einen Konsens zu finden, wie man die Heldeneinstellungen berücksichtigen könnte, werden Richtlinien angeboten. Jeder Autor ist jedoch frei in seinen Entscheidungen und kann auch von den Richtlinien abweichen. | ||
− | < | + | <syntaxhighlight lang="xml"> |
<switch attribute="vorgehen" > | <switch attribute="vorgehen" > | ||
<case val="offen"> | <case val="offen"> | ||
<has attribute="kampf" val="aktiv" show="none" > | <has attribute="kampf" val="aktiv" show="none" > | ||
− | + | <success> | |
− | + | <!-- Der Held ist ein offensiver Kämpfer. Das heißt aber nicht, dass er einfach so in sein Verderben rennen sollte. Der Held mag zwar stark sein, aber nicht blöd. Vor besonders starken oder vielen Gegnern wäre es schön, noch eine IQ- oder Kriegskunst-Probe vorzuschalten. <strong>Fallbeispiel 1:</strong> Der Held kämpft gegen eine Orkpatrouille mit Berserker (oder Kriegsoger) und Orkanführer; hier geht er ein hohes Risiko ein, aber kann auch die besten Sachen gewinnen, weil die Orktrupps gut ausgerüstet sind. <strong>Fallbeispiel 2:</strong> Der Held kämpft gegen zwei Orks, oder einen Ork mit Oger; das Risiko ist geringer, als im Fall einer Orkpatrouille, aber dafür sind diese Orks (und der Oger) auch nicht so gut ausgerüstet. <strong>Fallbeispiel 3:</strong> Der Held kämpft gegen zwei (drei) dumme Orks, oder Goblins, die grundsätzlich nicht mit sich verhandeln lassen, sondern meinen, dass sie mehr bekommen würden, wenn sie den Helden ausrauben; das Risiko ist hier gering, aber weil es sich um dumme Gegner handelt, haben sie es im Leben auch zu nichts gebracht und sind daher auch schlecht ausgerüstet (nur billiger Kram). <strong>Fallbeispiel 4:</strong> Der Held kämpft gegen Tiere im gesamten Orkreich und gegen Untote in den Sümpfen zwischen Birh-Gichem und Nesh-Kurdoon - selbsterklärend. --> | |
− | + | </success> | |
− | + | <failure> | |
− | + | <!-- Der Held ist ein offener, aber friedfertiger Wanderer (Jäger, Händler, Handwerker etc.). <strong>Fallbeispiel 1:</strong> Einer Orkpatrouille kann man nur schwer ausweichen, also versucht der Held zu verhandeln (leichte Proben auf Orkisch, Überreden, Überzeugen). Schafft er die Proben nicht, verliert er seine Waffen und einige Waren und bekommt einen Tritt in den Hintern (Abzug von 10 Lebenspunkten). Schafft er es, den Orkanführer zu überzeugen, dann muss er Dienstleistungen erbringen (mit den Orks jagen und ihnen die Beute überlassen, etwas reparieren etc. - Proben), was seine Zeit dauert (Reiseverzögerung von ein oder zwei Tagen), oder er muss einen Tribut zahlen (Proben auf Orkisch, Handeln, Feilschen, Wert schätzen mit Warenverlust), um weiter gelassen zu werden - man kann verschiedene Proben auch einfach hintereinander schalten und sobald der Held die erste nicht besteht, kommt die nächste. Besteht der Held keine der Proben, wird er einiger Dinge beraubt und muss den Orks für drei Tage als "Mädchen für alles" dienen (Warenverlust und Reiseverzögerung). <strong>Fallbeispiel 2:</strong> Zwei wachsame Orks, oder ein wachsamer Ork, der seinen Oger unter Kontrolle hat, sind auch nicht so leicht zu umschleichen. Der Held wird es also auch hier lieber mit verhandeln versuchen. Hier ist das gleiche Vorgehen wie bei der Orkpatrouille anzuraten, wobei die Proben auch etwas leichter sein können, da man ja nicht mit so einer Persönlichkeit verhandeln muss wie mit einem Orkanführer. Dafür könnten die Konsequenzen im Falle des Nichtbestehens der Proben etwas größer sein und der Wanderer bekommt zusätzlich noch einen Tritt in den Hintern (Warenverlust, Reiseverzögerung und Abzug von 10 Lebenspunkten). <strong>Fallbeispiel 3:</strong> Dumme und schlecht ausgerüstete Orks oder Goblins lassen eher nicht mit sich handeln, dann muss der Held kämpfen. <strong>Fallbeispiel 4:</strong> Gegen wilde Tiere wird auch immer gekämpft,ebenso kämpft der Held gegen die Untoten in den Sümpfen zwischen Birh-Gichem und Nesch-Kurdoon. --> | |
− | + | </failure> | |
− | + | </has> | |
</case> | </case> | ||
<else> | <else> | ||
<has attribute="kampf" val="aktiv" show="none" > | <has attribute="kampf" val="aktiv" show="none" > | ||
− | + | <success> | |
− | + | <!-- Der Held ist ein heimlicher Kämpfer, große Gefahren meidet er, aber sobald er eine Aussicht auf Erfolg hat, greift er an. <strong>Fallbeispiel 1:</strong> Er versucht die Orkpatrouille, zu umschleichen (schwere Probe auf Schleichen und Verstecken, bei Bestehen lange Reiseverzögerung), schafft er das nicht, kommt es zum Kampf, denn so ganz ohne Gegenwehr will er sich ja nicht ergeben. Ob er dann bis zum Tode kämpft oder vorher flieht, kann der Spieler ja noch über die Fluchteinstellungen seines Helden regeln. <strong>Fallbeispiel 2:</strong> Da der Held nicht gerade friedfertig unterwegs ist, wird er sich gegen zwei Gegner schon eine Chance ausrechnen, es kommt also zum Kampf. Gegebenenfalls kann der Held durch eine vorgelagerte und bestandene hohe Schleichen-Probe sogar einen kleinen Vorteil bekommen, weil er einen Ork überrumpelt - ein Ork hat dann z.B. schon nicht mehr die volle LE. <strong>Fallbeispiel 3:</strong> Bei den Kämpfen gegen die dummen und schlecht ausgerüsteten Orks und Goblins sollte der Held durch eine bestandene Schleichen-Probe ebenfalls einen Vorteil bekommen (vielleicht hat sogar einer der Gegner dann schon eine Wunde). <strong>Fallbeispiel 4:</strong> Der Held kämpft gegen wilde Tiere und die Untoten in den Sümpfen, weil die Tiere eine zu gute Witterung haben, oder der Held sie voher nicht wahrnehmen kann, wie die Speiechse, oder sie auf übernatürliche Art und Weise die Gegenwart eines Lebenden spüren. --> | |
− | + | </success> | |
− | + | <failure> | |
− | + | <!-- Der Held ist ein Heiler, oder Gelehrter, oder einfach jemand, der jedem Ärger aus dem Wege gehen will. <strong>Fallbeispiel 1:</strong> Er versucht zuerst die Orkpatrouille zu umschleichen (schwere Probe auf Schleichen und Verstecken, bei Bestehen lange Reiseverzögerung), schafft er das nicht, versucht er zu verhandeln, wobei die Orks natürlich misstrauisch sind, warum sich jemand an ihnen vorbei schleichen will (schwere Proben auf Orkisch, Überreden, Überzeugen), besteht er hier nicht, gibt es Saures (Warenverlust und Reiseverzögerung und Abzug von 10 LEP), besteht er sie, verlangen die Orks von ihm ihre Kranken zu heilen, oder die Verletzten zu versorgen, oder ihnen etwas bei zu bringen und über die Welt außerhalb des Orkreiches zu berichten (Probe auf Lehren sowie Wissensfertigkeiten), was dann zu einer Reiseverzögerung führt. <strong>Fallbeispiel 2:</strong> Auch an den Ork(s)-und-Oger-Paaren wird der Held erst einmal versuchen, sich vorbei zu schleichen (Reiseverzögerung). Schafft er die Proben nicht, versucht er ebenso wie bei der Orkpatrouille zu verhandeln (Proben können etwas leichter sein, weil die normalen Orks sich denken, dass man sie auch für dumme Räuber und Banditen halten könnte). Schafft der Held es aber nicht, die Orks, oder den Ork mit Oger zu überreden oder zu überzeugen, so gibt es Saures (Warenverlust, Reiseverzögerung und Abzug von 10 LEP). Schafft er es aber, die Orks (oder den Ork mit Oger) zu überreden oder zu überzeugen, dann kann er mit ihnen in ihr Dorf gehen und Kranke heilen (Reiseverzögerung), oder er geht mit ihnen in ihr Dorf und bringt ihnen etwas bei (Probe auf Lehren und Wissensfertigkeiten), wodurch die Reise sich auch verzögert. Schafft er keine der Proben, bekommt er Saures (Warenverlust und Reiseverzögerung und Abzug von 10 LEP). <strong>Fallbeispiel 3:</strong> An den dummen Orks oder Goblins sollte der Held leicht vorbeischleichen können, denn die stellen keine Wachen auf (Proben Schleichen und Verstecken). Schafft er das nicht, kommt es zum Kampf, weil die dummen Orks und Goblins ja der Ansicht sind, dass sie beim Verhandeln nur über das Ohr gehauen werden (eventuell kann man hier auch sehr hohe Proben auf Orkisch bzw. Goblinisch, Überreden und Überzeugen ansetzen, wenn der Held noch eine weitere Chance haben soll). <strong>Fallbeispiel 4:</strong> Gegen Tiere und Untote muss der Held kämpfen. Die Speiechse kann ausgenommen werden, wenn der Held eine Abfrage auf Tierkunde besteht und weiß, dass die sich nur in ihrem Revier gestört gefühlt hat. --> | |
− | + | </failure> | |
− | + | </has> | |
</else> | </else> | ||
</switch> | </switch> | ||
− | </ | + | </syntaxhighlight> |
Zeile 689: | Zeile 810: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<switch attribute="vorgehen" > | <switch attribute="vorgehen" > | ||
<case val="offen"> | <case val="offen"> | ||
<has attribute="kampf" val="aktiv" show="none" > | <has attribute="kampf" val="aktiv" show="none" > | ||
− | + | <success> | |
− | + | <!-- Der Held ist ein offensiver Kämpfer. --> | |
− | + | </success> | |
− | + | <failure> | |
− | + | <!-- Der Held ist ein offener, aber friedfertiger Wanderer (Jäger, Händler, Handwerker etc.). --> | |
− | + | </failure> | |
− | + | </has> | |
</case> | </case> | ||
<else> | <else> | ||
<has attribute="kampf" val="aktiv" show="none" > | <has attribute="kampf" val="aktiv" show="none" > | ||
− | + | <success> | |
− | + | <!-- Der Held ist ein heimlicher Kämpfer, große Gefahren meidet er, aber sobald er eine Aussicht auf Erfolg hat, greift er an. --> | |
− | + | </success> | |
− | + | <failure> | |
− | + | <!-- Der Held ist ein Heiler, oder Gelehrter, oder einfach jemand, der jedem Ärger aus dem Wege gehen will. --> | |
− | + | </failure> | |
− | + | </has> | |
</else> | </else> | ||
</switch> | </switch> | ||
− | </ | + | </syntaxhighlight> |
+ | === Mondphasen durchgehen === | ||
+ | Folgender Code beinhaltet sämtliche mögliche Mondphasen in ihren Kombinationsmöglichkeiten. Je nach Anwendungsbereich, kann der ''switch'' auf das Attribut ''tag'' auch ausgegliedert werden. | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <switch attribute="monat"> | ||
+ | <case value="Lichtmond|Liebesmond|Ahnenmond"> | ||
+ | <!-- Fiomond voll --> | ||
+ | <switch attribute="tag"> | ||
+ | <case min="1" max="7"> | ||
+ | <!-- Mond Neumond --> | ||
+ | </case> | ||
+ | <case min="8" max="15"> | ||
+ | <!-- Mond zunehmend --> | ||
+ | </case> | ||
+ | <case min="16" max="22"> | ||
+ | <!-- Mond voll --> | ||
+ | </case> | ||
+ | <case min="23" max="30"> | ||
+ | <!-- Mond abnehmend --> | ||
+ | </case> | ||
+ | </switch> | ||
+ | </case> | ||
+ | |||
+ | <case value="Hoffnungsmond|Erdmond|Herdfeuermond"> | ||
+ | <!-- Fiomond Neumond --> | ||
+ | <switch attribute="tag"> | ||
+ | <case min="1" max="7"> | ||
+ | <!-- Mond Neumond --> | ||
+ | </case> | ||
+ | <case min="8" max="15"> | ||
+ | <!-- Mond zunehmend --> | ||
+ | </case> | ||
+ | <case min="16" max="22"> | ||
+ | <!-- Mond voll --> | ||
+ | </case> | ||
+ | <case min="23" max="30"> | ||
+ | <!-- Mond abnehmend --> | ||
+ | </case> | ||
+ | </switch> | ||
+ | </case> | ||
+ | |||
+ | <case value="Maskenmond|Wassermond|Heilungsmond"> | ||
+ | <!-- Fiomond zunehmend --> | ||
+ | <switch attribute="tag"> | ||
+ | <case min="1" max="7"> | ||
+ | <!-- Mond Neumond --> | ||
+ | </case> | ||
+ | <case min="8" max="15"> | ||
+ | <!-- Mond zunehmend --> | ||
+ | </case> | ||
+ | <case min="16" max="22"> | ||
+ | <!-- Mond voll --> | ||
+ | </case> | ||
+ | <case min="23" max="30"> | ||
+ | <!-- Mond abnehmend --> | ||
+ | </case> | ||
+ | </switch> | ||
+ | </case> | ||
+ | |||
+ | <case value="Ehrenmond|Weisheitsmond|Feuermond"> | ||
+ | <!-- Fiomond abnehmend --> | ||
+ | <switch attribute="tag"> | ||
+ | <case min="1" max="7"> | ||
+ | <!-- Mond Neumond --> | ||
+ | </case> | ||
+ | <case min="8" max="15"> | ||
+ | <!-- Mond zunehmend --> | ||
+ | </case> | ||
+ | <case min="16" max="22"> | ||
+ | <!-- Mond voll --> | ||
+ | </case> | ||
+ | <case min="23" max="30"> | ||
+ | <!-- Mond abnehmend --> | ||
+ | </case> | ||
+ | </switch> | ||
+ | </case> | ||
+ | </switch> | ||
+ | </syntaxhighlight> | ||
Aktuelle Version vom 21. Dezember 2023, 17:08 Uhr
Hier entsteht eine Sammlung von Versatzstücken für die AOQML-Programmierung, sogenannten CodeSnippets. Es soll die möglichst eleganteste, sicherste und platzsparendste Methode hier stehen.
Inhaltsverzeichnis
ZB-Aufbau
Einfacher ZB-Grundaufbau
Einführungstext (Z4), dann erste Talentprobe (Z5) und wenn diese gelingt, eine weitere (Z11), danach EP-Vergabe (Z14,18) und wenn beide Proben positiv verliefen, auch Gewinn eines Gegenstands (Z19); Texte nur zwischen p und /p:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) -->
<scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd">
<p></p>
<challenge talent="X">
<failure>
<p></p>
</failure>
<success>
<p></p>
<challenge talent="X">
<failure>
<p></p>
<set attribute="EP" inc="X"/>
</failure>
<success>
<p></p>
<set attribute="EP" inc="X"/>
<take item="X"/>
</success>
</challenge>
</success>
</challenge>
</scene>
Einfacher ZB-Grundaufbau mit variierenden Textstücken
Viele Begegnungen haben variierende Textinhalte, die aber das gleiche beschreiben, dadurch wird für Abwechselung innerhalb einer ZB gesorgt und es ist nicht immer der gleiche langweilige Text, den man sofort erkennt. Die ist noch besser einsetzbar für gleichwertige Ereignisse, wo also nicht jeder Text innerhalb der ZB aufeinander aufbauen muss und sich auch von den gleichwertigen cases unterscheiden kann.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) -->
<scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd">
<p>
<random>
<case></case>
<case></case>
<case></case>
<case></case>
</random>
</p>
<challenge talent="" mod="+X">
<failure>
<p>
<random>
<case></case>
<case></case>
<case></case>
<case></case>
</random>
</p>
</failure>
<success>
<p>
<random>
<case></case>
<case></case>
<case></case>
<case></case>
</random>
</p>
</success>
</challenge>
</scene>
ZB mit Voraussetzung
In Z2 wird eine Talentvoraussetzung (auch möglich: Gegenstand X muss vorhanden sein - has item="X|Y|Z") abgefragt, der Char muss als eines der angegebenen Talent auf dem angegeben Mod haben, sonst wird der success-Zweig nicht ausgeführt (in dem der Charakter einen Gegenstand erhält) und es bleibt nur ein Trösttext (in diesem Falle mit einer anderen Probe, um noch etwas EP zu erhalten)...
<has talent="X|Y" mod="+X">
<success>
<p></p>
<take item="X"/>
</success>
<failure>
<challenge talent="" mod="+X">
<success>
<p></p>
<set attribute="EP" inc="X"/>
</success>
<failure>
<p></p>
<set attribute="EP" inc="X"/>
</failure>
</challenge>
</failure>
</has>
Einfacher ZB-Grundaufbau für Gruppen
Einführungstext (Z4), dann eine Talentprobe (Z5), wobei im Erfolgsfall geschaut wird, welcher Held diese am besten besteht (Z10), danach EP-Vergabe (Z11); Texte nur zwischen p und /p:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Kommentar zu Auftreten, Autor, Besonderheiten (z.B. ob Humor-ZB) -->
<scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://spiel.antamar.org/Antamar/xml/aoqml/aoqml.xsd">
<p></p>
<challenge talent="X" id="P1">
<failure>
<p></p>
</failure>
<success>
<p><hero output="name" by-challenge="P1" select="best" /> hat die Probe am Besten geschafft.</p>
<set attribute="EP" inc="X"/>
</success>
</challenge>
</scene>
Talente
Einfache Talentprobe
<challenge talent="Talent" mod="+X">
<success>
<p></p>
</success>
<failure>
<p></p>
</failure>
</challenge>
Erleichterte Talentprobe durch Gegenstände
In Z1 wird abgefragt, ob einer der angegebenen Gegenstände vorhanden ist, wenn ja, wir die Probe erleichtert (Z3), ansonsten erschwert durchgeführt (Z13):
<has item="X|Y">
<success>
<challenge talent="">
<failure>
<p></p>
</failure>
<success>
<p></p>
</success>
</challenge>
</success>
<failure>
<challenge talent="" mod="+X">
<failure>
<p></p>
</failure>
<success>
<p></p>
</success>
</challenge>
</failure>
</has>
Alternative Talentabfrage
Anmerkung: Dies betrifft vor allem Talente, die eher selten sind und wo der Held auf ein Talent ausweichen kann, das er ziemlich sicher hat. Ansonsten könnte im failure-Zweig des ersten has talent auch ein zweites has talent eingebaut werden.
<has talent="Talent1">
<success>
<challenge talent="Talent1">
<success>
...
</success>
<failure>
...
</failure>
</challenge>
</success>
<failure>
<challenge talent="Talent2">
<success>
...
</success>
<failure>
...
</failure>
</challenge>
</failure>
</has>
Verbesserte modifizierte Probe
Mit dieser Methode kann man eine Probe recht übersichtlich mit mehreren Faktoren modifizieren. Neben Ausrüstung sind auch andere Sachen wie Variablen oder unterstützende Talente möglich.
<store name="probenvariable_1" scope="quest">5</store><!-- Probe ohne Ausrüstung um 5 erschwert. -->
<has item="XXX"><!-- Man kann auch anderes mit has oder switch abfragen. -->
<success>
<set name="probenvariable_1" dec="2" show="none"/><!-- Malus wird um 2 erleichtert. -->
</success>
<failure>
<!-- Fehlt der Gegenstand, wird nicht modifiziert. -->
</failure>
</has>
<has item="YYY"><!-- Man kann auch anderes mit has oder switch abfragen. -->
<success>
<set name="probenvariable_1" dec="2" show="none"/><!-- Malus wird um 2 erleichtert. -->
</success>
<failure>
<!-- Fehlt der Gegenstand, wird nicht modifiziert. -->
</failure>
</has>
<challenge talent="AOQML-Programmierung" mod="${probenvariable_1}">
<!-- Als Modi wird der Inhalt der Variable gezogen, also 5 ohne Ausrüstung und weniger (also leichter) wenn geeignete Ausrüstung vorhanden. -->
<success>
<!-- Hier dann Ergebnis Erfolg. -->
</success>
<failure>
<!-- Hier Misserfolg. -->
</failure>
</challenge>
Heldenspezifisches
Den Solohelden namentlich ansprechen
<get attribute="name"/>
Mann oder Frau?
In Z3 wird der Text für Männer ausgegeben, in Z6 der für Frauen.
<switch attribute="gender">
<case value="male">
<p></p>
</case>
<else>
<p></p>
</else>
</switch>
Oder auch direkt in den Text einbinden:
<if attribute="gender" equals="female" null="Ein geschlechtsloses Wesen" then="Eine junge Frau" else="Ein junger Mann"/> kommt dir entgegen.
Hat der Held soundsoviel Geld?
Wenn es wichtig ist, ob der Held einen Mindestbetrag an Geld dabei hat.
<has attribute="cash" min="X">
<success>
<p></p>
</success>
<failure>
<p></p>
</failure>
</has>
Wurde der Held verletzt?
Wenn es wichtig ist, ob der Held in einem Kampf Schadenspunkte bekommen hatte.
<store name="LEPvorher" scope="quest"><get attribute="LEP"/></store>
<!-- Prügelei ... -->
<switch Attribute="LEP">
<case min="${LEPvorher}">
<!-- Fall: vorher so viele LEP wie nachher oder mehr -->
</case>
<else>
<!-- Fall: nachher weniger LEP als vorher -->
</else>
</switch>
Gottheitsspezifische Begrüßung
Je nach eingestellter Gottheit, wird die Grußformel entsprechend gesetzt. Ergebnis ist dann z. B. ein "Bei Athos, ..."
<store name="gottheit" scope="quest"><get attribute="gottheit"/></store>
<switch name="gottheit">
<case val="Atheist">
<store name="output_gottheit" scope="quest" >Bei allen Dämonen und Untoten</store>
</case>
<case val="Religionsphilosoph">
<store name="output_gottheit" scope="quest" >Bei allen Göttern und Göttinnen</store>
</case>
<else>
<store name="output_gottheit" scope="quest" >Bei <get attribute="gottheit"/></store>
</else>
</switch>
<p><fetch name="output_gottheit"/>, ...</p>
Kälteschutz
<switch attribute="KS">
<case min="1" max="2">
Viel zu dünne Kleidung.
<set attribute="LEP" dec="1...2"/>
</case>
<case min="3" max="4">
Etwas zu dünn angezogen.
<set attribute="LEP" dec="1"/>
</case>
<case min="5">
<!-- Alles ok, dick genug angezogen -->
</case>
<else>
<!-- 0-2 Kälteschutz -->
Der Kälte aufgrund deiner viel zu dünnen Kleidung auch noch schutzlos ausgeliefert.
<set attribute="LEP" dec="2...4"/>
</else>
</switch>
nützliche Gegenstands-Kombinationen
Schreibzeug?
Für Schreibzeug gibt es viele Kombinationen, daher steht dafür ein Makro zur Verfügung
<store name="hatSchreibzeug"/>
<p>Der Held hat
<include target="/lib/_hatSchreibzeug"/>
<switch name="hatSchreibzeug">
<case val="true">
Schreibzeug dabei und könnte also etwas aufschreiben.
</case>
<else>
leider kein Schreibzeug dabei und könnte daher nichts aufschreiben.
</else>
</switch>
</p>
Ggf. stellt der Editor die Include-Datei als nicht vorhanden dar. Das bitte einfach ignorieren. Zum einen liegt das daran, dass der absolute Pfad noch nicht richtig aufgelöst wird, zum anderen daran, dass diese Datei ggf. lokal gar nicht zur Verfügung steht.
Zufälle
Zufallstexte
Eine normale Zufallsauswahl, jeder Case ist gleichberechtigt.
<random>
<case>
<p></p>
</case>
<case>
<p></p>
</case>
<case>
<p></p>
</case>
<case>
<p></p>
</case>
</random>
Prozentuale Zufallsauswahl
Wenn man die Ereignisse einer Zufallsauswahl etwas steuern will, weil manches häufiger als anderes auftreten soll. Das Beispiel zeigt eine 80%/20%-Lösung. Die Zahlen können je nach Bedürfnis angepasst werden, weitere Fälle können per zusätzlichem <case> ebenfalls gesetzt werden.
<random>
<case factor="8">
<!-- ...für 8 mal im Pot ... -->
</case>
<case factor="2">
<!-- ...für 2 mal im Pot... -->
</case>
</random>
Bewertung unterschiedlicher Ausrüstung bei Proben
Bei Proben sind unterschiedliche Gegenstände oft unterschiedlich nützlich. Folgendes System erlaubt eine einfache aber detaillierte Nutzung verschiedener Gegenstände. Man muss nur noch die entsprechenden Gegenstände einfügen (Getrennt mit | wenn mehrere in Frage kommen) und den Modi auf die Probe festlegen. Bei fehlender Ausrüstung entscheidet der Schreiber, ob und wie es weiter geht (hoher Malus auf die Probe oder einfach nicht möglich):
<has item="Gute Ausrüstung|Andere gute Ausrüstung">
<failure>
<has item="Mittlere Ausrüstung|Andere mittlere Ausrüstung">
<failure>
<has item="Schlechte Ausrüstung|Andere schlechte Ausrüstung">
<failure>
<p>Mangels geeigneter Ausrüstung kannst du das gleich vergessen!</p>
<!-- Weiter im Text/Versagt/Was auch immer... -->
</failure>
<success>
<challenge talent="Benutztes Talent" mod="+Hoher Malus in Zahlen" name="probemitausruestung1" show="none" />
</success>
</has>
</failure>
<success>
<challenge talent="Benutztes Talent" mod="+Mittlerer oder kein Malus in Zahlen" name="probemitausruestung1" show="none" />
</success>
</has>
</failure>
<success>
<challenge talent="Benutztes Talent" mod="+Kleiner Malus bis Bonus in Zahlen" name="probemitausruestung1" show="none" />
</success>
</has>
...
<challenge name="probemitausruestung1">
<failure>
...
...
</failure>
<success>
...
...
</success>
</challenge>
Mehrmaliges Verwenden mit <store> und <switch> verhindern
Mittels <store> und <switch> kann man zB eine mehrmalige Benutzung bzw. mehrmaligen Besuch eines Ortes unterbinden.
<switch name="ValName">
<null>
<!-- Text beim ersten Durchlauf! -->
<store name="ValName">ja</store>
</null>
<case>
<!-- Text beim erfüllter Bedingung! -->
</case>
<else>
<!-- Alternativer Text! -->
</else>
</switch>
ValNamestellt den Variablennamen dar, dieser kann frei vergeben werden. <null>ist der Zweig, der im ersten Ablauf abgearbeitet wird, dort ist noch kein Variablenname vergeben. Erst am Ende des Zweiges wird mittels <store name="ValName">ja</store> ein Wert zugewiesen, in diesem Fall 'ja'. <case> ist der Zweig der Durchlaufen wird, wenn die Bedingung (ja) erfüllt ist. <else> wird Durchlaufen, wenn ein Wert in der Variable gespeichert ist, der aber nicht direkt einer Vorgabe entspricht.
Alternativ kann man auch das has-Tag verwenden.
Im folgenden Beispiel wird jemand am Betreten einer Lokalität gehindert. In diesem Beispiel gibt es nur zwei Möglichkeiten, der <case>-Fall wird somit unnötig.
<switch name="besuchtTaverne">
<null>
<!-- Hier die einmalige Möglichkeit in der Schmiede fragen zu stellen. -->
<store name="besuchtTaverne">ja</store>
</null>
<else>
<p>Der Schmied guck dich nur dumm an, was du schon wieder hier willst.</p>
</else>
</switch>
Gruppenzeug
Alle Helden durchgehen
<for all="${sys:heroes}" name="heldid">
<select hero="${heldid}"/>
<p>Name: <get attribute="name"/></p>
</for>
Einer Gruppe (von selektierten) Helden X eines Gegenstandes wegnehmen
Die Nachfolgende Routine entfernt von den selektierten Helden insgesamt eine gewünschte Anzahl Gegenstände. Sind nicht genug Gegenstände vorhanden, werden alle entfernt. Die Anzahl entfernter Gegenstände wird gespeichert. Um die Routine auf die gesamte Gruppe anzuwenden, entweder ein <select all="true"/> einfügen oder selected- in der for-Schleife entfernen.
Achtung Stolperstein: Nach Aufruf dieser Routine ist nur noch ein Held selektiert. Außerdem wird die Variable anzahl_wegzuwerfen überschrieben (verringert)!
<!-- Routine wirft bis zu "anzahl_wegzuwerfen" Gegenstände "wegzuwerfender_gegenstand" weg. Bonus: Speichert die Anzahl tatsächlich weggeworfenen Gegenstände in "anzahl_weggeworfen". Funktioniert auch für Einzelhelden. -->
<retain name="entferne_x_dieses_gegenstandes" id="entferne_gegenstaende">
<store name="anzahl_weggeworfen">0</store>
<for all="${sys:selected-heroes}" name="CodeSnippet_held_id">
<select hero="${CodeSnippet_held_id}"/>
<store name="temp"><function name="ermittle-item-anzahl" param1="${wegzuwerfender_gegenstand}"/></store>
<switch name="anzahl_wegzuwerfen">
<case val="0">
<!-- Kein Inhalt, da nichts getan werden muss. Fall vorhanden, da sonst ELSE-Zweig ausgeführt würde. -->
</case>
<case min="1" max="${temp}"><!-- Held hat mindestens so viele Gegenstände, wie weggeworfen werden sollen und es soll mindestens einer weggeworfen werden. -->
<set name="anzahl_weggeworfen" inc="${anzahl_wegzuwerfen}" show="none"/>
<drop item="${wegzuwerfender_gegenstand}" count="${anzahl_wegzuwerfen}"/>
<set name="anzahl_wegzuwerfen" val="0" show="none"/><!-- Es muss nichts mehr weggeworfen werden. -->
</case>
<else><!-- Falls der selektierte Held weniger Gegenstände hat, als noch wegzunehmen sind. -->
<drop item="${wegzuwerfender_gegenstand}" count="${temp}"/><!-- Held werden so viele geklaut, wie er halt hat, da er weniger hat als noch insgesamt wegzuwerfen sind. Keine Ausgabe, falls ihm nichts geklaut wird.-->
<set name="anzahl_weggeworfen" inc="${temp}" show="none"/>
<set name="anzahl_wegzuwerfen" dec="${temp}" show="none"/>
</else>
</switch>
</for>
</retain>
Sonstiges
Helden zeitweilig einsperren
Wer nicht gleich einkerkern möchte, kann für (kurzzeitiges) Einsperren in einer Queste folgende Möglichkeit nutzen. Bitte nicht länger als einige Stunden RL, sonst gibt es Gemecker. Mögliche Anwendungen: Schlaf, Bewusstlosigkeit, Reisen (danach dann site verändern), Arbeit...
Datei 1:
<q>Text informiert SC darüber, dass er einige Zeit in der Queste verbleiben muss.</q>
<store name="held_wird_eingesperrt" scope="quest" expire="2h">...</store>
<countdown name="held_wird_eingesperrt"/><!-- Anzeige, damit der Spieler weiß, wie lange noch. -->
<ul>
<li><choice target="raus">Darf ich gehen?</choice></li>
</ul>
Datei 2 (raus.xml):
<has name="held_wird_eingesperrt">
<success><!-- Variable existiert noch, Held bleibt eingesperrt. -->
<q>NEIN!</q>
<countdown name="held_wird_eingesperrt"/>
<ul>
<li><choice target="raus">Darf ich gehen?</choice></li>
</ul>
</success>
<failure>
<q>Text Held darf gehen/wacht auf.</q>
<quest status="ended"/> <!-- Oder weiter in der Queste, je nachdem. -->
</failure>
</has>
Jahreszeiten
Für jahreszeitabhängige Texte...
Achtung: Nordhalbkugel
<switch attribute="monat">
<case val="Ehrenmond|Hoffnungsmond|Wassermond">
<!-- Frühling -->
</case>
<case val="Liebesmond|Weisheitsmond|Erdenmond">
<!-- Sommer -->
</case>
<case val="Heilungsmond|Ahnenmond|Feuermond">
<!-- Herbst -->
</case>
<else>
<!-- Winter -->
</else>
</switch>
Für die Südhalbkugel gilt entsprechend der nachfolgende Quelltext. Beachte bitte, dass der Äquator sehr weit im Süden verläuft und nicht zwischen den zwei Kontinenten, siehe dazu hier einige Karten.
<switch attribute="monat">
<case val="Heilungsmond|Ahnenmond|Feuermond">
<!-- Frühling -->
</case>
<case val="Herdfeuermond|Maskenmond|Lichtmond">
<!-- Sommer -->
</case>
<case val="Ehrenmond|Hoffnungsmond|Wassermond">
<!-- Herbst -->
</case>
<else>
<!-- Winter -->
</else>
</switch>
Zufällige Zuweisung einer anderen ZB
Folgende Funktion gilt für ZBs, um es zu ermöglichen, dass bei einer misslungenen Startbedingung, statt der ursprünglichen ZB, eine andere, zufällige ZB ausgeführt wird.
<failure>
<quest status="rejected"/>
</failure>
Abfrage der Landessprache
AOQML ermöglichst eine Abfrage der Region, in der sich ein Char gerade befindet, nicht aber der dort vorwiegend gesprochenen Landessprache. Folgender Code speichert die Landessprache in der Variable "name" ab. Ob der Held diese spricht, ist in der Variable "kannsprache" gespeichert.
<switch attribute="site_staatenbund">
<case val="Heiliges Kaiserreich">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Nuovo Imperio Aurecciani">
<store name="sprache" scope="quest">Aurento</store>
</case>
<case val="Großsultanat Emreia">
<store name="sprache" scope="quest">Bajidai</store>
</case>
<case val="Kaiserreich des Südsterns">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Godentum Nordahejmr">
<store name="sprache" scope="quest">Nordahejmisch</store>
<has talent="Nordahejmisch" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Orkreich">
<store name="sprache" scope="quest">Orkisch</store>
<has talent="Orkisch" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Zollunion Goblinia">
<store name="sprache" scope="quest">Goblinisch</store>
<has talent="Goblinisch" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Adelsrepublik Grauland">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Aivarunenlande">
<store name="sprache" scope="quest">Avarun</store>
<has talent="Avarun" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Xetoka">
<store name="sprache" scope="quest">Xeanhatl</store>
<has talent="Xeanhatl" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Eiskönigreich">
<store name="sprache" scope="quest">Urelfisch</store>
<has talent="Urelfisch" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Emirat El-Ahil">
<store name="sprache" scope="quest">Bajidai</store>
</case>
<case val="Emirat Karkasso">
<store name="sprache" scope="quest">Bajidai</store>
</case>
<case val="Emirat Seydjuk">
<store name="sprache" scope="quest">Bajidai</store>
</case>
<case val="Fürstentum Herzstein">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Fürstentum Thelessa">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Fürstentum Exondria">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Großfürstentum des Südmeers">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Herzogtum Galfar">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Kalifat Dorien">
<store name="sprache" scope="quest">Bajidai</store>
</case>
<case val="Königreich Lothrinien">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Königreich Lúnasadh">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Königreich Westendar">
<store name="sprache" scope="quest">Aurento</store>
</case>
<case val="Echsenreich">
<store name="sprache" scope="quest">ZheeZ</store>
<has talent="ZheeZ" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Sartogasso">
<store name="sprache" scope="quest">Imperial</store>
</case>
<case val="Sawajidden-Kalifat">
<store name="sprache" scope="quest">Bajidai</store>
</case>
<case val="Shogunate">
<store name="sprache" scope="quest">Oda</store>
<has talent="Oda" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Elfen">
<store name="sprache" scope="quest">Elfisch</store>
<has talent="Elfisch" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Zwerge">
<store name="sprache" scope="quest">Zwergisch</store>
<has talent="Zwergisch" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</case>
<case val="Magokratie Wiesczarna">
<store name="sprache" scope="quest">Imperial</store>
</case>
</switch>
<has name="sprache" val="Imperial" show="none">
<success>
<has talent="Imperial" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</success>
</has>
<has name="sprache" val="Aurento" show="none">
<success>
<has talent="Aurento" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</success>
</has>
<has name="sprache" val="Bajidai" show="none">
<success>
<has talent="Bajidai" min="6" show="none">
<success>
<store name="kannsprache" scope="quest">ja</store>
</success>
</has>
</success>
</has>
Heldeneinstellungen bei Kämpfen im Orkreich beachten
Diese Vorlage dient zur Abfrage der Heldeneinstellungen (Auftreten: offen-heimlich; im Kampf: aggressiv-beschwichtigend). Um einen Konsens zu finden, wie man die Heldeneinstellungen berücksichtigen könnte, werden Richtlinien angeboten. Jeder Autor ist jedoch frei in seinen Entscheidungen und kann auch von den Richtlinien abweichen.
<switch attribute="vorgehen" >
<case val="offen">
<has attribute="kampf" val="aktiv" show="none" >
<success>
<!-- Der Held ist ein offensiver Kämpfer. Das heißt aber nicht, dass er einfach so in sein Verderben rennen sollte. Der Held mag zwar stark sein, aber nicht blöd. Vor besonders starken oder vielen Gegnern wäre es schön, noch eine IQ- oder Kriegskunst-Probe vorzuschalten. <strong>Fallbeispiel 1:</strong> Der Held kämpft gegen eine Orkpatrouille mit Berserker (oder Kriegsoger) und Orkanführer; hier geht er ein hohes Risiko ein, aber kann auch die besten Sachen gewinnen, weil die Orktrupps gut ausgerüstet sind. <strong>Fallbeispiel 2:</strong> Der Held kämpft gegen zwei Orks, oder einen Ork mit Oger; das Risiko ist geringer, als im Fall einer Orkpatrouille, aber dafür sind diese Orks (und der Oger) auch nicht so gut ausgerüstet. <strong>Fallbeispiel 3:</strong> Der Held kämpft gegen zwei (drei) dumme Orks, oder Goblins, die grundsätzlich nicht mit sich verhandeln lassen, sondern meinen, dass sie mehr bekommen würden, wenn sie den Helden ausrauben; das Risiko ist hier gering, aber weil es sich um dumme Gegner handelt, haben sie es im Leben auch zu nichts gebracht und sind daher auch schlecht ausgerüstet (nur billiger Kram). <strong>Fallbeispiel 4:</strong> Der Held kämpft gegen Tiere im gesamten Orkreich und gegen Untote in den Sümpfen zwischen Birh-Gichem und Nesh-Kurdoon - selbsterklärend. -->
</success>
<failure>
<!-- Der Held ist ein offener, aber friedfertiger Wanderer (Jäger, Händler, Handwerker etc.). <strong>Fallbeispiel 1:</strong> Einer Orkpatrouille kann man nur schwer ausweichen, also versucht der Held zu verhandeln (leichte Proben auf Orkisch, Überreden, Überzeugen). Schafft er die Proben nicht, verliert er seine Waffen und einige Waren und bekommt einen Tritt in den Hintern (Abzug von 10 Lebenspunkten). Schafft er es, den Orkanführer zu überzeugen, dann muss er Dienstleistungen erbringen (mit den Orks jagen und ihnen die Beute überlassen, etwas reparieren etc. - Proben), was seine Zeit dauert (Reiseverzögerung von ein oder zwei Tagen), oder er muss einen Tribut zahlen (Proben auf Orkisch, Handeln, Feilschen, Wert schätzen mit Warenverlust), um weiter gelassen zu werden - man kann verschiedene Proben auch einfach hintereinander schalten und sobald der Held die erste nicht besteht, kommt die nächste. Besteht der Held keine der Proben, wird er einiger Dinge beraubt und muss den Orks für drei Tage als "Mädchen für alles" dienen (Warenverlust und Reiseverzögerung). <strong>Fallbeispiel 2:</strong> Zwei wachsame Orks, oder ein wachsamer Ork, der seinen Oger unter Kontrolle hat, sind auch nicht so leicht zu umschleichen. Der Held wird es also auch hier lieber mit verhandeln versuchen. Hier ist das gleiche Vorgehen wie bei der Orkpatrouille anzuraten, wobei die Proben auch etwas leichter sein können, da man ja nicht mit so einer Persönlichkeit verhandeln muss wie mit einem Orkanführer. Dafür könnten die Konsequenzen im Falle des Nichtbestehens der Proben etwas größer sein und der Wanderer bekommt zusätzlich noch einen Tritt in den Hintern (Warenverlust, Reiseverzögerung und Abzug von 10 Lebenspunkten). <strong>Fallbeispiel 3:</strong> Dumme und schlecht ausgerüstete Orks oder Goblins lassen eher nicht mit sich handeln, dann muss der Held kämpfen. <strong>Fallbeispiel 4:</strong> Gegen wilde Tiere wird auch immer gekämpft,ebenso kämpft der Held gegen die Untoten in den Sümpfen zwischen Birh-Gichem und Nesch-Kurdoon. -->
</failure>
</has>
</case>
<else>
<has attribute="kampf" val="aktiv" show="none" >
<success>
<!-- Der Held ist ein heimlicher Kämpfer, große Gefahren meidet er, aber sobald er eine Aussicht auf Erfolg hat, greift er an. <strong>Fallbeispiel 1:</strong> Er versucht die Orkpatrouille, zu umschleichen (schwere Probe auf Schleichen und Verstecken, bei Bestehen lange Reiseverzögerung), schafft er das nicht, kommt es zum Kampf, denn so ganz ohne Gegenwehr will er sich ja nicht ergeben. Ob er dann bis zum Tode kämpft oder vorher flieht, kann der Spieler ja noch über die Fluchteinstellungen seines Helden regeln. <strong>Fallbeispiel 2:</strong> Da der Held nicht gerade friedfertig unterwegs ist, wird er sich gegen zwei Gegner schon eine Chance ausrechnen, es kommt also zum Kampf. Gegebenenfalls kann der Held durch eine vorgelagerte und bestandene hohe Schleichen-Probe sogar einen kleinen Vorteil bekommen, weil er einen Ork überrumpelt - ein Ork hat dann z.B. schon nicht mehr die volle LE. <strong>Fallbeispiel 3:</strong> Bei den Kämpfen gegen die dummen und schlecht ausgerüsteten Orks und Goblins sollte der Held durch eine bestandene Schleichen-Probe ebenfalls einen Vorteil bekommen (vielleicht hat sogar einer der Gegner dann schon eine Wunde). <strong>Fallbeispiel 4:</strong> Der Held kämpft gegen wilde Tiere und die Untoten in den Sümpfen, weil die Tiere eine zu gute Witterung haben, oder der Held sie voher nicht wahrnehmen kann, wie die Speiechse, oder sie auf übernatürliche Art und Weise die Gegenwart eines Lebenden spüren. -->
</success>
<failure>
<!-- Der Held ist ein Heiler, oder Gelehrter, oder einfach jemand, der jedem Ärger aus dem Wege gehen will. <strong>Fallbeispiel 1:</strong> Er versucht zuerst die Orkpatrouille zu umschleichen (schwere Probe auf Schleichen und Verstecken, bei Bestehen lange Reiseverzögerung), schafft er das nicht, versucht er zu verhandeln, wobei die Orks natürlich misstrauisch sind, warum sich jemand an ihnen vorbei schleichen will (schwere Proben auf Orkisch, Überreden, Überzeugen), besteht er hier nicht, gibt es Saures (Warenverlust und Reiseverzögerung und Abzug von 10 LEP), besteht er sie, verlangen die Orks von ihm ihre Kranken zu heilen, oder die Verletzten zu versorgen, oder ihnen etwas bei zu bringen und über die Welt außerhalb des Orkreiches zu berichten (Probe auf Lehren sowie Wissensfertigkeiten), was dann zu einer Reiseverzögerung führt. <strong>Fallbeispiel 2:</strong> Auch an den Ork(s)-und-Oger-Paaren wird der Held erst einmal versuchen, sich vorbei zu schleichen (Reiseverzögerung). Schafft er die Proben nicht, versucht er ebenso wie bei der Orkpatrouille zu verhandeln (Proben können etwas leichter sein, weil die normalen Orks sich denken, dass man sie auch für dumme Räuber und Banditen halten könnte). Schafft der Held es aber nicht, die Orks, oder den Ork mit Oger zu überreden oder zu überzeugen, so gibt es Saures (Warenverlust, Reiseverzögerung und Abzug von 10 LEP). Schafft er es aber, die Orks (oder den Ork mit Oger) zu überreden oder zu überzeugen, dann kann er mit ihnen in ihr Dorf gehen und Kranke heilen (Reiseverzögerung), oder er geht mit ihnen in ihr Dorf und bringt ihnen etwas bei (Probe auf Lehren und Wissensfertigkeiten), wodurch die Reise sich auch verzögert. Schafft er keine der Proben, bekommt er Saures (Warenverlust und Reiseverzögerung und Abzug von 10 LEP). <strong>Fallbeispiel 3:</strong> An den dummen Orks oder Goblins sollte der Held leicht vorbeischleichen können, denn die stellen keine Wachen auf (Proben Schleichen und Verstecken). Schafft er das nicht, kommt es zum Kampf, weil die dummen Orks und Goblins ja der Ansicht sind, dass sie beim Verhandeln nur über das Ohr gehauen werden (eventuell kann man hier auch sehr hohe Proben auf Orkisch bzw. Goblinisch, Überreden und Überzeugen ansetzen, wenn der Held noch eine weitere Chance haben soll). <strong>Fallbeispiel 4:</strong> Gegen Tiere und Untote muss der Held kämpfen. Die Speiechse kann ausgenommen werden, wenn der Held eine Abfrage auf Tierkunde besteht und weiß, dass die sich nur in ihrem Revier gestört gefühlt hat. -->
</failure>
</has>
</else>
</switch>
Und hier noch einmal ohne inhaltliche Richtlinien:
<switch attribute="vorgehen" >
<case val="offen">
<has attribute="kampf" val="aktiv" show="none" >
<success>
<!-- Der Held ist ein offensiver Kämpfer. -->
</success>
<failure>
<!-- Der Held ist ein offener, aber friedfertiger Wanderer (Jäger, Händler, Handwerker etc.). -->
</failure>
</has>
</case>
<else>
<has attribute="kampf" val="aktiv" show="none" >
<success>
<!-- Der Held ist ein heimlicher Kämpfer, große Gefahren meidet er, aber sobald er eine Aussicht auf Erfolg hat, greift er an. -->
</success>
<failure>
<!-- Der Held ist ein Heiler, oder Gelehrter, oder einfach jemand, der jedem Ärger aus dem Wege gehen will. -->
</failure>
</has>
</else>
</switch>
Mondphasen durchgehen
Folgender Code beinhaltet sämtliche mögliche Mondphasen in ihren Kombinationsmöglichkeiten. Je nach Anwendungsbereich, kann der switch auf das Attribut tag auch ausgegliedert werden.
<switch attribute="monat">
<case value="Lichtmond|Liebesmond|Ahnenmond">
<!-- Fiomond voll -->
<switch attribute="tag">
<case min="1" max="7">
<!-- Mond Neumond -->
</case>
<case min="8" max="15">
<!-- Mond zunehmend -->
</case>
<case min="16" max="22">
<!-- Mond voll -->
</case>
<case min="23" max="30">
<!-- Mond abnehmend -->
</case>
</switch>
</case>
<case value="Hoffnungsmond|Erdmond|Herdfeuermond">
<!-- Fiomond Neumond -->
<switch attribute="tag">
<case min="1" max="7">
<!-- Mond Neumond -->
</case>
<case min="8" max="15">
<!-- Mond zunehmend -->
</case>
<case min="16" max="22">
<!-- Mond voll -->
</case>
<case min="23" max="30">
<!-- Mond abnehmend -->
</case>
</switch>
</case>
<case value="Maskenmond|Wassermond|Heilungsmond">
<!-- Fiomond zunehmend -->
<switch attribute="tag">
<case min="1" max="7">
<!-- Mond Neumond -->
</case>
<case min="8" max="15">
<!-- Mond zunehmend -->
</case>
<case min="16" max="22">
<!-- Mond voll -->
</case>
<case min="23" max="30">
<!-- Mond abnehmend -->
</case>
</switch>
</case>
<case value="Ehrenmond|Weisheitsmond|Feuermond">
<!-- Fiomond abnehmend -->
<switch attribute="tag">
<case min="1" max="7">
<!-- Mond Neumond -->
</case>
<case min="8" max="15">
<!-- Mond zunehmend -->
</case>
<case min="16" max="22">
<!-- Mond voll -->
</case>
<case min="23" max="30">
<!-- Mond abnehmend -->
</case>
</switch>
</case>
</switch>