Das AOQML-Tag inventar erlaubt das Anlegen von vordefinierten Inventaren, z.B. Truhen, Kisten, Ablagen. Dem Inventar können dann Gegenstände durch den Spieler entnommen oder hinzugefügt werden.
Inhaltsverzeichnis
Syntax
<inventar name="" [scope="quest"] [reset="false"]>
<items name="" item="" tag="" count="" must="" mustnot="" cost_min="" cost_max="" freq=""/>
...
</inventar>
- name: Der Bezeichner des Inventars, sodass ein Zugriff über diese Variable möglich wird.
- scope: Standardmäßig wird ein Inventar mit dem Scope 'quest' angelegt, d.h. nach Beendigung der Quest wird das Inventar intern wieder aufgelöst und die (verbliebenen) Inhalte des Inventars werden nicht länger gespeichert. Andere erlaubte Scopes sind 'hero', 'dungeon' und 'global', siehe Scopes
- reset: Wenn 'true', dann werden etwaige Inventare, die diesen Namen und diesen Scope besitzen, gelöscht. Wenn 'false', dann wird versucht, ein bereits vorhandenes Inventar mit diesem Namen und diesem Scope zu laden und zu erweitern. Standardmäßig ist der Wert für reset 'false'.
Für das Anlegen von Items innerhalb des Inventars siehe Item. Jedoch gilt obige Syntax, d.h. das Tag heißt 'items' (und nicht 'item'!) und es sind lediglich die angegebenen Attribute erlaubt.
Inventare anlegen
<inventar name="Schatztruhe">
<items item="#53" count="4"/> <!-- geschliffener Achat -->
<items item="Drachen-Amulett" count="1"/>
<items freq="selten" must="exotisch" mustnot="essbar|trinkbar" cost_min="300" cost_max="5000"/>
<items freq="selten" must="exotisch" mustnot="essbar|trinkbar" cost_min="300" cost_max="5000"/>
<items tag="Schmuck" cost_min="100" cost_max="2000" />
</inventar>
Damit werden die oben beschriebenen Gegenstände für die Laufzeit des Quests unter dem namen "Schatztruhe" abgelegt und können nun jeweils einmalig vom Helden entnommen werden - außer er tut sie wieder hinein. Es können dieselben Parameter wie bei <item> verwendet werden, nur dass man unter name= hier eine Variable referenzieren kann, anstatt das Item unter name= zu speichern.
Dieses Tag sollte in der Regel irgendwo bei der Quest-Initialisierung stehen, nicht dass die Schatztruhe bei jedem erneuten Szenenaufruf neu gefüllt wird. Aber es gibt sicherlich auch Fälle, bei denen eine Auffüllung Sinn macht.
Inventar zur Auswahl anbieten
Da liegen ein paar Dinge herum:
<take from="Schatztruhe" count="3">Aber nichts von Wert für dich.</take>
Das listet dem Spieler die noch in der Schatztruhe befindlichen Gegenstände auf und er kann von einer Art maximal 3 entnehmen, man kann count="..." auch weglassen, dann kann der Spieler so viel wählen, wie da ist. Falls man dem Spieler nur eine einmalige Wahl geben will, sollte man auch noch target="..." angeben, dann wird nach dem Klick in eine andere Szene gesprungen und er kann kein weiteres mal auswählen - außer natürlich man führt ihn wieder in eine Szene mit so einer Auswahl. Anders als beim normalen <take> wird der Text aus dem Inhalt nur dann angezeigt, wenn das Inventar leer ist. Ersatzweise macht hier ja auch keinen Sinn.
Soll der Spieler alles mit einem Klick mitnehmen können, kann das Attribut takeAllAtOnce angegeben werden, sodass ein Link "alles mitnehmen" erscheint.
<take from="eigentum" takeAllAtOnce="true">Hier gibt es nichts mehr zu holen.</take>
Somit kann der Spieler zügig alle Gegenstände aufnehmen. Der Text "Hier gibt es nichts mehr zu holen" erscheint, wenn keine Gegenstände mehr im Inventar liegen.
Soll der Spieler das Inventar gar nicht erst angezeigt bekommen, sondern alles automatisch aufnehmen, kann das Attribut immediately verwendet werden:
<take from="eigentum" immediately="true"/>
Somit sieht der Spieler das Inventar gar nicht erst, sondern nimmt alle Gegenstände sofort auf.
Ausrüstung in ein Inventar legen
<drop item="Schlüsselbund" to="Versteck" />
Dies würde einen (vorhandenen) Ausrüstungsgegenstand "Schlüsselbund" in das Inventar "Versteck" legen. Man kann dem Spieler das dann später wieder mit <take ...> zur Aufnahme anbieten.
Anderes Beispiel:
Wenn man dem Helden zunächst Gegenstände entwenden möchte, kann man dies beispielsweise wie folgt tun:
<drop item="_Waffen" to="waffen-ablage"/><!-- klaut dem Helden seine Waffen und legt sie in ein Inventar -->
In einer späteren Szene, ggf. nach gewissen Proben, kann man dem Helden die Aufnahme seiner geklauten Gegenstände wieder anbieten:
<take from="waffen-ablage"/><!-- Spieler bekommt eine Ansicht des Inventars mit den sich darin befindenden Gegenständen -->
Wenn man dem Helden anbieten will, genau einen (oder zwei, oder drei, oder...) Gegenstände FREIWILLIG abzulegen, kann man folgendes verwenden:
<drop to="ablage" count="1" target="naechste-szene"/>
Wenn man zudem noch ausschließen will, dass bestimmte Gegenstände abgelegt werden, kann das Attribut except verwendet werden.
<drop to="altar" count="1" target="naechste-szene" except="Holzschild|Schwert|*Fernkampfwaffe"/>
In except kann ein Gegenstand mit seinem Namen oder der ID ('#WareID') angegeben werden oder mehrere Gegenstände bzw. Warentags via | verbunden. Das gezeigte Beispiel erlaubt also nicht das Ablegen eines Holzschildes, auch nicht das Ablegen eines Schwertes und auch nicht das Ablegen einer beliebigen Fernkampfwaffe (als Fernkampfwaffe getaggte Ware).
Hinweis
In der Szene, in der die Auswahl angeboten wird, sollten keine Proben sein, da diese derzeit immer wieder erneut ausgewertet würden. Allerdings funktionieren seit heute auch die benannten/gespeicherten Proben - mehr dazu gleich in einem anderen Thread. Meist kann man einfach für die Gegenstandsaufnahme eine Hilfs-Szene machen, so dass darin keine Proben stattfinden müssen:
<challenge .../>
... mit einem Altar auf dem ein paar Dinge liegen.
Den <choice target="altar-ansehen">Altar ansehen</choice>.
...
und in altar-ansehen dann:
...<take from="Altar"/>...
Siehe auch: Take Drop