give()
******


FUNKTION
========

   public varargs int give(object o, object dest, mixed msg);


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

   /std/living/put_and_get.c


ARGUMENTE
=========

   object o
       Das Objekt, das uebergeben werden soll.
   object dest
       Der Spieler oder NPC, der das Objekt bekommen soll.
   mixed msg
       Eine optionale Meldung, die anstelle von P_GIVE_MSG oder der
       Standardmeldung verwendet wird, oder -1, um die Meldung zu
       unterdruecken.


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

   Der Spieler oder NPC uebergibt dem Empfaenger das Objekt. Gibt o->move()
   keinen positiven Wert zurueck, beispielsweise weil das Objekt verflucht
   ist oder der Empfaenger es nicht mehr tragen kann, bekommt er eine
   entsprechende Fehlermeldung.


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

   Wenn die Uebergabe geklappt hat, 1, ansonsten 0.


BEMERKUNG
=========

   Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
   weitergeben 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 der Spieler/NPC der Objekt ueberhaupt hat,
   das muss man ggf. selbst ermitteln.


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

   move(L), P_GIVE_MSG, give_objects(L), give_notify(L),
   P_NOINSERT_MSG, P_NOLEAVE_MSG, P_TOO_MANY_MSG,
   P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NODROP

Last modified: Thu Aug 28 22:21:19 2008 by Amynthor
