blob: 1c3615f5b7d948504251ca65527e8359a97e785c [file] [log] [blame]
Zesstrab9cabc62019-03-18 22:25:01 +01001AddvItem()
2==========
3
4FUNKTION
5--------
6
Zesstra38f62e42019-12-09 22:10:50 +01007 public varargs void AddvItem(string key, int refresh, mapping shadowprops, string path, mapping props)
Zesstrab9cabc62019-03-18 22:25:01 +01008
9
10DEFINIERT IN
11------------
12
13 /std/container/vitems.c
14
15ARGUMENTE
16---------
17
18 key
19 Eindeutige Bezeichnung des vItems und mit dieser wieder loeschbar. Das
20 vItem wird im Raum auch unter dieser ID ansprechbar sein.
21 refresh
22 Refresheinstellungen des vItems, nachdem es mitgenommen wurde
23 shadowprops
24 Properties des vItems *im Raum* (optional, wenn <path> genutzt)
25 path
26 Vorlage/Templat des vItems und Blueprint fuer Clones (optional)
27 props
28 Properties, welche in Clones von der Vorlage gesetzt werden (optional)
29
30BESCHREIBUNG
31------------
32
33 Dem Container/Raum wird ein virtuelles Item hinzugefuegt. Dieses ist
34 kein im Container vorhandenes reales Objekt, kann aber (weitgehend) wie ein
35 solches untersucht und behandelt werden.
36
37 Falls das vItem ein reales Objekt als Templat hat (d.h. <path> angegeben
38 wird), kann das vItem standardmaessig mitgenommen werden, es wird dafuer
39 automatisch erzeugt. (Das Mitnehmen ist aber wie immer mit P_NOGET
40 verhinderbar.)
41
42 Das Mapping <shadowprops> enthaelt die Properties, welche das vItem
43 im Container beschreiben. Hat das vItem ein Templat, werden alle
44 Properties, welche *nicht* in <shadowprops> enthalten sind, aus dem
45 Templat entnommen. Auf diese Weise kann man einem Objekt im Raum
46 unterschiedliche Eigenschaften geben.
47
48 Wird ein vItem mitgenommen, wird <path> geclont und die im Argument <props>
49 angegebenen Properties in ihm gesetzt. Auf diese Weise kann man das
50 genommene Objekt noch individuell konfigurieren.
51
52 Zu beachten ist: in <shadowprops> enthaltene Properties *ersetzen* (nicht
53 ergaenzen) im Regelfall diejenigen im Templat *und* in <props>. In <props>
54 enthaltene Properties *ersetzen* wiederum diejenigen im Templat.
55 Ausnahmen sind Properties, welche ein Mapping oder ein Array enthalten:
56 Deren Inhalt wird *hinzugefuegt*. Dies betrifft insbesondere die Properties:
57 P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS, P_IDS,
58 P_CLASS, P_ADJECTIVES.
59 Will man dies nicht, kann man den Propertynamen so angeben:
60 VI_PROP_RESET(P_DETAILS), was dazu fuehrt, dass P_DETAILS vor dem
61 Hinzufuegen geloescht wird.
62
63 Nachdem ein vItem mitgenommen wurde, ist es im Raum nicht mehr ansprechbar.
64 Es wird es je nach <refresh> wieder verfuegbar:
65
66 - VI_REFRESH_NONE
67 Es wird erst nach dem Neuladen/Neuerstellen des Containers wieder
68 verfuegbar.
69 - VI_REFRESH_ALWAYS
Zesstrab9cabc62019-03-18 22:25:01 +010070 - VI_REFRESH_REMOVE
Zesstra38f62e42019-12-09 22:10:50 +010071 Es wird mit dem naechsten Reset wieder verfuegbar, wenn das Item
72 genommen wurde (auch wenn es danach wieder um Raum abgelegt wurde).
73 *Vorsicht*
Zesstrab9cabc62019-03-18 22:25:01 +010074 - VI_REFRESH_DESTRUCT
75 Es wird mit dem naechsten Reset wieder verfuegbar, wenn das geclonte
76 Objekt nicht mehr existiert.
77 - VI_REFRESH_MOVE_HOME
78 Das geclonte Objekt wird im naechsten Reset 'zurueckgeholt', d.h.
79 zerstoert und das vItem ist wieder im Raum verfuegbar.
80 - VI_REFRESH_INSTANT
81 Es ist abweichend vom Normalverhalten sofort nach Mitnehmen wieder
82 verfuegbar und mitnehmbar. **Vorsicht!**
83
84
85BEMERKUNGEN
86-----------
87
88 * vItems koennen geschachtelt werden, falls es sich um vItems mit Vorlagen
89 handelt.
90 * vItems sind verhaeltnismaessig aufwendig. Sie sollten nur verwendet
91 werden, wenn sie einen Mehrwert ggue. einfachen Details haben. Es bringt
92 nichts, jedes Detail gegen ein vItem zu ersetzen.
93 * Es kann aber praktisch sein, komplexe Detailbaeume an einem vItem zu
94 verankern, wenn man diesen Detailbaum ein- oder ausblenden will.
95
96BEISPIELE
97---------
98
Zesstrae66d53a2019-11-29 00:00:41 +010099.. code-block:: pike
Zesstrab9cabc62019-03-18 22:25:01 +0100100
101 // Ein einfaches VItem ohne Templat, nicht nehmbar
102 AddVItem("regal", VI_REFRESH_NONE,
103 ([P_LONG: "Das Wandregal hat 3 schwarze Bretter.",
104 P_GENDER: NEUTER,
105 P_IDS: ({"wandregal"}), // "regal" hat es automatisch
106 P_DETAILS: ([
107 "bretter": "Die Regelbretter sind ganz zerkratzt.\n",
108 "kratzer": "Da war wohl jemand achtlos.\n"
109 ]),
110 P_TOUCH_DETAILS: ([
111 SENSE_DEFAULT: "Du erspuerste tiefe Kratzer.\n",
112 "kratzer": Oha, die Kratzer sind ganz schoen tief!\n",
113 ]),
114 P_READ_DETAILS: ([SENSE_DEFAULT:
115 "Auf dem Regal ist eingraviert: 'Dies ist ein vItem-Test.'\n"
116 ]),
117 P_SMELLS: ([SENSE_DEFAULT:
118 "Das Regal riecht gar nicht. Wirklich nicht.\n"]),
119 ]) );
120
121 // Ein VItem mit Templat, nehmbar
122 AddVItem("schaufel", VI_REFRESH_REMOVE, 0, "/items/schaufel");
123
124 // Ein VItem mit Templat, nicht nehmbar
125 AddVItem("schaufel", VI_REFRESH_NONE, ([P_NOGET:1]), "/items/schaufel");
126
127 // Ein VItem, welches P_DETAIL komplett ueberschreibt und alle Details
128 // loescht.
129 AddVItem("schaufel", VI_REFRESH_REMOVE,
130 ([VI_PROP_RESET(P_DETAILS): ([]) ]),
131 "/items/schaufel");
132
133 // Eine Zwiebel im Raum, eine andere Beschreibung hat als die im
134 // Spielerinventar
135 AddVItem("zwiebel", VI_REFRESH_REMOVE,
136 ([P_LONG: "Die Zwiebel sieht etwas vertrocknet aus.\n",
137 P_DETAILS: ([ ({"blatt","blaetter"}): "Sie haengen herab.\n"]),
138 ]),
139 "/items/kraeuter/zwiebel",
140 // Die hier gesammelte Zwiebel ist besonders toll
141 ([P_ZWIEBEL_TYP: EXTRA_STARK]) );
142
143 // Eine modifizierte Eisenstange
144 AddVItem("eisstange", VI_REFRESH_REMOVE,
145 0,
146 "/items/eisenstange",
147 ([P_LONG:BS("Diese Eisstange eignet sich hervorragend dazu, "
148 "mit ihr auf jemanden einzuschlagen.\n"),
149 P_SHORT:"Ein Eisstange.",
150 P_NAME: "Eisstange",
151 VI_PROP_RESET(P_IDS): ({"stange", "eisstange"}),
152 VI_PROP_RESET(P_MATERIAL): ([MAT_ICE: 100]),
153 VI_PROP_RESET(P_DAM_TYPE): ({DT_BLUDGEON, DT_COLD}),
154 P_WEIGHT: 5000,
155 P_VALUE: 500,
156 VI_PROP_RESET(P_SMELLS): ([SENSE_DEFAULT:
157 "Das Eis riecht nach Vanille!\n"]),
158 ])
159 );
160
161 // Ein Ueberraschungs-Ei - verwandelt sich beim Nehmen in was anderes.
162 // (Keine tolle Idee, soll nur zeigen, dass es geht.)
163 AddVItem("ue-ei", VI_REFRESH_REMOVE,
164 ([P_SHORT:"Ein Ue-Ei.",
165 P_LONG: BS("Da liegt tatsaechlich ein Ue-Ei auf dem Boden. "
166 "Wenn man es nimmt, verwandelt es sich in etwas anderes."),
167 VI_PROP_RESET(P_IDS): ({"ue-ei","ei"}),
168 ]),
169 "/items/schaufel"
170 );
171
172
173SIEHE AUCH
174----------
175
176 :doc:`RemoveVItem`, :doc:`AddItem`, :doc:`RemoveItem`
177 :doc:`../std/vitems`
178
179Last modified: 03.04.2019, Zesstra
180