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