diff --git a/doc/lfun/Pacify b/doc/lfun/Pacify
index feca7bf..8b94854 100644
--- a/doc/lfun/Pacify
+++ b/doc/lfun/Pacify
@@ -18,33 +18,29 @@
 BESCHREIBUNG
 ============
 
-         Diese Funktion versucht, ein Lebewesen zu befrieden.
+   Diese Funktion versucht, ein Lebewesen zu befrieden.
    Will eine Gilde ein Lebewesen befrieden, muss sie hierfuer diese Funktion
    in dem Lebewesen aufrufen.
 
-   Ein immer befriedbarer NPC kann durch das Setzen von P_ACCEPT_PEACE in einem
-   Lebewesen realisiert werden.
+   Ein immer befriedbarer NPC kann durch das Setzen von P_ACCEPT_PEACE in
+   einem Lebewesen realisiert werden.
 
-         Standardmaessig funktioniert die Funktion wie folgt:
+   Standardmaessig funktioniert die Funktion wie folgt:
+
    * Kommt der Versuch vom Spellcaster selbst, ist er immer erfolgreich.
    * Kommt der Versuch von einem Teamkollegen, ist er immer erfolgreich.
    * Hat das Lebewesen keine Gegner, ist der Versuch immer erfolglos.
+
    In diesen Faellen erfolgt auch keine Erhoehung des Befriedezaehlers.
 
-
-
    In anderen Faellen wird die in P_PEACE_HISTORY fuer die Gilde des Casters
    abgelegte Zahl erfolgreicher Befriedungen (ANZ), die Intelligenz des
    Casters (INT_CASTER) und die Intelligenz des Lebenwesens selber (INT_ME)
    ermittelt.
    Anschliessend wird eine Wahrscheinlichkeit w ausgerechnet:
 
-
-
      w = (INT_CASTER + 10 - ANZ*4) / (INT_ME + 10)
 
-
-
    Hierbei gibt w die Chance auf eine erfolgreiche Befriedung an. Mittels einer
    Zufallszahl wird bestimmt, ob der aktuelle Versuch erfolgreich ist. Falls
    ja, wird der Zaehler fuer die Gilde des Casters in P_PEACE_HISTORY erhoeht.
@@ -56,12 +52,14 @@
 BEMERKUNGEN
 ===========
 
-   *     Die Funktion kann auch ueberschrieben werden, um ein vom Magier
-     gewuenschtes Verhalten zu realisieren. Ein komplettes Abhaengen von
-     Befriedungen sollte dabei aber die Ausnahme sein!
-   * Diese Funktion verwaltet auch das P_PEACE_HISTORY, speziell die Reduktion
-     der Erfolgszaehler. Ueberschreibt man sie ohne das geerbte Pacify()
-     zu nutzen, wird P_PEACE_HISTORY nicht mehr verwaltet.
+   * Die Funktion kann auch ueberschrieben werden, um ein vom Magier
+     gewuenschtes Verhalten zu realisieren. Ein komplettes Abhaengen
+     von Befriedungen sollte dabei aber die Ausnahme sein!
+
+   * Diese Funktion verwaltet auch das P_PEACE_HISTORY, speziell die
+     Reduktion der Erfolgszaehler. Ueberschreibt man sie ohne das
+     geerbte Pacify() zu nutzen, wird P_PEACE_HISTORY nicht mehr
+     verwaltet.
 
 
 RUECKGABEWERTE
@@ -74,10 +72,11 @@
 BEISPIELE
 =========
 
-      Angenommen, der Caster hat eine Intelligenz von 22. Die folgende Tabelle
-      gibt dann die Wahrscheinlichkeiten fuer eine erfolgreiche Befriedung an:
-      (in Abhaengigkeit von eigener Intelligenz und vergangener erfolgreicher
-       Versuche)
+    Angenommen, der Caster hat eine Intelligenz von 22. Die folgende Tabelle
+    gibt dann die Wahrscheinlichkeiten fuer eine erfolgreiche Befriedung an:
+    (in Abhaengigkeit von NPC-Intelligenz INT_ME und vergangener erfolgreicher
+    Versuche).
+
    INT_ME  Erfolgswahrscheinlichkeiten je nach Anzahl erfolgreicher Versuche
                 1       2       3       4       5       6       7       8
         0     280     240     200     160     120      80      40       0
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
diff --git a/doc/sphinx/lfun/Pacify.rst b/doc/sphinx/lfun/Pacify.rst
index 8a68c42..495f6c1 100644
--- a/doc/sphinx/lfun/Pacify.rst
+++ b/doc/sphinx/lfun/Pacify.rst
@@ -17,20 +17,20 @@
 ------------
 ::
 
-	Diese Funktion versucht, ein Lebewesen zu befrieden.
+  Diese Funktion versucht, ein Lebewesen zu befrieden.
   Will eine Gilde ein Lebewesen befrieden, muss sie hierfuer diese Funktion
   in dem Lebewesen aufrufen.
 
