blob: 581fed0032248ed98c5a81193b696c02ba3e5741 [file] [log] [blame]
Zesstrab57d4a82018-08-28 22:55:48 +02001Virtuelle Items / Objekte
2=========================
3
4Um ein Objekt genauer beschreiben zu koennen, gibt es einerseits Details an
5diesem Objekt.
6Andererseits gibt es sog. virtuelle Items (vItems), die detaillierter als
7einfache Details beschrieben werden koennen (z.B. mit Geschlecht, Material etc.), ohne wirklich als normales Objekt im Raum zu liegen. Sie koennen auch eigene Details (alle Sinne) haben und sogar selber vItems enthalten. Die vItems werden von untersuche behandelt wie normale Objekte und sind sogar als Referenzobjekt nutzbar.
8
9Auf Wunsch koennen sie so konfiguriert werden, dass ein vItem nehmbar ist.
10Das vItem im Raum und das genommene im Spielerinventar koennen hierbei sogar
11unterschiedlich beschrieben sein. Auf diese Weise koennen nehmbare Objekte im
12Raum erzeugt werden, die nicht staendig im Raum rumliegen.
13
14Die vItems koennen dabei grundsaetzlich mit allen Props konfiguriert werden,
15die man auch in normalen Objekten setzen kann. Allerdings werden diese Props
16nicht alle genutzt bzw. sind sind nicht alle sinnvoll. Beispielsweise sind
17kampfrelevante Props im Kontext von vItems bedeutungslos, ebenso solche, die
18von speziellem Code genutzt werden, der nicht in /std/container enthalten
19ist. (Allerdings kann beim Nehmen eines vItems durchaus ein nicht-standard Objekt (Waffe/Ruestung/etc.) erzeugt werden, welches im Kampf auch ganz normal genutzt werden kann.)
20
21Wird in einem vItem eine Blueprint angegeben, dient diese auch als Vorlage (Templat), aus der ggf. Properties abgefragt werden, welche nicht im vItem selbst angegeben sind.
22
23Das Nehmen von vItems ist moeglich, wenn eine Blueprint eingetragen ist,
24welche dann geclont werden kann. Hierbei muss man sich dann auch nicht mehr
25selber darum kuemmern, ob der Spieler das Objekt tragen kann (und es ggf.
26wieder zerstoeren). Die Funktionen von put_and_get.c verarbeiten vItems,
27sofern es ein passendes gibt.
28Nach dem Nehmen eines vItems ist dieses standardmaessig bis zum naechsten
29Reset "weg", d.h. nicht mehr nehmbar (clonbar) und wird auch nicht mehr
30gefunden bei untersuche & Co. Fuer den Reset von vItems sind vergleichbare Einstellung wie bei AddItem() moeglich.
31
32Interagiert Code mit einem vItem, welcher ein Objekt benoetigt, wird
33on-the-fly ein Objekt erzeugt. Ist es ein vItem mit Blueprint, wird diese
34geclont und mit den konfigurierten Properties des vItems konfiguriert.
35Anderenfalls wird ein Proxyobjekt erzeugt und mit den Properties des vItems
36konfiguriert, in welchem z.B. lfuns gerufen werden koennen. Hierbei ist das
37Proxyobjekt allerdings immer vom Typ /std/container.
38
39Ein vItem mit Blueprint benutzt (intern) einen Shadow, um Unterschiede
40zwischen dem realen Objekt des vItems ("genommener Zustand") und dem vItem im
41Raum zu ermoeglichen.
42
43Interaktion mit bug/typo/etc.
44-----------------------------
45
46Hat das vitem ein Templat, wird wie gehabt an diesem der Eintrag vorgenommen,
47als waere dieses Objekt im Raum.
48Hat es kein Templat, wird der Eintrag an dem Objekt vorgenommen, der es
49geclont hat. Das wird in aller Regel der Raum/Container sein, der das vItem
50beinhaltet.
51