blob: 1c2666c4195a94f85897e632b510a96d0a35ddbd [file] [log] [blame]
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