Doku: P_MSG_PROB, AddRoomMessage und Props angepasst

* P_MSG_PROB nochmal naeher erklaert, da Name fehlleitet

Change-Id: I5a8b76420c1072caee7f3b0e14f73287e88bf594
diff --git a/doc/sphinx/lfun/AddRoomMessage.rst b/doc/sphinx/lfun/AddRoomMessage.rst
index 150a9cd..53c7b4d 100644
--- a/doc/sphinx/lfun/AddRoomMessage.rst
+++ b/doc/sphinx/lfun/AddRoomMessage.rst
@@ -3,81 +3,84 @@
 
 FUNKTION
 --------
-::
 
      void AddRoomMessage(string *msg, int time, mixed *func);
 
 DEFINIERT IN
 ------------
-::
 
      /std/room/description.c
 
 ARGUMENTE
 ---------
-::
 
-     msg
+     string* msg
           Array von Strings mit den Meldungen.
-     time
+     int time
           Der Abstand zwischen zwei Meldungen in Sekunden.
-     func (optional)
+     string|string* 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.
+     Es wird alle 'time' Sekunden (beim ersten Betreten durch einen Spieler
+     ein random() des Wertes) zufaellig eine der in msg angegebenen
+     Meldungen ausgegeben.
+     Hat man func angegeben, so wird diese Funktion (bei einem Array:
+     eine zufaellig ausgesuchte Funktion) im Raum aufgerufen. Als
+     Parameter bekommt die Funktion die Nummer der ggf zuvor ausgegebenen
+     Meldung (Default also 0).
 
      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!
+     man folgendes bedenken (Fazit: weniger ist mehr):
+
+     * Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
+       die Nerven zu gehen.
+     * Die das Timing steuernden call_out() sind nicht umsonst.
 
 BEMERKUNGEN
 -----------
-::
 
-     * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
+     * 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!
+     * this_player() NICHT VERWENDEN!
+     * Abschalten der Raumnachrichten:
+
+       * passiert automatisch nur, wenn alle Spieler den Raum verlassen haben
+       * ist manuell nur ueber Loeschen der Nachrichten umsetzbar, also mit
+         ``AddRoomMessage((string)0, 0, (string)0);``
+
      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.
+     this_player() nicht verwendet werden, da die call_out()-Kette den
+     ersten ausloesenden Spieler speichert. Anwesende Spieler also bitte
+     ggf mit
+     ``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:
+  .. code-block:: pike
+
+     // Beispiel 1:
+     // 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"}) );
-       ...
+       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) {
@@ -87,17 +90,62 @@
      }
 
      // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
