
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 <limit>
   ueberschreitet, entfernt.



   Ausnahmen: Lebewesen und per AddItem() hinzugefuegte Objekte.

   Mit dem Argument <fun> lassen sich die Kriterien fuer die "Gleichheit"
   aendern.
   Ist <fun> ein Funktionsname, wird diese Funktion an allen in Frage
   kommenenden Objekten im Container gerufen.
   Ist <fun> 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 <fun> den gleichen
   Wert zurueckliefert.
   Objekte, fuer die <fun> 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
