diff --git a/doc/index b/doc/index
index b2693f9..6f84b1c 100644
--- a/doc/index
+++ b/doc/index
@@ -14,8 +14,8 @@
 Indices and tables
 ******************
 
-* *Index*
+* *Stichwortverzeichnis*
 
-* *Module Index*
+* *Modulindex*
 
-* *Search Page*
+* *Suche*
diff --git a/doc/lfun-liste b/doc/lfun-liste
index 6726844..125719e 100644
--- a/doc/lfun-liste
+++ b/doc/lfun-liste
@@ -60,8 +60,6 @@
 
 * AddResistanceModifier()
 
-* AddRoomCmd()
-
 * AddRoomMessage()
 
 * AddRoute()
@@ -238,6 +236,8 @@
 
 * GetReputations()
 
+* GetShopItems()
+
 * GetValue()
 
 * GetValueO()
@@ -252,6 +252,8 @@
 
 * GuardExit()
 
+* GuildName()
+
 * Halt()
 
 * HasMiniQuest()
@@ -298,6 +300,8 @@
 
 * IsEqual()
 
+* IsGuildMember()
+
 * IsPlayerCorpse()
 
 * IsRoom()
@@ -388,6 +392,8 @@
 
 * PreventMove()
 
+* PrintList()
+
 * Query()
 
 * QueryAllDoors()
@@ -788,6 +794,8 @@
 
 * lfun()
 
+* list()
+
 * locate_objects()
 
 * logon()
@@ -866,7 +874,9 @@
 
 * wield_me()
 
-* Verzeichnis der lfuns speziell in/für Gilden
+* Verzeichnis der lfuns speziell in/fuer Gilden
+
+* Verzeichnis der lfuns speziell in/fuer Spellbooks
 
 * Verzeichnis der lfuns in master()
 
diff --git a/doc/lfun.index b/doc/lfun.index
index 2018524..3d28c1b 100644
--- a/doc/lfun.index
+++ b/doc/lfun.index
@@ -13,7 +13,7 @@
 
 * Verzeichnis der dokumentierten lfuns
 
-* Verzeichnis der lfuns speziell in/für Gilden
+* Verzeichnis der lfuns speziell in/fuer Gilden
 
 * Verzeichnis der lfuns in master()
 
diff --git a/doc/lfun/AddExtraLook b/doc/lfun/AddExtraLook
index 7436f7e..279b496 100644
--- a/doc/lfun/AddExtraLook
+++ b/doc/lfun/AddExtraLook
@@ -2,9 +2,11 @@
 AddExtraLook()
 **************
 
-AddExtraLook() varargs int AddExtraLook(string look, [int duration,
-string key,
 
+FUNKTION
+========
+
+   varargs int AddExtraLook(string look, [int duration, string key,
    string lookende, object ob]);
 
 
@@ -14,117 +16,168 @@
    /std/living/description.c
 
 
+ARGUMENTE
+=========
+
+   string look:
+
+      * String, der in der Langbeschreibung des Lebewesens
+        zusaetzlich ausgegeben wird.
+
+      * zu rufender Funktionsname, wenn 'ob' angegeben ist
+
+   int duration:
+
+      * > 0: Dauer der Gueltigkeit des Extralooks in Sekunden.
+
+      * 0:   Unbegrenzt gueltiger Eintrag. Rebootfest.
+
+      * < 0: Bis Ende/Reboot bestehender Eintrag.
+
+   string key:
+      Schluesselwort, unter dem der Eintrag registriert wird und mit
+      dem man diesen auch mittels RemoveExtraLook() entfernen kann.
+      Sollte eindeutig sein! Ist 'key' nicht angeben, wird der
+      Objektname (object_name()) des setzenden Objekts benutzt.
+
+   string lookende:
+
+      * String, der an das Lebewesen (nur bei Spielern) ausgegeben
+        wird, wenn der eingetragene Extralook abgelaufen ist.
+
+      * zu rufender Funktionsname, wenn 'ob' angegeben ist
+
+   object ob:
+      Ein Objekt, an dem die in 'look' und 'lookende' abgelegten
+      Methoden bei Abfrage oder Ablauf aufgerufen werden. Die Methoden
+      bekommen das Living uebergeben und muessen selbst umgebrochene
+      Strings zurueckgeben.
+
+
 BESCHREIBUNG
 ============
 
    Der Extralook erscheint in der Langbeschreibung des Lebewesens.
-   Eintraege koennen mit dieser Funktion hinzugefuegt werden. Dies ist der
-   bevorzugte Weg, wenn ansonsten extra ein Objekt im Spielerinventar abgelegt
-   werden muesste.
 
+   Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet
+   werden. Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler
+   ablegt (wie zB eine Ruestung mit einem Extralook) (1), dann ist
+   diese Methode bevorzugt zu verwenden.
 
+   Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt
+   werden, dabei werden dann 'look' bzw. 'lookende' als Methoden am
+   Objekt gerufen. (1) Ein so fuer AddExtraLook verwendetes Objekt
+   'ob' muss nicht wie bisher ueblich im Inv des Spieler liegen!
 
-   Alle Parameter bis auf <look> sind optional.
-
-
-ARGUMENTE
-=========
-
-   - string look:
-     String, der in der Langbeschreibung des Lebewesens zusaetzlich ausgegeben
-     wird.
-     Kann auch ein Funktionsname sein, wenn <ob> angegeben wird (s.u.).
-   - int duration:
-     > 0: Wie lang bleibt der Extralook gueltig (in Sekunden)? Anschliessend
-          wird er automatisch geloescht.
-     0:   Dieser Eintrag bleibt unbegrenzt gueltig.
-     < 0: Dieser Eintrag bleibt bis zum Ende/Reboot bestehen.
-   - string key:
-     Schluesselwort, unter dem der Eintrag registriert wird und mit dem man ihn
-     auch mittels RemoveExtraLook() entfernen kann. Sollte natuerlich
-     moeglichst eindeutig sein. ;-) Wenn <key> nicht angeben wird, wird der
-     Objektname (object_name()) benutzt.
-   - string lookende:
-     String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, wenn der
-     eingetragene Extralook abgelaufen ist.
-     Kann auch ein Funktionsname sein, wenn <ob> angegeben wird.
-   - object ob:
-     Wenn hier ein Objekt angegeben wird, werden <look> und <lookende> als
-     Funktonsnamen aufgefasst. Diese Funktionen werden in <ob> aufgerufen, wenn
-     der Extralook des Lebewesen angezeigt wird bzw. der eingetragene Extralook
-     abgelaufen ist. Diese Funktionen bekommen das jeweilige Lebenwesen als
-     Objekt uebergeben. Sie muessen einen String zurueckliefern, der ausgegeben
-     wird. Dieser String wird direkt so ausgeben, also selber fuer Zeilenumbruch
-     etc. sorgen!
-     WICHTIG: Das Objekt sollte nach Moeglichkeit eine Blueprint sein, da das
-     ganze nix mehr ausgibt, sobald der Clone zerstoert wird, falls hier
-     einer angeben wird. Wenn ihr keine BP uebergebt: Wisst, was ihr tut. ;-)
-
-
-RUECKGABEWERTE
-==============
-
-   > 0, falls der Eintrag erfolgreich registriert wurde.
-   < 0 sonst.
-     -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
-     -2: <look> war kein gueltiger String.
-     -3: <duration> war kein Integer.
-     -4: unter <key> gibt es schon einen Eintrag.
+   Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen)
+   werden durch replace_personal() gefiltert und unter Beibehaltung
+   existierender Umbrueche auf 78 Zeichen umgebrochen.
 
 
 BEMERKUNGEN
 ===========
 
-   Die Strings <look> und <lookende> werden vor Ausgabe durch
-   replace_personal() geschickt, daher ist die Verwendung von @WER1, @WESSEN1
-   usw. moeglich (s. replace_personal). Dies gilt aber _nicht_ fuer den Fall,
-   dass die entsprechenden Funktionen in <ob> gerufen werden, dann muessen die
-   Funktionen selber umbrechen, etc.
-   Nach replace_personal() werden die Strings noch von break_string() auf 78
-   Zeilen umgebrochen, allerdings bleiben dabei vorhandene Umbrueche erhalten.
-   Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
-   Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit aufgerufen
-   wird.
+   * Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt,
+     wenn der Extralook der Lebewesen das erste Mal nach Ablauf der
+     Gueltigkeit aufgerufen wird.
+
+   * Das uebergbene Objekt sollte fuer permanente Eintraege eine
+     Blueprint sein, da Clones irgendwann (spaetestens mit Reboot)
+     zerstoert werden und der Eintrag dann bei Abfrage automatisch
+     geloescht wird.
+
+   * Folgerung: Clone-Objekte koennen fuer selbst beschraenkt
+     temporaere Extralooks benutzt werden.
+
+
+RUECKGABEWERTE
+==============
+
+   Siehe auch /sys/living/description.h fuer Konstanten.
+
+   * 1, falls der Eintrag erfolgreich registriert wurde.
+
+   * < 0 sonst.
+
+     * -1: <key> war nicht gueltig und es konnte keiner ermittelt
+       werden.
+
+     * -2: <look> war kein gueltiger String.
+
+     * -3: <duration> war kein Integer.
+
+     * -4: unter <key> gibt es schon einen Eintrag.
 
 
 BEISPIELE
 =========
 
-   # einfacher Eintrag, "fuer die Ewigkeit"
+   // (1) einfacher Eintrag, "fuer die Ewigkeit"
    living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
 
-   # Eintrag der nach 1h automatisch weg ist.
+   // (2) Eintrag der nach 1h automatisch weg ist.
    living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
 
-
-
-   # Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann.
+   // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann
    living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
                         "humni_marmeladen_look");
 
-
-
-   # Mit "Ende"-Meldung, aber kein eigener Schluessel.
+   // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel
    living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
                         "Du bist endlich wieder trocken. Puuh.");
 
+   // (5) Mit Objekt, welches den Extralook dynamisch erzeugt
+   living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
+                        this_object());
+   // In diesem Fall muss this_object() natuerlich die Funktion
+   // "get_my_special_extralook()" definieren, die einen String zurueckgibt
 
-
-   # Mit Objekt, was den Extralook dynamisch erzeugt
-   living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, this_object());
-     In diesem Fall muss this_object() natuerlich die Funktion
-     "get_my_special_extralook()" definieren, die einen String zurueckgibt.
-
-   # Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
+   // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
+   // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
+   // rebootfest.
    living->AddExtraLook("get_my_special_extralook", 3600, 0,
-                        "extralookende", this_object());
+                        "extralookende", blueprint(this_object()));
+
+   // Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
+   // und keine festgelegte Existenzdauer hat, sondern sich aufgrund
+   // eigener Konditionen entsorgt
+   void set_extra_look(object living) {
+     object dyntemplook = clone_object("/path/to/some/object");
+     if(living->AddExtraLook("get_my_special_extralook", 0,
+                             object_name(dyntemplook),
+                             0, dyntemplook) == XL_OK)
+       dyntemplook->SetProp(P_INTERNAL_EXTRA_LOOK, living);
+     else
+       dyntemplook->remove();
+   }
+
+   // entsprechendes Objekt:
+   varargs int remove(int silent) {
+     object ob = QueryProp(P_INTERNAL_EXTRA_LOOK);
+     // wenn der Spieler da ist, entfernen wir den Look regulaer
+     if(objectp(ob))
+       ob->RemoveExtraLook(object_name(this_object()));
+     return ::remove(silent);
+   }
+
+   void reset() {
+     if(!random(10))
+       remove();
+     else
+       ::reset();
+   }
 
 
 SIEHE AUCH
 ==========
 
