| 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. |
| |