Vorbereitungen Empfang TMs, wenn offline.

Wenn ein Spieler/Magier auch in Abwesenheit TMs empfangen koennen
will, kann das Spielerobjekt beim zentralen KOBOLD (/secure/kobold)
ein "Vault" deponieren.
Ist die Empfaengerin eines TMs nicht anwesend (und auch kein anderes
Lebewesen mit dem Namen), fragt das Spielerobjekt, ob der KOBOLD
ein passendes Vault hat. Wenn ja, wird das TM dort abgelegt,
aehnlich bei beim konventionellen Kobold.

Die Vaults sind LWOs, auf welche Spielerobjekte und der KOBOLD eine
Referenz haben. Wenn das Spielerobjekt neu erzeugt wird, fragt es
beim KOBOLD, ob ein Vault existiert und bekommt ggf. eine Referenz.
Es kann dann die gespeicherten Nachrichten aus dem Vault abrufen.

Dieser Commit erzeugt das Grundgeruest von KOBOLD und der Vaults
und ermoeglicht das Speichern von Nachrichten dort.
Die tatsaechliche Moeglichkeit des Deponierens des Vaults im
KOBOLD folgt spaeter.

Change-Id: I56604858a38482c8f9844b9f371d9fb6950bf1f9
diff --git a/std/player/comm_vault.c b/std/player/comm_vault.c
new file mode 100644
index 0000000..81541d6
--- /dev/null
+++ b/std/player/comm_vault.c
@@ -0,0 +1,58 @@
+#pragma strict_types, rtt_checks, lightweight
+
+#define NEED_PROTOTYPES
+#include <player/comm.h>
+
+inherit "/std/player/comm_structs";
+
+nosave string uuid;
+// nosave ist wichtig - niemand soll den buffer mit save_value() auslesen
+// koennen!
+nosave struct stored_msg_s *buffer = ({});
+
+protected void create_lw()
+{
+    uuid = getuuid(previous_object());
+}
+
+public string uuid()
+{
+    return uuid;
+}
+
+public struct stored_msg_s *Retrieve()
+{
+//    if (getuid(this_object()) == getuid(previous_object()))
+    {
+        return buffer;
+    }
+    return 0;
+}
+
+public void Empty()
+{
+//    if (getuid(this_object()) == getuid(previous_object()))
+    {
+        buffer = ({});
+    }
+}
+
+public int store_msg(string msg, int msg_type, string msg_action,
+                     string msg_prefix, object origin)
+{
+    // Nur KOBOLD in /secure darf Nachrichten speichern und es werden nur
+    // Nachrichten von Spielern/Magiern gespeichert.
+    if (object_name(previous_object()) != KOBOLD
+        || !query_once_interactive(origin))
+        return MSG_FAILED;
+    if (sizeof(buffer) >= MAX_KOBOLD_LIMIT)
+        return MSG_BUFFER_FULL;
+
+    buffer += ({ (<stored_msg_s> msg:msg, type:msg_type,
+                  prefix: msg_prefix, action: msg_action,
+                  sendername: ({string})origin.query_real_name(),
+                  timestamp: time())
+               });
+    return MSG_BUFFERED;
+}
+