remove_multiple() ================= FUNKTION -------- :: public varargs int remove_multiple(int limit, mixed fun); DEFINIERT IN ------------ :: /std/container/items.c ARGUMENTE --------- :: limit: Anzahl gleicher Objekte, die verbleiben sollen. fun: Funktionsname (string) oder Closure. BESCHREIBUNG ------------ :: Wird diese Funktion aufgerufen, werden alle gleichen Objekte (standardmaessig definiert als gleicher Ladename, gleiche Kurzbeschreibung und gleiche Langbeschreibung), deren Anzahl ueberschreitet, entfernt. Ausnahmen: Lebewesen und per AddItem() hinzugefuegte Objekte. Mit dem Argument lassen sich die Kriterien fuer die "Gleichheit" aendern. Ist ein Funktionsname, wird diese Funktion an allen in Frage kommenenden Objekten im Container gerufen. Ist eine Closure, werden sie fuer jedes in Frage kommende Objekt einmal gerufen und ihr das Objekt uebergeben. Als 'gleich' werden alle Objekte betrachtet, fuer die den gleichen Wert zurueckliefert. Objekte, fuer die 0 zurueckliefert, werden ignoriert. BEMERKUNGEN ----------- :: 1) Raeume rufen remove_multiple(3) standardmaessig im reset(), jedoch nur, wenn kein Spieler anwesend ist und mehr als 10 Objekte im Raum sind. 2) remove_multipe(0) entfernt alle entfernbaren Objekte (s. Ausnahmen). BEISPIELE --------- :: Ein Container enthaelt 5 Fackeln. Im reset() ruft man nun remove_multiple(3) auf. Anschliessend sind noch 3 Fackeln uebrig. Alle verbleibenden Objekte im Container sollen unterschiedliche Namen haben: remove_multiple(1, "name"); Ein Container soll nur ein Objekt behalten, welches groesser als 70 cm ist: int groessen_filter(object ob) { if (ob->QueryProp(P_SIZE > 70)) return 1; return 0; // damit das Objekt ignoriert wird. // Alternativ koennte man statt 0 auch object_name(ob) zurueckliefern, // dann sind diese Objekte alle unterschiedlich. } ... remove_multiple(1, #'groessen_filter); SIEHE AUCH ---------- :: reset() 31.01.2009, Zesstra