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 ReceiveMsg()
      enthalten. Diese werden bei jedem Aufruf von 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
   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
========

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

   ReceiveMsg(), replace_personal()

Letzte Aenderung: 21.09.2022, Zesstra
