SYNOPSIS
        void tell_room(string|object obj, string str)
        void tell_room(string|object obj, string str, object *exclude)

        void tell_room(string|object obj,
                       mixed *|mapping|struct|object|lwobject msg)
        void tell_room(string|object obj,
                       mixed *|mapping|struct|object|lwobject msg,
                       object *exclude)

BESCHREIBUNG
        Gibt einen Text <str> an den Raum <obj> aus. <obj> kann auch der
        Name des Raumes als String sein. Wenn das Objekt, das die Meldung
        erhaelt, nicht ein interaktives Objekt (also kein User) ist, wird
        im Empfaenger die Funktion catch_tell() mit dem Text als Argument
        aufgerufen. Falls ein Lebewesen die Funktion catch_tell() definiert,
        wird der Text hier ausgewertet und nicht an den User ausgegeben.
        Wenn das Empfaengerobjekt mit seinem Namen angegeben ist, sucht der
        Driver das Objekt unter diesem Namen und laedt es, falls notwendig.
        Wenn das Array <*exclude> angegeben ist, wird der Text an die
        Objekte in <*exclude> nicht ausgegeben.

        Wenn das zweite Argument ein nicht-String ist, wird in allen
        Lebewesen, die den Text erhalten, catch_msg() aufgerufen (statt
        catch_tell()).

BEISPIELE
        An alle Lebewesen im Raum soll ein simples "Hi!" gesendet werden:

            tell_object(environment(this_player()), "Hi!\n");

        Folgendes Beispiel zeigt, wie tell_room() zusammen mit catch_tell()
        funktioniert.

        Objekt1 (ein Lebewesen):
            void catch_tell(string str) {
                write("Empfangen: "+str+"\n");
            }

        Objekt2:
            void fun() {
                tell_room(environment(this_player()), "Hallo Welt!\n");
            }

GESCHICHTE
        LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als
        zweites Argument.

SIEHE AUCH
        write(E), say(E), tell_object(E), catch_tell(A), catch_msg(A)
