| Virtuelle Items / Objekte |
| ========================= |
| |
| Um ein Objekt genauer beschreiben zu koennen, gibt es einerseits Details an |
| diesem Objekt. |
| |
| Andererseits gibt es sog. virtuelle Items (vItems), die detaillierter als |
| einfache 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. |
| |
| Auf Wunsch koennen sie so konfiguriert werden, dass ein vItem nehmbar ist. |
| Das vItem im Raum und das genommene im Spielerinventar koennen hierbei sogar |
| unterschiedlich beschrieben sein. Auf diese Weise koennen nehmbare Objekte im |
| Raum erzeugt werden, die nicht staendig im Raum rumliegen. |
| |
| Die vItems koennen dabei grundsaetzlich mit allen Props konfiguriert werden, |
| die man auch in normalen Objekten setzen kann. Allerdings werden diese Props |
| nicht alle genutzt bzw. sind sind nicht alle sinnvoll. Beispielsweise sind |
| kampfrelevante Props im Kontext von vItems bedeutungslos, ebenso solche, die |
| von speziellem Code genutzt werden, der nicht in /std/container enthalten |
| ist. (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.) |
| |
| Wird 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. |
| |
| Das Nehmen von vItems ist moeglich, wenn eine Blueprint eingetragen ist, |
| welche dann geclont werden kann. Hierbei muss man sich dann auch nicht mehr |
| selber darum kuemmern, ob der Spieler das Objekt tragen kann (und es ggf. |
| wieder zerstoeren). Die Funktionen von put_and_get.c verarbeiten vItems, |
| sofern es ein passendes gibt. |
| Nach dem Nehmen eines vItems ist dieses standardmaessig bis zum naechsten |
| Reset "weg", d.h. nicht mehr nehmbar (clonbar) und wird auch nicht mehr |
| gefunden bei untersuche & Co. Fuer den Reset von vItems sind vergleichbare |
| Einstellung wie bei AddItem() moeglich. |
| |
| Interagiert Code mit einem vItem, welcher ein Objekt benoetigt, wird |
| on-the-fly ein Objekt erzeugt. Ist es ein vItem mit Blueprint, wird diese |
| geclont und mit den konfigurierten Properties des vItems konfiguriert. |
| Anderenfalls wird ein Proxyobjekt erzeugt und mit den Properties des vItems |
| konfiguriert, in welchem z.B. lfuns gerufen werden koennen. Hierbei ist das |
| Proxyobjekt allerdings immer vom Typ /std/container. |
| |
| Ein vItem mit Blueprint benutzt (intern) einen Shadow, um Unterschiede |
| zwischen dem realen Objekt des vItems ("genommener Zustand") und dem vItem im |
| Raum zu ermoeglichen. |
| |
| Interaktion mit bug/typo/etc. |
| ----------------------------- |
| |
| Hat das vitem ein Templat, wird wie gehabt an diesem der Eintrag vorgenommen, |
| als waere dieses Objekt im Raum. |
| |
| Hat es kein Templat, wird der Eintrag an dem Objekt vorgenommen, der es |
| geclont hat. Das wird in aller Regel der Raum/Container sein, der das vItem |
| beinhaltet. |
| |