Hook auf neues System umgestellt

Change-Id: Ia9378e05dda72ea141d9c9c9348ea040163b67a3
diff --git a/spellbooks/ab_spells.c b/spellbooks/ab_spells.c
index 3b45872..463f77c 100644
--- a/spellbooks/ab_spells.c
+++ b/spellbooks/ab_spells.c
@@ -34,11 +34,15 @@
 #include <combat.h>
 #include <wizlevels.h>
 #include <new_skills.h>
+#include <hook.h>
 
 #define LICHTKUGEL "/gilden/files.abenteurer/lichtkugel"
 
 inherit "/std/spellbook";
 
+public <int|<int|string*|mapping|object>*>* Deckung(object caster,
+    int hookid, <int|string*|mapping|object>* data);
+
 void create() {
   ::create();
   SetProp(P_GLOBAL_SKILLPROPS,
@@ -312,32 +316,40 @@
     return 0;
   }
 
-  if (caster->QueryProp(P_TMP_DEFEND_HOOK))
-  {
-    write("Das geht momentan nicht, Du wunderst Dich wieso!\n");
-    return 0;
-  }
-
   if (SpellSuccess(caster,sinfo)<=0)
     return MISSERFOLG;
 
-  caster->SetProp(P_TMP_DEFEND_HOOK, ({ time()+4, this_object(), "Deckung" }));
+  int hres = caster->HRegisterToHook(
+    H_HOOK_DEFEND,
+    #'Deckung,
+    H_HOOK_GUILDPRIO(0),
+    H_HOOK_MODIFICATOR,
+    4);
+  if(hres != 1)
+  {
+    caster->ReceiveMsg(
+      "Das geht momentan nicht, Du wunderst Dich wieso!",
+      MT_NOTIFICATION,
+      MA_SPELL);
+    return 0;
+  }
+
   return ERFOLG;
 }
 
-mixed Deckung(int dam, mixed dam_type, mixed spell, object enemy)
+// Diese Funktion wird auch von d/inseln/tilly/volgonen/rooms/std/para_vulkan.c 
+// verwendet und muss daher public sein.
+public <int|<int|string*|mapping|object>*>* Deckung(object caster,
+    int hookid, <int|string*|mapping|object>* data)
 {
-  if (!pointerp(dam_type))
-    dam_type = ({ dam_type });
-  if (sizeof(dam_type & m_indices(PHYSICAL_DAMAGE_TYPES)))
+  if (sizeof(data[1] & m_indices(PHYSICAL_DAMAGE_TYPES)))
   {
-    tell_object(previous_object(), "Du weichst gekonnt aus.\n");
-    if (previous_object()->QueryProp(P_TMP_DEFEND_HOOK)[1] == this_object())
-      previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
-    return 0;
+    tell_object(caster, "Du weichst gekonnt aus.\n");
+    caster->HUnregisterFromHook(H_HOOK_DEFEND, #'Deckung);
+    return ({H_CANCELLED, data});
   }
-  tell_object(previous_object(), "Dein Ausweichversuch ist vergebens.\n");
-  return ({ dam, dam_type, spell, enemy });
+  tell_object(caster, "Dein Ausweichversuch ist vergebens.\n");
+  return ({H_NO_MOD, data});
 }
 
 int