-  Ein immer befriedbarer NPC kann durch das Setzen von P_ACCEPT_PEACE in einem
-  Lebewesen realisiert werden.
+  Ein immer befriedbarer NPC kann durch das Setzen von P_ACCEPT_PEACE in 
+  einem Lebewesen realisiert werden.
 
-	Standardmaessig funktioniert die Funktion wie folgt:
+  Standardmaessig funktioniert die Funktion wie folgt:
+
   * Kommt der Versuch vom Spellcaster selbst, ist er immer erfolgreich.
   * Kommt der Versuch von einem Teamkollegen, ist er immer erfolgreich.
   * Hat das Lebewesen keine Gegner, ist der Versuch immer erfolglos.
-  In diesen Faellen erfolgt auch keine Erhoehung des Befriedezaehlers.
 
-  
+  In diesen Faellen erfolgt auch keine Erhoehung des Befriedezaehlers.
 
   In anderen Faellen wird die in P_PEACE_HISTORY fuer die Gilde des Casters
   abgelegte Zahl erfolgreicher Befriedungen (ANZ), die Intelligenz des
@@ -38,12 +38,8 @@
   ermittelt.
   Anschliessend wird eine Wahrscheinlichkeit w ausgerechnet:
 
-  
-
     w = (INT_CASTER + 10 - ANZ*4) / (INT_ME + 10)
 
-  
-
   Hierbei gibt w die Chance auf eine erfolgreiche Befriedung an. Mittels einer
   Zufallszahl wird bestimmt, ob der aktuelle Versuch erfolgreich ist. Falls
   ja, wird der Zaehler fuer die Gilde des Casters in P_PEACE_HISTORY erhoeht.
@@ -53,9 +49,8 @@
 
 BEMERKUNGEN
 -----------
-::
 
-  *	Die Funktion kann auch ueberschrieben werden, um ein vom Magier
+  * Die Funktion kann auch ueberschrieben werden, um ein vom Magier
     gewuenschtes Verhalten zu realisieren. Ein komplettes Abhaengen von
     Befriedungen sollte dabei aber die Ausnahme sein!
   * Diese Funktion verwaltet auch das P_PEACE_HISTORY, speziell die Reduktion
@@ -68,17 +63,17 @@
 
     1 - das Lebewesen wurde erfolgreich befriedet..
     0 - der Befriedeversuch ist gescheitert.
-
     
 
 BEISPIELE
 ---------
 ::
 
-    Angenommen, der Caster hat eine Intelligenz von 22. Die folgende Tabelle
-    gibt dann die Wahrscheinlichkeiten fuer eine erfolgreiche Befriedung an:
-    (in Abhaengigkeit von eigener Intelligenz und vergangener erfolgreicher
-     Versuche)
+  Angenommen, der Caster hat eine Intelligenz von 22. Die folgende Tabelle
+  gibt dann die Wahrscheinlichkeiten fuer eine erfolgreiche Befriedung an:
+  (in Abhaengigkeit von NPC-Intelligenz INT_ME und vergangener erfolgreicher
+  Versuche).
+
  INT_ME  Erfolgswahrscheinlichkeiten je nach Anzahl erfolgreicher Versuche
               1       2       3       4       5       6       7       8
       0     280     240     200     160     120      80      40       0
@@ -142,7 +137,5 @@
 
 LETZTE AENDERUNG
 ----------------
-::
-
 07.06.2008, Zesstra
 
diff --git a/doc/sphinx/props/P_GUILD_RATING.rst b/doc/sphinx/props/P_GUILD_RATING.rst
index b752e00..aa6862d 100644
--- a/doc/sphinx/props/P_GUILD_RATING.rst
+++ b/doc/sphinx/props/P_GUILD_RATING.rst
@@ -26,9 +26,16 @@
 -----------
 ::
 
-	Der Wert muss von der Gilde ermittelt werden! Meist setzt er sich
-	aus den Faehigkeiten des Mitglieds zusammen und mitunter fliessen
-	auch Gildenquests oder aehnliches mit ein.
+  Der Wert muss von der Gilde ermittelt werden! Meist setzt er sich
+  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
 ----------
@@ -37,5 +44,5 @@
     P_NEWSKILLS, GuildRating
 
 
-Last modified: Wed Jan 14 19:17:06 1998 by Patryn
+Last modified: 2021-01-10, Arathorn 
 
diff --git a/doc/sphinx/props/obsolete/P_TMP_DEFEND_HOOK.rst b/doc/sphinx/props/obsolete/P_TMP_DEFEND_HOOK.rst
index 5d9ae39..5074ab0 100644
--- a/doc/sphinx/props/obsolete/P_TMP_DEFEND_HOOK.rst
+++ b/doc/sphinx/props/obsolete/P_TMP_DEFEND_HOOK.rst
@@ -26,12 +26,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
@@ -39,10 +41,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
@@ -53,79 +55,88 @@
 ::
 
      - 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
 
