blob: ad53d85ab1039923b8d4cabe68d27a2b094da49d [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001AddItem()
2=========
3
4FUNKTION
5--------
6::
7
8 varargs object AddItem(mixed filename,int refresh,mixed props);
9
10DEFINIERT IN
11------------
12::
13
14 /std/room/items.c
15 /std/npc/items.c
16
17ARGUMENTE
18---------
19::
20
21 filename
22 String mit dem Namen des zu erzeugenden Objektes oder Array von
23 Strings mit den Namen der zu erzeugenden Objekte. Bei einem Array
24 wird ein Name zufaellig ausgewaehlt.
25 refresh
26 Wann und wie soll das Objekt erneuert werden:
27 - REFRESH_NONE - Kein Refresh bis zum Neuladen des Raums
28 - oder NPCs.
29 - REFRESH_DESTRUCT - Refresh bei Reset, wenn Item zerstoert
30 wurde.
31 - REFRESH_REMOVE - Refresh bei Reset, wenn Item entfernt wurde.
32 - REFRESH_ALWAYS - Neuer Clone bei jedem Reset.
33 - REFRESH_MOVE_HOME - Objekt wird bei Reset automatisch
34 zurueckgeholt, wenn es wegbewegt wurde.
Bugfix286a9672020-03-20 19:02:42 +010035 Wurde das Objekt zerstoert, wird es automatisch neu
36 erzeugt, wie bei REFRESH_DESTRUCT.
Zesstra18626972017-01-31 10:38:27 +010037 (nur in Raeumen!)
38 Bei NPC's gilt zusaetzlich:
39 - CLONE_WEAR - Item Anziehen, wenn es eine Ruestung ist.
40 - CLONE_WIELD - Item zuecken, wenn es eine Waffe ist.
41 - CLONE_NO_CHECK - Zuecken oder Anziehen ohne Ueberpruefungen.
42 props (optional)
43 Mapping mit denen in einem geclonten Objekt zu setzenden
44 Properties oder 1 fuer die Erzeugung einer Blueprint.
45
46RUeCKGABEWERT
47-------------
48::
49
50 Innerhalb von Raeumen wird das erzeugte Objekt zurueckgeliefert. Bei
51 NPC's klappt dies leider nicht, da dort die Objekte nicht sofort
52 erzeugt werden, sondern erst, nachdem der NPC an seinen
53 Bestimmungsort transferiert wurde. Daher wird bei NPC immer 0
54 zurueckgegeben.
55
56BESCHREIBUNG
57------------
58::
59
60 Abhaengig von <filename> und <props> wird ein Objekt erzeugt und in
61 den Raum bzw. NPC bewegt. Dabei gibt es folgende Moeglichkeiten:
62 - <filename> ist ein Dateiname.
63 Es wird ein Clone dieser Datei erstellt oder (wenn <props>=1 ist)
64 deren Blueprint verwendet.
65 - <filename> ist ein Array von Dateinamen.
66 Es wird eine Datei zufaellig aus dem Array ausgewaehlt und von
67 dieser Datei ein Clone erstellt oder (wenn <props>=1 ist) deren
68 Blueprint verwendet.
69 Uebergibt man fuer <props> ein Mapping mit dem Aufbau
70 ([prop_name:prop_wert,...]),
71 so werden diese Properties im erzeugten Objekt gesetzt.
72 Der Parameter <refresh> gibt an, was waehrend eines Resets im Raum
73 bzw. in NPC's oder was beim Erzeugen von NPC's geschehen soll:
74 In <rooms.h> sind dazu folgende Moeglichkeiten definiert:
75 - REFRESH_NONE
76 Das Objekt wird niemals erneuert; falls es zerstoert wurde, wird
77 es erst dann wieder erzeugt, wenn der Raum erneut geladen bzw.
78 der NPC neu erzeugt wird. Man beachte, dass nicht jeder NPC
79 wirklich refreshende Objekte benoetigt, REFRESH_NONE spart
80 hierbei sowohl Rechenzeit als auch Speicher!
81 - REFRESH_DESTRUCT
82 Das Objekt wird nur dann erneuert, wenn es in der Zwischenzeit
83 zerstoert wurde (bei NPC's ist das zum Beispiel der Fall, wenn
84 sie getoetet wurden).
85 REFRESH_NONE & REFRESH_DESTRUCT + Blueprint-Objekt bedeutet bei
86 NPC's ein Unique-Objekt, es wird also nicht beim Neuerzeugen des
87 NPC's zurueckgesetzt.
88 - REFRESH_REMOVE
89 Das Objekt wird erneuert, wenn es sich nicht mehr im Raum bzw.
90 im NPC befindet. Das kein sein, weil es zerstoert wurde, aber
91 auch zum Beispiel in folgenden Faellen:
92 * weil es jemand mitgenommen hat
93 (in Raeumen bei Gegenstaenden)
94 * weil es fortgegangen ist
95 (in Raeumen bei NPC's, die herumlaufen)
96 * weil es weggeworfen wurde
97 (in NPC's bei Gegenstaenden)
98 - REFRESH_ALWAYS
99 Das Objekt wird immer erneuert. Von dieser Refreshmethode sollte
100 man allerdings Abstand nehmen, da sich sonst mit der Zeit
101 gewaltige Mengen von Objekten ansammeln koennen!
102 - REFRESH_MOVE_HOME
103 Das Objekt wird in einen Raum zurueckbewegt, sofern es noch
104 existiert, jedoch nicht mehr in dem Raum ist. Sinnvoll ist dies
105 eigentlich nur fuer Lebewesen, funktioniert aber auch bei
106 beliebigen Objekten. Hauptsaechlich geht es hierbei darum,
107 herumlaufende NPCs oder bei erzwungenen Bewegungen nicht von
108 P_GUARD zurueckgehaltene NPCs wieder an einen definierten
109 Ausgangsort zurueckzubringen.
Bugfix286a9672020-03-20 19:02:42 +0100110 Wurde das Objekt zerstoert, wird es neu erzeugt.
Zesstra18626972017-01-31 10:38:27 +0100111 Hat man in Raeumen als <filename> ein Array von Dateinamen
112 uebergeben, so wird beim Reset jedesmal aufs Neue ein zufaelliges
113 Objekt aus der Liste ausgewaehlt (nicht in NPC's).
114 In NPC's gilt der Grundsatz der Vermeidung von ueberfluessigen
115 Objekten im MUD. Neu erzeugt werden Objekte beim Erzeugen eines
116 NPC's oder bei einem Reset im selbigen. Anstatt die Objekte gleich
117 neu zu erschaffen, wird erst geschaut, ob sich identische Objekte
118 schon im Raum befinden. Ist dies der Fall, so nimmt der NPC sie auf,
119 ruft jedoch vorher nochmals create() in ihnen auf!
120 (noetig wegen moeglicher Veraenderungen an den Objekten)
121 Was dann passiert, haengt von weiteren Angaben in <refresh> ab.
122 Folgende weitere Moeglichkeiten sind in <npc.h> definiert:
123 - CLONE_WEAR
124 Ist das hinzugefuegte Item eine Ruestung, so wird sie nach
125 Aufnahme oder Neuerzeugung angezogen.
126 - CLONE_WIELD
127 Ist das hinzugefuegte Item eine Waffe, so wird sie nach Aufnahme
128 oder Neuerzeugung gezueckt.
129 - CLONE_NO_CHECK
130 Hiermit verhindert man eine Ueberpruefung, ob eine Ruestung
131 angezogen oder eine Waffe gezueckt werden kann. Es ist jedoch
132 Vorsicht geboten: So kann es ohne weiteres passieren, dass ein NPC
133 mehrere Ruestungen gleichen Typs angezogen oder mehrere Waffen
134 gezueckt hat.
135 Benutzt man Blueprints (<props>=1) mit REFRESH_REMOVE oder
136 REFRESH_ALWAYS, so kann es zu ungewollten Ueberraschungen kommen, da
137 die Blueprint dann unabhaengig von ihrem momentanen Aufenthaltsort
138 wieder in den Raum bzw. NPC bewegt wird, von dem sie erzeugt wurde!
139
140BEMERKUNGEN
141-----------
142::
143
144 Wenn man Blueprints benutzt, sollte man daran denken, dass sich von
145 dieser dann keine Clones mehr erstellen lassen!
Zesstra18626972017-01-31 10:38:27 +0100146
147 Die Option CLONE_NEW ist veraltet. Die Objekte werden nun immer
148 neu erzeugt. Die Option darf noch angegeben werden, hat aber keine
149 Bedeutung mehr.
150
151BEISPIELE
152---------
153::
154
155 // Ein Wuerfel, der sich nach Entfernen erneuert:
156 AddItem("/obj/misc/wuerfel",REFRESH_REMOVE);
157 // Ein etwas veraenderter Wuerfel:
158 AddItem("/obj/misc/wuerfel",
159 REFRESH_REMOVE,
160 ([P_SHORT :"Ein schwerer Wuerfel",
161 P_WEIGHT:100]));
162 // Eine Blueprint, die nur einmal im MUD existiert. Wenn sie
163 // zerstoert wurde, wird sie bei Reset neu erzeugt:
164 AddItem("/mon/angsthase",REFRESH_DESTRUCT,1);
165 // Eine Blueprint, die nur einmal im MUD existiert. Wenn sie aus dem
166 // Raum entfernt wurde, wird sie bei Reset zurueckgeholt:
167 AddItem("/mon/angsthase",REFRESH_MOVE_HOME,1);
168 // Ein zufaelliges Objekt:
169 AddItem(({"/obj/misc/lolli",
170 "/obj/misc/bonbon",
171 "/obj/misc/bier"}),REFRESH_REMOVE);
172 // Eine Ruestung, die auch angezogen wird (nur in NPC's):
173 AddItem("/ruestung/sommerkleid",REFRESH_REMOVE|CLONE_WEAR);
174 // Eine Unique-Waffe, die auch gezueckt wird (nur in NPC's):
175 AddItem("/waffe/zapper",REFRESH_DESTRUCT|CLONE_WIELD,1);
176
177SIEHE AUCH
178----------
179::
180
181 RemoveItem(), replace_program(), create(), P_GUARD,
182 /std/room/items.c, /std/npc/items.c,
183 /sys/rooms.h, /sys/npc.h
184
185
186Last modified: Thu Nov 23 13:43:30 CET 2006 by Rumata
187