MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | SYNOPSIS |
| 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 | |
| 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 | |
| 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 | |
| 43 | BEMERKUNGEN |
| 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 | |
| 51 | BEISPIELE |
| 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 | |
| 92 | SIEHE 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 | |
| 98 | 7.Aug 2007 Gloinson |