| 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. |
| |
| Ist die Nachricht ein String, wird der Text an interaktive Objekte |
| direkt ausgegeben, fuer andere Objekte wird die lfun catch_tell() |
| in diesen aufgerufen. |
| Falls ein Lewebesen die Funktion catch_tell() definiert (-> shadow), |
| so wird der Text hier ausgewertet und nicht an den User ausgegeben. |
| |
| Wenn das zweite Argument, die Nachricht, kein String ist, wird in |
| allen Lebewesen, die den Text erhalten, catch_msg() anstatt |
| catch_tell() aufgerufen. |
| |
| Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an |
| die darin enthaltenen Objekte gesendet wird. Der Sender muss nicht |
| noch einmal aufgefuehrt werden. |
| Das ist sinnvoll, wenn zB eine Spielergruppe Ausloeser einer Meldung |
| ist und diese selbst nicht erhalten soll. |
| |
| 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 (Aufruf aus reset zB) gilt das Objekt, |
| das say() aufgerufen hat, als aufrufendes Objekt. |
| |
| BEMERKUNGEN |
| - fuer laengere Meldungen sollte break_string() verwendet werden |
| - wird in einem catch_msg() der Wert von <msg> veraendert, erhalten |
| alle nachfolgenden Objekte das veraenderte <msg> (Referenz!) |
| |
| - say(<str>) ist verhaltensgleich zu |
| tell_room(environment(), <str>, ({this_player()||this_object()})) |
| |
| BEISPIELE |
| // Folgende Aufrufe sind gleich, wenn sie durch ein Spielerkommando |
| // in einem nicht lebendigen Objekt aufgeloest 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, damit |
| // 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) { |
| foreach(mixed element: arr) |
| tell_object(who, sprintf("%O\n", element)); |
| } |
| |
| Object 2 (nicht living): |
| void func() { |
| ... |
| say( ({ "Hello", "there!" }) ); |
| ... |
| } |
| |
| SIEHE AUCH |
| Aehnlich: tell_room(E), write(E), shout(E), tell_object(E), |
| printf(E) |
| Verwandt: catch_tell(E), catch_msg(A) |
| Sonstiges: object_name(E) |
| |
| 7.Aug 2007 Gloinson |