Gesammelte Doku-Updates

... die niemand comittet hat...

Change-Id: I60d948e72befe303862e25d63b88cfda72e6f0d7
diff --git a/doc/sphinx/lfun/AddInfo.rst b/doc/sphinx/lfun/AddInfo.rst
index 076dfd8..5db8bef 100644
--- a/doc/sphinx/lfun/AddInfo.rst
+++ b/doc/sphinx/lfun/AddInfo.rst
@@ -18,12 +18,12 @@
      string/string* frage
        Schluesseltext(e) auf die Informationen gegeben werden sollen.
      string/closure meldung
-       Information, die gegeben werden soll/Closure
-       Bekommt nichts uebergeben.
+       Information, die gegeben werden soll; wenn 'meldung' eine Closure 
+       ist, wird der gerufenen Funktion nichts uebergeben.
      string indent
        Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
      int/string silent
-       Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
+       Ist silent gesetzt, so erfolgt Antwort nur an Fragenden. 
      string/closure casebased
        Closure mit Returnwert string oder int.
        Bekommt nichts uebergeben.
@@ -54,6 +54,7 @@
       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.
+      Dem ausgegebenen Text wird der Name des NPCs als Indent vorangestellt.
 
      Casebased:
       Die als Closure angegebene Methode entscheidet, ob oder wie der NPC 
@@ -99,9 +100,9 @@
          "Ich habe zwar kein Geld, aber [...] blablabla [...]",
          "sagt: ");
      AddInfo("muenzen",
-         "fluestert: Du willst Geld?",
+         "fluestert: Du willst Geld?\n",
          0,
-         "fluestert @WEM1 etwas zu.");
+         "fluestert @WEM1 etwas zu.\n");
 
      // "frage monster nach geld": alle im Raum hoeren
      //  Das Monster sagt: Ich habe zwar kein Geld, aber [...]
@@ -145,7 +146,7 @@
      
      AddInfo(({"keks","kekse"}),
          #'query_kekse,"        // ein Verweis auf die Funktion
-         sagt: ",
+         "sagt: ",
          0,                     // nicht silent :)
          #'case_fighting);      // noch ein Funktionsverweis
 
@@ -184,50 +185,58 @@
      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});
+       string* valuables = ({});
+       
+       // Wertgegenstaende suchen, d.h. Material kein Gold, 
+       // Objekt kein Geld, und auch nicht unsichtbar
+       foreach(object o : deep_inventory(this_player())) 
+       {
+         if ( o->QueryMaterial(MAT_GOLD)>0 && 
+              load_name(o) != "/items/money" &&
+              o->QueryProp(P_SHORT) &&
+              !o->QueryProp(P_INVIS) )
+         {
+           valuables += ({o->Name(WER,1)});
+         }
+       }
 
        // 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.":
-            ".")),
+         sprintf("%s murmelt %s etwas zu%s.",
+                 Name(WER,1),
+                 this_player()->name(WEM,1),
+                 (money || sizeof(valuables))?
+                   " 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)?"hast ja ein paar Wertsachen dabei: "+
-             CountUp(y)+
-             (sizeof(y)==1?" ist":" sind")+
-             " aus Gold.":"")):
-           ""));
+       // Und hier die Antwort an den Spieler selbst, mit diversen 
+       // Verzweigungen fuer dessen Besitztum.
+       string reply = "Ich hab kein Gold bei mir.";
+       string verb = sizeof(valuables) ? "ist" : "sind";
+       if ( money ) 
+       {
+         reply += " Aber Du hast ja jede Menge Kohle bei dir, so etwa "+
+                  money+" Muenzen.";
+         if ( sizeof(valuables) ) 
+           reply += sprintf(" Ausserdem %s auch noch %s aus Gold.",
+                      verb, CountUp(valuables));           
+       }
+       else if ( sizeof(valuables) )
+       {
+           reply += sprintf(
+             " Aber Du hast ja ein paar Wertsachen dabei: %s %s aus Gold.",
+             CountUp(valuables), verb);
+       }
+       return reply;
      }
 
      // "frage monster nach gold"
      // - der Fragesteller hoert zB:
-     //   Das Monster murmelt: Ich hab kein Gold bei mir. Aber du hast ja
-     //   Das Monster murmelt: jede Menge Kohle bei dir, so etwas <number>
+     //   Das Monster murmelt: Ich hab kein Gold bei mir. Aber Du hast ja
+     //   Das Monster murmelt: jede Menge Kohle bei Dir, so etwa <number>
      //   Das Monster murmelt: Muenzen. Ausserdem ist/sind noch <object1>
      //   Das Monster murmelt: und <object2> aus Gold."
      // - die Umstehenden hoeren: