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/AddInfo b/doc/lfun/AddInfo
index 759a300..a75a22d 100644
--- a/doc/lfun/AddInfo
+++ b/doc/lfun/AddInfo
@@ -7,7 +7,7 @@
 ========
 
    varargs void AddInfo( frage, meldung
-                         [, indent [, [silent [, casebased] ] ] );
+      [, indent [, [silent [, casebased] ] ] );
 
 
 DEFINIERT IN
@@ -21,58 +21,67 @@
 
    string/string* frage
       Schluesseltext(e) auf die Informationen gegeben werden sollen.
+
    string/closure meldung
-      Information, die gegeben werden soll/Closure
+      Information, die gegeben werden soll/Closure Bekommt nichts
+      uebergeben.
+
    string indent
       Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
+
    int/string silent
       Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
+
    string/closure casebased
-      Closure mit Returnwert string oder int.
+      Closure mit Returnwert string oder int. Bekommt nichts
+      uebergeben.
 
 
 BESCHREIBUNG
 ============
 
-   Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>" nach
-   einer Information mit dem Schluessel 'frage' fragt, so wird die
-   entsprechende 'meldung' ausgegeben (oder die Closure in 'meldung'
-   gerufen und der zurueckgegebene Text ausgegeben). Der Meldung wird
-   der Name des Monsters vorangestellt.
+   Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>"
+   nach einer Information mit dem Schluessel 'frage' fragt, so wird
+   die entsprechende 'meldung' ausgegeben (oder die Closure in
+   'meldung' gerufen und der zurueckgegebene Text ausgegeben). Der
+   Meldung wird der Name des Monsters vorangestellt.
 
    Frage:
-    Schluessel muessen kleingeschrieben sein, koennen aber Leerzeichen
-    enthalten.
+      Schluessel muessen kleingeschrieben sein, koennen aber
+      Leerzeichen enthalten.
 
    Meldung:
-    Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
-    umbrechen.
+      Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
+      umbrechen.
 
    Indent:
-    Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
-    Monsternamen noch das 'indent' vorangesetzt. Zusaetzlich wird
-    'meldung' auf jeden Fall sauber umgebrochen.
-    Ein typisches indent ist "sagt: ".
+      Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
+      Monsternamen noch das 'indent' vorangesetzt. Ein typisches
+      indent ist "sagt: ".
 
    Silent:
-    Bei 'silent'==1 erfolgt keine Textausgabe der Antwortmeldung im Raum,
-    ist 'silent' ein String, so wird jener an alle anderen Spieler ausser
-    dem Fragesteller im Raum ausgegeben.
+      Bei 'silent'==1 erfolgt keine Textausgabe der Antwortmeldung im
+      Raum, ist 'silent' ein String, so wird jener an alle anderen
+      Spieler ausser dem Fragesteller im Raum ausgegeben.
 
    Casebased:
-    Die als Closure angegebene Methode entscheidet, ob oder wie der NPC
-    auf diese Frage antworten soll:
-    - return 0:       normale Antwort mit "meldung"
-    - return 1:       keine Antwort/Antwort mit DEFAULT_NOINFO
-    - return string:  Antwort mit string unter Beruecksichtigung eines
-                      indent
+      Die als Closure angegebene Methode entscheidet, ob oder wie der
+      NPC auf diese Frage antworten soll:
 
-   Die Strings von 'silent' und 'meldung' werden geparsed.
-   Dabei koennen die @...-Tags von replace_personal() verwendet werden,
+      # return 0:    normale Antwort mit "meldung"
+
+      # return 1:    keine Antwort/Antwort mit DEFAULT_NOINFO
+
+      # return string: Antwort mit string unter Beruecksichtigung
+      eines indent
+
+   Die Strings von 'silent' und 'meldung' werden geparsed. Dabei
+   koennen die @[...]-Tags von replace_personal() verwendet werden,
    Objekt 1 ist this_player(). Ersetzte String am Satzanfang werden
-   automatisch gross geschrieben.
-   AddInfo() konvertiert die alten Schluesselworte @WER, @WESSEN, @WEM,
-   @WEN zu denen von replace_personal().
+   automatisch gross geschrieben. AddInfo() konvertiert die alten
+   Schluesselworte @WER, @WESSEN, @WEM, @WEN zu denen von
+   replace_personal(), jedoch nicht in den Rueckgabe- werten von
+   Closures.
 
    Mittels der in <npc.h> definierten Frage DEFAULT_INFO kann eine
    Meldung gesetzt werden, die gegeben werden soll, wenn der Spieler
@@ -83,25 +92,27 @@
 BEISPIELE
 =========
 
-   ### eine Standardantwort setzen ###
+   Siehe auch: /doc/beispiele/AddInfo/
+
+   // Beispiel 1: ### eine Standardantwort setzen ###
    AddInfo(DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
    // identisch zu
-   SetProp(P_DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
+   // obsolet: SetProp(P_DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
 
-   ### einfache Beispiele, auch mit casebased ###
+   // Beispiel 2: einfache Beispiele, auch mit casebased
    AddInfo(({"knete","kohle"}),
-           "sagt: ich habe so etwas nicht.\n");
+       "sagt: ich habe so etwas nicht.\n");
    AddInfo("geld",
-           "Ich habe zwar kein Geld, aber ... blablabla ...",
-           "sagt: " );
+       "Ich habe zwar kein Geld, aber [...] blablabla [...]",
+       "sagt: ");
    AddInfo("muenzen",
-           "fluestert: Du willst Geld?\n",
-           0,
-           "fluestert @WEM etwas zu.\n");
+       "fluestert: Du willst Geld?",
+       0,
+       "fluestert @WEM etwas zu.");
 
    // "frage monster nach geld": alle im Raum hoeren
-   //  Das Monster sagt: Ich habe zwar kein Geld, aber ...
-   //  Das Monster sagt: ... blablabla ...
+   //  Das Monster sagt: Ich habe zwar kein Geld, aber [...]
+   //  Das Monster sagt: [...] blablabla [...]
 
    // "frage monster nach muenzen":
    // - der Fragensteller hoert:
@@ -109,47 +120,48 @@
    // - alle andere hoeren:
    //   "Das Monster fluestert <Fragenstellernamen> etwas zu."
 
-   ### dynamisch ###
+   // Beispiel 3: dynamisch
    // ein Prototyp, damit wir die Methode bekannt machen
-   static string query_kekse();
-   ...
-   AddInfo(({"keks","kekse"}),
-           #'query_kekse,             // ein Verweis auf die Funktion
-           "sagt: ");
-   ...
-   static string query_kekse() {
-    if(present("keks"))
-     return("Ich hab noch welche. Aetsch!");
-    return("Menno. Keine mehr da!");
-   }
+   protected string query_kekse();
 
+   AddInfo(({"keks","kekse"}),
+       #'query_kekse,        // ein Verweis auf die Funktion
+       "sagt: ");
+
+   protected string query_kekse() {
+     if(present("keks", this_object()))
+       return("Ich hab noch welche. Aetsch!");
+     else if(present("keks", environment()))
+       return("Da liegt einer!");
+     return("Menno. Keine mehr da!");
+   }
    // "frage monster nach keks":
    // - wenn es noch Kekse hat, hoeren alle:
    //   "Das Monster sagt: Ich hab noch welche. Aetsch!
    // - sonst:
    //   "Das Monster sagt: "Menno. Keine mehr da!
 
-   ### dynamischer ###
+   // Beispiel 4: dynamischer
    // ein Prototyp, damit wir die Methode bekannt machen
