blob: db97f64f28820cca1e20ef9db7ae643a9d3c6664 [file] [log] [blame]
Zesstrae959e722025-07-09 22:11:16 +02001ReceiveMultisense()
2*******************
3
4
5FUNKTION
6========
7
8 public void ReceiveMultisense(struct wave_s* msgs, string action =
9 0, int commontypes = 0)
10
11
12DEFINIERT IN
13============
14
15 /std/living/comm.c /std/room/comm.c
16
17
18ARGUMENTE
19=========
20
21 struct wave_s* msgs
22 Die auszugebenden Nachrichten mit Zusatzinformationen. (s.u.)
23
24 string action
25 action wird als <action> an ReceiveMsg() weitergegeben.
26
27 int commontypes
28 Muss einen oder mehrere veroderte messagetypes aus ReceiveMsg()
29 enthalten. Diese werden bei jedem Aufruf von ReceiveMsg() mit
30 dem jeweiligen Messagetyp aus <msgs> verodert.
31
32
33BESCHREIBUNG
34============
35
36 Versucht, eine der in <msgs> angegebenen Nachrichten an den
37 Empfaenger zuzustellen.
38
39 Das Array <msgs> wird der Reihe nach abgearbeitet, bis eine
40 Nachricht zugestellt werden konnte, das Ende von <msgs> erreicht
41 wurde oder eine Nachricht *aus anderen Gruenden* als einem
42 blockierten Sinn abgelehnt wurde. Der Grund fuer letzteres ist,
43 dass andere Fehler von ReceiveMsg() (fast) immer auch bei allen
44 (weiteren) Alternativen auftreten werden.
45
46 <msgs> ist ein Array von struct wave_s. Diese ist in
47 /secure/simul_efun/comm.c definiert (und steht allen Programmen
48 automatisch zur Verfuegung). Sie hat die Eintraege string msg, int
49 type, string prefix. wave_s.msg wird vor der Ausgabe von
50 replace_personal() verarbeitet. Als erstes Objekt wird das
51 aufrufende Objekt uebergeben, als zweites this_player(), sofern
52 vorhanden. wave_s.msg wird automatisch auf 78 Zeichen umgebrochen,
53 vorhandene Zeilenumbrueche werden dabei beibehalten. Fuer
54 wave_s.prefix findet keine Ersetzung statt.
55
56
57RUECKGABEWERT
58=============
59
60
61in Lebewesen
62------------
63
64 Der Rueckgabe ist der Rueckgabewert von ReceiveMsg() fuer die
65 zuletzt versuchte Meldung.
66
67 Wenn dies einen Erfolg (MSG_DELIVERED, MSG_BUFFERED) darstellt,
68 wurde irgendeine Meldung erfolgreich zugestellt. Falls es
69 MSG_SENSE_BLOCK ist, sind alle versuchten Sinne blockiert und keine
70 Nachricht wurde zugestellt. Ist es ein anderer Fehler ist, wurde
71 keine Nachricht zugestellt (und ggf. nicht alle versucht).
72
73
74in Containern/Raeumen
75---------------------
76
77 Die Funktion hat keinen Rueckgabewert. Der Grund hierfuer ist, dass
78 dieser ein ggf. tief verschachteltes Mapping waere, was keiner mehr
79 prueft.
80
81
82BEISPIEL
83========
84
85 this_player().ReceiveMultisense(
86 ({
87 (<wave_s>
88 msg: "Ein Drache landet neben Dir.", type: MT_LOOK),
89
90 (<wave_s>
91 message: "Du hoerst ein Rumpeln, als waere gerade etwas
92 Grosses "
93 "neben Dir eingeschlagen.",
94
95 type: MT_LISTEN),
96
97 (<wave_s>
98 msg: "Du spuerst einen heftigen Luftzug.", type:
99 MT_FEEL)})
100
101 MA_MOVE_IN);
102
103
104SIEHE AUCH
105==========
106
107 ReceiveMsg(), replace_personal()
108
109Letzte Aenderung: 21.09.2022, Zesstra