drop_objects()
**************


FUNKTION
========

   public varargs int drop_objects(string str, mixed msg);


DEFINIERT IN
============

   /std/living/put_and_get.c


ARGUMENTE
=========

   string str
       Was fallengelassen werden soll.
   mixed msg
       Eine optionale Meldung, die anstelle von P_DROP_MSG oder der
       Standardmeldung verwendet wird, oder -1, um die Meldung zu
       unterdruecken.


BESCHREIBUNG
============

   Der Spieler oder NPC laesst die in <str> benannten Sachen fallen.
   Kann er ein Objekt nicht fallenlassen, bekommt er eine entsprechende
   Fehlermeldung. Wenn keine Objekte auf <str> passen, wird per
   _notify_fail() eine Meldung gesetzt, aber noch nicht ausgegeben.


RUECKGABEWERT
=============

   Wenn <str> irgendwelche vorhandenen Sachen sind, 1, sonst 0.


BEMERKUNG
=========

   Wenn die Funktion 1 zurueckgibt, heisst das noch nicht, dass der Spieler
   etwas fallengelassen hat! Er hat es nur versucht, d.h. auf jeden Fall eine
   Meldung bekommen. Gibt die Funktion 0 zurueck, hat er noch keine bekommen.


BEISPIEL
========

   private int cmd_opfern(string str)
   {
       notify_fail("WAS moechtest Du opfern?\n");

       if (!this_player()->drop_objects(str, ({ "Du opferst @WEN2.",
                                                "@WER1 opfert @WENU2.\n" })))
           return 0;

       filter_objects(this_player()->moved_objects(), "remove");
       return 1;
   }


SIEHE AUCH
==========

   move(L), drop(L), P_DROP_MSG, find_objects(L), moved_objects(L)

Last modified: Fri Jul 25 10:59:37 2008 by Amynthor
