TM-History: langlebigen Modus dokumentiert

Langlebigen Modus dokumentiert und vollstaendig aktiviert,
manuelles Loeschen der TM-Hist eingebaut.

Change-Id: I3c63bd22d1443eec8ab17c4f09f7e7904fac8fdf
diff --git a/std/player/base.c b/std/player/base.c
index e39f33a..7b3b42a 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -3466,7 +3466,7 @@
 
   say(capitalize(name(WER))+" hat gerade die Verbindung zu "MUDNAME" gekappt.\n");
   remove_interactive(ME);
-  call_out(#'clear_tell_history,4);
+  call_out(#'clear_tell_history, 4, 0);
   return 1;
 }
 
diff --git a/std/player/comm.c b/std/player/comm.c
index 7025a86..312f7e5 100644
--- a/std/player/comm.c
+++ b/std/player/comm.c
@@ -650,10 +650,10 @@
     ReceiveMsg(sprintf(
       "\nadd_to_tell_history(): got bad uid argument %O."
       "sent: %d, recv: %d, flags: %d, msg: %s", 
-      uid, sent, recv, flags, message),MT_DEBUG|MSG_BS_LEAVE_LFS,0,0,ME);              
+      uid, sent, recv, flags, message),MT_DEBUG|MSG_BS_LEAVE_LFS,0,0,ME);
   }
 
-  // letzten Gespraechspartner fuer erwidere.
+  // Gespraechspartner fuer erwidere auch ohne tmhist speichern.
   if (flags & (MSGFLAG_TELL|MSGFLAG_RTELL))
     last_comm_partner = uid;
 
@@ -677,6 +677,7 @@
     }
   }
 
+  // mit eingeschalteter History weitere Details speichern.
   if (!tell_history_enabled)
     return;
 
@@ -718,6 +719,7 @@
     chat->recvcount += recv;
   }
 
+  // ggf. auch INhalte von Gespraechen speichern
   if (tell_history_enabled < TELLHIST_ENABLED)
     return;
 
@@ -743,21 +745,18 @@
   msg->timestamp = time();
 }
 
-protected void clear_tell_history()
+protected void clear_tell_history(int force)
 {
   /* Nach einem "schlafe ein" werden die gespeicherten Mitteilungen geloescht,
      sofern der Spieler nichts abweichendes eingestellt hat. */
 
-#ifdef TELLHIST_LONGLIFE
-  if (tell_history_enabled == TELLHIST_LONGLIFE)
-    return;
-#endif
-
-  foreach (string uid, struct chat_s chat: tell_history)
-    if (pointerp(chat->msgbuf)) {
-      chat->msgbuf = 0;
-      chat->ptr = 0;
-    }
+  // bei manuellem Loeschen (force==1) immer loeschen, ansonsten nur, wenn die
+  // History nicht "long-life" ist.
+  if (tell_history_enabled < TELLHIST_LONGLIFE || force)
+  {
+    tell_history = ([]);
+    commreceivers = ({});
+  }
 }
 
 protected void reset(void)
@@ -767,7 +766,7 @@
      wie bei einem "schlafe ein" die Mitteilungen geloescht. */
 
   if (!interactive())
-    clear_tell_history();
+    clear_tell_history(0);
 
 }
 
@@ -1657,12 +1656,21 @@
     tell_history_enabled = TELLHIST_DISABLED;
     write("Ok, es wird nichts mehr gespeichert.\n");
     if (sizeof(tell_history)) {
-      tell_history = ([]);
-      commreceivers = ({});
+      clear_tell_history(1);
       write("Deine Mitteilungsgeschichte wurde geloescht.\n");
     }
     return 1;
   }
+  if (str == "loeschen")
+  {
+    if (sizeof(tell_history)) {
+      clear_tell_history(1);
+      write("Deine Mitteilungsgeschichte wurde geloescht.\n");
+    }
+    else
+      write("Deine Mitteilungsgeschichte war schon leer.\n");
+    return 1;
+  }
 
   if (str == "namen") {
     int flag;
@@ -1685,14 +1693,12 @@
     return 1;
   }
 
-#ifdef TELLHIST_LONGLIFE
   if (str == "langlebig") {
     tell_history_enabled = TELLHIST_LONGLIFE;
     write("Ok, zukuenftige Mitteilungen werden jeweils bis zum naechsten "
           "Ende/Crash/\nReboot gespeichert.\n");
     return 1;
   }
-#endif
 
   if (str == "status") {
     switch (tell_history_enabled) {
@@ -1705,12 +1711,10 @@
       case TELLHIST_ENABLED:
         write("Deine Mitteilungen werden gespeichert.\n");
         break;
-#ifdef TELLHIST_LONGLIFE
       case TELLHIST_LONGLIFE:
         write("Deine Mitteilungen werden jeweils bis zum naechsten Ende/"
               "Crash/Reboot\ngespeichert.\n");
         break;
-#endif
     }
     return 1;
   }