pick()

FUNKTION:
    public varargs int pick(object o, mixed msg);

DEFINIERT IN:
    /std/living/put_and_get.c

ARGUMENTE:
    object o
        Das Objekt, das aufgehoben werden soll.
    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 das Objekt auf. Gibt o->move() keinen positiven
    Wert zurueck, beispielsweise weil das Objekt zu schwer ist oder nicht
    genommen werden darf, bekommt er eine entsprechende Fehlermeldung.

RUECKGABEWERT:
    Wenn das Aufnehmen geklappt hat, 1, ansonsten 0.

BEMERKUNG:
    Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
    aufnehmen lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
    moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
    manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.

    Die Funktion prueft nicht, ob sich das Objekt ueberhaupt in der Reichweite
    des Spielers/NPC befindet, das muss man ggf. selbst ermitteln.

BEISPIEL:
    ob = clone_object(WEINGUMMI);

    if (this_player()->pick(ob, ({ "Du nimmst @WENU2 aus dem Regal.",
                                   "@WER1 nimmt @WENU2 aus dem Regal." })))
        weingummi--;
    else
        ob->remove();

SIEHE AUCH:
    move(L), P_PICK_MSG, pick_objects(L), P_NOINSERT_MSG, P_NOLEAVE_MSG,
    P_TOO_MANY_MSG, P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NOGET

----------------------------------------------------------------------------
Last modified: Thu Aug 28 22:21:41 2008 by Amynthor
