send_room()
***********


FUNKTION
========

   varargs void send_room(object|string room, string msg, int
   msg_type,
      string msg_action, string msg_prefix, object *exclude, object
      origin)


BESCHREIBUNG
============

   Sendet msg an alle Objekte in room durch Aufruf von ReceiveMsg()
   mit den uebergebenen Argumenten. Zur Bedeutung der Argumente siehe
   Manpage von ReceiveMsg().

   Wenn das Raumobjekt mit seinem Namen angegeben ist, wird das Objekt
   unter diesem Namen gesucht und und geladen, falls notwendig.

   Mit dem Array exclude kann man verhindern, dass die Nachricht an
   die darin enthaltenen Objekte gesendet wird. Das ist sinnvoll, wenn
   beispielsweise ein Spieler Ausloeser einer Meldung ist und diese
   selbst nicht erhalten soll.

   origin gibt an, welches Objekt die Meldung ausloest (muss nicht das
   sendende Objekt selber) und wird vor allem fuer die
   Ignorierepruefung verwendet. Default ist das sendende Objekt.

   Letztendlich ist die sefun vergleichbar zu *tell_room()*.


BEISPIEL
========

   Oft moechte man einfach nur, dass an den Spieler, der eine Aktion
   oder aehnliches ausloest, eine andere Meldung gegeben wird, als an
   andere im Raum befindliche Spieler. Folgenden Code koente man dann
   verwenden:

      /* Zuerst senden wir eine Nachricht nur an den Spieler.
       * Ziel: der Spieler riecht etwas und schuettelt sich fuer alle im
       * Raum sichtbar darauf.
       */
      this_player()->ReceiveMsg("Buah stinkt das. Du schuettelst Dich.\n",
              MT_NOTIFICATION|MT_SMELL, MA_SMELL);
      send_room(environment(this_player()),
              // der Raum in dem der Spieler ist
               this_player()->Name(WER) + " schuettelt sich. Wieso nur?\n",
              // die eigentliche Nachricht
              MT_LOOK, // man sieht das schuetteln
              MA_UNKNOWN, // MA_SMELL moeglich; im Zweifel immer MA_UNKNOWN
              "", // wir wollen kein Praefix vor der Ausgabe haben
              ({this_player()}));
              // Array nur mit dem Spieler, der das nicht noch
              // mitbekommen soll.

   Fuer weitere Optionen fuer *msg_type* und *msg_action* siehe die
   manpage zu ReceiveMsg. Natuerlich haben *this_player* und
   *environment* auch manpages.


SIEHE AUCH
==========

   ReceiveMsg() tell_object(E), tell_room(E), say(E), write(E)

31.01.2018, Deaddy
