blob: 6f0958fa1c1444c7624f37489ef1f01379814433 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SYNOPSIS
2 void say(string str);
3 void say(string str, object exclude);
4 void say(string str, object *excludes);
5
6 void say(mixed *|mapping|struct|object msg);
7 void say(mixed *|mapping|struct|object msg, object exclude);
8 void say(mixed *|mapping|struct|object msg, object *excludes);
9
10BESCHREIBUNG
11 Es bestehen zwei Hauptanwendungen fuer say():
12
13 Wenn das erste Argument ein String <str> ist, wird er an alle
14 lebendigen Objekte im aktuellen Raum gesendet, ausser zum Objekt,
15 das die Funktion aufgerufen hat.
16
17 Ist die Nachricht ein String, wird der Text an interaktive Objekte
18 direkt ausgegeben, fuer andere Objekte wird die lfun catch_tell()
19 in diesen aufgerufen.
20 Falls ein Lewebesen die Funktion catch_tell() definiert (-> shadow),
21 so wird der Text hier ausgewertet und nicht an den User ausgegeben.
22
23 Wenn das zweite Argument, die Nachricht, kein String ist, wird in
24 allen Lebewesen, die den Text erhalten, catch_msg() anstatt
25 catch_tell() aufgerufen.
26
27 Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an
28 die darin enthaltenen Objekte gesendet wird. Der Sender muss nicht
29 noch einmal aufgefuehrt werden.
30 Das ist sinnvoll, wenn zB eine Spielergruppe Ausloeser einer Meldung
31 ist und diese selbst nicht erhalten soll.
32
33 Das aufrufende Objekt wird nach folgenden Regeln bestimmt:
34 - Wenn say() aus einem lebendigen Objekt aufgerufen wird, gilt
35 dieses als das aufrufende Objekt.
36 - Wenn say() aus einem nicht-lebendigen Objekt als Resultat einer
37 Handlung eines Benutzers aufgerufen wird (das heisst,
38 this_player() ist gueltig), gilt this_player() als aufrufendes
39 Objekt.
40 - In allen anderen Faellen (Aufruf aus reset zB) gilt das Objekt,
41 das say() aufgerufen hat, als aufrufendes Objekt.
42
43BEMERKUNGEN
44 - fuer laengere Meldungen sollte break_string() verwendet werden
45 - wird in einem catch_msg() der Wert von <msg> veraendert, erhalten
46 alle nachfolgenden Objekte das veraenderte <msg> (Referenz!)
47
48 - say(<str>) ist verhaltensgleich zu
49 tell_room(environment(), <str>, ({this_player()||this_object()}))
50
51BEISPIELE
52 // Folgende Aufrufe sind gleich, wenn sie durch ein Spielerkommando
53 // in einem nicht lebendigen Objekt aufgeloest werden:
54
55 say("Hi!\n");
56 say("Hi!\n", this_player());
57
58 // Das folgende Beispiel zeigt, wie say() zusammen mit catch_tell()
59 // funktioniert. Das zweite Objekt darf nicht lebendig sein, damit
60 // write() an den aktuellen Benutzer geht.
61
62 Objekt 1 (living):
63 void catch_tell(string str) {
64 write("Empfangen: "+str+"\n");
65 }
66
67 Objekt 2 (nicht living):
68 void func() {
69 ...
70 say("HiHo!\n");
71 ...
72 }
73
74 // Ein etwas komplexeres Beispiel zeigt das Zusammenspiel von say()
75 // und catch_msg(). Auch hier wird ein nicht-lebendiges Objekt
76 // verwendet, das die Nachricht ausgibt, sodass das 'wer' in
77 // catch_msg() auf den aktuellen Benutzer zeigt.
78
79 Object 1 (living):
80 void catch_msg(mixed *arr, object who) {
81 foreach(mixed element: arr)
82 tell_object(who, sprintf("%O\n", element));
83 }
84
85 Object 2 (nicht living):
86 void func() {
87 ...
88 say( ({ "Hello", "there!" }) );
89 ...
90 }
91
92SIEHE AUCH
93 Aehnlich: tell_room(E), write(E), shout(E), tell_object(E),
94 printf(E)
95 Verwandt: catch_tell(E), catch_msg(A)
96 Sonstiges: object_name(E)
97
987.Aug 2007 Gloinson