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
