FUNKTION:
public varargs object* CreateDropItems( object target )
IMPLEMENTIERT IN:
/std/npc/items.c
ARGUMENTE:
target : (optional) Das Zielobjekt, wohin die Gegenstaende bewegt
werden. Wird es nicht angegeben, werden die Gegenstaende in
den NPC (this_object()) bewegt.
RÜCKGABEWERT:
Die geklonten (gedropten) Objekte als Array oder 0, wenn keine
Objekte angemeldet wurden oder wenn das Drop-System deaktiviert wurde
(P_DROP_MODE). Achtung, das Array kann auch Nullen enthalten und es
kann groesser sein, als mit P_MAX_DROPS eingestellt wurde!
BESCHREIBUNG:
Erzeugt die vom NPC zu verlierenden Objekte ('drops'), die zuvor mit
AddDropItem(L) oder ueber eine globale Liste angemeldet wurden. Der
Aufruf ist pro NPC-Leben nur ein einziges Mal erfolgreich, weitere
Aufrufe bewirken nichts, es wird dann nur die Liste der bereits
erzeugten Objekte zurueckgegeben. Durch dieses Verhalten ist sicher-
gestellt, dass durch (absichtlichen oder versehentlichen) Mehrfach-
aufruf mehr Objekte erzeugt werden, als geplant.
Normalerweise wird CreateDropItems(L) beim Sterben des NPCs vom
Death-Handler (/global/handler/death.c) aufgerufen. Das bewirkt, das
die Objekte erst zum Todeszeitpunkt in den NPC bzw. die Leiche oder
in den Raum 'gedropt' werden. Das Klonen der Objekte wird dabei
mit catch(E) geschuetzt, so dass der NPC auch stirbt, wenn eines der
Objekte nicht geklont werden konnte. Die Fehlermeldung wird dennoch
erzeugt!
Wenn man erreichen moechte, dass der NPC seine Objekte bereits im
create() erhaelt, muss man CreateDropItems(L) nach AddDropItem(L)
im create() selbst aufrufen. Es ersetzt damit das bislang uebliche:
clone_object("/obj/foo")->move(this_object());
Andere Objekte, die unabhaengig von AddDropItem(L) in den NPC bewegt
werden, beeinflussen CreateDropItems(L) nicht.
SIEHE AUCH:
AddDropItem(L), P_MAX_DROPS, P_DROP_MODE, P_DROP_ITEMS, AddItem(L)
|