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 :doc:`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 :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 Praefix gewaehlt wurde, wird dieser statt ``Name(WER, 1)  " sagt: "`` verwendet.

  <msg> 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.

  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 :doc:`../sefun/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
--------

  .. 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: ",
    ({
      (<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
----------

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

Letzte Aenderung: 21.09.2022, Zesstra
