Morgengrauner Dokumentation
Dateipfad: /home/mud/mudlib/doc//efun/saySYNOPSIS
void say(string str)
void say(string str, object exclude)
void say(string str, object *excludes)
void say(mixed *|mapping|struct|object|lwobject msg)
void say(mixed *|mapping|struct|object|lwobject msg, object exclude)
void say(mixed *|mapping|struct|object|lwobject msg, object *excludes)
BESCHREIBUNG
Es bestehen zwei Hauptanwendungen fuer say():
Wenn das erste Argument ein String 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 ist, wird die Lfun
catch_msg() in allen lebendigen Objekt im Raum aufgerufen, ausser im
Objekt, das say() aufgerufen hat. Der Wert wird als erstes
Argument an catch_msg() uebergeben, das aufrufende Objekt als zweites
Argument.
MERKE: Wenn die Lfun catch_msg() den Wert veraendert, erhalten
alle nachfolgenden Objekte das veraenderte .
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 ist, werden das aufrufende
Objekt und von der Meldung ausgeschlossen. Wenn das zweite
Argument ein Array 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 veraendert, erhalten alle
nachfolgenden Objekte das veraenderte .
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)
zurück zur Übersicht