Dokumentations-Update

Change-Id: I133ea88f76745da5debd488ac683ffeb1894825b
diff --git a/doc/props/P_GUILD_RATING b/doc/props/P_GUILD_RATING
index af9c24e..8fb181e 100644
--- a/doc/props/P_GUILD_RATING
+++ b/doc/props/P_GUILD_RATING
@@ -31,10 +31,16 @@
    aus den Faehigkeiten des Mitglieds zusammen und mitunter fliessen
    auch Gildenquests oder aehnliches mit ein.
 
+   Spieler erhalten 1 Stufenpunkt fuer je 25 Punkte Gildenrating, d.h.
+   400 Stufenpunkte bei Max-Rating. Gildenmagier sollten sich daher gut
+   ueberlegen, ob sie bei der Berechnung des Ratings eine Formel zugrunde
+   legen wollen, die verhindert, dass Spieler ein Max-Rating erreichen
+   koennen.
+
 
 SIEHE AUCH
 ==========
 
    P_NEWSKILLS, GuildRating
 
-Last modified: Wed Jan 14 19:17:06 1998 by Patryn
+Last modified: 2021-01-10, Arathorn
diff --git a/doc/props/obsolete/P_TMP_DEFEND_HOOK b/doc/props/obsolete/P_TMP_DEFEND_HOOK
index f29d342..144f7a4 100644
--- a/doc/props/obsolete/P_TMP_DEFEND_HOOK
+++ b/doc/props/obsolete/P_TMP_DEFEND_HOOK
@@ -27,12 +27,14 @@
    veraendert werden.
 
    Es wird an dem Living die Property als mindestens 3-elementiges Array
-   ({zeitpunkt, objekt, methode, ...})
+
+      ({int zeitpunkt, object objekt, string methode, ...})
+
    gesetzt und die Methode 'methode' wird dann waehrend des Defend() des
    Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
 
    Der Methode werden die Parameter der Defend() uebergeben:
-   int dam, mixed dam_type, mixed spell, object enemy
+   int dam, string* dam_type, int|mapping spell, object enemy
    - spell ist definitiv ein Mapping - ein an Defend() uebergebener
      int-Wert wurde aequivalent umgesetzt.
    - dam_type ist definitiv ein Array von Schadenswerten oder einem Wert
@@ -40,10 +42,10 @@
    Zudem findet der Aufruf der Methode nach dem Abarbeiten der P_DEFENDERS
    statt, diese koennen also weitere Modifikationen vorgenommen haben.
 
-   Gibt die Funktion:
+   Gibt die Methode:
    - 0 zurueck, wird Defend() abgebrochen (und damit der Schaden voellig
      abgefangen) - nur noch die Flucht wird geprueft
-   - ein 3-elementiges Array ({schaden, schadenstypen, spell}) zurueck,
+   - ein 3-elementiges Array ({dam, dam_type, spell}) zurueck,
      werden diese Werte in der Defend() an Stelle der uebergebenen Werte
      verwendet
    - weder noch zurueck, wird das Ergebnis ignoriert und die Defend laeuft
@@ -54,78 +56,87 @@
 ===========
 
    - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
-   - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
-     Property auf 0 gesetzt
-   - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
+   - Der korrekte Union-Datentyp fuer die Property ist
+     <int|object|string>* fuer die normale Nutzung mit 3 Elementen.
+     Ein weit verbreiteter Anwendungsfall verwendet 2 weitere Elemente,
+     die vom Typ int und string|string* sind. Alle Stellen, die die Property
+     abfragen, sollten daher den Union-Datentyp <int|object|string|string*>*
+     verwenden. Das Beispiel beruecksichtigt diesen Fall bereits.
+   - Falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
+     Property auf 0 gesetzt.
+   - Vor dem Setzen immer auf die Existenz eines gueltigen Hooks
      pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
-     im Code anderer und ist andererseits unfair gegenueber ihnen
+     im Code anderer und ist andererseits unfair gegenueber ihnen.
 
 
 BEISPIEL
 ========
 
    *** ein gruener Schutzzauber ***
-   // Setzen der Prop
-   ...
-   tmp=TP->QueryProp(P_TMP_DEFEND_HOOK);
+   // Vor dem Setzen der Prop pruefen, ob schon ein Hook gesetzt ist.
 
