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