Telnet-Keepalive: Delay konfigurierbar

Das Delay fuer das Telnet Keepalive ist ueber die Prop
P_TELNET_KEEPALIVE_DELAY konfigurierbar.
Momentan koennen das nur Magier. Fuer Spieler sollte
ein sinnvoller Default gewaehlt werden und bei Bedarf
durch einen Magier geaendert werden.

Change-Id: I556f298bde3b4ee8ece6df01051010316c2436b3
diff --git a/std/player/base.c b/std/player/base.c
index e83930e..b48fadc 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -73,6 +73,7 @@
 #include "/secure/questmaster.h"
 #include "/secure/lepmaster.h"
 #include <events.h>
+#include <player/telnetneg.h>
 
 #undef NAME /* DEFINED BY UDP.H; BAD NAME CLASH :( */
 #define NAME(who) capitalize(getuid(who))
@@ -742,7 +743,7 @@
   * @return 1, falls der Spieler Keep-Alive Paket wuenscht, sonst 0. 
   * @see heart_beat()
 */
-protected int CheckTelnetKeepAlive() {
+protected int CheckTelnetKeepAlive(int delay) {
   if (telnet_tm_counter > 0) {
     // Spieler hat offenbar ein Keep-Alive konfiguriert ...
     if (!(--telnet_tm_counter)) {
@@ -753,7 +754,7 @@
       // alle 120 HBs (240s, 4min).
       // sollte eigentlich 240 / __HEART_BEAT_INTERVAL__ sein. Aber spart
       // eine Operation im HB. ;-)
-      telnet_tm_counter = 120;
+      telnet_tm_counter = delay || 120;
     }
     return 1; // Keep-Alive ist eingeschaltet
   }
@@ -809,7 +810,7 @@
   if (CheckDailyPlaytime())
     return;
 
-  CheckTelnetKeepAlive();
+  CheckTelnetKeepAlive(QueryProp(P_TELNET_KEEPALIVE_DELAY));
 
   life::heart_beat();
   combat::heart_beat();
@@ -4213,11 +4214,16 @@
 
 private int set_keep_alive(string str) {
   if (str == "ein") {
-    telnet_tm_counter = 240 / __HEART_BEAT_INTERVAL__;
-    tell_object(this_object(), break_string(
-        "An Deinen Client werden jetzt alle 4 Minuten unsichtbare Daten "
+    telnet_tm_counter = QueryProp(P_TELNET_KEEPALIVE_DELAY) || (240 / __HEART_BEAT_INTERVAL__);
+    tell_object(this_object(), break_string( sprintf(
+        "An Deinen Client werden jetzt alle %i Sekunden unsichtbare Daten "
         "geschickt, um zu verhindern, dass Deine Verbindung zum "MUDNAME
-        " beendet wird.", 78));
+        " beendet wird.",
+        telnet_tm_counter*__HEART_BEAT_INTERVAL__), 78));
+    // Bei Magiern ist der HB evtl. ausgeschaltet und muss eingeschaltet
+    // werden.
+    if (!object_info(this_object(), OC_HEART_BEAT))
+      configure_object(this_object(), OC_HEART_BEAT, 1);
   }
   else if (str == "aus") {
     telnet_tm_counter = 0;