-   // ein etwas ausfuehrlicher Check, ob wir ueberschreiben koennen,
-   // Existenz && Gueltigkeit
-   if(pointerp(tmp) && sizeof(tmp) && intp(tmp[0]) && (time()<tmp[0]))
-    write("Der Zauber klappt nicht!\n");
+   <int|object|string|string*>* tmp = TP->QueryProp(P_TMP_DEFEND_HOOK);
+
+   // Ein etwas ausfuehrlicherer Check, ob wir ueberschreiben koennen,
+   // Existenz && noch nicht abgelaufen?
+   if(sizeof(tmp) && intp(tmp[0]) && time() < tmp[0]) {
+     write("Der Zauber klappt nicht!\n");
+   }
    else {
-    // der Zauber gilt eine Stunde
-    TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
-    write("Ein Zauber legt sich auf dich.\n");
+     // der Zauber gilt eine Stunde
+     TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
+     write("Ein Zauber legt sich auf Dich.\n");
    }
    ...
 
    // die gerufene Methode
-   mixed abwehrfun(int dam, string* dam_type, mapping spell, object en) {
-    // keine rekursiven Schaeden abfangen ... mindestens ein magischer
-    // muss auch dabei sein
-    if((!mappingp(spell) || !spell[SP_RECURSIVE]) &&
-       sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
+   int|<int|string*|mapping>* abwehrfun(int dam, string* dam_type,
+                                    mapping spell, object en)
+   {
+     // keine rekursiven Schaeden abfangen ... mindestens ein magischer
+     // muss auch dabei sein
+     if(!spell[SP_RECURSIVE] &&
+        sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
+       // mit 10% Whkeit schuetzt der Zauber total
+       if(!random(10)) {
+         tell_object(previous_object(),
+           "Dein Zauber gleisst rund um Dich gruen auf.\n");
+         tell_room(environment(previous_object()), break_string(
+           previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
+           previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
+           ({previous_object()}));
 
-     // mit 10% Whkeit schuetzt der Zauber total
-     if(!random(10)) {
-      tell_object(previous_object(),
-        "Dein Zauber gleisst rund um dich gruen auf.\n");
-      tell_room(environment(previous_object()), break_string(
-        previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
-        previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
-        ({previous_object()}));
+         // manchmal geht der Zauber dabei endgueltig kaputt
+         if(!random(10))
+           previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
 
-      // manchmal geht der Zauber dabei endgueltig kaputt
-      if(!random(10)) previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
+         return 0;                    // volles Abfangen des Angriffs
+       }
 
-      return 0;                       // volles Abfangen des Angriffs
+       // der Zauber schuetzt auf jeden Fall immer ein bischen
+       tell_object(previous_object(),
+         "Dein Zauber flackert rund um dich gruen auf.\n");
+       tell_room(environment(previous_object()), break_string(
+         previous_object()->Name(WESSEN)+" Haut flackert rund um "+
+         previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
+         ({previous_object()}));
+       dam = (7+random(2))*dam/10;    // Schaden reduzieren
+
+       return(({dam, dam_type, spell}));
      }
 
-     // der Zauber schuetzt auf jeden Fall immer ein bischen
-     tell_object(previous_object(),
-       "Dein Zauber flackert rund um dich gruen auf.\n");
-     tell_room(environment(previous_object()), break_string(
-       previous_object()->Name(WESSEN)+" Haut flackert rund um "+
-       previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
-       ({previous_object()}));
-     dam=(7+random(2))*dam/10;        // Schaden reduzieren
-
-     return(({dam, dam_type, spell}));
-    }
-
-    // der Zauber schuetzt dann gar nicht ...
-    return 1;
+     // der Zauber schuetzt dann gar nicht ...
+     return 1;
    }
 
 
 SIEHE AUCH
 ==========
 
-   Angriff:   Attack(L)
-   Schutz:    Defend(L)
-   Verwandt:  InternalModifyDefend(L), P_TMP_ATTACK_MOD
-   Hooks:     P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
+   Angriff:      Attack(L)
+   Schutz:     Defend(L)
+   Verwandt:   InternalModifyDefend(L), P_TMP_ATTACK_MOD
+   Hooks:          P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
    neue Hooks: std/hooks
 
-08.12.2008, Zesstra
+29.12.2020, Arathorn