MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 1 | SYNOPSIS |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 2 | void say(string str) |
| 3 | void say(string str, object exclude) |
| 4 | void say(string str, object *excludes) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 5 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 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) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 9 | |
| 10 | BESCHREIBUNG |
| 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 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 17 | Wenn das erste Argument ein nicht-String <msg> ist, wird die Lfun |
| 18 | catch_msg() in allen lebendigen Objekt im Raum aufgerufen, ausser im |
| 19 | Objekt, das say() aufgerufen hat. Der Wert <msg> wird als erstes |
| 20 | Argument an catch_msg() uebergeben, das aufrufende Objekt als zweites |
| 21 | Argument. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 22 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 23 | MERKE: Wenn die Lfun catch_msg() den Wert <msg> veraendert, erhalten |
| 24 | alle nachfolgenden Objekte das veraenderte <msg>. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 25 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 26 | Wird der Efun say() ein zweites Argument angegeben, kann man andere |
| 27 | Objekte als nur das aufrufende Objekt ausschliessen. Wenn das zweite |
| 28 | Argument ein einzelnes Objekt <exclude> ist, werden das aufrufende |
| 29 | Objekt und <exclude> von der Meldung ausgeschlossen. Wenn das zweite |
| 30 | Argument ein Array <excludes> ist, werden alle Objekte aus dieser |
| 31 | Liste zusaetzlich zum aufrufenden Objekt als Empfaenger von say() |
| 32 | ausgeschlossen. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 33 | |
| 34 | Das aufrufende Objekt wird nach folgenden Regeln bestimmt: |
| 35 | - Wenn say() aus einem lebendigen Objekt aufgerufen wird, gilt |
| 36 | dieses als das aufrufende Objekt. |
| 37 | - Wenn say() aus einem nicht-lebendigen Objekt als Resultat einer |
| 38 | Handlung eines Benutzers aufgerufen wird (das heisst, |
| 39 | this_player() ist gueltig), gilt this_player() als aufrufendes |
| 40 | Objekt. |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 41 | - In allen anderen Faellen gilt das Objekt, das say() aufgerufen |
| 42 | hat, als aufrufendes Objekt. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 43 | |
| 44 | BEISPIELE |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 45 | Folgende Aufrufe sind gleich, wenn sie aus einem nicht lebendigen |
| 46 | Objekt aufgerufen werden: |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 47 | |
| 48 | say("Hi!\n"); |
| 49 | say("Hi!\n", this_player()); |
| 50 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 51 | Das folgende Beispiel zeigt, wie say() zusammen mit catch_tell() |
| 52 | funktioniert. Das zweite Objekt darf nicht lebendig sein, sodass |
| 53 | write() an den aktuellen Benutzer geht. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 54 | |
| 55 | Objekt 1 (living): |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 56 | void catch_tell(string str) |
| 57 | { |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 58 | write("Empfangen: "+str+"\n"); |
| 59 | } |
| 60 | |
| 61 | Objekt 2 (nicht living): |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 62 | void func() |
| 63 | { |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 64 | ... |
| 65 | say("HiHo!\n"); |
| 66 | ... |
| 67 | } |
| 68 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 69 | Ein etwas komplexeres Beispiel zeigt das Zusammenspiel von say() |
| 70 | und catch_msg(). Auch hier wird ein nicht-lebendiges Objekt |
| 71 | verwendet, das die Nachricht ausgibt, sodass das 'wer' in |
| 72 | catch_msg() auf den aktuellen Benutzer zeigt. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 73 | |
| 74 | Object 1 (living): |
| 75 | void catch_msg(mixed *arr, object who) { |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 76 | int i; |
| 77 | if (!arr) return; |
| 78 | for (i=0;i<sizeof(arr);i++) |
| 79 | tell_object(who, (stringp(arr[i]) ? arr[i] : "-/-")+"\n"); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 80 | } |
| 81 | |
| 82 | Object 2 (nicht living): |
| 83 | void func() { |
| 84 | ... |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 85 | say(({ "Hello", "there!" })); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 86 | ... |
| 87 | } |
| 88 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 89 | ANMERKUNGEN |
| 90 | Wenn die Lfun catch_msg() den Wert <msg> veraendert, erhalten alle |
| 91 | nachfolgenden Objekte das veraenderte <msg>. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 92 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 93 | GESCHICHTE |
| 94 | LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als |
| 95 | zweites Argument. |
| 96 | |
| 97 | SIEHE AUCH |
| 98 | write(E), tell_object(E), tell_room(E) |