pick_objects()

FUNKTION:
    public varargs int pick_objects(string str, int flag, mixed msg);

DEFINIERT IN:
    /std/living/put_and_get.c

ARGUMENTE:
    string str
        Was aufgehoben werden soll.
    int flag
        Muss das Objekt irgendwo drinstecken (flag = 1), oder darf es einfach
        so herumliegen (flag = 0)? Dieses Argument ist hauptsaechlich fuer das
        Kommando "hole" gedacht, in der Regel braucht man es nicht anzugeben.
    mixed msg
        Eine optionale Meldung, die anstelle von P_PICK_MSG oder der
        Standardmeldung verwendet wird, oder -1, um die Meldung zu
        unterdruecken.

BESCHREIBUNG:
    Der Spieler oder NPC nimmt die in <str> benannten Sachen. Kann er ein
    Objekt nicht nehmen, 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 genommen hat! Er hat es nur versucht, d.h. auf jeden Fall eine
    Meldung bekommen. Gibt die Funktion 0 zurueck, hat er noch keine bekommen.

SIEHE AUCH:
    move(L), pick(L), P_PICK_MSG, find_objects(L), moved_objects(L)

----------------------------------------------------------------------------
Last modified: Fri Jul 25 10:58:43 2008 by Amynthor