-   RemoveExtraLook(),
-   replace_personal(), break_string()
-   P_INTERNAL_EXTRA_LOOK
+   Verwandt:
+      *RemoveExtraLook()*, *P_INTERNAL_EXTRA_LOOK*
 
-14.05.2007, Zesstra
+   Sonstiges:
+      *replace_personal()*, *break_string()*
+
+   Fuer Spielerobjekte:
+      *P_EXTRA_LOOK*
+
+5. Juni 2017 Gloinson
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
diff --git a/doc/lfun/AddRoomMessage b/doc/lfun/AddRoomMessage
index aa700c1..7d33a52 100644
--- a/doc/lfun/AddRoomMessage
+++ b/doc/lfun/AddRoomMessage
@@ -6,7 +6,7 @@
 FUNKTION
 ========
 
-   void AddRoomMessage(string *msg, int time, mixed *func);
+   void AddRoomMessage(string* msg, int time, mixed* func);
 
 
 DEFINIERT IN
@@ -18,67 +18,80 @@
 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
+   string* msg
+      Array von Strings mit den Meldungen.
+
+   int time
+      Der Abstand zwischen zwei Meldungen in Sekunden.
+
+   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.
+   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!
+   Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert,
+   sollte 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.
-   * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
-     ueberschreibt alle vorherigen Werte
-   * THIS_PLAYER() NICHT VERWENDEN!
+   * 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!
+
+   * 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:
+   // 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) {
@@ -88,16 +101,60 @@
    }
 
    // 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
    }
 
+   // 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 verstummen "
+       "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(), *send_room()*, *ReceiveMsg()*
 
-2.Feb 2016 Gloinson
+   Props:
+      *P_MSG_PROB*, *P_FUNC_MSG*, *P_ROOM_MSG*
+
+28. Mar 2016 Gloinson
diff --git a/doc/lfun/Defend b/doc/lfun/Defend
index aa53945..3e40cfc 100644
--- a/doc/lfun/Defend
+++ b/doc/lfun/Defend
@@ -6,8 +6,9 @@
 FUNKTION
 ========
 
-   public int Defend(int dam, string|string* dam_type, int|mapping spell,
-                      object enemy)
+   public int Defend(int dam, string|string* dam_type, int|mapping
+   spell,
+      object enemy)
 
 
 DEFINIERT IN
@@ -19,120 +20,139 @@
 ARGUMENTE
 =========
 
-   int dam                  initiale Staerke des Angriffs (10 dam ~ 1 HP)
-   string* dam_type         Art(en) des Schadens, der angerichtet werden
-                            soll
-                            Muss ein Array von Schadenstypen sein,
-                            alte Objekte uebergeben hier manchmal strings.
-   int/mapping spell        - 0 fuer normale Angriffe (keine Zauber)
-                            - 1 fuer Zauber (Standardruestungen ignorieren)
-                            - mapping fuer mehr Informationen
-                            Heute bitte nach Moeglichkeit ein Mapping
-                            uebergeben.
-   object enemy             der Feind/Schadenverursacher
+   int dam
+      Initiale Staerke des Angriffs (10 dam ~ 1 HP)
+
+   string* dam_type
+      Art des Schadens, der angerichtet werden soll Muss ein Array von
+      Schadenstypen sein, alte Objekte uebergeben hier manchmal
+      strings.
+
+   mapping spell
+      Mapping mit zusaetzlichen Informationen zum Angriff(Siehe unten)
+      Alte Objekte uebergeben manchmal einen Integer (0 fuer
+      Physikalischen Angriff, 1 fuer Zauber.
+
+   object enemy
+      Der Feind/Schadenverursacher
 
 
 BESCHREIBUNG
 ============
 
    1. Generell
-   Wenn das Lebewesen angegriffen wird, wird geprueft, wie stark die
-   Ruestungen und koerpereigenen Abwehrkraefte sind und die Staerke des
-   Schadens dementsprechend vermindert.
-   Ggf. wird der Schaden zugefuegt und der Feind in  die Liste der Feinde
-   aufgenommen. Der Schaden betraegt:
-    (dam-Summe(Ruestungsstaerken)-random(P_BODY+A_DEX))*CheckResistance/10
-   aber nicht unter 0.
+
+      Wenn das Lebewesen angegriffen wird, wird geprueft, wie stark
+      die Ruestungen und koerpereigenen Abwehrkraefte sind und die
+      Staerke des Schadens dementsprechend vermindert. Ggf. wird der
+      Schaden zugefuegt und der Feind in  die Liste der Feinde
+      aufgenommen. Der Schaden betraegt: (dam-Summe(Ruestungsstaerken
+      )-random(P_BODY+A_DEX))*CheckResistance/10 aber nicht unter 0.
 
    2. Der Parameter 'spell'
-   Ist 'spell' 0, dann gilt der Angriff als normale physische Attacke
-   Uebergibt man als 'spell'-Parameter ein Mapping, so gibt es dafuer
-   diverse Flags, die das Ergebnis manipulieren (in new_skills.h
-   enthalten). Nichtangabe eines Flags gilt als 0.
 
-   - SP_PHYSICAL_ATTACK ---------- 0/1
-              1, wenn Ruestungen wirken sollen, 0 sonst
-              -> entspricht !spell, wenn dieses Int ist
-   - SP_NO_ENEMY ----------------- 0/1
-              1, falls der Angriff nicht toedlich ist, es also keinen echten
-              Gegner gibt
-              -> es wird dann reduce_hit_points() gerufen statt do_damage()
-   - SP_NO_ACTIVE_DEFENSE -------- 0/1
-              1, falls aktive Abwehren (wie zurueckschlagende Amulette,
-              Karateabwehren oder Ausweichmanoever) unterbleiben sollen
-              -> zB bei Kratzen durch Dornen oder Fall aus grosser Hoehe
-                 ist aktive Abwehr oder Ausweichen unlogisch
-   - SP_RECURSIVE ---------------- 0/1
-              1, falls der Spell aus einem Defend gerufen wurde (oder einer
-              DefendFunc)
-              -> verhindert Rekursionsprobleme
-   - SP_NAME --------------------- string
-              Name des Spells
-   - SP_REDUCE_ARMOUR ------------ Mapping: keys AT_X/P_BODY, values int>=0
-              Die Schutzwirkung durch P_AC/Magie einer Ruestung wird
-              typabhaengig reduziert. Aufbau eines Mappings im Beispiel:
-              ([AT_BOOTS: 0,  // Stiefel schuetzen gar nicht
-                P_BODY:  50,  // Koerper zu 50%
-                AT_BELT: 600  // Guertel zu 600%
-              ])
-              -> alle 'fehlenden' Eintraege wirken normal
-   - SP_SHOW_DAMAGE -------------- 0/1 oder Array von Arrays
-              0, fuer keine Treffermeldung, 1 sonst
-              In einem Array koennen Ersatz-Treffermeldungen definiert
-              werden. Format ist:
+      Ist 'spell' 0, dann gilt der Angriff als normale physische
+      Attacke Uebergibt man als 'spell'-Parameter ein Mapping, so gibt
+      es dafuer diverse Flags, die das Ergebnis manipulieren (in
+      new_skills.h enthalten). Nichtangabe eines Flags gilt als 0.
+
+      * SP_PHYSICAL_ATTACK ---------- 0/1 1, wenn Ruestungen wirken
+        sollen, 0 sonst -> entspricht !spell, wenn dieses Int ist
+
+      * SP_NO_ENEMY ----------------- 0/1 1, falls der Angriff nicht
+        toedlich ist, es also keinen echten Gegner gibt -> es wird
+        dann reduce_hit_points() gerufen statt do_damage()
+
+      * SP_NO_ACTIVE_DEFENSE -------- 0/1 1, falls aktive Abwehren
+        (wie zurueckschlagende Amulette, Karateabwehren oder
+        Ausweichmanoever) unterbleiben sollen -> zB bei Kratzen durch
+        Dornen oder Fall aus grosser Hoehe ist aktive Abwehr oder
+        Ausweichen unlogisch
+
+      * SP_RECURSIVE ---------------- 0/1 1, falls der Spell aus
+        einem Defend gerufen wurde (oder einer DefendFunc) ->
+        verhindert Rekursionsprobleme
+
+      * SP_NAME --------------------- string Name des Spells
+
+      * SP_GLOBAL_ATTACK ------------ 0/1 1 bei Flaechenspells
+
+      * SP_REDUCE_ARMOUR ------------ Mapping: keys AT_X/P_BODY,
+        values int>=0 Die Schutzwirkung durch P_AC/Magie einer
+        Ruestung wird typabhaengig reduziert. Aufbau eines Mappings im
+        Beispiel:
+
+           ([AT_BOOTS: 0,  // Stiefel schuetzen gar nicht P_BODY:  50,
+           // Koerper zu 50% AT_BELT: 600  // Guertel zu 600% ])
+
+        -> alle 'fehlenden' Eintraege wirken normal
+
+      * SP_SHOW_DAMAGE -------------- 0/1 oder Array von Arrays 0,
+        fuer keine Treffermeldung, 1 sonst In einem Array koennen
+        Ersatz-Treffermeldungen definiert werden. Format ist:
+
               ({
-               ({ int lphit1, string mess_me,
-                              string mess_en,
-                              string mess_room }),
-               ({ lphit2, mess_me, mess_en, mess_room }),
-               ...
-               ({ lphitn, mess_me, mess_en, mess_room }),
-              })
-              wobei lphit1<lphit2<...<lphitn sein muss, d.h. das Array-
-              Array aufsteigend sortiert.
 
-              Ist ein Treffer x LP hart, werden die Meldungen des lphit-
-              Arrays ausgegeben, dessen Wert am naehesten unter dem Schaden
-              liegt.
+           ({ int lphit1, string mess_me, string mess_en, string
+           mess_room }), ({ lphit2, mess_me, mess_en, mess_room }),
+           ... ({ lphitn, mess_me, mess_en, mess_room }), }) wobei
+           lphit1<lphit2<...<lphitn sein muss, d.h. das Array-Array
+           aufsteigend sortiert.
 
-              In den Meldungen mess_me (an den Getroffenen), mess_en (an
-              den Feind), mess_room (an die restlichen Umstehenden) koennen
-              Ersatzstrings wie folgt verwendet werden:
-              @WER1/@WESSEN1/@WEM1/@WEN1 - name(casus) des Getroffenen (TO)
-              @WER2/@WESSEN2/@WEM2/@WEN2 - name(casus) des Feindes (enemy)
-   - EINFO_DEFEND ------------ Mapping
-              Dieses Mapping liefert erweiterte Informationen zu dem
-              bisherigen Ablauf des aktiven Attacks.
-              Die verfuegbaren Informationen sind in der Manpage zu
-              DefendInfo festgehalten.
+        Ist ein Treffer x LP hart, werden die Meldungen des lphit-
+        Arrays ausgegeben, dessen Wert am naehesten unter dem Schaden
+        liegt.
+
+        In den Meldungen mess_me (an den Getroffenen), mess_en (an den
+        Feind), mess_room (an die restlichen Umstehenden) koennen
+        Ersatzstrings wie folgt verwendet werden:
+
+           @WER1/@WESSEN1/@WEM1/@WEN1 - name(casus) des Getroffenen
+           (TO) @WER2/@WESSEN2/@WEM2/@WEN2 - name(casus) des Feindes
+           (enemy)
+
+      * EINFO_DEFEND ------------ Mapping Dieses Mapping liefert
+        erweiterte Informationen zu dem bisherigen Ablauf des aktiven
+        Attacks. Die verfuegbaren Informationen sind in der Manpage zu
+        DefendInfo festgehalten.
 
    3. Reihenfolgen in Defend
-   - das Living wird angegriffen, wenn
-     - P_NO_ATTACK != 0
-     - 'enemy' existiert und kein netztoter Spieler ist
-   - P_DEFENDERS werden durchgegangen (und eventuell benachrichtigt)
-   - P_TMP_ATTACK_HOOK wird abgefragt
-   - die Ruestungen werden vom Schaden gegebenenfalls abgezogen
-   - magischer Ausweichskill beruecksichtigt
-   - sensitive Objekte werden ggf. benachrichtigt
-   - InternalModifyDefend wird gerufen
-   - Koerperabwehr abgezogen
-   - der Schaden an do_damage()/reduce_hit_points() uebergeben
-   - Flucht ueberpruefen mit CheckWimpyAndFlee()
+
+      * das Living wird angegriffen, wenn - P_NO_ATTACK != 0 -
+        'enemy' existiert und kein netztoter Spieler ist
+
+      * P_DEFENDERS werden durchgegangen (und eventuell
+        benachrichtigt)
+
+      * P_TMP_ATTACK_HOOK wird abgefragt
+
+      * die Ruestungen werden vom Schaden gegebenenfalls abgezogen
+
+      * magischer Ausweichskill beruecksichtigt
+
+      * sensitive Objekte werden ggf. benachrichtigt
+
+      * InternalModifyDefend wird gerufen
+
+      * Koerperabwehr abgezogen
+
+      * der Schaden an do_damage()/reduce_hit_points() uebergeben
+
+      * Flucht ueberpruefen mit CheckWimpyAndFlee()
 
 
 BEMERKUNGEN
 ===========
 
-   Ruestungen wirken konventionell nur, wenn mindestens ein Schadensanteil
-   mechanisch ist und es kein Spell oder ein Spell mit SP_PHYSICAL_ATTACK
-   auf 1 ist.
+   Ruestungen wirken konventionell nur, wenn mindestens ein
+   Schadensanteil mechanisch ist und es kein Spell oder ein Spell mit
+   SP_PHYSICAL_ATTACK auf 1 ist.
 
-   Defend() beruecksichtigt magische Verteidigungen, die der Spieler bei
-   sich hat, sollte also aus Fairness gegenueber den Objekten anderer
-   Magier immer dem direkten reduce_hit_points() oder do_damage()
-   vorgezogen werden. Mittels der Flags in 'spell' kann man sehr viel
-   aendern.
+   Defend() beruecksichtigt magische Verteidigungen, die der Spieler
+   bei sich hat, sollte also aus Fairness gegenueber den Objekten
+   anderer Magier immer dem direkten reduce_hit_points() oder
+   do_damage() vorgezogen werden. Mittels der Flags in 'spell' kann
+   man sehr viel aendern.
 
 
 RUECKGABEWERT
@@ -142,11 +162,11 @@
    Lebenspunkte des Lebewesens.
 
 BEISPIELE (SIEHE AUCH Defend_bsp):
-   // ein simpler Angriff: enem->Defend(100, ({DT_BLUDGEON}), 0,
-   this_object());
+   // ein simpler Angriff: enem->Defend(100, ({DT_BLUDGEON}),
+   ([SP_PHYSICAL_ATTACK:1]), this_object());
 
    // ein magischer Angriff (ohne Treffermeldung): enem->Defend(100,
