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
