Defaultwert für SP_REDUCE_ARMOUR

Möchte man, dass nur ein bestimmter Rüstungstyp zur Abwehr verwendet
werden kann, weil ein Angriff sich beispielsweise gegen den Kopf richtet
und Schuhe, Hose etc. daher keine Wirkung haben sollen, muss das Mapping
jeden einzelnen Rüstungsteil enthalten und ist daher äußerst unhandlich.

Aus diesem Grund ist es jetzt möglich, mit AT_DEFAULT_REDUCE einen
Defaultwert zu setzen, der für alle nicht explizit gesetzten Rüstungen gilt.

Change-Id: I14ac5752ec27211c98785b1fcb1974feecc2d4f1
diff --git a/std/living/combat.c b/std/living/combat.c
index 2ab6562..ff74256 100644
--- a/std/living/combat.c
+++ b/std/living/combat.c
@@ -1022,6 +1022,25 @@
     }
     if ( !mappingp(spell[SP_REDUCE_ARMOUR]) )
       spell[SP_REDUCE_ARMOUR] = ([]);
+    else
+    {
+      // Erstmal die Variable setzen, damit die folgenden Abfragen
+      // uebersichtlicher werden. Auf die Existenz muss trotzdem geprueft
+      // werden, weil bei einem nicht existierenden Key auch 0 zurueckgegeben
+      // wuerde.
+      int default_reduce = ({int})spell[SP_REDUCE_ARMOUR][AT_DEFAULT_REDUCE];
+      if(AT_DEFAULT_REDUCE in spell[SP_REDUCE_ARMOUR] &&
+          default_reduce >= 0)
+      {
+        foreach(string key :
+            VALID_ARMOUR_CLASS + ([P_PARRY_WEAPON: 0, P_BODY: 0]))
+        {
+          if(key in spell[SP_REDUCE_ARMOUR]) continue;
+
+          m_add(spell[SP_REDUCE_ARMOUR], key, default_reduce);
+        }
+      }
+    }
   }
   else // Illegaler spell-Parameter
     raise_error(sprintf("Ungueltiger Typ des spell-Arguments: %d\n",