-   ({DT_BLUDGEON, DT_FIRE}), 1, this_object());
+   ({DT_BLUDGEON, DT_FIRE}), ([SP_PHYSICAL_ATTACK:0]), this_object());
 
    // ein magischer Angriff mit Treffermeldung: enem->Defend(100,
    ({DT_BLUDGEON, DT_FIRE}), ([SP_SHOW_DAMAGE:1]),
@@ -157,19 +177,23 @@
 SIEHE AUCH
 ==========
 
-   Angriff:   Attack(L), P_NO_ATTACK, InsertEnemy(L)
-   Schaden:   P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE,
-              do_damage(L), reduce_hit_points(L)
-   Schutz:    P_DEFENDERS, InformDefend(L), DefendOther(L)
-              P_ARMOURS, P_AC, P_DEFEND_FUNC, QueryDefend(L)
-              P_BODY, A_DEX
-   Daten:     P_LAST_COMBAT_TIME
-              P_LAST_DAMTYPES, P_LAST_DAMTIME, P_LAST_DAMAGE
-              P_DAMAGE_MSG
-   Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance(L)
-   Sonstiges: CheckSensitiveAttack(L)
-              InternalModifyDefend(L)
-              UseSkill(L),
-              DefendInfo
+   Angriff: *Attack()*, *P_NO_ATTACK*, *InsertEnemy()* Schaden:
+   *P_ENABLE_IN_ATTACK_OUT*,
 
-15.09.2010, Zesstra
+      *P_LAST_MOVE*, *do_damage()*, *reduce_hit_points()*
+
+   Schutz:    *P_DEFENDERS*, *InformDefend()*,
+      *DefendOther()*, *P_ARMOURS*, *P_AC*, *P_DEFEND_FUNC*,
+      *QueryDefend()*, *P_BODY*
+
+   Daten:     *P_LAST_COMBAT_TIME*,
+      *P_LAST_DAMTYPES*, *P_LAST_DAMTIME*, *P_LAST_DAMAGE*,
+      *P_DAMAGE_MSG*
+
+   Resistenz: *P_RESISTANCE_STRENGTHS*,
+      *CheckResistance()*
+
+   Sonstiges: *CheckSensitiveAttack()*,
+      *InternalModifyDefend()*, *UseSkill()*, *DefendInfo()*
+
+Letzte Aenderung: 29.12.2017, Bugfix
diff --git a/doc/lfun/DefendFunc b/doc/lfun/DefendFunc
index 1683b3f..a544cc2 100644
--- a/doc/lfun/DefendFunc
+++ b/doc/lfun/DefendFunc
@@ -3,43 +3,39 @@
 ************
 
 
-DefendFunc(L)
-=============
-
-
 FUNKTION
 ========
 
-   int DefendFunc(string|string *dtyp, int|mappingspell, object enemy);
+   public int DefendFunc(string* dtyp, mapping spell, object enemy);
 
 
 DEFINIERT IN
 ============
 
-   eigenen Objekten; fuer /std/armour/combat.c
+   Eigenen Objekten; fuer /std/armour/combat.c
 
 
 ARGUMENTE
 =========
 
    dtyp
-        Schadenstypen der Angriffsart.
-        Sollte heute ein string* sein.
+      Schadenstypen der Angriffsart.
+
    spell
-        0 bei veralteten konventionellen Angriffen im Regelfall jedoch
-        ein Mapping mit weiteren Infos.
-        Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich
-        1.
+      Ein Mapping mit weiteren Infos. Bei einem konventionellen
+      Angriff ist spell[SP_PHYSICAL_ATTACK] gleich 1.
+
    enemy
-        Der angreifende Gegner
+      Der angreifende Gegner
 
 
 BESCHREIBUNG
 ============
 
-   Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
-   auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
-   Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
+   Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus
+   (oder auch ein Ruestungsmalus) errechnet werden, der zu dem
+   normalen Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert
+   wird.
 
 
 RUeCKGABEWERT
@@ -54,8 +50,9 @@
    Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
    zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
    dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
-   Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen
-   die DefendFuncs nicht konstant wirken.
+   Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen die
+   DefendFuncs nicht konstant wirken. Ausserdem sind solche Ruestungen
+   immer genehmigungspflichtig.
 
    Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
    SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
@@ -64,44 +61,46 @@
 BEISPIELE
 =========
 
-   Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
-   und bei Angriffen durch Geister geschwaecht wird:
+   Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke
+   entfaltet und bei Angriffen durch Geister geschwaecht wird:
 
