Store fetch: Unterschied zwischen den Versionen

Aus AntamarWiki
Wechseln zu: Navigation, Suche
K (Namen für mark)
 
(25 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== pro Quest/Held-Kombination speichern ===
+
===store===
 +
Das '''<store>'''-Tag speichert seinen (ausgewerteten) Inhalt persistent, z.B. zwischen verschiedenen Schritten eines Quests.
 +
Das Attribut 'name' gibt dabei an, unter welchem Namen es gespeichert werden soll. Der Inhalt selbst wird an dieser Stelle nicht ausgegeben.
 +
Der folgende Code speichert '''Inhalt der Variable''' unter dem Namen 'VariablenName' für die Dauer des laufenden Quests:
 +
<syntaxhighlight lang="xml">
 +
<store name="VariablenName" scope="quest">Inhalt der Variable</store>
 +
</syntaxhighlight>
  
Das '''<store>'''-Tag speichert seinen (ausgewerteten) Inhalt persistent, z.B. zwischen verchiedenen Schritten eines Quests. Das Attribut 'name' gibt dabei an, unter welchem Namen es gespeichert werden soll. Der Inhalt selbst wird an dieser Stelle nicht ausgegeben.
+
===Scopes/Geltungsbereiche===
Das '''<fetch>'''-Tag ruft derart gespeicherte Inhalte wieder ab. Auch dabei wird das Attribut 'name' zum identifizieren verwendet. Sollte kein Inhalt unter diesem Namen gespeichert sein, und nur dann, wird der Inhalt des fetch-Tags ausgewertet, sozusagen als Default. Dies ist einer der Hauptunterschiede zum get-Tag. Beim get-Tag wird kein Default-Inhalt ausgewertet.
+
Den Bereich und die Art wie eine Variable gespeichert wird kann man über das Attribut '''scope''' festlegen.
 +
Hierbei [[ScopeValues|verschiedene Möglichkeiten]].
  
Beispiel:
+
Zu beachten ist, dass in [[Quest|Questen]] standardmäßig der scope "quest" eingestellt ist. Wird für eine Variable ein anderer Scope, z.B. 'hero', festgelegt und wird diese Variable später an einer anderen Stelle im Code verändert, dann muss der zugehörige Scope wieder explizit angegeben werden.
<code xml><store name="Heimatort">Gareth</store>
 
  
Ich komme aus <fetch name="Heimatort"/>.</code>
+
<syntaxhighlight lang="xml">
Ergibt:
+
<store name="VariablenName" scope="hero">Inhalt der Variable</store>
Ich komme aus Gareth.
+
</syntaxhighlight>
  
=== quest-unabhängig pro Held speichern ===
+
===expire===
  
Während obiger Werte nur während eines Quests - wenn auch über pending-Unterbrechnungen hinaus - erhalten bleiben und pro Quest/Held gelten, kann man mit mark= auch etwas dauerhaft oder limitiert am Helden speichern und dies in allen Questen nutzen.
+
Über das Attribut '''expire''' kann der Zeitraum angegeben werden in welchem diese (unabhängig vom scope) Gespeichert wird.
 +
Folgendes definiert eine Variable die nach 4 Ingame-Tagen wieder gelöscht wird.  
  
<code xml>
+
<syntaxhighlight lang="xml">
<p>get: <get mark="test"/></p>
+
<store name="VariablenName" scope="hero" expire="4d">Inhalt der Variable</store>
<p>fetch: <fetch mark="test">nichts drin</fetch></p>
+
</syntaxhighlight>
  
<p>has: <has mark="test">
+
Expire kann in zwei Formaten angegeben werden "4d" für vier Ingametage, "12h" für zwölf Ingamestunden oder "4D" für vier Reallife-Tage, "12H" für zwölf echte Stunden.
  <success>hat test-Markierung</success>
 
  <failure>hat keine test-markierung</failure>
 
</has></p>
 
  
<p>switch: <switch mark="test">
 
  <null>hat keine test-Markierung</null>
 
  <case value="gespeicherter Wert">hat test-Markierung: 'gespeicherter Wert'</case>
 
  <else>hat eine andere test-Markierung</else>
 
</switch></p>
 
  
<p>if: <if mark="test" equals="gespeicherter Wert"
+
===inc-expire===
    null="hat keine test-Markierung"
 
    then="hat test-Markierung 'gespeicherter Wert'"
 
    else="hat eine test-Markierung"/></p>
 
  
<store mark="test" expire="12h">gespeicherter Wert</store>
+
Mittels '''inc-expire''' kann der Zeitraum verlängert werden, indem eine Variable gültig ist.
</code>
+
<syntaxhighlight lang="xml">
 +
<store name="meineVariable" scope="hero" expire="4d">Inhalt der Variable</store>
  
Da die Variable in dem obigen Beispiel erst am Ende gesetzt wird, ergibt das beim ersten Durchlauf:
+
...
 +
<!-- Variable um weitere 2 Tage verlängern -->
 +
<store name="meineVariable" scope="hero" inc-expire="2d">neuer Inhalt der Variable</store>
 +
<!-- die Variable ist somit insgesamt 6 Ingame-Tage aktiv -->
 +
</syntaxhighlight>
  
  get:
+
===Variablen überschreiben===
  fetch: nichts drin
+
Eine Variable kann einfach überschrieben werden, indem ihr ein neuer Inhalt zugewiesen wird:
  has: [hat : [test: 0*vorhanden] ] hat keine test-markierung
+
<syntaxhighlight lang="xml">
  switch: hat keine test-Markierung
+
<store name="held-hat-gefruehstueckt">nein</store>
  if: hat keine test-Markierung
+
...
 +
<store name="held-hat-gefruehstueckt">ja</store>
 +
</syntaxhighlight>
  
Und beim zweiten, wenn dann die Variable vom Ende des ersten, gesetzt wurde:
+
Zu beachten ist, dass in [[Quest|Questen]] standardmäßig der scope "quest" eingestellt ist. Wird für eine Variable ein anderer Scope, z.B. 'hero', festgelegt und wird diese Variable später an einer anderen Stelle im Code verändert, dann muss der zugehörige Scope wieder explizit angegeben werden:
 +
<syntaxhighlight lang="xml">
 +
<store name="held-ist-ein-schwarzer-ritter" scope="hero">nein</store>
 +
...
 +
<store name="held-ist-ein-schwarzer-ritter" scope="hero">ja</store><!-- Scope 'hero' muss hier wieder angegeben werden, sonst wird Variable nicht überschrieben, sondern eine neue Variable mit dem Scope "quest" gesetzt! -->
 +
</syntaxhighlight>
  
 +
===Variablen löschen===
 +
Variablen können mittels
 +
<syntaxhighlight lang="xml">
 +
<store name="meineVar">NULL</store>
 +
<!-- oder -->
 +
<store name="meineVar"/>
 +
</syntaxhighlight>
 +
gelöscht werden.
  
  get: gespeicherter Wert
 
  fetch: gespeicherter Wert
 
  has: [hat : [test: 1*vorhanden] ] hat test-Markierung
 
  switch: hat test-Markierung: 'gespeicherter Wert'
 
  if: hat test-Markierung 'gespeicherter Wert'
 
  
Für expire= kann man Tage ("5d") oder Stunden ("12h") angeben oder dies, für dauerhaftes speichern, auch ganz weglassen. Die Zeitangaben sind in-game, also derzeit 1d=4min.
+
===Namenskonvention===
  
Anmerkung: Der AOQML-Editor wird das erst ab der Version 1.0 können.
+
Die Variablen können zwar technisch frei benannt werden, aber bei scope="hero"-Variablen ist zwingend auf einen aussagekräftigen und eindeutigen Namen zu achten. Dazu wird zunächst der Questname (+ggf. Autor) und danach die Variablenkennung angegeben, z.B.
 +
<syntaxhighlight lang="xml">
 +
<store name="SchiffBlutrabe-Tagesablauf" scope="hero">Schlaf</store>
 +
</syntaxhighlight>
  
'''Namenskonvention''':
+
Diese Konvention soll sicherstellen, dass einzelne hero-/global-Variablen sich nicht gegenseitig überschreiben.
  
Zunächst einmal sind die Namen "Freitext". Schema ist aber:
+
===fetch===
* wenn die Variable nur in dem Quest gelten soll: quest:pfad/questname/varname
 
* region: bedeutet also, dass die Variable für alle Quests (für die sie relevant ist), in der genannten Region gelten soll
 
  
Man könnte auch noch sowas wie "npc:DukeVonXYZ/..." machen, und damit z.B. Beziehungen zu NPCs (kennt, befreundet, befeindet etc.) speicher, die auch in allen Questen ggf. abgefragt werden könnten.
+
Das '''<fetch>'''-Tag ruft derart gespeicherte Inhalte wieder ab.
 +
Das Attribut 'name' dient hier zum Identifizieren der richtigen Variable.  
 +
Sollte kein Inhalt unter diesem Namen gespeichert sein, und nur dann, wird der Inhalt des fetch-Tags ausgewertet, sozusagen als Default.  
 +
Dies ist einer der Hauptunterschiede zum [[get]]-Tag. Bei [[get]] wird kein Default-Inhalt ausgewertet.
  
Dieser Scope schränkt allerdings die Sicht nicht technisch ein. Theoretsch könnte jede Quest auf alle diese Variablen zugreifen.
+
Folgendes bewirkt zum Beispiel die Ausgabe der Variable "papagei_name".
 +
<syntaxhighlight lang="xml">
 +
<p><q>Hallo <fetch name="papagei_name"/>!</q></p>
 +
</syntaxhighlight>
  
[[Kategorie:AOQML]]
+
===Inhalte ändern===
 +
 
 +
Grundsätzlich kann eine Variable jederzeit überschrieben werden und beinhaltet damit den neuen Wert. Sollte gewünscht sein, einen Zahlenwert zu erhöhen oder zu erniedrigen, siehe [[set]].
 +
[[Kategorie:AOQML-Tags]]

Aktuelle Version vom 19. Juli 2017, 13:14 Uhr

store

Das <store>-Tag speichert seinen (ausgewerteten) Inhalt persistent, z.B. zwischen verschiedenen Schritten eines Quests. Das Attribut 'name' gibt dabei an, unter welchem Namen es gespeichert werden soll. Der Inhalt selbst wird an dieser Stelle nicht ausgegeben. Der folgende Code speichert Inhalt der Variable unter dem Namen 'VariablenName' für die Dauer des laufenden Quests:

<store name="VariablenName" scope="quest">Inhalt der Variable</store>

Scopes/Geltungsbereiche

Den Bereich und die Art wie eine Variable gespeichert wird kann man über das Attribut scope festlegen. Hierbei verschiedene Möglichkeiten.

Zu beachten ist, dass in Questen standardmäßig der scope "quest" eingestellt ist. Wird für eine Variable ein anderer Scope, z.B. 'hero', festgelegt und wird diese Variable später an einer anderen Stelle im Code verändert, dann muss der zugehörige Scope wieder explizit angegeben werden.

<store name="VariablenName" scope="hero">Inhalt der Variable</store>

expire

Über das Attribut expire kann der Zeitraum angegeben werden in welchem diese (unabhängig vom scope) Gespeichert wird. Folgendes definiert eine Variable die nach 4 Ingame-Tagen wieder gelöscht wird.

<store name="VariablenName" scope="hero" expire="4d">Inhalt der Variable</store>

Expire kann in zwei Formaten angegeben werden "4d" für vier Ingametage, "12h" für zwölf Ingamestunden oder "4D" für vier Reallife-Tage, "12H" für zwölf echte Stunden.


inc-expire

Mittels inc-expire kann der Zeitraum verlängert werden, indem eine Variable gültig ist.

<store name="meineVariable" scope="hero" expire="4d">Inhalt der Variable</store>

...
<!-- Variable um weitere 2 Tage verlängern -->
<store name="meineVariable" scope="hero" inc-expire="2d">neuer Inhalt der Variable</store>
<!-- die Variable ist somit insgesamt 6 Ingame-Tage aktiv -->

Variablen überschreiben

Eine Variable kann einfach überschrieben werden, indem ihr ein neuer Inhalt zugewiesen wird:

<store name="held-hat-gefruehstueckt">nein</store>
...
<store name="held-hat-gefruehstueckt">ja</store>

Zu beachten ist, dass in Questen standardmäßig der scope "quest" eingestellt ist. Wird für eine Variable ein anderer Scope, z.B. 'hero', festgelegt und wird diese Variable später an einer anderen Stelle im Code verändert, dann muss der zugehörige Scope wieder explizit angegeben werden:

<store name="held-ist-ein-schwarzer-ritter" scope="hero">nein</store>
...
<store name="held-ist-ein-schwarzer-ritter" scope="hero">ja</store><!-- Scope 'hero' muss hier wieder angegeben werden, sonst wird Variable nicht überschrieben, sondern eine neue Variable mit dem Scope "quest" gesetzt! -->

Variablen löschen

Variablen können mittels

<store name="meineVar">NULL</store>
<!-- oder -->
<store name="meineVar"/>

gelöscht werden.


Namenskonvention

Die Variablen können zwar technisch frei benannt werden, aber bei scope="hero"-Variablen ist zwingend auf einen aussagekräftigen und eindeutigen Namen zu achten. Dazu wird zunächst der Questname (+ggf. Autor) und danach die Variablenkennung angegeben, z.B.

<store name="SchiffBlutrabe-Tagesablauf" scope="hero">Schlaf</store>

Diese Konvention soll sicherstellen, dass einzelne hero-/global-Variablen sich nicht gegenseitig überschreiben.

fetch

Das <fetch>-Tag ruft derart gespeicherte Inhalte wieder ab. Das Attribut 'name' dient hier zum Identifizieren der richtigen Variable. Sollte kein Inhalt unter diesem Namen gespeichert sein, und nur dann, wird der Inhalt des fetch-Tags ausgewertet, sozusagen als Default. Dies ist einer der Hauptunterschiede zum get-Tag. Bei get wird kein Default-Inhalt ausgewertet.

Folgendes bewirkt zum Beispiel die Ausgabe der Variable "papagei_name".

<p><q>Hallo <fetch name="papagei_name"/>!</q></p>

Inhalte ändern

Grundsätzlich kann eine Variable jederzeit überschrieben werden und beinhaltet damit den neuen Wert. Sollte gewünscht sein, einen Zahlenwert zu erhöhen oder zu erniedrigen, siehe set.