
ReceiveMsg()
************

public varargs int ReceiveMsg(string msg, int msg_typ, string
msg_action,
   string msg_prefix, mixed origin)


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

   /std/npc/comm.c
   /std/player/comm.c
   /std/room/items.c
   /sys/living/comm.h


ARGUMENTE
=========

   string msg
     String mit der uebermittelten Nachricht. Muss nicht umgebrochen sein,
     da ReceiveMsg() das ebenfalls erledigt.
   int msg_typ
     Nachrichtentyp(en) fuer Filterung und Flags fuer Behandlung/Umbruch.
     Siehe unten fuer mit | kombinierbare Konstanten.
   string msg_action (optional)
     Ausloesende Aktion, wird auch fuer Ignorieren verwendet.
     Default ist query_verb(). Siehe unten fuer alternative Konstanten.
   string msg_prefix (optional)
     String, welcher ggf. im break_string() als indent verwendet wird.
     Default ist 0 (kein Indent)
   mixed origin (<object>) (optional)
     Das die Meldung ausloesende Objekt, wird fuer Ignorieren verwendet.
     Default: previous_object()


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

   ReceiveMsg() wird benutzt, um einem Lebewesen eine Nachricht zu senden.
   Dabei ruft es das sonst uebliche tell_object() fuer Spieler bzw.
   catch_tell() im NPC auf.

   Gerade fuer Nachrichten an Spieler bietet die Methode weitere Features,
   die bisher sonst haendisch zu implementieren waren:
   1) Pruefung auf Empfangbarkeit, je nach 'msg_typ', zB
      MT_LOOK nur an Nichtblinde
      MT_LISTEN nur an Nichttaube
      MT_DEBUG nur an Magier/Testspieler
   2) Pruefen auf Ignorieren von
      - Aktion ('msg_action')
        - mit 'msg_action' || query_verb()
      - Urheber ('origin')
        - fuer sendende Spieler mit origin->query_realname()
        - fuer sendende NPCs mit origin->Name(RAW))
   3) Speicherung in der tmhist (Typ MT_COMM)
   4) Speicherung im Kobold (Typ MT_COMM + aktiver Kobold)
   5) Umbrechen unter Beruecksichtigung von indent, 'msg_typ'-Flags
      fuer Umbruch und P_PREPEND_BS

   Raeume definieren standardmaessig ebenfalls ein ReceiveMsg(), welches in
   jedem Objekt im Raum ReceiveMsg() mit den uebergebenen Argumenten aufruft.
   In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
   ReceiveMsg() zurueckgelieferte Wert.


RUeCKGABEWERT
=============

   > 0 fuer Erfolg, < 0 fuer Misserfolg, s.u.
   MSG_DELIVERED    bei erfolgreicher Zustellung
   MSG_BUFFERED     bei Zwischenspeicherung durch den Kobold

   MSG_FAILED       nicht naeher spezifizierter Fehler bei Zustellung
   MSG_IGNORED      Nachricht wurde ignoriert (Absender, origin)
   MSG_VERB_IGN     Nachricht wurde ignoriert (Kommandoverb, msg_action)
   MSG_MUD_IGN      Absendendes Mud wurde ignoriert.
   MSG_SENSE_BLOCK  Passende Sinne des Empfaenger sind blockiert (z.B.
                    blind, taub)
   MSG_BUFFER_FULL  Kobold kann sich nichts mehr merken


BEMERKUNGEN
===========

   Fuer saemtliche Alternativmeldungen im Falle einer nicht erfolgreich
   zugestellten Nachricht ist der Aufrufer von ReceiveMsg() verantwortlich.

   NPCs:
   * ReceiveMsg() ruft zwecks Abwaertskompatibilitaet catch_tell() auf
   * empfohlen ist, in NPCs nun ReceiveMsg() zu ueberschreiben.
     * catch_tell() muss weiterhin fuer andere tell_object()
       ueberschrieben  werden


