Store fetch: Unterschied zwischen den Versionen

Aus AntamarWiki
Wechseln zu: Navigation, Suche
(Scopes/Geltungsbereiche)
 
(18 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
===Store===
+
===store===
 
Das '''<store>'''-Tag speichert seinen (ausgewerteten) Inhalt persistent, z.B. zwischen verschiedenen Schritten eines Quests.  
 
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.
 
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:
 
Der folgende Code speichert '''Inhalt der Variable''' unter dem Namen 'VariablenName' für die Dauer des laufenden Quests:
<code xml>
+
<syntaxhighlight lang="xml">
<store name="VariablenName" scope="quest">
+
<store name="VariablenName" scope="quest">Inhalt der Variable</store>
    Inhalt der Variable
+
</syntaxhighlight>
</store>
 
</code>
 
  
 
===Scopes/Geltungsbereiche===
 
===Scopes/Geltungsbereiche===
Den Bereich und die Art wie eine Variable gespeichert wird kann man über das Attribute '''scope''' festlegen.
+
Den Bereich und die Art wie eine Variable gespeichert wird kann man über das Attribut '''scope''' festlegen.
Im Moment gibt es hierbei fünf verschiedene Möglichkeiten.
+
Hierbei [[ScopeValues|verschiedene Möglichkeiten]].
  
====scene====
+
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.
Die Variable wird nicht in der Datenbank zwischengespeichert.
 
Sie kann nur innerhalb derselben Scene verwendet werden.
 
<code xml>
 
<store name="VariablenName" scope="scene">
 
    Inhalt der Variable
 
</store>
 
</code>
 
  
====quest====
+
<syntaxhighlight lang="xml">
Die Variable wird innerhalb dieser Quest gespeichert.
+
<store name="VariablenName" scope="hero">Inhalt der Variable</store>
Sobald die Quest beendet wurde wird die Variable gelöscht.
+
</syntaxhighlight>
Durch eine über den [[quest|Queststatus]] pending unterbrochene Quest werden Variablen mit dem Scope quest '''nicht''' gelöscht.
 
<code xml>
 
<store name="VariablenName" scope="scene">
 
    Inhalt der Variable
 
</store>
 
</code>
 
  
====dungeon====
+
===expire===
Die Variable ist für alle Helden die diese Quest erleben zugreifbar.
 
Die Variable bleibt erhalten auch wenn ein Held die Quest schon beendet hat, bezieht sich aber im Gegensatz zum Scope 'hero' auf die Quest und nicht auf den sie absolvierenden Helden.
 
  
<code xml>
+
Über das Attribut '''expire''' kann der Zeitraum angegeben werden in welchem diese (unabhängig vom scope) Gespeichert wird.
<store name="VariablenName" scope="dungeon">
+
Folgendes definiert eine Variable die nach 4 Ingame-Tagen wieder gelöscht wird.
    Inhalt der Variable
 
</store>
 
</code>
 
  
====hero====
+
<syntaxhighlight lang="xml">
Die Variable wird an den Helden gebunden, solange dieser existiert, kann auf sie zugegriffen werden.
+
<store name="VariablenName" scope="hero" expire="4d">Inhalt der Variable</store>
 +
</syntaxhighlight>
  
<code xml>
+
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.
<store name="VariablenName" scope="dungeon">
 
    Inhalt der Variable
 
</store>
 
</code>
 
  
====global====
 
Die Variable wird unabhängig von Questen und Helden gespeichert.
 
Sie wird nur manuell von Hand gelöscht.
 
  
<code xml>
+
===inc-expire===
<store name="VariablenName" scope="global">
 
    Inhalt der Variable
 
</store>
 
</code>
 
  
===expire===
+
Mittels '''inc-expire''' kann der Zeitraum verlängert werden, indem eine Variable gültig ist.
 +
<syntaxhighlight lang="xml">
 +
<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 -->
 +
</syntaxhighlight>
  
Über das Attribut '''expire''' kann der Zeitraum angegeben werden in welchem diese (unabhängig vom scope) Gespeichert wird.
+
===Variablen überschreiben===
Folgendes definiert eine Variable die nach 4 Ingame-Tagen wieder gelöscht wird.
+
Eine Variable kann einfach überschrieben werden, indem ihr ein neuer Inhalt zugewiesen wird:
 +
<syntaxhighlight lang="xml">
 +
<store name="held-hat-gefruehstueckt">nein</store>
 +
...
 +
<store name="held-hat-gefruehstueckt">ja</store>
 +
</syntaxhighlight>
  
<code xml>
+
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:
<store name="VariablenName" scope="global" expire="4d">
+
<syntaxhighlight lang="xml">
    Inhalt der Variable
+
<store name="held-ist-ein-schwarzer-ritter" scope="hero">nein</store>
</store>
+
...
</code>
+
<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>
  
Expire kann in zwei Formaten angegeben werden "4d" für vier Ingametage, "12h" für zwölf Ingamestunden.
+
===Variablen löschen===
Anmerkung: Der AOQML-Editor wird das erst ab der Version 1.0 können.
+
Variablen können mittels
 +
<syntaxhighlight lang="xml">
 +
<store name="meineVar">NULL</store>
 +
<!-- oder -->
 +
<store name="meineVar"/>
 +
</syntaxhighlight>
 +
gelöscht werden.
  
  
 
===Namenskonvention===
 
===Namenskonvention===
  
Die Variablen können zwar technisch frei benannt werden, damit man aber schnell erkennen kann woher eine Variable kommt gelten folgende Namenskonvention: An erster Stelle der Variable steht ein Oberbegriff der den zur Variable zugehörigen Typ beschreibt.
+
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">
Also z.B. quest: für eine Variable die nur in einer Quest steht oder region: für eine Variable die für alle Questen einer bestimmten Region steht.
+
<store name="SchiffBlutrabe-Tagesablauf" scope="hero">Schlaf</store>
Danach folgt der Pfad unter dem die Quest oder ZB abgelegt ist, der Questname und am Ende der Variablenname.
+
</syntaxhighlight>
 
 
also:  Oberbegriff:PfadZurQuest/QuestName/Variablenname
 
 
 
Beispiele:
 
quest:/quests/deralteleuchtturm/hoehedesturms
 
npc:derHerzogVonSonstwo/Name
 
  
Diese Konvention soll sicherstellen das einzelne Variablen sich nicht gegenseitig überschreiben, da die Scopes zwar die Art der Speicherung, nicht aber den Zugriff auf die Variablen regeln.
+
Diese Konvention soll sicherstellen, dass einzelne hero-/global-Variablen sich nicht gegenseitig überschreiben.
  
 
===fetch===
 
===fetch===
  
 
Das '''<fetch>'''-Tag ruft derart gespeicherte Inhalte wieder ab.
 
Das '''<fetch>'''-Tag ruft derart gespeicherte Inhalte wieder ab.
Das Attribut 'name' dient hier zum identifizieren der richtigen Variable.  
+
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.  
 
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.
+
Dies ist einer der Hauptunterschiede zum [[get]]-Tag. Bei [[get]] wird kein Default-Inhalt ausgewertet.
  
Folgendes liefert zum Beispiel die Variable mit dem Namen "VariablenName" zurück.
+
Folgendes bewirkt zum Beispiel die Ausgabe der Variable "papagei_name".
<code xml>
+
<syntaxhighlight lang="xml">
<fetch name="VariablenName"/>
+
<p><q>Hallo <fetch name="papagei_name"/>!</q></p>
</code>
+
</syntaxhighlight>
  
 +
===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]]
 
[[Kategorie:AOQML-Tags]]
[[Kategorie:AOQML]]
 

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.