ReceiveSay()
============

FUNKTION
--------

  public int* ReceiveSay(string msg, string prefix = 0,
    struct msg_s sense_blocked =
      ({(<msg_s>
        msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.",
        type: MT_LOOK)}))

DEFINIERT IN
------------

  /std/living/comm.c
  /std/room/comm.c
  /sys/living/comm.h
  
ARGUMENTE
---------

  string msg
    Die auszugebende Meldung. Sie wird vor der Ausgabe an
    :doc:`../sefun/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.
  string prefix
    prefix wird als prefix an :doc:`ReceiveMsg` weitergegeben. Eine
    Ersetzung mittels :doc:`replace_personal` findet nicht statt.
    Wird kein Wert uebergeben, wird
    previous_object().Name(WER, 1) + " sagt: " verwendet. Hierzu muss Name()
    am aufrufenden Objekt definiert sein und etwas sinnvolles zurueckgeben.
  struct msg_s sense_blocked
    Ersatzmeldungen fuer taube Spieler. enthaelt Structs vom Typ msg_s.
    Dieser ist in /std/living/comm_structs.c definiert und enthaelt die
    Eintraege string msg, int type, string prefix.
    Das Array wird von vorne nach hinten
    abgearbeitet, bis eine Nachricht zugestellt werden konnte oder das Ende
    erreicht ist. Auch hier findet fuer msg eine Ersetzung mittels
    :doc:`../sefun/replace_personal` statt, fuer prefix nicht.

BESCHREIBUNG
------------

  Sendet msg per :doc:`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 :doc:`name` definiert haben und dort
  etwas sinnvolles zurueckgeben. Falls ein anderer prefix gewaehlt wurde,
  wird dieser statt Name(WER, 1)  " sagt: " verwendet. 

RUECKGABEWERT
-------------

  Ein Integer-Array mit folgenden Werten:

  0
    Der Rueckgabewert von :doc:`../lfun/ReceiveMsg`.
  1
    Information, welche Meldung zugestellt wurde. -1 steht fuer msg, ein wert
    >= 0 fuer die jeweilige Position in sense_blocked.

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

BEISPIEL
--------

  .. code-block:: pike

  SetProp(P_NAME, "Questgeber");
  SetProp(P_GENDER, MALE);
  this_player().ReceiveSay(
    "Das hast Du prima gemacht, @WER2!",
    Name(WER, 1) + " lobt Dich: ",
    ({
      (<message_> 
        msg: "@WER1 nickt Dir laechelnd zu.",
        type: MT_LOOK),
      (<msg_s> 
        msg: "Jemand klopft Dir lobend auf die Schulter.",
        type: MT_FEEL)}));

SIEHE AUCH
----------

  :doc:`ReceiveMsg`, :doc:`../sefun/replace_personal`, :doc:`name`

Letzte Aenderung: 07.10.2021, Bugfix
