diff --git a/doc/beispiele/zauberwald/npc/arina.c b/doc/beispiele/zauberwald/npc/arina.c
index 9e08e25..588fe8c 100644
--- a/doc/beispiele/zauberwald/npc/arina.c
+++ b/doc/beispiele/zauberwald/npc/arina.c
@@ -88,7 +88,7 @@
    return (int)::Defend(dam, dts, spell, enemy);
 }
 
-void NotifyPlayerDeath(object who, object killer, object lost_exp)
+void NotifyPlayerDeath(object who, object killer, int lost_exp)
 {
   if (!who || killer!=ME) return; // uninteressant
   log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/arina\n");
diff --git a/doc/beispiele/zauberwald/npc/laufeiche.c b/doc/beispiele/zauberwald/npc/laufeiche.c
index 0649276..c5b0bb8 100644
--- a/doc/beispiele/zauberwald/npc/laufeiche.c
+++ b/doc/beispiele/zauberwald/npc/laufeiche.c
@@ -117,7 +117,7 @@
 int PreventFollow(object dest)
 {  return moving::mnpc_PreventFollow(dest);  }
 
-void NotifyPlayerDeath(object who, object killer, object lost_exp)
+void NotifyPlayerDeath(object who, object killer, int lost_exp)
 {
   if (!who || killer!=ME) return; // uninteressant
   log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/laufeiche\n");
diff --git a/doc/beispiele/zauberwald/npc/pixie.c b/doc/beispiele/zauberwald/npc/pixie.c
index 7ed953d..e0bb95d 100644
--- a/doc/beispiele/zauberwald/npc/pixie.c
+++ b/doc/beispiele/zauberwald/npc/pixie.c
@@ -143,7 +143,7 @@
    if (enemy && present(enemy, environment())) ::Attack(enemy);
 }
 
-void NotifyPlayerDeath(object who, object killer, object lost_exp)
+void NotifyPlayerDeath(object who, object killer, int lost_exp)
 {
   if (!who || killer!=ME) return; // uninteressant
   log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/pixie\n");
diff --git a/doc/beispiele/zauberwald/npc/riese.c b/doc/beispiele/zauberwald/npc/riese.c
index a68a3e2..ca25f6f 100644
--- a/doc/beispiele/zauberwald/npc/riese.c
+++ b/doc/beispiele/zauberwald/npc/riese.c
@@ -77,7 +77,7 @@
    AddId("felsenschieber");
 }
 
-void NotifyPlayerDeath(object who, object killer, object lost_exp)
+void NotifyPlayerDeath(object who, object killer, int lost_exp)
 {
   if (!who || killer!=ME) return; // uninteressant
   log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))
diff --git a/doc/beispiele/zauberwald/npc/titina.c b/doc/beispiele/zauberwald/npc/titina.c
index adce062..cb79ab0 100644
--- a/doc/beispiele/zauberwald/npc/titina.c
+++ b/doc/beispiele/zauberwald/npc/titina.c
@@ -101,7 +101,7 @@
    return (int)::Defend(dam, dts, spell, enemy);
 }
 
-void NotifyPlayerDeath(object who, object killer, object lost_exp)
+void NotifyPlayerDeath(object who, object killer, int lost_exp)
 {
   if (!who || killer!=ME) return; // uninteressant
   log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/titina\n");
diff --git a/doc/beispiele/zauberwald/npc/ulinia.c b/doc/beispiele/zauberwald/npc/ulinia.c
index 7ea596e..d0acbc0 100644
--- a/doc/beispiele/zauberwald/npc/ulinia.c
+++ b/doc/beispiele/zauberwald/npc/ulinia.c
@@ -147,7 +147,7 @@
    return (int)::Defend(dam, dts, spell, enemy);
 }
 
-void NotifyPlayerDeath(object who, object killer, object lost_exp)
+void NotifyPlayerDeath(object who, object killer, int lost_exp)
 {
   if (!who || killer!=ME) return; // uninteressant
   log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/ulinia\n");
diff --git a/doc/beispiele/zauberwald/npc/waechter.c b/doc/beispiele/zauberwald/npc/waechter.c
index 55c1a10..849194d 100644
--- a/doc/beispiele/zauberwald/npc/waechter.c
+++ b/doc/beispiele/zauberwald/npc/waechter.c
@@ -80,7 +80,7 @@
    return (int)::remove();
 }
 
-void NotifyPlayerDeath(object who, object killer, object lost_exp)
+void NotifyPlayerDeath(object who, object killer, int lost_exp)
 {
   if (!who || killer!=ME) return; // uninteressant
   log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/waechter\n");
