blob: db97f64f28820cca1e20ef9db7ae643a9d3c6664 [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 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