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