ReceiveSay()
************


FUNKTION
========

   public void ReceiveSay(string msg, string prefix =
   previous_object().Name(WER, 1) + " sagt: ",
      struct msg_s sense_blocked =
         ({(<wave_s>
            msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.",
            type: MT_LOOK)}))


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

   /std/living/comm.c /std/room/comm.c


ARGUMENTE
=========

   string msg
      Die auszugebende Meldung.

   string prefix
      prefix wird als prefix an ReceiveMsg() weitergegeben. Wird kein
      Wert uebergeben, wird "previous_object().Name(WER, 1) + " sagt:
      "" verwendet.

   struct wave_s *alt
      Ersatzmeldungen, falls das Lebewesen die Meldung aufgrund eines
      blockierten Sinns nicht wahrnehmen kann. Details siehe unten.


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

   Sendet msg per ReceiveMsg() mit den ueblichen Argumenten von "sage"
   an den Empfaenger, d.h.: "MT_LISTEN", "MA_SAY", "Name(WER, 1) + "
   sagt: "". Hierzu muss das aufrufende Objekt *Name* definiert haben
   und dort etwas sinnvolles zurueckgeben. Falls ein anderer Praefix
   gewaehlt wurde, wird dieser statt "Name(WER, 1)  " sagt: ""
   verwendet.

   <msg> wird vor der Ausgabe an replace_personal() uebergeben, als
   erstes Objekt wird das aufrufende Objekt uebergeben, als zweites
   this_player(), sofern vorhanden. msg wird automatisch auf 78
   Zeichen umgebrochen, vorhandene Zeilenumbrueche werden dabei
   beibehalten.

   Falls der Empfaenger eine Nachricht aufgrund eines blockierten
   Sinns nicht empfangen kann (und **nur** dann), wird versucht,
   alternative Nachrichten aus dem Array <alt> zuzustellen. Dieses
   Array enthaelt structs vom Typ wave_s. Das Array wird von vorne
   nach hinten abgearbeitet, bis eine Nachricht erfolgreich zugestellt
   werden konnte, das Ende erreicht ist oder eine Nachricht *aus
   anderen Gruenden* als einem blockierten Sinn abgelehnt wurde. Der
   Grund fuer letzteres ist, dass andere Fehler von ReceiveMsg()
   (fast) immer auch bei allen (weiteren) Alternativen auftreten
   werden. wave_s ist in /secure/simul_efun/comm.c definiert und
   enthaelt die Eintraege string msg, int type, string prefix. In
   <alt> ist der Default fuer wave_s.prefix 0! Auch hier findet fuer
   wave_s.msg eine Ersetzung mittels replace_personal() statt, fuer
   wave_s.prefix nicht.


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


in Lebewesen
------------

   Der Rueckgabe ist der Rueckgabewert von ReceiveMsg() fuer die
   zuletzt versuchte Meldung.

   Wenn dies einen Erfolg (MSG_DELIVERED, MSG_BUFFERED) darstellt,
   wurde irgendeine Meldung erfolgreich zugestellt. Falls es
   MSG_SENSE_BLOCK ist, sind alle versuchten Sinne blockiert und keine
   Nachricht wurde zugestellt. Ist es ein anderer Fehler ist, wurde
   keine Nachricht zugestellt (und ggf. nicht alle aus <alt>
   versucht).


in Containern/Raeumen
---------------------

   Die Funktion hat keinen Rueckgabewert. Der Grund hierfuer ist, dass
   dieser ein ggf. tief verschachteltes Mapping waere, was keiner mehr
   prueft.


BEISPIEL
========

   SetProp(P_NAME, "Questgeber"); SetProp(P_GENDER, MALE);
   this_player().ReceiveSay(

      "Das hast Du prima gemacht, @WER2!", Name(WER, 1) + " lobt Dich:
      ", ({

         (<wave_s>
            msg: "@WER1 nickt Dir laechelnd zu.", type: MT_LOOK),

         (<wave_s>
            msg: "Jemand klopft Dir lobend auf die Schulter.", type:
            MT_FEEL)}));


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

   ReceiveMsg(), replace_personal(), *Name*

Letzte Aenderung: 21.09.2022, Zesstra
