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

