Loeschen von Spielern ermoeglichen

Schaltet ein Spieler aus, dass er in Toplisten
auftauchen will, wurde er bislang nicht sofort
geloescht. Dies passiert ab jetzt.
Interaktive Spielershells koennen ihren eigenen
Eintrag loeschen, EM+ beliebige.

Change-Id: I98792db1d7130ae3cdd5031899dde459f558cf1b
diff --git a/doc/help/topliste b/doc/help/topliste
index 1d986c1..75ae04b 100644
--- a/doc/help/topliste
+++ b/doc/help/topliste
@@ -17,5 +17,10 @@
 
     wird dies wieder rueckgaengig gemacht.
 
+    Hinweis: das Sperren fuer die Toplisten hat sofortigen Effekt (d.h. man
+             wird aus den Listen geloescht), das
+             Entsperren wirkt sich jedoch erst nach dem naechsten Login aus
+             (KEIN 'ende' noetig).
+
  LETZTE AeNDERUNG:
-    Son, 30.8.1998, 22:10:00 von Paracelsus
+    28.1.2017, Zesstra
diff --git a/secure/topliste.c b/secure/topliste.c
index 3e1355c..faf5404 100644
--- a/secure/topliste.c
+++ b/secure/topliste.c
@@ -122,6 +122,22 @@
   }
 }
 
+// Falls ein Spieler sich aus Toplisten austragen will
+public varargs mixed DeletePlayer(string real_name)
+{
+  // (interaktive) Spielershells duerfen sich selber austragen, EM+ beliebige
+  // Spieler
+  if (!ARCH_SECURITY)
+  {
+      if (interactive(previous_object()))
+          real_name = previous_object()->query_real_name();
+      else
+          raise_error("Spieler aus Toplisten loeschen koennen nur Spieler "
+              "selber oder ein EM+.\n");
+  }
+  return sl_exec("DELETE FROM topliste WHERE name = ?1;", real_name);
+}
+
 public varargs < <string|int>* >* Liste(string rasse, string gilde,
                                      int limit, string sort)
 {
diff --git a/std/player/base.c b/std/player/base.c
index eb0521f..bf332b7 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -4133,7 +4133,8 @@
     else
     {
         SetProp(P_NO_TOPLIST,1);
-        write("Du wirst jetzt nicht in der Topliste auftauchen.\n");
+        "/secure/topliste"->DeletePlayer();
+        write("Du wirst jetzt nicht (mehr) in den Toplisten auftauchen.\n");
     }
     Set(P_NO_TOPLIST,SAVE|PROTECTED,F_MODE_AS);
     return 1;