BEISPIELE
=========

   #1.1 Nachricht an einen Spieler, zB in der Wueste
   this_player()->ReceiveMsg("Die Sonne brennt dir auf den Kopf.",
                             MT_FEEL|MT_LOOK);

   #1.2 Nachricht an einen Spieler von einem NPC mit Indent
   // bei aktivem Editor+Kobold landet dieser Text auch im Kobold
   this_player()->ReceiveMsg("Du haust ja ganz schoen rein!",
                             MT_COMM|MT_FAR|MSG_DONT_STORE,
                             MA_TELL,
                             "Arkshat teilt dir mit: ");

   #1.3 Nachricht an einen Spieler mit Fallback-Kaskade
   // Achtung, bei MT_COMM oder Ignorieren gibt es natuerlich auch
   // Misserfolgs-Rueckgaben. Bei einem normalen Kommando wie diesem
   // hier ist das unproblematisch und daher sinnvoll:
   if(this_player()->ReceiveMsg(
        "Du drueckst den Knopf und es oeffnet sich knirschend "
        "ein kleines Fach in der Wand.", MT_LOOK) < MSG_DELIVERED &&
      this_player()->ReceiveMsg(
        "Du drueckst den Knopf und irgend etwas scheint sich "
        "knirschend zu oeffnen. Das Geraeusch kam von der Wand.",
        MT_LISTEN) < MSG_DELIVERED) // leider blind UND taub ... also:
     this_player()->ReceiveMsg(
       "Du drueckst den Knopf und irgend etwas scheint zu passieren, "
       "aber leider siehst und hoerst du nichts.", MT_FEEL);


   #2.1 Im NPC als Empfaenger auf ein TM reagieren
   public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
                                 string msg_prefix, mixed origin) {
     int ret = MSG_DELIVERED;  // Default

     // eine OOC-Kommunikation?
     if(msg_typ&MT_COMM) {
       if(strstr(msg, "hilfe")>=0)
         if(environment(origin)==environment()) {
           origin->ReceiveMsg("Ich werd dir gleich helfen!",
                              MT_COMM|MSG_DONT_STORE, MA_TELL,
                              "Arkshat teilt dir mit: ");
         } else {
           origin->ReceiveMsg("Hilf dir selbst, dann hilft dir Gott!",
                              MT_COMM|MT_FAR|MSG_DONT_STORE,
                              MA_TELL,
                              "Arkshat teilt dir mit: ");
         }
       else if(...)
       [...]
     } else if(msg_typ&MT_LISTEN && msg_action==MA_SAY) {
       [...]
     }

     return ret;
   }


   #3.1 als Sender an viele, Variante mit eigenem filter
   // Achtung: siehe 3.3. send_room() loest vieles.
   // Living nickt nur seinen Nichtgegnern zu
   object *all = filter(all_inventory(environment(this_player())),
                        #'living) - ({this_player()});
   all -= this_player()->PresentEnemies();
   all->ReceiveMsg(this_player()->Name()+
                   " nickt dir verstohlen zu und scheint bereit.",
                   MT_LOOK, MA_EMOTE);

   #3.2 als Sender an viele, Variante mit einzelnem Iterieren
   // Achtung: siehe 3.3. send_room() loest vieles.
   // Living trinkt etwas, jeder im Raum soll es sehen oder hoeren
   object ob = first_inventory(environment(this_player()));
   do {
     if(living(ob) && ob!=this_player())
       ob->ReceiveMsg(this_player()->Name()+" trinkt einen Schnaps aus.",
                      MT_LOOK|MT_LISTEN,
                      MA_DRINK);
     ob = next_inventory(ob);
   } while(ob);

   #3.3 als Sender an viele, Variante mit send_room
   // Living gruesst seine Freunde
   // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
   object *exclude = this_player()->PresentEnemies();
   send_room(this_object(),
             this_player()->Name()+" gruesst dich.",
             MT_LOOK|MT_LISTEN,
             MA_EMOTE,
             0,
             exclude);

   #3.4 als Sender an viele mit send_room und ReceiveMsg()
   // Living gruesst seine Freunde, seine Feinde sehen das
   // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
   object *exclude = this_player()->PresentEnemies();
   send_room(this_object(),
             this_player()->Name()+" gruesst dich.",
             MT_LOOK|MT_LISTEN, MA_EMOTE, 0, exclude);
   exclude->ReceiveMessage(
     this_player()->Name()+" gruesst, aber nicht dich.",
     MT_LOOK|MT_LISTEN, MA_EMOTE);


KONSTANTEN FUER PARAMETER
=========================

   Saemtlich in "/sys/living/comm.h". Hier nicht notwendigerweise
   immer aktuell oder vollstaendig.

   <msg_typ>
     MT_UNKNOWN      unspez. Nachrichtentyp (nicht verwenden). Es wird
                     versucht, aufgrund <msg_action> den Typ zu erraten.
     MT_LOOK         alles, was man sieht
     MT_LISTEN       alles, was man hoert
     MT_FEEL         alles, was man fuehlt
     MT_TASTE        alles, was man schmeckt
     MT_SMELL        alles, was man riecht
     MT_MAGIC        alle sonstigen (uebersinnlichen) Wahrnehmungen
     MT_NOTIFICATION Statusmeldungen, Kommandobestaetigungen
     MT_COMM         alle OOC-Kommunikation, d.h. nicht durch o.g. Sinne
                     abgedeckt.
     MT_FAR          alles, was aus der Ferne / einem anderen Raum kommt.
                     muss mit min. einem anderen Typ kombiniert werden
     MT_DEBUG        Debugmeldungen, sehen nur Magier im Magiermodus
     MT_NEWS         Mails & MPA

     MSG_DONT_BUFFER Nachricht darf nicht im Kobold gespeichert werden
     MSG_DONT_STORE  Nachricht darf nicht in die Comm-History
     MSG_DONT_WRAP   Nachricht nicht per break_string umbrechen
     MSG_DONT_IGNORE Nachricht kann nicht ignoriert werden

     MSG_BS_LEAVE_LFS    wie BS_LEAVE_MY_LFS fuer break_string()
     MSG_BS_SINGLE_SPACE wie BS_SINGLE_SPACE fuer break_string()
     MSG_BS_BLOCK        wie BS_BLOCK fuer break_string()
     MSG_BS_NO_PARINDENT wie BS_NO_PARINDENT fuer break_string()
     MSG_BS_INDENT_ONCE  wie BS_INDENT_ONCE fuer break_string()
     MSG_BS_PREP_INDENT  wie BS_PREPEND_INDENT fuer break_string()

   <msg_action> (optional)
     MA_UNKNOWN     Unspez. Aktion. Es wird der Default query_verb()
                    benutzt bzw. versucht, die Aktion zu erraten.
     MA_PUT         Jemand legt etwas hin und gibt jemanden etwas
     MA_TAKE        Jemand nimmt etwas
     MA_GIVE        Jemand gibt jemandem etwas
     MA_MOVE_IN     Jemand betritt den Raum
     MA_MOVE_OUT    Jemand verlaesst den Raum
     MA_MOVE        Jemand bewegt sich
     MA_FIGHT       Jemand kaempft
     MA_WIELD       Jemand zueckt eine Waffe
     MA_UNWIELD     Jemand steckt eine Waffe weg
     MA_WEAR        Jemand zieht etwas an
     MA_UNWEAR      Jemand zieht etwas aus
     MA_EAT         Jemand isst etwas
     MA_DRINK       Jemand trinkt etwas
     MA_SPELL       Jemand wirkt einen Spell
     MA_LOOK        Jemand sieht etwas an, untersucht etwas
     MA_LISTEN      Jemand horcht oder lauscht an etwas
     MA_FEEL        Jemand betastet etwas
     MA_SMELL       Jemand schnueffelt herum
     MA_SENSE       Jemand macht eine uebersinnliche Wahrnehmung
     MA_READ        Jemand liest etwas
     MA_USE         Jemand benutzt etwas
     MA_SAY         Jemand sagt etwas
     MA_REMOVE      Etwas verschwindet
     // MA_CHAT        Chatkrams (z.B. teile-mit, Teamkampfchat)
     MA_CHANNEL     Ebenen
     MA_EMOTE       (r)Emotes, Soulverben (remotes mit Typ MT_COMM|MT_FAR)
     MA_SHOUT       Rufen (nicht: shout()!)
     MA_SHOUT_SEFUN Rufen ueber shout(SE)


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

   Verwandt: send_room(SE)
   Lfuns:    TestIgnore(L)
   Efuns:    tell_object(E), catch_tell(L), catch_msg(L)
             query_verb(E), query_once_interactive(E), break_string(SE)

13.03.2016, Zesstra