-   void create()
-   {
-     ::create();
+   protected void create() {
 
-     SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
-     SetProp(P_AC, 20);
-     ...
-     // Die DefendFunc() ist in der Ruestung selbst definiert
-     SetProp(P_DEFEND_FUNC, this_object());
+      ::create();
+
+      SetProp(P_ARMOUR_TYPE, AT_ARMOUR); SetProp(P_AC, 20); ... // Die
+      DefendFunc() ist in der Ruestung selbst definiert
+      SetProp(P_DEFEND_FUNC, this_object());
+
    }
 
-   int DefendFunc(string *dtyp, mixed spell, object enemy)
-   {
-     int prot;
+   public int DefendFunc(string* dtyp, mapping spell, object enemy) {
 
-     // Zuerst fragen wir den Angriff durch Feuer ab:
-     if (member(dtyp, DT_FIRE) >= 0)  // Feuer gehoert zu den Schadenstypen
-       prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
-                              // kommt man also maximal auf 14+20 = 34,
-                              // liegt also unter der fuer AT_ARMOUR
-                              // geltenden Obergrenze
+      int prot;
 
-     // Und jetzt der Geistertest
-     if (enemy->QueryProp(P_RACE) == "Geist" ||
-         enemy->is_class_member(CL_GHOST))
-       prot -= random(10);
+      // Zuerst fragen wir den Angriff durch Feuer ab: if
+      (member(dtyp, DT_FIRE) >= 0)  // Feuer gehoert zu den
+      Schadenstypen
 
-     // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen
-     return prot;
+         prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit
+         P_AC
+            // kommt man also maximal auf 14+20 = 34, // liegt also
+            unter der fuer AT_ARMOUR // geltenden Obergrenze
+
+      // Und jetzt der Geistertest if (enemy->QueryProp(P_RACE) ==
+      "Geist" ||
+
+            enemy->is_class_member(CL_GHOST))
+
+         prot -= random(10);
+
+      // Der Rueckgabewert wird auf den aus P_AC errechneten Wert
+      draufgeschlagen return prot;
+
    }
 
 
 SIEHE AUCH
 ==========
 
-   P_DEFEND_FUNC, QueryDefend(), /std/armour/combat.c
-
-Last modified: 18.Jul 2006 Muadib
+   *P_DEFEND_FUNC*, "QueryDefendd" /std/armour/combat.c
diff --git a/doc/lfun/GetShopItems b/doc/lfun/GetShopItems
new file mode 100644
index 0000000..9c7f28d
--- /dev/null
+++ b/doc/lfun/GetShopItems
@@ -0,0 +1,40 @@
+
+GetShopItems()
+**************
+
+
+FUNKTION
+========
+
+   protected object* GetShopItems()
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+BESCHREIBUNG
+============
+
+   Erstellt ein Array mit den zum Verkauf stehenden Objekten.
+
+
+BEMERKUNG
+=========
+
+   Enthaelt nur jeweils einen Clone von jeder Blueprint.
+
+
+RUECKGABEWERTE
+==============
+
+   Object-Array mit zuerst den Objekten im Store und anschliessend den
+   fixed-Objects.
+
+
+SIEHE AUCH
+==========
+
+   *PrintList()*
diff --git a/doc/lfun/GuildName b/doc/lfun/GuildName
new file mode 100644
index 0000000..4a4dbdf
--- /dev/null
+++ b/doc/lfun/GuildName
@@ -0,0 +1,37 @@
+
+GuildName()
+***********
+
+
+FUNKTION
+========
+
+   string GuildName()
+
+
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+RUeCKGABEWERT
+=============
+
+   string mit Gildennamen
+
+
+BESCHREIBUNG
+============
+
+   Gibt Gildennamen (genauer: object_name ohne "/gilden/") zurueck.
+
+
+SIEHE AUCH
+==========
+
+   Verwandt:
+      *GuildName()*
+
+   Props:
+      *P_GUILD*
diff --git a/doc/lfun/InternalModifyDefend b/doc/lfun/InternalModifyDefend
index 3015534..3762c07 100644
--- a/doc/lfun/InternalModifyDefend
+++ b/doc/lfun/InternalModifyDefend
@@ -10,8 +10,8 @@
 FUNKTION
 ========
 
-   protected void InternalModifyDefend(int dam, mixed dt, mixed spell,
-                                    object enemy)
+   protected void InternalModifyDefend(int dam, string* dt, mapping
+   spell, object enemy)
 
 
 DEFINIERT IN
@@ -23,28 +23,31 @@
 ARGUMENTE
 =========
 
-   int dam             Staerke des abzuwehrenden Angriffs (in HP/10)
-   string/string* dt   Art(en) des Schadens, der angerichtet werden soll
-   int/mapping spell   0 fuer normale Angriffe (keine Zauber)
-                       1 fuer Zauber (Standardruestungen ignorieren)
-                       mapping fuer mehr Informationen
-   object enemy        der Feind/Schadenverursacher
+   int dam
+      Staerke des abzuwehrenden Angriffs (in HP/10)
+
+   string* dt
+      Art(en) des Schadens, der angerichtet werden soll
+
+   mapping spell
+      Mapping mit zusaetzlichen Informationen ueber den Angriff
+
+   object enemy
+      der Feind/Schadenverursacher
 
 
 BESCHREIBUNG
 ============
 
    Dient dazu noch Aenderungen am Verhalten der Defend() vornehmen zu
-   koennen. Die Parameter werden alle per Referenz uebergeben, Aenderungen
-   wirken also direkt in der Defend()!
-   Einfach ueberschreiben, aber ::InternalModifyDefend(&..., &....) nicht
-   vergessen!
+   koennen. Die Parameter werden alle per Referenz uebergeben,
+   Aenderungen wirken also direkt im Defend()!
+
+   Einfach ueberschreiben, aber ::InternalModifyDefend(&..., &....)
+   nicht vergessen!
 
 
 SIEHE AUCH
 ==========
 
-   InternalModifyAttack(L)
-   Defend(L)
-
-28.03.2008, Zesstra
+   *InternalModifyAttack()* *Defend()*
diff --git a/doc/lfun/IsGuildMember b/doc/lfun/IsGuildMember
new file mode 100644
index 0000000..bc29366
--- /dev/null
+++ b/doc/lfun/IsGuildMember
@@ -0,0 +1,67 @@
+
+IsGuildMember()
+***************
+
+
+FUNKTION
+========
+
+   varargs int IsGuildMember(object pl)
+
+
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+RUeCKGABEWERT
+=============
+
+   1
+      wenn Gildenmitglied
+
+   0
+      sonst
+
+
+BESCHREIBUNG
+============
+
+   Gibt 1 zurueck, wenn der Spieler Gildenmitglied ist, d.h. P_GUILD
+   entsprechend den Gildennamen gesetzt ist. Weitere Pruefungen auf
+   Properties oder Skills werden nicht vorgenommen.
+
+   Kann fuer Spieleraktionen im Gildenraum benutzt werden. Setzt
+   bereits ein _notify_fail() fuer Nichtgildenmitglieder.
+
+
+BEISPIEL
+========
+
+   protected int clown_weihe(string str)
+   {
+     if(IsGuildMember()) {
+       tortenweihe+=getuid(this_player());
+       this_player()->ReceiveMsg(
+         "Du kniest nieder und empfaengt die Torte des Meisterclown.",
+         MT_NOTIFICATION);
+       send_room(
+         this_object(),
+         this_player()->Name()+" kniet nieder und wird wuerdig getortet.",
+         MT_LOOK|MT_LISTEN,
+         MA_EMOTE, 0, ({this_player()}));
+       return 1;
+     }
+     return 0;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Verwandt:
+      *GuildName()*
+
+   Props:
+      *P_GUILD*
diff --git a/doc/lfun/PreventFollow b/doc/lfun/PreventFollow
index c3de6b1..fcfc2a6 100644
--- a/doc/lfun/PreventFollow
+++ b/doc/lfun/PreventFollow
@@ -12,61 +12,50 @@
 ARGUMENTE
 =========
 
-   dest: Zielobjekt, in das der Verfolgte bewegt werden soll.
+   dest:
+      Zielobjekt, in das der Verfolgte bewegt werden soll.
 
 
 FUNKTION
 ========
 
    In jedem Verfolger, der mit AddPursuer in die Liste der Verfolger
-   eingetragen wurde, wird vor dem Bewegen in das Zielobjekt die Funktion
-   PreventFollow mit dem Zielobjekt als Argument aufgerufen.
+   eingetragen wurde, wird vor dem Bewegen in das Zielobjekt die
+   Funktion PreventFollow mit dem Zielobjekt als Argument aufgerufen.
 
 
 RUECKGABEWERT
 =============
 
-   0: Verfolger darf in das Zielobjekt folgen
-   1: Verfolger darf in dieses Zielobjekt nicht folgen
-      (Verfolgung bleibt weiterhin aktiv)
-   2: Verfolger darf in dieses Zielobjekt nicht folgen
-      (Verfolgung wird abgebrochen und Verfolger aus der Verfolgerliste
-       ausgetragen)
+   0:
+      Verfolger darf in das Zielobjekt folgen
 
+   1:
+      Verfolger darf in dieses Zielobjekt nicht folgen (Verfolgung
+      bleibt weiterhin aktiv)
 
-BEMERKUNG
-=========
-
-   Durch PreventFollow kann der raeumliche Bereich, in dem verfolgt werden
-   darf, eingeschraenkt werden.
+   2:
+      Verfolger darf in dieses Zielobjekt nicht folgen (Verfolgung
+      wird abgebrochen und Verfolger aus der Verfolgerliste
+      ausgetragen)
 
 
 BEISPIELE
 =========
 
-   Man moechte, dass ein NPC auf einer Insel nicht mit dem Spieler in das
-   Boot steigt, um mit dem Spieler zusammen von der Insel herunterzukommen.
+   Man moechte, dass nur dann verfolgt wird, wenn das Ziel im gleichen
+   Gebiet liegt, wie man selber (wenn __PATH__(1) das
+   Gebietsverzeichnis ist):
 
-   #define PATH(x) ("/d/.../.../mein/pfad/+(x)")
+   int PreventFollow(object ziel) {
 
-   ...
+      if (strstr(load_name(ziel), __PATH__(1)) != 0)
+         return 1;
 
-   int PreventFollow(object boot)
-    {
-     if ( object_name(boot)[0..strlen(PATH("boot"))-1] == PATH("boot") )
-      return 1;
-    }
-
-   Diese Funktions-Definition ist sehr flexibel, denn sie erlaubt sowohl
-   spaetere Pfadanpassung als auch mehrere Boote.
-   Da ueber die Funktion strlen() nur bis zum letzten Buchstaben des
-   angegebenen Strings getestet wird, wird also gleichzeitig auch auf
-   boot[1], boot[2] usw. getestet.
+   }
 
 
 SIEHE AUCH
 ==========
 
-   "AddPursuer", "RemovePursuer"
-
-Last modified: Tue Jun 10 13:59:30 2003 by Gabylon
+   * *AddPursuer()*, *RemovePursuer()*
diff --git a/doc/lfun/PrintList b/doc/lfun/PrintList
new file mode 100644
index 0000000..18be079
--- /dev/null
+++ b/doc/lfun/PrintList
@@ -0,0 +1,57 @@
+
+PrintList()
+***********
+
+
+FUNKTION
+========
+
+   varargs protected int PrintList(string filter_fun, int liststyle)
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   string filter_fun:
+      Bestimmt welche Art von Items angezeigt werden sollen (z.B. nur
+      Waffen).
+
+   int liststyle:
+      Angabe zur Formatierung. - 1: Einspaltige Ausgabe mit mehr
+      Zeichen fuer den Namen. - 0: Die Standardausgabe mit zwei
+      Spalten.
+
+
+BESCHREIBUNG
+============
+
+   Erstellt anhand der Parameter und dem Rueckgabewert von
+   GetShopItems() die Ausgabe der zu verkaufenden Gegenstaende fuer
+   den Spieler.
+
+
+RUECKGABEWERTE
+==============
+
+   Immer 1.
+
+
+BEMERKUNGEN
+===========
+
+   filter_fun bekommt als Argument ein Objekt uebergeben und muss
+   einen Wert !=0 zurueckgeben, wenn das Objekt in die Ausgabe
+   aufgenommen werden soll. Es funktionieren alle Datentypen, es
+   empfiehlt sich aber ein Integer von 1 fuer true.
+
+
+SIEHE AUCH
+==========
+
+   *GetShopItems()*
diff --git a/doc/lfun/RemoveExtraLook b/doc/lfun/RemoveExtraLook
index 0369992..1bcde43 100644
--- a/doc/lfun/RemoveExtraLook
+++ b/doc/lfun/RemoveExtraLook
@@ -2,11 +2,11 @@
 RemoveExtraLook()
 *****************
 
-RemoveExtraLook()
 
+FUNKTION
+========
 
-int RemoveExtraLook(string look);
-=================================
+int RemoveExtraLook(string key);
 
 
 DEFINIERT IN
@@ -15,51 +15,78 @@
    /std/living/description.c
 
 
+ARGUMENTE
+=========
+
+   * string key: Schluessel, unter dem der Extralook registriert
+     wurde ODER Objektname des registrierenden Objektes
+
+
 BESCHREIBUNG
 ============
 
    Der Extralook erscheint in der Langbeschreibung des Lebewesens.
-   Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt werden.
 
-
-ARGUMENTE
-=========
-
-   - string look:
-     Schluesselwort, unter dem der Eintrag, den man entfernen moechte, von
-     AddExtraLook() registriert wurde.
-
-
-RUECKGABEWERTE
-==============
-
-   > 0, falls der Eintrag erfolgreich entfernt wurde.
-   < 0 sonst.
-     -1: keinen (gueltigen) <key> uebergeben.
-     -2: kein Eintrag fuer <key> gefunden.
+   Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt
+   werden. Dazu wird entweder der selbst festgelegte Schluessel oder
+   der implizite Schluessel *object_name()* des setzenden Objekts
+   benoetigt.
 
 
 BEMERKUNGEN
 ===========
 
-   Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
-   Eintrages nicht ausgegeben.
+   Beim Entfernen mit dieser Funktion wird die "Endemeldung" des
+   entfernten Eintrages nicht ausgegeben.
+
+
+RUECKGABEWERTE
+==============
+
+   Siehe auch /sys/living/description.h fuer Konstanten.
+
+   * 1, falls der Eintrag erfolgreich entfernt wurde.
+
+   * < 0 sonst.
+
+     * -1: keinen (gueltigen) <key> uebergeben.
+
+     * -2: kein Eintrag fuer <key> gefunden.
 
 
 BEISPIELE
 =========
 
-   # Extralook registrieren.
-   living->AddExtraLook("@WER1 wird von einer Horde Daemonen verfolgt.",
-                        "ennox_daemonenhordenverfolgerlook");
-   # Nun kann der Eintrag auch wieder entfernt werden:
+   // (1) Loeschen ueber expliziten Key
+   living->AddExtraLook(
+     "@WER1 wird von einer Horde Daemonen verfolgt.",
+     1800, "ennox_daemonenhordenverfolgerlook");
+
+   // Nun kann der Eintrag auch wieder entfernt werden:
    living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
 
+   // (2) Loeschen ueber impliziten Objektnamen-Schluessel
+   living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+   // das ist nur aus dem gleichen Objekt heraus moeglich:
+   living->RemoveExtraLook(0);
+
+   // (3) Loeschen ueber impliziten Objektnamen-Schluessel
+   string implizite_id = object_name(this_object());
+   living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+   // diese ID kann man natuerlich durch die Gegend schicken
+   living->RemoveExtraLook(implizite_id);
+
 
 SIEHE AUCH
 ==========
 
-   AddExtraLook(),
-   P_INTERNAL_EXTRA_LOOK
+   Verwandt:
+      *AddExtraLook()*, *P_INTERNAL_EXTRA_LOOK*
 
-14.05.2007, Zesstra
+   Sonstiges:
+      *replace_personal()*, *break_string()*
+
+   Fuer Spielerobjekte:
+      *P_EXTRA_LOOK*
+
+15. Jun 2017 Gloinson
diff --git a/doc/lfun/SetAttackChats b/doc/lfun/SetAttackChats
index 90e8a66..b5a26e9 100644
--- a/doc/lfun/SetAttackChats
+++ b/doc/lfun/SetAttackChats
@@ -18,87 +18,108 @@
 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' einen zufaellig
-   gewaehlten Text aus 'strs' von sich. Die Arrayelemente koennen
-   auch Funktionen ("@@func@@") oder Closures enthalten, die dann
-   aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
+   Der NPC gibt mit der Wahrscheinlichkeit <chance> waehrend des
+   Kampfes 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
+
+   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
 ===========
 
-   AttackChats werden nur im Kampf ausgegeben. Ansonsten ist SetChats()
-   zu verwenden.
+   * ausserhalb des  Kampf werden keine AttackChats ausgegeben, man
+     muss dann SetChats() 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_ACHAT_CHANCE abgelegt. Um einen NPC
-   voruebergehend 'stillzulegen', kann man P_ACHAT_CHANCE auf 0 setzen.
+   * '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
 
-   Man kann AttackChats nutzen, um Monsterspells zu realisieren. Besser
-   ist es aber, dafuer 'AddSpell' zu verwenden.
+   * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER
+     uebergeben
+
+   Man kann AttackChats nutzen, um Monsterspells zu realisieren.
+   Besser ist es aber, dafuer 'AddSpell' zu benutzen, ausser man
+   moechte zB die Spielerfaehigkeit des Abschaltens der Chats
+   verwenden.
 
 
 BEISPIELE
 =========
 
+   protected string knirschschrei(int msg_typ);
+
    SetAttackChats( 20,
-     ({ "Der Ork tritt Dir in den Hintern.\n",
-        "Der Ork bruellt: Lebend kommst Du hier nicht raus!\n",
-        "Der Ork blutet schon aus mehreren Wunden.\n",
-        "@@knirsch@@" }) );
+    ({"Der Ork tritt Dir in den Hintern.\n",
+      ({"Der Ork bruellt: Lebend kommst Du hier nicht raus!\n", MT_LISTEN}),
+      ({"Der Ork blutet schon aus mehreren Wunden.\n", MT_LOOK}),
+      #'knirschschrei}));
 
-
-
-   string knirsch()
-   {
-     object *ruestung, *tmp, helm;
-
-
-
-     ruestung = this_player()->QueryProp(P_ARMOURS); // getragene Ruestung
-     tmp = filter_objects(ruestung, "id", AT_HELMET);
-     // Wenn der Spieler einen Helm traegt, enthaelt 'tmp' jetzt
-     // ein Array mit dem Helmobjekt als einzigem Element
-     if (sizeof(tmp)) helm = tmp[0];
-       if (objectp(helm))
-       {
-         // AC nur dann senken, wenn sie nicht schon 0 ist.
-         if (helm->QueryProp(P_AC)>0) {
-           helm->Damage(1);
-           return "Der Ork beschaedigt Deinen Helm!\n";
-         }
-         return "";
+   protected string knirsch(int msg_typ) {
+     object helm = this_player()->QueryArmourByType(AT_HELMET);
+     if (objectp(helm)) {
+       // AC nur dann senken, wenn sie nicht schon 0 ist.
+       if (helm->QueryProp(P_AC)>0) {
+         helm->Damage(1);
+         msg_typ = MT_LISTEN|MT_FEEL;
+         return ("Der Ork schreit dich so laut an, dass dabei "+
+                 helm->QueryOwn(WER)+" "+
+                 helm->name(RAW)+" beschaedigt wird.");
        }
-       else
-         return ""; // keine Meldung
+     }
+     return ""; // keine Meldung
    }
 
 
 SIEHE AUCH
 ==========
 
-   P_ACHAT_CHANCE, SetChats(), /std/npc/chat.c, AddSpell()
+   Verwandt:
+      *SetChats()*, *AddSpell()*
 
+   Props:
+      *P_CHAT_CHANCE*
 
-LETZTE AENDERUNG
-================
+   Sonstiges:
+      *send_room()*, *process_string()*
 
-   Don, 27.12.2007, 16:35:00 von Arathorn
+3. April 2017 Gloinson
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
diff --git a/doc/lfun/list b/doc/lfun/list
new file mode 100644
index 0000000..41b989f
--- /dev/null
+++ b/doc/lfun/list
@@ -0,0 +1,44 @@
+
+list()
+******
+
+
+FUNKTION
+========
+
+   int list(string str)
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   string str: Durch den Spieler eingegebene Argumente
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird aufgerufen, wenn ein Spieler im Laden 'zeige'
+   eingibt. Anhand von str wird geprueft, welche Art von Waren er
+   aufgelistet haben moechte und in welchem Format. Diese
+   Informationen werden dann zur Ausgabe an PrintList()
+   weitergeleitet.
+
+
+RUECKGABEWERTE
+==============
+
+   1 bei erfolgreichem Erkennen der Parameter, sonst 0. (siehe auch
+   AddCmd())
+
+
+SIEHE AUCH
+==========
+
+   *PrintList()*, *AddCmd()*
diff --git a/doc/lfun/obsolete/AddRoomCmd b/doc/lfun/obsolete/AddRoomCmd
new file mode 100644
index 0000000..f4aeb68
--- /dev/null
+++ b/doc/lfun/obsolete/AddRoomCmd
@@ -0,0 +1,23 @@
+
+AddRoomCmd()
+************
+
+
+SYNTAX
+======
+
+   AddRoomCmd( string kommando, string funktion );
+   AddRoomCmd( string *kommandos, string funktion );
+
+
+FUNKTION
+========
+
+   Diese Funktion ist veraltet. Sie wird vollstaendig durch
+   die Funktion AddCmd ersetzt.
+
+
+SIEHE AUCH
+==========
+
+   "AddCmd"
diff --git a/doc/lfun/obsolete/DoList b/doc/lfun/obsolete/DoList
new file mode 100644
index 0000000..4a20ef8
--- /dev/null
+++ b/doc/lfun/obsolete/DoList
@@ -0,0 +1,39 @@
+
+DoList()
+********
+
+********************* OBSOLETE LFUN
+*********************************** * Diese Lfun bitte nicht mehr
+benutzen, sondern stattdessen           * * PrintList()
+* *******************************************************************
+****
+
+
+FUNKTION
+========
+
+   static int DoList(string query_fun)
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+BESCHREIBUNG
+============
+
+   Veraltete Version von PrintList(), bitte nicht verwenden!
+
+
+RUECKGABEWERTE
+==============
+
+   Immer 1.
+
+
+SIEHE AUCH
+==========
+
+   "PrintList"
diff --git a/doc/lfun/obsolete/GetList b/doc/lfun/obsolete/GetList
new file mode 100644
index 0000000..5cd4fec
--- /dev/null
+++ b/doc/lfun/obsolete/GetList
@@ -0,0 +1,39 @@
+
+GetList()
+*********
+
+********************* OBSOLETE LFUN
+*********************************** * Diese Lfun bitte nicht mehr
+benutzen, sondern stattdessen           * * GetShopItems()
+* *******************************************************************
+****
+
+
+FUNKTION
+========
+
+   static mixed >>*<<GetList()
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+BESCHREIBUNG
+============
+
+   Veraltete Version von GetShopItems(), bitte nicht verwenden!
+
+
+RUECKGABEWERTE
+==============
+
+   Liste der verkaeuflichen Objekte.
+
+
+SIEHE AUCH
+==========
+
+   "GetShopItems"
diff --git a/doc/lfun/obsolete/extra_look b/doc/lfun/obsolete/extra_look
index d8e9703..6d134a9 100644
--- a/doc/lfun/obsolete/extra_look
+++ b/doc/lfun/obsolete/extra_look
@@ -4,7 +4,7 @@
 
 ********************* VERALTETE LFUN ****************************** *
 Diese LFUN ist veraltet. Bitte benutzt sie NICHT mehr, sondern  * *
-stattdessden AddExtraLook().                                    *
+stattdessden AddExtraLook() oder P_EXTRA_LOOK.                  *
 *******************************************************************
 
 extra_look()
@@ -19,14 +19,12 @@
 BESCHREIBUNG
 ============
 
-   Kann in Objekt definiert sein. Wenn ein Living (std/living/description)
-   das Objekt enthaelt, wird zu dessen long() der zurueckgegebene String
-   hinzugefuegt.
+   Kann in Objekt definiert sein. Wenn ein Living
+   (std/living/description) das Objekt enthaelt, wird zu dessen long()
+   der zurueckgegebene String hinzugefuegt.
 
 
 SIEHE AUCH
 ==========
 
-   AddExtraLook()
-
-25.Jan 2015 Gloinson
+   *AddExtraLook()*, *P_EXTRA_LOOK*
diff --git a/doc/lfuns-gilde b/doc/lfuns-gilde
index b56c734..3a2969b 100644
--- a/doc/lfuns-gilde
+++ b/doc/lfuns-gilde
@@ -1,3 +1,29 @@
 
-Verzeichnis der lfuns speziell in/für Gilden
-********************************************
+Verzeichnis der lfuns speziell in/fuer Gilden
+*********************************************
+
+* AddSkill()
+
+* AddSpell()
+
+* GuildRating()
+
+* InitialSkillAbility()
+
+* LearnSkill()
+
+* LearnSpell()
+
+* QuerySkill()
+
+* QuerySpell()
+
+* SkillListe()
+
+* UseSpell()
+
+* austreten()
+
+* bei_oder_aus_treten()
+
+* beitreten()
diff --git a/doc/lfuns-obsolet b/doc/lfuns-obsolet
index ac47c41..68f0238 100644
--- a/doc/lfuns-obsolet
+++ b/doc/lfuns-obsolet
@@ -6,6 +6,12 @@
 
 * AddInsertHook()
 
+* AddRoomCmd()
+
+* DoList()
+
+* GetList()
+
 * ModifySkillAttributeOld()
 
 * NotifyGiveQuest()
diff --git a/doc/lfuns-spellbook b/doc/lfuns-spellbook
new file mode 100644
index 0000000..48cf9c6
--- /dev/null
+++ b/doc/lfuns-spellbook
@@ -0,0 +1,17 @@
+
+Verzeichnis der lfuns speziell in/fuer Spellbooks
+*************************************************
+
+* AddSpell()
+
+* Erfolg()
+
+* Learn()
+
+* Misserfolg()
+
+* QuerySpell()
+
+* SpellSuccess()
+
+* TryAttackSpell()
diff --git a/doc/props-liste b/doc/props-liste
index f63a1cf..745a671 100644
--- a/doc/props-liste
+++ b/doc/props-liste
@@ -238,6 +238,8 @@
 
 * P_EXTRA_LOOK
 
+* P_EXTRA_LOOK_OBS
+
 * P_FAO
 
 * P_FAO_PORTALS
diff --git a/doc/props/P_AERIAL_HELPERS b/doc/props/P_AERIAL_HELPERS
index 781510c..7fbe8d0 100644
--- a/doc/props/P_AERIAL_HELPERS
+++ b/doc/props/P_AERIAL_HELPERS
@@ -18,32 +18,32 @@
 BESCHREIBUNG
 ============
 
-   Diese Property kann in allen Lebewesen abgefragt werden, um die Objekte
-   zu ermitteln, die fuer die Unterstuetzung beim Fliegen/Segeln bei diesem
-   Lebewesen registriert haben. Die Daten werden als Mapping der folgenden
-   Form zurueckgeliefert:
-   ([ Objekt : Rueckgabewert von dessen Callback-Methode ])
-   Eine Erlaeuterung dazu findet sich in der Dokumentation zu
-   RegisterHelperObject().
+   Diese Property kann in allen Lebewesen abgefragt werden, um die
+   Objekte zu ermitteln, die sich fuer die Unterstuetzung beim
+   Fliegen/Segeln bei diesem Lebewesen registriert haben. Die Daten
+   werden als Mapping der folgenden Form zurueckgeliefert: ([ Objekt :
+   Rueckgabewert von dessen Callback-Methode ]) Eine Erlaeuterung dazu
+   findet sich in der Dokumentation zu *RegisterHelperObject()*.
 
 
 BEMERKUNGEN
 ===========
 
-   Diese Property kann nur abgefragt werden.
-   Es ist erwuenscht, dass entsprechende, neu geschaffene Stellen jegliche
-   Helfer akzeptieren, deren Callback-Methode >0 zurueckgibt.
+   Diese Property kann nur abgefragt werden. Es ist erwuenscht, dass
+   entsprechende, neu geschaffene Stellen jegliche Helfer akzeptieren,
+   deren Callback-Methode >0 zurueckgibt.
 
 
 BEISPIEL
 ========
 
-   Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat, das
-   beim Fliegen hilft, sucht man alle Objekte aus dem Mapping heraus, die
-   einen Wert >0 eingetragen haben und prueft deren Anzahl:
+   Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat,
+   das beim Fliegen hilft, sucht man alle Objekte aus dem Mapping
+   heraus, die einen Wert >0 eingetragen haben und prueft deren
+   Anzahl:
 
    mapping aerial = this_player()->QueryProp(P_AERIAL_HELPERS);
-   object* helpers = filter( aerial, function int (object h) {
+   object* helpers = filter( m_indices(aerial), function int (object h) {
                        return (aerial[h]>0); });
    if ( sizeof(helpers) ) {
      tell_object(this_player(), "Du erhebst Dich mit Hilfe "+
@@ -57,7 +57,7 @@
 SIEHE AUCH
 ==========
 
-   Methoden:    RegisterHelperObject(L), UnregisterHelperObject(L)
-   Properties:  P_HELPER_OBJECTS, P_AQUATIC_HELPERS
+   Methoden:    *RegisterHelperObject()*, *UnregisterHelperObject()*
+   Properties:  *P_HELPER_OBJECTS*, *P_AQUATIC_HELPERS*
 
-12.03.2016, Arathorn
+04.02.2018, Arathorn
diff --git a/doc/props/P_AQUATIC_HELPERS b/doc/props/P_AQUATIC_HELPERS
index 8429a41..ef80e67 100644
--- a/doc/props/P_AQUATIC_HELPERS
+++ b/doc/props/P_AQUATIC_HELPERS
@@ -18,32 +18,32 @@
 BESCHREIBUNG
 ============
 
-   Diese Property kann in allen Lebewesen abgefragt werden, um die Objekte
-   zu ermitteln, die fuer die Unterstuetzung beim Tauchen bei diesem
-   Lebewesen registriert haben. Die Daten werden als Mapping der folgenden
-   Form zurueckgeliefert:
-   ([ Objekt : Rueckgabewert von dessen Callback-Methode ])
-   Eine Erlaeuterung dazu findet sich in der Dokumentation zu
-   RegisterHelperObject().
+   Diese Property kann in allen Lebewesen abgefragt werden, um die
+   Objekte zu ermitteln, die fuer die Unterstuetzung beim Tauchen bei
+   diesem Lebewesen registriert haben. Die Daten werden als Mapping
+   der folgenden Form zurueckgeliefert: ([ Objekt : Rueckgabewert von
+   dessen Callback-Methode ]) Eine Erlaeuterung dazu findet sich in
+   der Dokumentation zu *RegisterHelperObject()*.
 
 
 BEMERKUNGEN
 ===========
 
-   Diese Property kann nur abgefragt werden.
-   Es ist erwuenscht, dass entsprechende, neu geschaffene Stellen jegliche
-   Helfer akzeptieren, deren Callback-Methode >0 zurueckgibt.
+   Diese Property kann nur abgefragt werden. Es ist erwuenscht, dass
+   entsprechende, neu geschaffene Stellen jegliche Helfer akzeptieren,
+   deren Callback-Methode >0 zurueckgibt.
 
 
 BEISPIEL
 ========
 
-   Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat, das
-   beim Tauchen hilft, sucht man alle Objekte aus dem Mapping heraus, die
-   einen Wert >0 eingetragen haben und prueft deren Anzahl:
+   Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat,
+   das beim Tauchen hilft, sucht man alle Objekte aus dem Mapping
+   heraus, die einen Wert >0 eingetragen haben und prueft deren
+   Anzahl:
 
    mapping aquatic = this_player()->QueryProp(P_AQUATIC_HELPERS);
-   object* helpers = filter( aquatic, function int (object h) {
+   object* helpers = filter( m_indices(aquatic), function int (object h) {
                        return (aquatic[h]>0); });
    if ( sizeof(helpers) ) {
      tell_object(this_player(), "Du stuerzt Dich in die Fluten und "
@@ -58,7 +58,7 @@
 SIEHE AUCH
 ==========
 
-   Methoden:    RegisterHelperObject(L), UnregisterHelperObject(L)
-   Properties:  P_HELPER_OBJECTS, P_AERIAL_HELPERS
+   Methoden:    *RegisterHelperObject()*, *UnregisterHelperObject()*
+   Properties:  *P_HELPER_OBJECTS*, *P_AERIAL_HELPERS*
 
-06.04.2016, Arathorn
+04.02.2018, Arathorn
diff --git a/doc/props/P_EXTRA_LOOK_OBS b/doc/props/P_EXTRA_LOOK_OBS
new file mode 100644
index 0000000..b1a5e4e
--- /dev/null
+++ b/doc/props/P_EXTRA_LOOK_OBS
@@ -0,0 +1,36 @@
+
+P_EXTRA_LOOK_OBS
+****************
+
+
+NAME
+====
+
+   P_EXTRA_LOOK_OBS                "p_lib_extralook_obs"
+
+
+DEFINIERT IN
+============
+
+   /sys/living/description.h
+
+
+BESCHREIBUNG
+============
+
+   Array mit den im Lebewesen enthaltenen Objekten, die P_EXTRA_LOOK gesetzt
+   haben.
+
+
+BEMERKUNG
+=========
+
+   Bitte nicht von Hand manipulieren.
+
+
+SIEHE AUCH
+==========
+
+   :doc:`../long`, :doc:`../AddExtraLook`, :doc:`../RemoveExtraLook`
+   :doc:`P_EXTRA_LOOK`
+   /std/living/description.c, /std/player/base.c
diff --git a/doc/props/P_FUNC_MSG b/doc/props/P_FUNC_MSG
index adcca1a..ac09232 100644
--- a/doc/props/P_FUNC_MSG
+++ b/doc/props/P_FUNC_MSG
@@ -33,8 +33,13 @@
 SIEHE AUCH
 ==========
 
-   LFuns:    AddRoomMessage()
-   Verwandt: tell_room(), ReceiveMsg()
-   Props:    P_ROOM_MSG, P_MSG_PROB
+   LFuns:
+      *AddRoomMessage()*
+
+   Verwandt:
+      tell_room(), *send_room()*, *ReceiveMsg()*
+
+   Props:
+      *P_MSG_PROB*, *P_ROOM_MSG*
 
 2.Feb 2016 Gloinson
diff --git a/doc/props/P_HARBOUR b/doc/props/P_HARBOUR
index f049847..c7cf082 100644
--- a/doc/props/P_HARBOUR
+++ b/doc/props/P_HARBOUR
@@ -24,71 +24,75 @@
 BEMERKUNGEN
 ===========
 
-   Diese Property wird in Raeumen gesetzt, die als Anleger fuer Transporter
-   dienen sollen. Sie enthaelt ein Array aus zwei Elementen, einem String
-   und einem String-Array, zum Beispiel:
+   Diese Property wird in Raeumen gesetzt, die als Anleger fuer
+   Transporter dienen sollen. Sie enthaelt ein Array aus zwei
+   Elementen, einem String und einem String-Array, zum Beispiel:
 
-   ({ "zur Sonneninsel", ({"sonneninsel"}) }) oder
-   ({ "nach Titiwu", ({"titiwu"}) })
+   ({ "zur Sonneninsel", ({"sonneninsel"}) }) oder ({ "nach Titiwu",
+   ({"titiwu"}) })
 
-   Damit bekommt der Spieler bei einer Abfrage seiner Reiseroute mittels
-   "reise route" eine Ausgabe wie
-     'Du reist mit dem Floss nach Titiwu' oder
-     'Du reist mit dem Wal zur Sonneninsel'.
+   Hafen der Sonneninsel: ({ "zur Sonneninsel", ({"sonneninsel"}) })
+   oder Hafen von Titiwu:      ({ "nach Titiwu", ({"titiwu"}) })
 
-   Das zweite Element der Property enthaelt eine Liste der IDs, mit denen
-   sich der Hafen mit dem Befehl "reise nach <ID>" ansprechen laesst. Im
-   Beispiel oben wuerde also "reise nach sonneninsel" und
-   "reise nach titiwu" akzeptiert werden. Der erste Eintrag in dieser ID-
-   Liste wird in der Ausgabe des Befehls "reise route" verwendet, sollte
-   also den Anlegeort korrekt bezeichnen und nicht z.B. eine Abkuerzung
-   enthalten.
-   Es bietet sich an, bei bestimmten, deklinierbaren Bezeichnungen alle
-   Varianten einzutragen, z.B. "verlorenes land" und zusaetzlich
-   "verlorene land" und "verlorenen land", damit alle Varianten von
-   "reise nach ..." funktionieren.
+   Damit bekommt der Spieler bei einer Abfrage seiner Reiseroute
+   mittels "reise route", sofern er schon eine gesetzt hat, eine
+   Ausgabe wie ..
+
+      'Du reist mit dem Floss nach Titiwu' oder 'Du reist mit dem Wal
+      zur Sonneninsel'.
+
+   Das zweite Element der Property enthaelt eine Liste der IDs, mit
+   denen sich der Hafen mit dem Befehl "reise nach <ID>" ansprechen
+   laesst. Im Beispiel oben wuerde also "reise nach sonneninsel" und
+   "reise nach titiwu" akzeptiert werden. Der erste Eintrag in dieser
+   ID- Liste wird in der Ausgabe des Befehls "reise route" verwendet,
+   sollte also den Anlegeort korrekt bezeichnen und nicht z.B. eine
+   Abkuerzung enthalten. Es bietet sich an, bei bestimmten,
+   deklinierbaren Bezeichnungen alle Varianten einzutragen, z.B.
+   "verlorenes land" und zusaetzlich "verlorene land" und "verlorenen
+   land", damit alle Varianten von "reise nach ..." funktionieren.
 
    Ist in einem Hafen diese Property nicht gesetzt, so bekommt der
    Spieler keinerlei Hinweis darauf, wohin ihn ein bestimmter Trans-
-   porter befoerdert.
-   Stattdessen erhaelt er die Bezeichnung 'unbekannt'.
+   porter befoerdert. Stattdessen erhaelt er die Bezeichnung
+   'unbekannt'.
 
 
 HINWEISE
 ========
 
    Wird der zweite Parameter in dieser Property, d.h. die Liste der
-   Anleger-IDs, nicht korrekt gesetzt, kann das dazu fuehren, dass Spieler
-   den hier anlegenden Transporter nicht benutzen koennen, weil es
-   keine sinnvolle Syntax gibt, um den gewuenschten Zielhafen zu finden.
+   Anleger-IDs, nicht korrekt gesetzt, kann das dazu fuehren, dass
+   Spieler den hier anlegenden Transporter nicht benutzen koennen,
+   weil es keine sinnvolle Syntax gibt, um den gewuenschten Zielhafen
+   zu finden.
 
-   Zu achten ist auch darauf, das der erste Eintrag unveraendert in einer
-   Meldung an den Spieler ausgegeben wird, d.h. Gross-und Kleinschreibung
-   sollte korrekt sein.
+   Zu achten ist auch darauf, das der erste Eintrag unveraendert in
+   einer Meldung an den Spieler ausgegeben wird, d.h. Gross-und
+   Kleinschreibung sollte korrekt sein.
 
 
 HISTORIE
 ========
 
-   Frueher war der zweite Eintrag in dieser Property ein einzelner String.
-   Es existiert eine SetMethode auf dieser Property, die solche Daten in
-   altem Code auf die neue Datenstruktur umbiegt. Dies fuehrt dazu, dass
-   bei solchen Objekten die im geladenen Raum enthaltenen Daten nicht mit
-   den Daten im File uebereinstimmen. Dies moege aber bitte niemand
-   zum Anlass nehmen, in neuem Code veraltete Daten in die Property zu
-   schreiben!
+   Frueher war der zweite Eintrag in dieser Property ein einzelner
+   String. Es existiert eine SetMethode auf dieser Property, die
+   solche Daten in altem Code auf die neue Datenstruktur umbiegt. Dies
+   fuehrt dazu, dass bei solchen Objekten die im geladenen Raum
+   enthaltenen Daten nicht mit den Daten im File uebereinstimmen. Dies
+   moege aber bitte niemand zum Anlass nehmen, in neuem Code veraltete
+   Daten in die Property zu schreiben!
 
 
 SIEHE AUCH
 ==========
 
-   Properties:     P_NO_TRAVELING, P_TRAVEL_INFO
-   Funktionen:     AddRoute(L)
-   Spielerbefehle: reise
-   weitere Doku:   /d/inseln/schiffe/HowTo
+   Properties:     *P_NO_TRAVELING*, *P_TRAVEL_INFO* Funktionen:
+   *AddRoute()* Spielerbefehle: reise weitere Doku:
+   /d/inseln/schiffe/HowTo
 
 
 LETZTE AENDERUNG
 ================
 
-2015-Jan-18, Arathorn
+04.02.2018, Arathorn
diff --git a/doc/props/P_INFO b/doc/props/P_INFO
index f29c242..214301a 100644
--- a/doc/props/P_INFO
+++ b/doc/props/P_INFO
@@ -25,12 +25,30 @@
 BEISPIEL
 ========
 
-   SetProp(P_INFO,"Du ergruendest das Geheimnis.\n")
+   // Einfaches Beispiel
+   SetProp(P_INFO, "Du ergruendest das Geheimnis.\n")
+
+   // dynamisch
+   protected string my_info();
+
+   void create() {
+     if(clonep(this_object())) return;
+     ::create();
+
+     Set(P_INFO, #'my_info, F_QUERY_METHOD);
+     // [...]
+   }
+
+   protected string my_info() {
+     return(break_string(
+       "Die "+cnt+" Steine tragen ein geheimes Muster in sich.", 78));
+   }
 
 
 SIEHE AUCH
 ==========
 
-   GetOwner(L)
+   Aehnlich:
+      *GetOwner()*
 
-24. April 2006, Vanion
+14. Mar 2017 Gloinson
diff --git a/doc/props/P_INTERNAL_EXTRA_LOOK b/doc/props/P_INTERNAL_EXTRA_LOOK
index ffa78ad..d61da7a 100644
--- a/doc/props/P_INTERNAL_EXTRA_LOOK
+++ b/doc/props/P_INTERNAL_EXTRA_LOOK
@@ -6,7 +6,8 @@
 NAME
 ====
 
-   P_INTERNAL_EXTRA_LOOK                   "internal_extralook"
+   P_INTERNAL_EXTRA_LOOK
+      "internal_extralook"
 
 
 DEFINIERT IN
@@ -18,40 +19,59 @@
 BESCHREIBUNG
 ============
 
-         Diese Property enthaelt ein Mapping, in dem alle einzelnen
-   Extra-Look-Eintraege des Livings enthalten sind. Dabei weden die Daten von
-   AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese Prop mit
-   QueryProp() ab, erhaelt man die Ausgabe der gueltigen Extralooks des
-   Livings. Bei Abfrage per Query() erhaelt man ein Mapping mit allen
-   Eintraegen und deren Daten. Jeder Wert im Mapping ist erneut ein Mapping,
-   welches folgende Keys enthalten kann:
-   - "xllook": String, der im Extralook des Living angezeigt wird.
-   - "xlduration": Zeitstempel (int), der angibt, wie lang der Eintrag gueltig
-                   ist. 0 == "Unendlich", negative Zahlen besagen, dass der
-                   Eintrag nur bis Reboot/Ende gueltig sein und abs(xlduration)
-                   ist der Zeitpunkt des Eintrages dieses Extralooks.
-   - "xlende": String, der nach Ablaufen an das Living ausgegeben wird.
-   - "xlfun": Funktion, die gerufen wird und den String zurueckliefern muss,
-              der ausgeben werden soll.
-   - "xlendefun": Funktion, die gerufen wird, wenn der Eintrag abgelaufen ist
-                  und den String zurueckliefern muss, der dann ans Living
-                  ausgeben wird.
-   - "xlobjectname": Objekt, in dem die o.a. Funktionen gerufen werden.
+   Diese Property enthaelt ein Mapping, in dem alle einzelnen Extra-
+   Look-Eintraege des Livings enthalten sind. Dabei weden die Daten
+   von AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese
+   Prop mit QueryProp() ab, erhaelt man die Ausgabe der gueltigen
+   Extralooks des Livings. Bei Abfrage per Query() erhaelt man ein
+   Mapping mit allen Eintraegen und deren Daten.
+
+   Der Key ist jeweils die ID des Extralooks, der Value ist erneut ein
+   Mapping, welches folgende Keys enthalten kann:
+
+   * "xllook": String, der im Extralook des Living angezeigt wird.
+
+   * "xlduration": Zeitstempel (int), der angibt, wie lang der
+     Eintrag gueltig ist.
+
+     * 0  ewig gueltig
+
+     * <0 gueltig bis Ende/Reboot
+
+     * >0 Gueltig in Sekunden
+
+   * "xlende": String, der nach Ablaufen an das Living ausgegeben
+     wird.
+
+   * "xlfun": Funktion, die gerufen wird und den String
+     zurueckliefern muss, der ausgegeben werden soll.
+
+   * "xlendefun": Funktion, die gerufen wird, wenn der Eintrag
+     abgelaufen ist und den String zurueckliefern muss, der dann ans
+     Living ausgegeben wird.
+
+   * "xlobjectname": Objekt, in dem die o.a. Funktionen gerufen
+     werden.
 
 
-BEMERKUNG
-=========
+BEMERKUNGEN:
+============
 
-   DIESE PROPERTY BITTE NIEMALS PER HAND MIT Set()/SetProp() AENDERN!
-   Die Daten in dieser Prop werden vom Living selber verwaltet. Extralooks
-   koennen mittel AddExtraLook() eingetragen und mit RemoveExtraLook() entfernt
-   werden.
+   Warnung: Keine echte Property. Die Methode
+     _query_internal_extralook() in /std/living/description.c stellt
+     die Daten zusammen.
+
+   Warnung: ACHTUNG: Bitte nur die bereitgestellten Methoden zur
+     Manipulation benutzen! Setzen als Property hat keinen Effekt.
 
 
 SIEHE AUCH
 ==========
 
-   long(), /std/living/description.c, /std/player/base.c
-   AddExtraLook(), RemoveExtraLook()
+   Verwandt:
+      *AddExtraLook()*, *RemoveExtraLook()* *long()*
 
-13.05.2007, Zesstra
+   Fuer Spielerobjekte:
+      *P_EXTRA_LOOK*
+
+15. Juni 2017 Gloinson
diff --git a/doc/props/P_INT_SHORT b/doc/props/P_INT_SHORT
index 618bbab..ac3c31d 100644
--- a/doc/props/P_INT_SHORT
+++ b/doc/props/P_INT_SHORT
@@ -22,10 +22,13 @@
    als String oder Closure (mit String-Rueckgabewert).
 
    Container sind hierbei z.B. Raeume.
-   ACHTUNG: Die Kurzbeschreibung sollte dabei weder mit einem
-            Satzzeichen noch mit einem "\n" abgeschlossen sein
+   ACHTUNG: Die Kurzbeschreibung sollte dabei nicht  mit einem
+            "\n" abgeschlossen sein
             (dies wird von den zustaendigen Funktionen erledigt).
 
+   Aus historischen Gruenden wird ein Punkt ergaenzt, wenn das letzte
+   Zeichen kein Punkt, Ausrufezeichen oder Fragezeichen ist.
+
    Man sollte die Property nicht auf 0 setzen.
 
    Diese Property bestimmt die Ansicht des Containers von innen.
diff --git a/doc/props/P_MSG_PROB b/doc/props/P_MSG_PROB
index b4465df..216d8e0 100644
--- a/doc/props/P_MSG_PROB
+++ b/doc/props/P_MSG_PROB
@@ -18,18 +18,65 @@
 BESCHREIBUNG
 ============
 
-   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.
+   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.
+
+   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
+=========
+
+   // 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:
+      *AddRoomMessage()*
 
-2.Feb 2016 Gloinson
+   Props:
+      *P_ROOM_MSG*, *P_FUNC_MSG*
+
+   Verwandt:
+      call_out()
+
+28. Mar 2017 Gloinson
diff --git a/doc/props/P_PURSUERS b/doc/props/P_PURSUERS
index 05ead3b..8348a6a 100644
--- a/doc/props/P_PURSUERS
+++ b/doc/props/P_PURSUERS
@@ -6,7 +6,8 @@
 NAME
 ====
 
-   P_PURSUERS                    "pursuers"
+   P_PURSUERS:
+      "pursuers"
 
 
 DEFINIERT IN
@@ -18,12 +19,20 @@
 BESCHREIBUNG
 ============
 
-   Enthaelt Verfolger - nicht von Hand manipulieren!
+   Enthaelt ein zweielementiges Array mit folgendem Aufbau: 0: Objekt
+   welches verfolg wird oder 0. 1: Array der Objekte welche verfolgen.
+
+
+BEMERKUNG
+=========
+
+   Kann auch 0 sein, also auf pointerp() pruefen.
+
+   NICHT von Hand, sondern nur mit den dafuer gedachten Funktionen
+   modifizieren.
 
 
 SIEHE AUCH
 ==========
 
-   AddPursuer(L), RemovePursuer(L)
-
-16.06.2016, Arathorn
+   * *AddPursuer()*, *RemovePursuer()*
diff --git a/doc/props/P_ROOM_MSG b/doc/props/P_ROOM_MSG
index 3486458..2d52e57 100644
--- a/doc/props/P_ROOM_MSG
+++ b/doc/props/P_ROOM_MSG
@@ -32,8 +32,13 @@
 SIEHE AUCH
 ==========
 
-   LFuns:    AddRoomMessage()
-   Verwandt: tell_room(), ReceiveMsg()
-   Props:    P_FUNC_MSG, P_MSG_PROB
+   LFuns:
+      *AddRoomMessage()*
+
+   Verwandt:
+      tell_room(), *send_room()*, *ReceiveMsg()*
+
+   Props:
+      *P_MSG_PROB*, *P_FUNC_MSG*
 
 2.Feb 2016 Gloinson
diff --git a/doc/props/P_SHORT b/doc/props/P_SHORT
index 49b2603..63c8765 100644
--- a/doc/props/P_SHORT
+++ b/doc/props/P_SHORT
@@ -21,9 +21,11 @@
    Diese Property enthaelt die Kurzbeschreibung des Objektes als String
    oder Closure (diese muss einen String zurueckgeben).
 
-   ACHTUNG: Die Kurzbeschreibung sollte dabei weder mit einem
-            Satzzeichen noch mit einem "\n" abgeschlossen sein
-            (dies wird von den zustaendigen Funktionen erledigt).
+   ACHTUNG: Die Kurzbeschreibung sollte dabei nicht mit einem "\n"
+   abgeschlossen sein (dies wird von den zustaendigen Funktionen
+   erledigt).
+   Aus historischen Gruenden wird ein Punkt ergaenzt, wenn das letzte
+   Zeichen kein Punkt, Ausrufezeichen oder Fragezeichen ist.
 
    Setzt man diese Property auf 0, so ist das Objekt unsichtbar, allerdings
    ansprechbar, wenn der Spieler eine ID des Objektes kennt. D.h. Objekte
diff --git a/doc/props/P_SYNTAX_HELP b/doc/props/P_SYNTAX_HELP
index a796fb5..fee400f 100644
--- a/doc/props/P_SYNTAX_HELP
+++ b/doc/props/P_SYNTAX_HELP
@@ -6,7 +6,8 @@
 NAME
 ====
 
-   P_SYNTAX_HELP              "lib_p_syntax_help"
+   P_SYNTAX_HELP
+      "lib_p_syntax_help"
 
 
 DEFINIERT IN
@@ -18,34 +19,35 @@
 BESCHREIBUNG
 ============
 
-   In dieser Property kann man fuer Spieler eine ausfuehrliche Syntaxhilfe zu
-   den Kommandos eines Objektes ablegen. Diese wird angezeigt, wenn der
-   Spieler das Kommando "synxtaxhilfe <objekt>" eingibt.
-   Die Property kann verschiedene Datenstrukturen enthalten:
+   In dieser Property kann man fuer Spieler eine ausfuehrliche
+   Syntaxhilfe zu den Kommandos eines Objektes ablegen. Diese wird
+   angezeigt, wenn der Spieler das Kommando "syntaxhilfe <objekt>"
+   eingibt. Die Property kann verschiedene Datenstrukturen enthalten:
 
-   1) ein String
-   Der String wird angezeigt, hierbei ggf. umgebrochen, vorhandene
-   Zeilenumbrueche werden beibehalten.
+   1) ein String Der String wird angezeigt, hierbei ggf. umgebrochen,
+   vorhandene Zeilenumbrueche werden beibehalten.
 
-   2) ein Array: ({hilfetext, bedingungen})
+   2. ein Array: ({hilfetext, bedingungen})
 
    <hilfetext>:
-     * ein string:
-       Der String wird angezeigt, hierbei ggf. umgebrochen, vorhandene
-       Zeilenumbrueche werden beibehalten.
-     * eine lfun-closure:
-       Diese erhaelt beim Aufruf das betreffende Objekt als Argument.
-       Wenn diese dann einen String zurueckliefert, wird dieser dem Spieler
-       angezeigt. Hierbei wird ggf. umgebrochen, vorhandene Zeilenumbrueche
-       werden beibehalten.
+      * ein string: Der String wird angezeigt, hierbei ggf.
+        umgebrochen, vorhandene Zeilenumbrueche werden beibehalten.
 
-   <bedingungen>, welche erfuellt sein muessen, damit dem Spieler die Hilfe
-   angezeigt wird. Die Bedingungen sind entweder:
-     * ein Mapping fuer check_restriction()
-     * eine lfun-closure
-       Diese erhaelt beim Aufruf das betreffende Objekt als Argument und darf
-       eine 0 fuer 'erlaubt', 1 fuer 'nicht erlaubt (mit Standardtext)' oder
-       einen string fuer 'nicht erlaubt mit individuellem Text' sein.
+      * eine lfun-closure: Diese erhaelt beim Aufruf das betreffende
+        Objekt als Argument. Wenn diese dann einen String
+        zurueckliefert, wird dieser dem Spieler angezeigt. Hierbei
+        wird ggf. umgebrochen, vorhandene Zeilenumbrueche werden
+        beibehalten.
+
+   <bedingungen>, welche erfuellt sein muessen, damit dem Spieler die
+   Hilfe angezeigt wird. Die Bedingungen sind entweder:
+
+      * ein Mapping fuer check_restriction()
+
+      * eine lfun-closure Diese erhaelt beim Aufruf das betreffende
+        Objekt als Argument und darf eine 0 fuer 'erlaubt', 1 fuer
+        'nicht erlaubt (mit Standardtext)' oder einen string fuer
+        'nicht erlaubt mit individuellem Text' sein.
 
 
 BEMERKUNGEN
@@ -59,4 +61,4 @@
 SIEHE AUCH
 ==========
 
-   AddCmd
+   *AddCmd()*
diff --git a/doc/props/obsolete/P_EXTRA_LOOK b/doc/props/obsolete/P_EXTRA_LOOK
new file mode 100644
index 0000000..203fb8e
--- /dev/null
+++ b/doc/props/obsolete/P_EXTRA_LOOK
@@ -0,0 +1,57 @@
+
+P_EXTRA_LOOK
+************
+
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+benutzt sie NICHT mehr, sondern  * * stattdessden AddExtraLook().
+* *******************************************************************
+****
+
+
+NAME
+====
+
+   P_EXTRA_LOOK                    "extralook"
+
+
+DEFINIERT IN
+============
+
+   /sys/living/description.h
+
+
+BESCHREIBUNG
+============
+
+   Diese Property enthaelt einen String. Sie wird entweder in Lebewesen
+   direkt oder in Objekten gesetzt wird, die im Besitz von Lebewesen
+   sein koennen.
+   Diese Strings erscheinen dann zusaetzlich in der Langbeschreibung
+   des Lebewesens bzw. des Besitzers (wenn das Objekt sich direkt im
+    Lebewesen befindet, jedoch nicht in einem Behaelter im Lebewesen).
+   Fuer den Zeilenumbruch muss man selbst sorgen.
+
+
+BEISPIEL
+========
+
+   Ein Spieler hat eine Pfeife im Mund. In dieser Pfeife setzt man z.B.
+   in der Funktion zum Pfeife Rauchen folgendes:
+     SetProp(P_EXTRA_LOOK,break_string(
+    this_player()->Name(WER)+" ist ganz umnebelt.",78);
+
+
+BEMERKUNG
+=========
+
+   BITTE NICHT MEHR BENUTZEN!
+
+
+SIEHE AUCH
+==========
+
+         long(), /std/living/description.c, /std/player/base.c
+   AddExtraLook(), RemoveExtraLook()
+
+13.05.2007, Zesstra
diff --git a/doc/sefun-obsolet b/doc/sefun-obsolet
new file mode 100644
index 0000000..d0a468f
--- /dev/null
+++ b/doc/sefun-obsolet
@@ -0,0 +1,10 @@
+
+Verzeichnis der obsoleten und entfernten simulated efuns
+********************************************************
+
+Bitte die folgenden sefuns in neuem Code keinesfalls benutzten und
+nach Moeglichkeit auch in existierendem Code entfernen.
+
+* exclude_alist()
+
+* remove_alist()
diff --git a/doc/sefun.index b/doc/sefun.index
index 6d9564f..b9325c2 100644
--- a/doc/sefun.index
+++ b/doc/sefun.index
@@ -135,3 +135,5 @@
 * wizlist_info()
 
 * write_data()
+
+* Verzeichnis der obsoleten und entfernten simulated efuns
diff --git a/doc/sefun/send_room b/doc/sefun/send_room
index 7ddf43d..2a34ba2 100644
--- a/doc/sefun/send_room
+++ b/doc/sefun/send_room
@@ -6,37 +6,67 @@
 FUNKTION
 ========
 
-varargs void send_room(object|string room, string msg, int msg_type,
-   string msg_action, string msg_prefix, object >>*<<exclude, object
-   origin)
+   varargs void send_room(object|string room, string msg, int
+   msg_type,
+      string msg_action, string msg_prefix, object *exclude, object
+      origin)
 
 
 BESCHREIBUNG
 ============
 
-   Sendet msg an alle Objekte in room durch Aufruf von ReceiveMsg() mit
-   den uebergebenen Argumenten.
-   Zur Bedeutung der Argumente siehe Manpage von ReceiveMsg().
+   Sendet msg an alle Objekte in room durch Aufruf von ReceiveMsg()
+   mit den uebergebenen Argumenten. Zur Bedeutung der Argumente siehe
+   Manpage von ReceiveMsg().
 
    Wenn das Raumobjekt mit seinem Namen angegeben ist, wird das Objekt
    unter diesem Namen gesucht und und geladen, falls notwendig.
 
-   Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an
-   die darin enthaltenen Objekte gesendet wird.
-   Das ist sinnvoll, wenn zB ein Spieler Ausloeser einer Meldung ist
-   und diese selbst nicht erhalten soll.
+   Mit dem Array exclude kann man verhindern, dass die Nachricht an
+   die darin enthaltenen Objekte gesendet wird. Das ist sinnvoll, wenn
+   beispielsweise ein Spieler Ausloeser einer Meldung ist und diese
+   selbst nicht erhalten soll.
 
    origin gibt an, welches Objekt die Meldung ausloest (muss nicht das
-   sendende Objekt selber) und wird vor allem fuer die Ignorierepruefung
-   verwendet. Default ist das sendende Objekt.
+   sendende Objekt selber) und wird vor allem fuer die
+   Ignorierepruefung verwendet. Default ist das sendende Objekt.
 
-   Letztendlich ist die sefun vergleichbar zu tell_room().
+   Letztendlich ist die sefun vergleichbar zu *tell_room()*.
+
+
+BEISPIEL
+========
+
+   Oft moechte man einfach nur, dass an den Spieler, der eine Aktion
+   oder aehnliches ausloest, eine andere Meldung gegeben wird, als an
+   andere im Raum befindliche Spieler. Folgenden Code koente man dann
+   verwenden:
+
+      /* Zuerst senden wir eine Nachricht nur an den Spieler.
+       * Ziel: der Spieler riecht etwas und schuettelt sich fuer alle im
+       * Raum sichtbar darauf.
+       */
+      this_player()->ReceiveMsg("Buah stinkt das. Du schuettelst Dich.\n",
+              MT_NOTIFICATION|MT_SMELL, MA_SMELL);
+      send_room(environment(this_player()),
+              // der Raum in dem der Spieler ist
+               this_player()->Name(WER) + " schuettelt sich. Wieso nur?\n",
+              // die eigentliche Nachricht
+              MT_LOOK, // man sieht das schuetteln
+              MA_UNKNOWN, // MA_SMELL moeglich; im Zweifel immer MA_UNKNOWN
+              "", // wir wollen kein Praefix vor der Ausgabe haben
+              ({this_player()}));
+              // Array nur mit dem Spieler, der das nicht noch
+              // mitbekommen soll.
+
+   Fuer weitere Optionen fuer *msg_type* und *msg_action* siehe die
+   manpage zu ReceiveMsg. Natuerlich haben *this_player* und
+   *environment* auch manpages.
 
 
 SIEHE AUCH
 ==========
 
-   ReceiveMsg(L)
-   tell_object(E), tell_room(E), say(E), write(E)
+   *ReceiveMsg()* tell_object(E), tell_room(E), say(E), write(E)
 
-13.03.2016, Zesstra
+31.01.2018, Deaddy
