Updates erzeugter Manpages

Diese Manpages werden mit sphinx erzeugt. Sie werden
hier committet, damit auch Nutzer ohne sphinx die
Textversion haben.

Change-Id: Ibe6acc626b51b42364af33450a719e88281651b9
diff --git a/doc/lfun/SetChats b/doc/lfun/SetChats
index 70d312e..ee6d04b 100644
--- a/doc/lfun/SetChats
+++ b/doc/lfun/SetChats
@@ -6,7 +6,7 @@
 FUNKTION
 ========
 
-   void SetChats(int chance,mixed strs);
+   void SetChats(int chance, mixed strs);
 
 
 DEFINIERT IN
@@ -18,77 +18,139 @@
 ARGUMENTE
 =========
 
-   chance
-     Prozentuale Wahrscheinlichkeit einer Ausgabe
-   strs
-     Stringarray mit den Monsterchats
+   int chance
+      Prozentuale Wahrscheinlichkeit einer Ausgabe
+
+   mixed strs
+      Array mit den verschiedenen Moeglichkeiten der Monsterchats
 
 
 BESCHREIBUNG
 ============
 
-   Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat einen
-   zufaellig gewaehlten Text aus dem Array <strs> von sich.
-   Die Arrayelemente koennen auch Closures oder
-   process_string()-Funktionen ("@@func@@") enthalten, die dann
-   aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
-    (Fuer keine Ausgabe dann Leerstring "" zurueckgeben!)
-   In diesen Funktionen ist this_player() das Monster selbst!
-   Fuer Zeilenumbrueche ist immer selbst zu sorgen.
+   Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat
+   einen zufaellig gewaehlten Text aus dem Array <strs> in den Raum
+   aus. Dabei wird per Default send_room() ohne erneutes Umbrechen mit
+   den Messagetypen MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.
 
+   Die einzelnen Arrayelemente koennen:
 
-RUECKGABEWERT
-=============
+      * Strings sein
 
-   keiner
+      * Closures sein, deren Rueckgabe ausgegeben wird und die
+        zusaetzlich einen aenderbaren und in send_room() verwendeten
+        'msg_typ' per Referenz uebergeben bekommen
 
+      * Arrays mit der Struktur *({<string|closure msg >, <int
+        msg_typ>})* sein, fuer die obige Regeln auf 'msg' angewendet
+        werden und bei denen 'msg_typ' im send_room() verwendet wird
 
-BEISPIELE
-=========
-
-   Ein einfaches Beispiel:
-     // Prototype fuer Closure.
-     static string info1();
-     void create()
-     { ...
-       SetChats(20,
-      ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
-        "Der Ork grinst Dich unverschaemt an.\n",
-        "Der Ork wedelt mit seinem Saebel vor Deinem Gesicht herum.\n",
-        "Der Ork droht Dir mit der Faust.\n",
-        #'info1,
-        "@@info2@@"}));
-     }
-     // Funktion als Closure. Prototype notwendig!
-     static string info1()
-     { if(QueryProp(P_HP)<QueryProp(P_ALIGN))
-         return"Gleich werde ich von hier fliehen!\n";
-       return"";
-     }
-     // Funktion als process_string().
-     string info2()
-     { return QueryProp(P_HP)==QueryProp(P_MAX_HP)?
-    "Der Ork grinst: Mir geht es fantastisch!\n":
-    "Der Ork seufzt: Mir ging es wirklich schon mal besser.\n";
-     }
+   Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
+   verwenden. In allen Funktionen ist this_player() das Monster
+   selbst. Normalerweise muss man die Nachrichten selbst umbrechen,
+   ausser man uebergibt die Message-Typen explizit und uebergibt kein
+   MSG_DONT_WRAP.
 
 
 BEMERKUNGEN
 ===========
 
