| |
| AddItem() |
| ********* |
| |
| |
| FUNKTION |
| ======== |
| |
| varargs object AddItem(mixed filename,int refresh,mixed props); |
| |
| |
| DEFINIERT IN |
| ============ |
| |
| /std/room/items.c |
| /std/npc/items.c |
| |
| |
| ARGUMENTE |
| ========= |
| |
| filename |
| String mit dem Namen des zu erzeugenden Objektes oder Array von |
| Strings mit den Namen der zu erzeugenden Objekte. Bei einem Array |
| wird ein Name zufaellig ausgewaehlt. |
| refresh |
| Wann und wie soll das Objekt erneuert werden: |
| - REFRESH_NONE - Kein Refresh bis zum Neuladen des Raums |
| - oder NPCs. |
| - REFRESH_DESTRUCT - Refresh bei Reset, wenn Item zerstoert |
| wurde. |
| - REFRESH_REMOVE - Refresh bei Reset, wenn Item entfernt wurde. |
| - REFRESH_ALWAYS - Neuer Clone bei jedem Reset. |
| - REFRESH_MOVE_HOME - Objekt wird bei Reset automatisch |
| zurueckgeholt, wenn es wegbewegt wurde. |
| Wurde das Objekt zerstoert, wird es automatisch neu |
| erzeugt, wie bei REFRESH_DESTRUCT. |
| (nur in Raeumen!) |
| Bei NPC's gilt zusaetzlich: |
| - CLONE_WEAR - Item Anziehen, wenn es eine Ruestung ist. |
| - CLONE_WIELD - Item zuecken, wenn es eine Waffe ist. |
| - CLONE_NO_CHECK - Zuecken oder Anziehen ohne Ueberpruefungen. |
| props (optional) |
| Mapping mit denen in einem geclonten Objekt zu setzenden |
| Properties oder 1 fuer die Erzeugung einer Blueprint. |
| |
| |
| RUeCKGABEWERT |
| ============= |
| |
| Innerhalb von Raeumen wird das erzeugte Objekt zurueckgeliefert. Bei |
| NPC's klappt dies leider nicht, da dort die Objekte nicht sofort |
| erzeugt werden, sondern erst, nachdem der NPC an seinen |
| Bestimmungsort transferiert wurde. Daher wird bei NPC immer 0 |
| zurueckgegeben. |
| |
| |
| BESCHREIBUNG |
| ============ |
| |
| Abhaengig von <filename> und <props> wird ein Objekt erzeugt und in |
| den Raum bzw. NPC bewegt. Dabei gibt es folgende Moeglichkeiten: |
| - <filename> ist ein Dateiname. |
| Es wird ein Clone dieser Datei erstellt oder (wenn <props>=1 ist) |
| deren Blueprint verwendet. |
| - <filename> ist ein Array von Dateinamen. |
| Es wird eine Datei zufaellig aus dem Array ausgewaehlt und von |
| dieser Datei ein Clone erstellt oder (wenn <props>=1 ist) deren |
| Blueprint verwendet. |
| Uebergibt man fuer <props> ein Mapping mit dem Aufbau |
| ([prop_name:prop_wert,...]), |
| so werden diese Properties im erzeugten Objekt gesetzt. |
| Der Parameter <refresh> gibt an, was waehrend eines Resets im Raum |
| bzw. in NPC's oder was beim Erzeugen von NPC's geschehen soll: |
| In <rooms.h> sind dazu folgende Moeglichkeiten definiert: |
| - REFRESH_NONE |
| Das Objekt wird niemals erneuert; falls es zerstoert wurde, wird |
| es erst dann wieder erzeugt, wenn der Raum erneut geladen bzw. |
| der NPC neu erzeugt wird. Man beachte, dass nicht jeder NPC |
| wirklich refreshende Objekte benoetigt, REFRESH_NONE spart |
| hierbei sowohl Rechenzeit als auch Speicher! |
| - REFRESH_DESTRUCT |
| Das Objekt wird nur dann erneuert, wenn es in der Zwischenzeit |
| zerstoert wurde (bei NPC's ist das zum Beispiel der Fall, wenn |
| sie getoetet wurden). |
| REFRESH_NONE & REFRESH_DESTRUCT + Blueprint-Objekt bedeutet bei |
| NPC's ein Unique-Objekt, es wird also nicht beim Neuerzeugen des |
| NPC's zurueckgesetzt. |
| - REFRESH_REMOVE |
| Das Objekt wird erneuert, wenn es sich nicht mehr im Raum bzw. |
| im NPC befindet. Das kein sein, weil es zerstoert wurde, aber |
| auch zum Beispiel in folgenden Faellen: |
| * weil es jemand mitgenommen hat |
| (in Raeumen bei Gegenstaenden) |
| * weil es fortgegangen ist |
| (in Raeumen bei NPC's, die herumlaufen) |
| * weil es weggeworfen wurde |
| (in NPC's bei Gegenstaenden) |
| - REFRESH_ALWAYS |
| Das Objekt wird immer erneuert. Von dieser Refreshmethode sollte |
| man allerdings Abstand nehmen, da sich sonst mit der Zeit |
| gewaltige Mengen von Objekten ansammeln koennen! |
| - REFRESH_MOVE_HOME |
| Das Objekt wird in einen Raum zurueckbewegt, sofern es noch |
| existiert, jedoch nicht mehr in dem Raum ist. Sinnvoll ist dies |
| eigentlich nur fuer Lebewesen, funktioniert aber auch bei |
| beliebigen Objekten. Hauptsaechlich geht es hierbei darum, |
| herumlaufende NPCs oder bei erzwungenen Bewegungen nicht von |
| P_GUARD zurueckgehaltene NPCs wieder an einen definierten |
| Ausgangsort zurueckzubringen. |
| Wurde das Objekt zerstoert, wird es neu erzeugt. |
| Hat man in Raeumen als <filename> ein Array von Dateinamen |
| uebergeben, so wird beim Reset jedesmal aufs Neue ein zufaelliges |
| Objekt aus der Liste ausgewaehlt (nicht in NPC's). |
| In NPC's gilt der Grundsatz der Vermeidung von ueberfluessigen |
| Objekten im MUD. Neu erzeugt werden Objekte beim Erzeugen eines |
| NPC's oder bei einem Reset im selbigen. Anstatt die Objekte gleich |
| neu zu erschaffen, wird erst geschaut, ob sich identische Objekte |
| schon im Raum befinden. Ist dies der Fall, so nimmt der NPC sie auf, |
| ruft jedoch vorher nochmals create() in ihnen auf! |
| (noetig wegen moeglicher Veraenderungen an den Objekten) |
| Was dann passiert, haengt von weiteren Angaben in <refresh> ab. |
| Folgende weitere Moeglichkeiten sind in <npc.h> definiert: |
| - CLONE_WEAR |
| Ist das hinzugefuegte Item eine Ruestung, so wird sie nach |
| Aufnahme oder Neuerzeugung angezogen. |
| - CLONE_WIELD |
| Ist das hinzugefuegte Item eine Waffe, so wird sie nach Aufnahme |
| oder Neuerzeugung gezueckt. |
| - CLONE_NO_CHECK |
| Hiermit verhindert man eine Ueberpruefung, ob eine Ruestung |
| angezogen oder eine Waffe gezueckt werden kann. Es ist jedoch |
| Vorsicht geboten: So kann es ohne weiteres passieren, dass ein NPC |
| mehrere Ruestungen gleichen Typs angezogen oder mehrere Waffen |
| gezueckt hat. |
| Benutzt man Blueprints (<props>=1) mit REFRESH_REMOVE oder |
| REFRESH_ALWAYS, so kann es zu ungewollten Ueberraschungen kommen, da |
| die Blueprint dann unabhaengig von ihrem momentanen Aufenthaltsort |
| wieder in den Raum bzw. NPC bewegt wird, von dem sie erzeugt wurde! |
| |
| |
| BEMERKUNGEN |
| =========== |
| |
| Wenn man Blueprints benutzt, sollte man daran denken, dass sich von |
| dieser dann keine Clones mehr erstellen lassen! |
| |
| Die Option CLONE_NEW ist veraltet. Die Objekte werden nun immer |
| neu erzeugt. Die Option darf noch angegeben werden, hat aber keine |
| Bedeutung mehr. |
| |
| |
| BEISPIELE |
| ========= |
| |
| // Ein Wuerfel, der sich nach Entfernen erneuert: |
| AddItem("/obj/misc/wuerfel",REFRESH_REMOVE); |
| // Ein etwas veraenderter Wuerfel: |
| AddItem("/obj/misc/wuerfel", |
| REFRESH_REMOVE, |
| ([P_SHORT :"Ein schwerer Wuerfel", |
| P_WEIGHT:100])); |
| // Eine Blueprint, die nur einmal im MUD existiert. Wenn sie |
| // zerstoert wurde, wird sie bei Reset neu erzeugt: |
| AddItem("/mon/angsthase",REFRESH_DESTRUCT,1); |
| // Eine Blueprint, die nur einmal im MUD existiert. Wenn sie aus dem |
| // Raum entfernt wurde, wird sie bei Reset zurueckgeholt: |
| AddItem("/mon/angsthase",REFRESH_MOVE_HOME,1); |
| // Ein zufaelliges Objekt: |
| AddItem(({"/obj/misc/lolli", |
| "/obj/misc/bonbon", |
| "/obj/misc/bier"}),REFRESH_REMOVE); |
| // Eine Ruestung, die auch angezogen wird (nur in NPC's): |
| AddItem("/ruestung/sommerkleid",REFRESH_REMOVE|CLONE_WEAR); |
| // Eine Unique-Waffe, die auch gezueckt wird (nur in NPC's): |
| AddItem("/waffe/zapper",REFRESH_DESTRUCT|CLONE_WIELD,1); |
| |
| |
| SIEHE AUCH |
| ========== |
| |
| RemoveItem(), replace_program(), create(), P_GUARD, |
| /std/room/items.c, /std/npc/items.c, |
| /sys/rooms.h, /sys/npc.h |
| |
| Last modified: Thu Nov 23 13:43:30 CET 2006 by Rumata |