locate_objects()
================

FUNKTION
--------
::

     object *locate_objects(string desc, int info);

DEFINIERT IN
------------
::

     /std/container/restrictions.c

ARGUMENTE
---------
::

     desc
          Die Umschreibung des gesuchten Objektes.

     info
          Ist ungleich 0, wenn diese Funktion von /std/living/put_and_get.c
          aus aufgerufen wurde.

BESCHREIBUNG
------------
::

     Diese Funktion erweitert die Funktionalitaet von present_objects()
     insofern, als dass es moeglich ist, auch noch Behaelter innerhalb des
     Behaelters zu durchsuchen. Das genaue Verhalten haengt von desc ab:

     Ist desc von der Form "<id>", so wird das Ergebnis von
     present_objects(desc) zurueckgegeben.

     Ist desc von der Form "<gesucht> in <id>", so wird in allen Objekten,
     die von present_objects("<id>") erfasst wurden,
     locate_objects("<desc>") aufgerufen. Zurueckgegeben werden alle auf
     diese Weise gefundenen Objekte.

RUeCKGABEWERT
-------------
::

     Array von Objekten, die auf die oben geschilderte Art und Weise
     ermittelt wurden. Konnte kein Objekt ermittelt werden, wird ein leeres
     Array zurueckgegeben.

BEMERKUNGEN
-----------
::

     Theoretisch sollte es moeglich sein, ueber desc rekursiv mehrere
     Behaelterebenen erfassen zu koennen (etwa mit "schwert in beutel in
     beutel in wargon"). In der aktuellen Implementierung klappt das jedoch
     nicht; nach dem ersten "in" ist Schluss!

BEISPIELE
---------
::

     Was steckt alles dem Beutel, den der Spieler bei sich traegt?

     object *obs;
     obs = this_player()->locate_objects("alles in beutel");

     Traegt der Spieler keinen Beutel bei sich oder ist dieser leer, so wird
     ein leeres Array zurueckgegeben.

SIEHE AUCH
----------
::

     present_objects(), /std/container/restrictions.c


Last modified: Wed May 8 10:20:36 1996 by Wargon

