MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | AddItem() |
| 2 | |
| 3 | FUNKTION: |
| 4 | varargs object AddItem(mixed filename,int refresh,mixed props); |
| 5 | |
| 6 | DEFINIERT IN: |
| 7 | /std/room/items.c |
| 8 | /std/npc/items.c |
| 9 | |
| 10 | ARGUMENTE: |
| 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 | |
| 34 | RUeCKGABEWERT: |
| 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 | |
| 41 | BESCHREIBUNG: |
| 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 | |
| 121 | BEMERKUNGEN: |
| 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 | |
| 130 | BEISPIELE: |
| 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 | |
| 153 | SIEHE 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 | ---------------------------------------------------------------------------- |
| 159 | Last modified: Thu Nov 23 13:43:30 CET 2006 by Rumata |