blob: 6f0958fa1c1444c7624f37489ef1f01379814433 [file] [log] [blame]
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