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