AddRoomMessage()

FUNKTION:
     void AddRoomMessage(string *msg, int time, mixed *func);

DEFINIERT IN:
     /std/room/description.c

ARGUMENTE:
     msg
          Array von Strings mit den Meldungen.
     time
          Der Abstand zwischen zwei Meldungen in Sekunden.
     func (optional)
          String oder Array von Strings mit Funktionsnamen

BESCHREIBUNG:
     Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden
     Meldungen an den Raum geschickt werden sollen.

     Es wird alle time Sekunden zufaellig eine der in msg angegebenen
     Meldungen ausgegeben. Hat man auch noch func angegeben, so wird
     zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte
     Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die
     Nummer der ausgegebenen Meldung.

     Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte
     man folgendes bedenken:
        o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
          die Nerven zu gehen!
        o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze
          aus Sicht des GameDrivers auch noch relativ teuer!
     Fazit: weniger ist mehr!

BEMERKUNGEN:
     * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
     * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
       ueberschreibt alle vorherigen Werte
     * THIS_PLAYER() NICHT VERWENDEN!
     In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
     this_player() nicht verwendet werden. AddRoomMessage ist call_out-
     gesteuert und speichert somit das this_player(). Damit ist this_player()
     immer der Spieler, der den Raum geladen, also den Raum als erster
     betreten hat. 
     Spieler also bitte selbst ueber filter(all_inventory(this_object()),
                                            #'interactive) suchen.

BEISPIELE:
     Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
     unter den Fuessen knackt, soll man zudem mit 30%-iger
     Wahrscheinlichkeit zusammenzucken:

     inherit "/std/room";

     void create() {
       ::create();
       AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n",
                          "Es raschelt im Gebuesch.\n",
                          "Etwas knackt unter Deinen Fuessen.\n" }),
                        30, ({"sound", "sound_more_rnd"}) );
       ...
     }

     void sound(int msg) {
       if (msg == 2)         // Es hat geknackt...
         if (random(10) < 3) // Schreck lass nach! ;-)
           tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" );
     }

     // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
     void sound_more_rnd() {
       sound(0);   // die Message-Nummer ist hier unwichtig
       SetProp(P_MSG_PROB, 25+random(20));  // neue Wartedauer
     }

SIEHE AUCH:
     Verwandt: tell_room(), ReceiveMsg()
     Props:    P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB

2.Feb 2016 Gloinson
