blob: 41eee811c7e2edd8d7a9a267fea657b75115291c [file] [log] [blame]
Zesstrae959e722025-07-09 22:11:16 +02001ReceiveSay()
2************
3
4
5FUNKTION
6========
7
8 public void ReceiveSay(string msg, string prefix =
9 previous_object().Name(WER, 1) + " sagt: ",
10 struct msg_s sense_blocked =
11 ({(<wave_s>
12 msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.",
13 type: MT_LOOK)}))
14
15
16DEFINIERT IN
17============
18
19 /std/living/comm.c /std/room/comm.c
20
21
22ARGUMENTE
23=========
24
25 string msg
26 Die auszugebende Meldung.
27
28 string prefix
29 prefix wird als prefix an ReceiveMsg() weitergegeben. Wird kein
30 Wert uebergeben, wird "previous_object().Name(WER, 1) + " sagt:
31 "" verwendet.
32
33 struct wave_s *alt
34 Ersatzmeldungen, falls das Lebewesen die Meldung aufgrund eines
35 blockierten Sinns nicht wahrnehmen kann. Details siehe unten.
36
37
38BESCHREIBUNG
39============
40
41 Sendet msg per ReceiveMsg() mit den ueblichen Argumenten von "sage"
42 an den Empfaenger, d.h.: "MT_LISTEN", "MA_SAY", "Name(WER, 1) + "
43 sagt: "". Hierzu muss das aufrufende Objekt *Name* definiert haben
44 und dort etwas sinnvolles zurueckgeben. Falls ein anderer Praefix
45 gewaehlt wurde, wird dieser statt "Name(WER, 1) " sagt: ""
46 verwendet.
47
48 <msg> wird vor der Ausgabe an replace_personal() uebergeben, als
49 erstes Objekt wird das aufrufende Objekt uebergeben, als zweites
50 this_player(), sofern vorhanden. msg wird automatisch auf 78
51 Zeichen umgebrochen, vorhandene Zeilenumbrueche werden dabei
52 beibehalten.
53
54 Falls der Empfaenger eine Nachricht aufgrund eines blockierten
55 Sinns nicht empfangen kann (und **nur** dann), wird versucht,
56 alternative Nachrichten aus dem Array <alt> zuzustellen. Dieses
57 Array enthaelt structs vom Typ wave_s. Das Array wird von vorne
58 nach hinten abgearbeitet, bis eine Nachricht erfolgreich zugestellt
59 werden konnte, das Ende erreicht ist oder eine Nachricht *aus
60 anderen Gruenden* als einem blockierten Sinn abgelehnt wurde. Der
61 Grund fuer letzteres ist, dass andere Fehler von ReceiveMsg()
62 (fast) immer auch bei allen (weiteren) Alternativen auftreten
63 werden. wave_s ist in /secure/simul_efun/comm.c definiert und
64 enthaelt die Eintraege string msg, int type, string prefix. In
65 <alt> ist der Default fuer wave_s.prefix 0! Auch hier findet fuer
66 wave_s.msg eine Ersetzung mittels replace_personal() statt, fuer
67 wave_s.prefix nicht.
68
69
70RUECKGABEWERT
71=============
72
73
74in Lebewesen
75------------
76
77 Der Rueckgabe ist der Rueckgabewert von ReceiveMsg() fuer die
78 zuletzt versuchte Meldung.
79
80 Wenn dies einen Erfolg (MSG_DELIVERED, MSG_BUFFERED) darstellt,
81 wurde irgendeine Meldung erfolgreich zugestellt. Falls es
82 MSG_SENSE_BLOCK ist, sind alle versuchten Sinne blockiert und keine
83 Nachricht wurde zugestellt. Ist es ein anderer Fehler ist, wurde
84 keine Nachricht zugestellt (und ggf. nicht alle aus <alt>
85 versucht).
86
87
88in Containern/Raeumen
89---------------------
90
91 Die Funktion hat keinen Rueckgabewert. Der Grund hierfuer ist, dass
92 dieser ein ggf. tief verschachteltes Mapping waere, was keiner mehr
93 prueft.
94
95
96BEISPIEL
97========
98
99 SetProp(P_NAME, "Questgeber"); SetProp(P_GENDER, MALE);
100 this_player().ReceiveSay(
101
102 "Das hast Du prima gemacht, @WER2!", Name(WER, 1) + " lobt Dich:
103 ", ({
104
105 (<wave_s>
106 msg: "@WER1 nickt Dir laechelnd zu.", type: MT_LOOK),
107
108 (<wave_s>
109 msg: "Jemand klopft Dir lobend auf die Schulter.", type:
110 MT_FEEL)}));
111
112
113SIEHE AUCH
114==========
115
116 ReceiveMsg(), replace_personal(), *Name*
117
118Letzte Aenderung: 21.09.2022, Zesstra