-         Im Kampf werden keine Chats ausgegeben. Es ist dann SetAttackChats()
-         zu verwenden.
-         Funktionen als process_string() sollte man nicht mehr verwenden.
-         <chance> wird in der Property P_CHAT_CHANCE abgelegt. Um einen NPC
-         voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0 setzen.
-   Wenn kein Spieler anwesend ist, haben NPC in der Regel keinen Heartbeat,
-   weswegen dann auch die Chats ausgeschaltet sind.
-   Spieler koennen NPC 'stillen', d.h. Chats und AttackChats abschalten.
+   * im Kampf werden keine Chats ausgegeben, man muss dann
+     SetAttackChats() verwenden
+
+   * die strings werden (noch) durch process_string() geschickt,
+     dieses sollte man aber nicht mehr verwenden
+
+   * 'chance' gilt sowohl fuer Attack- als auch normale Chats
+
+   * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen
+     NPC voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0
+     setzen
+
+   * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen
+     ('stillen')
+
+   * NPC haben bei Abwesenheit von Spielern in der Regel keinen
+     Heartbeat, weswegen dann auch die Chats ausgeschaltet sind
+
+   * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER
+     uebergeben
+
+
+BEISPIELE
+=========
+
+   // Ein einfaches Beispiel:
+   SetChats(20,
+    ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
+      "Der Ork grinst Dich unverschaemt an.\n",
+      "Der Ork wedelt mit seinem Saebel vor dir herum.\n",
+      "Der Ork stupst Dich mit dem Finger hart.\n"}));
+
+   // Ein Beispiel mit send_room-Typen ohne MSG_DONT_WRAP
+   SetChats(20,
+    ({({"Der Ork sagt: Hau ab, bevor ich Dich fresse.", MT_LISTEN}),
+      ({"Der Ork grinst Dich unverschaemt an.", MT_LOOK}),
+      ({"Der Ork wedelt mit seinem Saebel vor dir herum.", MT_LOOK}),
+      ({"Der Ork stupst Dich mit dem Finger hart.", MT_LOOK|MT_FEEL})}));
+
+   // Laengeres Beispiel mit Closures
+   protected string chat_flightinfo(int msg_typ);
+   protected string chat_trysteal(int msg_typ);
+
+   void create() {
+     SetChats(20,
+      ({({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n", MT_LISTEN}),
+        #'chat_flightinfo,
+        #'chat_trysteal}));
+     // [...]
+   }
+
+   protected string chat_flightinfo(int msg_typ) {
+     msg_typ = MT_LISTEN;
+     return ("Der Ork sagt: "+
+             (QueryProp(P_HP)<QueryProp(P_WIMPY)?
+               "Ich hab Angst!":
+               "Guck mich nicht so an, Schwaechling!"));
+   }
+
+   protected string chat_trysteal(int msg_typ) {
+     object *pls = filter(all_inventory(environment()), #'interactive);
+     if(sizeof(pls)) {
+       object pl = pls[random(sizeof(pls))];
+       if(!IS_LEARNER(pl)) {
+         object *objs = all_inventory(pl);
+         if(sizeof(objs)) {
+           object ob = objs[random(sizeof(objs))];
+           if(ob->move(this_object(),
+                       M_NO_SHOW|M_GIVE|M_MOVE_ALL)==MOVE_OK) {
+             if(pl->ReceiveMsg(Name(WER)+" stiehlt dir "+ob->name(WEN, 0)+".",
+                               MT_FEEL|MT_LOOK)<0)
+               pl->ReceiveMsg("Irgendwie scheint dir jetzt etwas zu fehlen.",
+                              MT_FEEL|MT_LOOK|MSG_DONT_IGNORE);
+             send_room(environment(),
+               Name(WER, 1)+" bestiehlt "+pl->name(WEN)+".",
+               MT_LOOK, 0, 0, ({pl}));
+             return "";
+           }
+         }
+       }
+     }
+     msg_typ = MT_LOOK;
+     return Name(WER, 1)+" schaut sich verstohlen um.";
+   }
 
 
 SIEHE AUCH
 ==========
 
-   P_CHAT_CHANCE, SetAttackChats(), process_string()
+   Verwandt:
+      *SetAttackChats()*
 
-Last modified: Sat Jan 18 18:48:06 2003 by Patryn
+   Props:
+      *P_CHAT_CHANCE*
+
+   Sonstiges:
+      *send_room()*, *process_string()*
+
+3. April 2017 Gloinson