shout()
*******


FUNKTION
========

   varargs void shout( string text, mixed where )


DEFINIERT IN
============

   /secure/simul_efun.c


ARGUMENTE
=========

   text
        Der Text, der ausgegeben werden soll

   where [optional]
        Wo soll man den Text ueberall hoeren koennen?


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

   Der Text 'text' wird an alle Spieler in einem Gebiet ausgegeben.
   Wird der Parameter 'where' weggelassen bzw. ist er null, so geht der
   Text an alle Spieler im Mud. Das catch_tell() von NPCs wird nicht
   ausgeloest.

   Ist 'where' eine Zahl != 0, so wird der Text nur an Spieler ausgegeben,
   die sich im selben Gebiet aufhalten wie this_player(). Dabei wird die
   Zugehoerigkeit zum selben Gebiet an den ersten zwei Ebenen des Pfades
   der Raeume festgemacht. Befindet sich this_player() z.B. in
   "/d/ebene/irgendwo", so geht der Text an alle Spieler, deren Aufenthalts-
   orte in "/d/ebene/*" liegen.

   Fuer 'where' kann auch direkt ein Pfad angegeben werden. So wuerde ein
   'shout( txt, "/players/" )' an alle Spieler gehen, die sich in
   (eigentlich nicht erwuenschten) Raeumen in /players/* befinden.

   Um mit einem Aufruf gleich mehrere Pfade abzudecken, kann auch ein Array
   von Strings uebergeben werden. Alle Pfade werden als 'regular expression'
   interpretiert. Dadurch ist es moeglich, die Zielraeume auf einfache Art
   sehr genau einzuschraenken.

   HINWEIS: Bitte ueberleg vor jedem shout() genau, ob es wirklich noetig
   ist, dass _jeder_ etwas davon mitbekommt oder ob es nicht vielleicht
   sinnvoller ist, das Zielgebiet etwas einzuschraenken. Im Zweifelsfall
   sollte der zustaendige RM aufpassen, dass die Spieler nicht durch allzu
   zahlreiche shouts belaestigt werden.


RUeCKGABEWERT
=============

   keiner


BEISPIELE
=========

   shout( "Du spuerst, wie ein Zittern durch das MorgenGrauen geht.\n" );
      Der allseits bekannte Text wird an alle Spieler im MG ausgegeben.

   shout( "Du hoerst eine gewaltige Explosion.\n", 1 );
      Von der Explosion bekommen alle Spieler in derselben Gegend etwas mit,
      aber nicht am anderen Ende des Muds.

   shout( "Irgendwo ist ein Baum umgefallen.\n", "/d/vland/" );
      ... gibt eine Meldung aus, die keinen wirklich interessiert. Aber es
      trifft eh nur Leute in einem unwichtigen Teil des MorgenGrauen. ;-)

   shout( "Aufwachen Du Idler!\n", "/players/.*/workroom" );
      Mit Hilfe von regular expressions kann man recht einfach z.B. alle
      Workrooms auf einmal adressieren.

   shout( "Halloooooo, Echoooooo!\n", ({ "/d/gebirge/", "/d/ebene/" }) );
      Wenn der Spieler hoch oben auf dem Berg laut genug ruft, hoert man
      ihn auch noch weit in der Ebene.


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

   write(), say(), tell_object(), tell_room(), regexp()

Last modified: Sun Nov 28 03:00:00 1999 by Tiamak
