| SYNOPSIS |
| void say(string str) |
| void say(string str, object exclude) |
| void say(string str, object *excludes) |
| |
| void say(mixed *|mapping|struct|object msg) |
| void say(mixed *|mapping|struct|object msg, object exclude) |
| void say(mixed *|mapping|struct|object msg, object *excludes) |
| |
| BESCHREIBUNG |
| Es bestehen zwei Hauptanwendungen fuer say(): |
| |
| Wenn das erste Argument ein String <str> ist, wird er an alle |
| lebendigen Objekte im aktuellen Raum gesendet, ausser zum Objekt, |
| das die Funktion aufgerufen hat. |
| |
| Wenn das erste Argument ein nicht-String <msg> ist, wird die Lfun |
| catch_msg() in allen lebendigen Objekt im Raum aufgerufen, ausser im |
| Objekt, das say() aufgerufen hat. Der Wert <msg> wird als erstes |
| Argument an catch_msg() uebergeben, das aufrufende Objekt als zweites |
| Argument. |
| |
| MERKE: Wenn die Lfun catch_msg() den Wert <msg> veraendert, erhalten |
| alle nachfolgenden Objekte das veraenderte <msg>. |
| |
| Wird der Efun say() ein zweites Argument angegeben, kann man andere |
| Objekte als nur das aufrufende Objekt ausschliessen. Wenn das zweite |
| Argument ein einzelnes Objekt <exclude> ist, werden das aufrufende |
| Objekt und <exclude> von der Meldung ausgeschlossen. Wenn das zweite |
| Argument ein Array <excludes> ist, werden alle Objekte aus dieser |
| Liste zusaetzlich zum aufrufenden Objekt als Empfaenger von say() |
| ausgeschlossen. |
| |
| Das aufrufende Objekt wird nach folgenden Regeln bestimmt: |
| - Wenn say() aus einem lebendigen Objekt aufgerufen wird, gilt |
| dieses als das aufrufende Objekt. |
| - Wenn say() aus einem nicht-lebendigen Objekt als Resultat einer |
| Handlung eines Benutzers aufgerufen wird (das heisst, |
| this_player() ist gueltig), gilt this_player() als aufrufendes |
| Objekt. |
| - In allen anderen Faellen gilt das Objekt, das say() aufgerufen |
| hat, als aufrufendes Objekt. |
| |
| BEISPIELE |
| Folgende Aufrufe sind gleich, wenn sie aus einem nicht lebendigen |
| Objekt aufgerufen werden: |
| |
| say("Hi!\n"); |
| say("Hi!\n", this_player()); |
| |
| Das folgende Beispiel zeigt, wie say() zusammen mit catch_tell() |
| funktioniert. Das zweite Objekt darf nicht lebendig sein, sodass |
| write() an den aktuellen Benutzer geht. |
| |
| Objekt 1 (living): |
| void catch_tell(string str) |
| { |
| write("Empfangen: "+str+"\n"); |
| } |
| |
| Objekt 2 (nicht living): |
| void func() |
| { |
| ... |
| say("HiHo!\n"); |
| ... |
| } |
| |
| Ein etwas komplexeres Beispiel zeigt das Zusammenspiel von say() |
| und catch_msg(). Auch hier wird ein nicht-lebendiges Objekt |
| verwendet, das die Nachricht ausgibt, sodass das 'wer' in |
| catch_msg() auf den aktuellen Benutzer zeigt. |
| |
| Object 1 (living): |
| void catch_msg(mixed *arr, object who) { |
| int i; |
| if (!arr) return; |
| for (i=0;i<sizeof(arr);i++) |
| tell_object(who, (stringp(arr[i]) ? arr[i] : "-/-")+"\n"); |
| } |
| |
| Object 2 (nicht living): |
| void func() { |
| ... |
| say(({ "Hello", "there!" })); |
| ... |
| } |
| |
| ANMERKUNGEN |
| Wenn die Lfun catch_msg() den Wert <msg> veraendert, erhalten alle |
| nachfolgenden Objekte das veraenderte <msg>. |
| |
| GESCHICHTE |
| LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als |
| zweites Argument. |
| |
| SIEHE AUCH |
| write(E), tell_object(E), tell_room(E) |