-     void sound_more_rnd() {
-       sound(0);   // die Message-Nummer ist hier unwichtig
+     void sound_more_rnd(int msg) {
+       sound(msg);
        SetProp(P_MSG_PROB, 25+random(20));  // neue Wartedauer
      }
 
+
+  .. code-block:: pike
+
+     // Beispiel 2: Abschalten der Raumnachrichten
+     public int action_laerm(string str);
+     protected void reset_room_messages();
+
+     void create() {
+       ::create();
+       reset_room_messages();
+
+       AddCmd("mach|mache&laerm|krach",
+              "action_laerm",
+              "Was willst du machen?");
+       AddCmd("schlag|schlage&laerm|krach",
+              "action_laerm",
+              "Was willst du schlagen?");
+     }
+
+     protected void reset_room_messages() {
+       AddRoomMessage(({"Das Reh quakt leise.\n",
+                        "Der Frosch grunzt.\n",
+                        "Gelbe Schnorpfel pupsen im Takt.\n"}),
+                      45);
+     }
+
+     public int action_laerm(string str) {
+       AddRoomMessage((string)0, 0, (string)0);
+
+       this_player()->ReceiveMsg(
+         "Du schreist dir kurz die Seele aus dem Leib. Alle Tiere "
+         "verstummen sofort.", MT_NOTIFICATION);
+       send_room(this_object(),
+         this_player()->Name()+" schreit laut. Alle Tiere verstimmen "
+         "sofort.", MT_LISTEN, 0, 0, ({this_player()}));
+       return 1;
+     }
+
+     void reset() {
+       :reset();
+       if(!QueryProp(P_ROOM_MSG))
+         reset_room_messages();
+     }
+
 SIEHE AUCH
 ----------
-::
 
-     Verwandt: tell_room(), ReceiveMsg()
-     Props:    P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB
+     Verwandt:
+       tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+     Props:
+       :doc:`../props/P_MSG_PROB`, :doc:`../props/P_FUNC_MSG`, :doc:`../props/P_ROOM_MSG`
 
-2.Feb 2016 Gloinson
+28. Mar 2016 Gloinson
 
diff --git a/doc/sphinx/props/P_FUNC_MSG.rst b/doc/sphinx/props/P_FUNC_MSG.rst
index 2acab57..a18d767 100644
--- a/doc/sphinx/props/P_FUNC_MSG.rst
+++ b/doc/sphinx/props/P_FUNC_MSG.rst
@@ -3,19 +3,16 @@
 
 NAME
 ----
-::
 
     P_FUNC_MSG                    "func_msg"                    
 
 DEFINIERT IN
 ------------
-::
 
     /sys/room/description.h
 
 BESCHREIBUNG
 ------------
-::
 
      Liste mit Funktionen, die zufaellig im Raum aufgerufen werden.
 
@@ -24,17 +21,18 @@
 
 ANMERKUNGEN
 -----------
-::
 
      Bitte AddRoomMessage() zum Hinzufuegen/Ueberschreiben benutzen!
 
 SIEHE AUCH
 ----------
-::
 
-     LFuns:    AddRoomMessage()
-     Verwandt: tell_room(), ReceiveMsg()
-     Props:    P_ROOM_MSG, P_MSG_PROB
+     LFuns:
+       :doc:`../lfun/AddRoomMessage`
+     Verwandt:
+       tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+     Props:
+       :doc:`P_MSG_PROB`, :doc:`P_ROOM_MSG`
 
 2.Feb 2016 Gloinson
 
diff --git a/doc/sphinx/props/P_MSG_PROB.rst b/doc/sphinx/props/P_MSG_PROB.rst
index 1f0e9ea..739aadb 100644
--- a/doc/sphinx/props/P_MSG_PROB.rst
+++ b/doc/sphinx/props/P_MSG_PROB.rst
@@ -3,33 +3,71 @@
 
 NAME
 ----
-::
-
     P_MSG_PROB                    "msg_prob"                    
 
 DEFINIERT IN
 ------------
-::
 
     /sys/room/description.h
 
 BESCHREIBUNG
 ------------
-::
+     Der Name ist irrefuehrend: es ist ein Parameter fuer die Wartezeit
+     in Sekunden bis zur naechsten Ausgabe einer Raumnachricht.
+     Nur direkt nach dem Betreten des Raums wird ein Zufallswert dieser
+     Zahl erstellt.
 
-     Parameter fuer die Wartezeit in Sekunden bis zur naechsten Ausgabe
-     einer Raumnachricht.
-     Wird in AddRoomMessage() explizit mitgesetzt. Koennte natuerlich von
-     einer Nachrichtenmethode auch regelmaessig geaendert werden, um
-     mehr Zufall in die Intervalle zu bringen.
+     Wird in AddRoomMessage() explizit mitgesetzt und gilt fuer den Raum.
+
+     Kann von einer Nachrichtenmethode geaendert werden, um mehr Zufall
+     in die Intervalle zu bringen.
+
+     Werte kleiner als 15 werden bei der Auswertung auf 15 gesetzt. Setzen
+     auf 0 schaltet die Nachrichten nicht ab!
+
+BEISPIELE
+---------
+
+.. code-block:: pike
+
+     // Beispiel:
+     // Je laenger Spieler im Raum sind, desto langsamer tropft das
+     // Wasser. Wenn der letzte den Raum verlaesst, wird die Zeit
+     // fuer den naechsten Spieler wieder auf den Initialwert gesetzt.
+
+     inherit "/std/room";
+
+     #define START_SPEED 30
+
+     void create() {
+       ::create();
+       AddRoomMessage(({"Das Wasser tropft.\n",
+                        "Ein Tropfen plitscht.\n",
+                        "Tripf tropf macht das Wasser.\n"}),
+                      START_SPEED,
+                      ({"slowdown_speed"}));
+     }
+
+     void slowdown_speed(int msg) {
+       SetProp(P_MSG_PROB, QueryProp(P_MSG_PROB)+10);
+     }
+
+     void exit() {
+       ::exit();
+       
+       if(!sizeof(filter(all_inventory(this_object())-({this_player()}),
+                         #'interactive)))
+         SetProp(P_MSG_PROB, START_SPEED);
+     }
 
 SIEHE AUCH
 ----------
-::
 
-     LFuns:    AddRoomMessage()
-     Props:    P_ROOM_MSG, P_MSG_PROB
-     Verwandt: call_out()
+     LFuns:
+       :doc:`../lfun/AddRoomMessage`
+     Props:
+       :doc:`P_ROOM_MSG`, :doc:`P_FUNC_MSG`
+     Verwandt:
+       call_out()
 
-2.Feb 2016 Gloinson
-
+28. Mar 2017 Gloinson
diff --git a/doc/sphinx/props/P_ROOM_MSG.rst b/doc/sphinx/props/P_ROOM_MSG.rst
index 087f9c2..620af5c 100644
--- a/doc/sphinx/props/P_ROOM_MSG.rst
+++ b/doc/sphinx/props/P_ROOM_MSG.rst
@@ -3,19 +3,16 @@
 
 NAME
 ----
-::
 
     P_ROOM_MSG                    "room_msg"                    
 
 DEFINIERT IN
 ------------
-::
 
     /sys/room/description.h
 
 BESCHREIBUNG
 ------------
-::
 
      Liste mit Meldungen, die zufaellig im Raum ausgegeben werden.
 
@@ -23,17 +20,17 @@
 
 ANMERKUNGEN
 -----------
-::
 
      Bitte AddRoomMessage() zum Hinzufuegen/Ueberschreiben benutzen!
 
 SIEHE AUCH
 ----------
-::
 
-     LFuns:    AddRoomMessage()
-     Verwandt: tell_room(), ReceiveMsg()
-     Props:    P_FUNC_MSG, P_MSG_PROB
+     LFuns:
+       :doc:`../lfun/AddRoomMessage`
+     Verwandt:
+       tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+     Props:
+       :doc:`P_MSG_PROB`, :doc:`P_FUNC_MSG`
 
-2.Feb 2016 Gloinson
-
+2.Feb 2016 Gloinson
\ No newline at end of file