P_PUT_MSG
=========

NAME
----
::

     P_PUT_MSG				"put_message"

DEFINIERT IN
------------
::

     /sys/living/put_and_get.h

BESCHREIBUNG
------------
::

     Mit P_PUT_MSG kann man die Meldung, die man beim Hineinstecken eines
     Objektes in einen Container bekommt, modifizieren.

     Folgende Werte sind moeglich:

     o 0
       Es wird eine Standardmeldung ausgegeben. Dies ist Voreinstellung.

     o NO_PNG_MSG	== -1
       Es wird keinerlei Meldung ausgegeben

     o Ein Array aus Strings
       Der erste String wird an den Spieler ausgegeben, der zweite
       (optionale) an den Raum.

       Die Strings werden durch die Funktion replace_personal() geparst.
	Objekt1 - Spieler
        Objekt2 - das Objekt, das irgendwohin gesteckt wird
	Objekt3 - der Container

       Wird der zweite String nicht angegeben, erfolgt keine Meldung an den
       Raum.

BEISPIEL
--------
::

     void create() {
      ...
      SetProp( P_SHORT, "Etwas Sand" );
      SetProp( P_LONG, break_string(
       "Ein wenig magischer Sand. Sehr feinkruemelig.",78 ));

      SetProp( P_NAME, "Sand" );
      AddId( ({"sand"}) );
      SetProp( P_GENDER, MALE );

      SetProp( P_PUT_MSG, ({
       "Du laesst @WEN2 in @WENU3 rieseln.",
       "@WER1 laesst @WEN2 in @WENU3 rieseln."}));
      ...
     }

     Das ganze fuehrt bei Ugars "stecke sand in paket" zu folgenden
     Meldungen:

     Ugar: "Du laesst den Sand in ein Paket rieseln."
     Raum: "Ugar laesst den Sand in ein Paket rieseln."

SIEHE AUCH
----------
::

     Aehnliches: P_PICK_MSG, P_DROP_MSG, P_GIVE_MSG, P_WEAR_MSG, P_WIELD_MSG
     Fehler:     P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_TOO_MANY_MSG,
                 P_NOINSERT_MSG, P_NOLEAVE_MSG, P_NODROP, P_NOGET 
     Sonstiges:  replace_personal(E), put_obj(L), /std/living/put_and_get.c

14. Maerz 2004 Gloinson

