ReceiveMultisense()
===================

FUNKTION
--------

  public void ReceiveMultisense(struct wave_s* msgs, string action = 0, int commontypes = 0)

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

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

ARGUMENTE
---------

  struct wave_s* msgs
    Die auszugebenden Nachrichten mit Zusatzinformationen. (s.u.)
  string action
    action wird als <action> an ReceiveMsg() weitergegeben.
  int commontypes
    Muss einen oder mehrere veroderte messagetypes aus
    :doc:`ReceiveMsg` enthalten. Diese werden bei jedem Aufruf von
    :doc:`ReceiveMsg` mit dem jeweiligen Messagetyp aus <msgs> verodert.

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

  Versucht, eine der in <msgs> angegebenen Nachrichten an den Empfaenger zuzustellen.

  Das Array <msgs> wird der Reihe nach abgearbeitet, bis eine Nachricht zugestellt werden konnte, das Ende von <msgs> erreicht wurde 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.

  <msgs> ist ein Array von struct wave_s. Diese ist in /secure/simul_efun/comm.c definiert (und steht allen Programmen automatisch zur Verfuegung). Sie hat die Eintraege string msg, int type, string prefix.
  wave_s.msg wird vor der Ausgabe von :doc:`../sefun/replace_personal` verarbeitet. Als erstes Objekt wird das aufrufende Objekt uebergeben, als zweites this_player(), sofern vorhanden. wave_s.msg wird automatisch auf 78 Zeichen umgebrochen, vorhandene Zeilenumbrueche werden dabei beibehalten. Fuer wave_s.prefix findet keine Ersetzung statt.

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

  this_player().ReceiveMultisense(
    ({
      (<wave_s>
        msg: "Ein Drache landet neben Dir.",
        type: MT_LOOK),
      (<wave_s>
        message: "Du hoerst ein Rumpeln, als waere gerade etwas Grosses "
          "neben Dir eingeschlagen.",
        type: MT_LISTEN),
      (<wave_s>
        msg: "Du spuerst einen heftigen Luftzug.",
        type: MT_FEEL)})
    MA_MOVE_IN);

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

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

Letzte Aenderung: 21.09.2022, Zesstra