-   static string query_kekse();
-   static mixed case_fighting();
-   ...
+   protected string query_kekse();
+   protected mixed case_fighting();
+
    AddInfo(({"keks","kekse"}),
-           #'query_kekse,"            // ein Verweis auf die Funktion
-           sagt: ",
-           0,                         // nicht silent :)
-           #'case_fighting);          // noch ein Funktionsverweis
-   ...
-   static string query_kekse() {
-    if(present("keks"))
-     return("Ich hab noch welche. Aetsch!");
-    return("Menno. Keine mehr da!");
+       #'query_kekse,"        // ein Verweis auf die Funktion
+       sagt: ",
+       0,                     // nicht silent :)
+       #'case_fighting);      // noch ein Funktionsverweis
+
+   protected string query_kekse() {
+     if(present("keks"))
+       return("Ich hab noch welche. Aetsch!");
+     return("Menno. Keine mehr da!");
    }
 
-   static mixed case_fighting() {
-    if(InFight())
-     return("Keine Zeit fuer Kekse. Muss kaempfen.");
-    return 0;
+   protected mixed case_fighting() {
+     if(InFight())
+       return("Keine Zeit fuer Kekse. Muss kaempfen.");
+     return 0;
    }
 
    // "frage monster nach keks":
@@ -160,59 +172,53 @@
    // - sonst:
    //   "Das Monster sagt: "Menno. Keine mehr da!
 
-
-   ### dynamisch und komplex ###
+   // Beispiel 5: ### dynamisch und komplex ###
    // ein Prototyp, damit wir die Methode bekannt machen
-   static string question_gold();
-   ...
+   protected string question_gold();
 
    // "gold" wird eine Closure auf die Methode question_gold()
    // zugewiesen, ausserdem soll es still bleiben (wir informieren
    // den Restraum selbst)
-   AddInfo("gold",#'question_gold,"murmelt: ",1);
-   ...
+   AddInfo("gold", #'question_gold, "murmelt: ", 1);
 
    // los gehts, wir generieren unsere Antwort selbst
-   static string question_gold() {
-    int money;
-    string *y, objstr;
-    object o;
-    // wieviel Kohle hat der Spieler
-    money=this_player()->QueryMoney();
-    y=allocate(0);
-    // und jetzt suchen wir die Dinge aus Gold
-    o=first_inventory(this_player());
-    while(o) {
-     if(o->QueryMaterial(MAT_GOLD)>0 &&
-        strstr(object_name(o),"/obj/money"))
-      y+=({o->name(WER,1)});
-     o=next_inventory(o);
-    }
+   protected string question_gold() {
+     // wieviel Kohle hat der Spieler
+     int money = this_player()->QueryMoney();
+     string *y = map(deep_inventory(this_player()),
+                   function string(object o) {
+                     if(o->QueryMaterial(MAT_GOLD)>0 &&
+                        strstr(object_name(o),"/items/money")<0 &&
+                        o->QueryProp(P_NAME))
+                       return o->name(WER,1);
+                   })-({0});
 
-    // das geht an alle anderen im Raum, silent bietet sich hier
-    // nicht an, weil es mehrere Moeglichkeiten gibt
-    say(break_string(
-     Name(WER,1)+" murmelt "+
-     this_player()->name(WEM,1)+
-     " etwas zu"+
-     ((money || sizeof(y))?
-      " und glotzt "+
-      this_player()->QueryPronoun(WEN)+" gierig an.":
-      "."),78),({this_player()}));
-
-    // und hier die Antwort an den Spieler selbst, mit vielen
-    // Verzweigungen fuer dessen Besitztum
-    return("Ich hab kein Gold bei mir."+
+     // das geht an alle anderen im Raum, silent bietet sich hier
+     // nicht an, weil es mehrere Moeglichkeiten gibt
+     send_room(environment(),
+       (Name(WER,1)+" murmelt "+
+        this_player()->name(WEM,1)+
+        " etwas zu"+
         ((money || sizeof(y))?
+          " und glotzt "+this_player()->QueryPronoun(WEN)+" gierig an.":
+          ".")),
+       MT_LOOK|MT_LISTEN,
+       MA_EMOTE, 0, ({this_player()}));
+
+     // und hier die Antwort an den Spieler selbst, mit vielen
+     // Verzweigungen fuer dessen Besitztum
+     return("Ich hab kein Gold bei mir."+
+       ((money || sizeof(y))?
          " Aber du "+
-         (money?"hast ja jede Menge Kohle bei dir, so etwa "+money+
-          " Muenzen."+
-          (sizeof(y)?
-           " Ausserdem "+
-           ((sizeof(y)==1)?"ist":"sind")+
-           " auch noch "+CountUp(y)+" aus Gold.":
-           ""):
-          (sizeof(y)?" Aber was du so bei dir hast: "+
+         (money?
+           "hast ja jede Menge Kohle bei dir, so etwa "+money+
+           " Muenzen."+
+           (sizeof(y)?
+             " Ausserdem "+
+             ((sizeof(y)==1)?"ist":"sind")+
+             " auch noch "+CountUp(y)+" aus Gold.":
+             ""):
+           (sizeof(y)?"hast ja ein paar Wertsachen dabei: "+
            CountUp(y)+
            (sizeof(y)==1?" ist":" sind")+
            " aus Gold.":"")):
@@ -234,10 +240,19 @@
 SIEHE AUCH
 ==========
 
-   Verwandt:  AddSpecialInfo(L), RemoveInfo(L)
-   Props:     P_PRE_INFO, P_DEFAULT_INFO
-   Files:     /std/npc/info.c
-   Loggen:    P_LOG_INFO
-   Interna:   GetInfoArr, do_frage
+   Verwandt:
+      *AddSpecialInfo()*, *RemoveInfo()*
 
-7.Apr 2004 Gloinson
+   Props:
+      *P_PRE_INFO*
+
+   Files:
+      /std/npc/info.c
+
+   Loggen:
+      *P_LOG_INFO*
+
+   Interna:
+      *GetInfoArr()* , *do_frage()*
+
+7. Mar 2017 Gloinson