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