Offline-TMs integrieren
Vaults koennen beim Kobold hinterlegt werden, d.h. Spieler koennen
die Funktionalitaet einschalten, bei Abwesenheit TMs zu empfangen.
Die Vaults werden beim Login abgerufen und in den 'online'-Kobold
und die TM-History uebertragen. Von dort werden sie letztendlich
wie alle anderen Nachrichten auch angezeigt.
Change-Id: Ib8e8b21304795dd9f0be057f9357c5f5239f260c
diff --git a/secure/kobold.c b/secure/kobold.c
index b1be5aa..f6f0584 100644
--- a/secure/kobold.c
+++ b/secure/kobold.c
@@ -8,11 +8,33 @@
#include "/sys/player/comm.h"
-mapping vaults = ([]);
+/** vaults ist ein mapping, welches alle vaults enthaelt.
+ *
+ * Struktur: UID als Schluessel (string) und Vault (lwobject) als
+ * Wert.
+*/
+private nosave mapping vaults = ([]);
+
+#define MEMORY "/secure/memory"
+#ifndef DEBUG
+#define DEBUG(x) if (find_player("zesstra"))\
+ tell_object(find_player("zesstra"),\
+ "kobold: "+x+"\n")
+#endif
protected void create()
{
- // TODO: Speichern in MEMORY
+ seteuid(getuid());
+ mixed tmp = ({mapping})MEMORY->Load("Kobold");
+ if (mappingp(tmp)) {
+ vaults = tmp;
+ DEBUG("Daten aus MEMORY geladen.\n");
+ }
+ else {
+ DEBUG("Keine Daten in MEMORY vorhanden - reinitialisiere.\n");
+ if (({int})MEMORY->Save("Kobold", vaults) != 1)
+ raise_error("Konnte Daten nicht im Memory ablegen.\n");
+ }
}
// Einlagern von Vaults durch Spieler
@@ -42,7 +64,7 @@
}
// Pointer auf nen Vault vergessen.
-// Im Erfolgsfall wird das Vault zurueckgeben.
+// Im Erfolgsfall wird das Vault zurueckgeben, was wir nicht mehr speichern
// Aufruf *nur* durch den Spieler mit der richtigen UUID selber.
public lwobject "/std/player/comm_vault" ForgetVault()
{
@@ -51,7 +73,8 @@
lwobject "/std/player/comm_vault" vault = vaults[getuid(previous_object())];
// Und noch pruefen, ob auch die UUID uebereinstimmt - es soll kein
// neu angelegter Spieler das Vault von einem aelteren bekommen.
- if (({string})vault.uuid() == getuuid(previous_object()))
+ if (vault &&
+ ({string})vault.uuid() == getuuid(previous_object()))
{
m_delete(vaults, getuid(previous_object()));
return vault;
diff --git a/secure/memory_lib b/secure/memory_lib
index 06539b1..84a7ce5 100644
--- a/secure/memory_lib
+++ b/secure/memory_lib
@@ -7,3 +7,4 @@
/p/daemon/channeld
/p/daemon/traveld
/secure/shadowmaster
+/secure/kobold