home · contact · privacy
Server: Add save hook.
[plomrogue] / server / io.py
index 01d04365770ace851b97568ea7f0c22cd19dc451..5e02ed4287d1c22e4724a982f2f72718ef3af839 100644 (file)
@@ -170,12 +170,10 @@ def save_world():
         for _id in sorted(world_db[category].keys()):
             string = string + id_string + " " + str(_id) + "\n"
             for key in sorted(world_db[category][_id].keys()):
-                if not key in special_keys:
+                if key.isupper() and not key in special_keys:
                     x = world_db[category][_id][key]
                     argument = quote_escape(x) if str == type(x) else str(x)
                     string = string + key + " " + argument + "\n"
-                elif special_keys[key]:
-                    string = string + special_keys[key](_id)
         return string
 
     def helper_things():
@@ -187,32 +185,13 @@ def save_world():
             t = world_db["Things"][tid]
             for key in sorted(t.keys()):
                 if key not in {"T_CARRIES", "carried", "fovmap", "T_MEMMAP",
-                               "T_MEMTHING", "T_MEMDEPTHMAP"}:
+                               "T_MEMTHING", "T_MEMDEPTHMAP", "pos"}:
                     argument = t[key]
                     string += key + " " + (quote_escape(argument) if \
                             str == type(argument) else str(argument)) + "\n"
             string += memthing(tid) + memmap(tid) + memdepthmap(tid)
         return string
 
-    # ALTERNATIVE TO helper_things, but not more efficient despite listcomp
-    # def helper4():
-    #     def foo(t, key):
-    #         argument = t[key]
-    #         return key + " " + (quote_escape(argument) if \
-    #                 str == type(argument) else str(argument)) + "\n"
-    #     string = ""
-    #     memmap = mapsetter("T_MEMMAP")
-    #     memdepthmap = mapsetter("T_MEMDEPTHMAP")
-    #     for tid in sorted(world_db["Things"].keys()):
-    #         string += "T_ID " + str(tid) + "\n"
-    #         t = world_db["Things"][tid]
-    #         lines = [foo(t, key) for key in sorted(t.keys())
-    #                  if key not in {"T_CARRIES", "carried", "fovmap",
-    #                  "T_MEMMAP", "T_MEMTHING", "T_MEMDEPTHMAP"}]
-    #         string += "".join(lines)
-    #         string += memthing(tid) + memmap(tid) + memdepthmap(tid)
-    #     return string
-
     string = ""
     for plugin in world_db["PLUGIN"]:
         string = string + "PLUGIN " + plugin + "\n"
@@ -233,6 +212,7 @@ def save_world():
             string = string + "T_ID " + str(tid) + "\n"
             for carried in sorted(world_db["Things"][tid]["T_CARRIES"]):
                 string = string + "T_CARRIES " + str(carried) + "\n"
+    string = string + io_db["hook_save"]()
     string = string + "SEED_RANDOMNESS " + str(rand.seed) + "\n" + \
         "WORLD_ACTIVE " + str(world_db["WORLD_ACTIVE"])
     atomic_write(io_db["path_save"], string)
@@ -288,7 +268,7 @@ def obey(command, prefix, replay=False, do_record=False):
                     if world_db["WORLD_ACTIVE"]:
                         save_world()
                     io_db["record_chunk"] = ""
-                    io_db["save_wait"] = time.time()
+                    io_db["save_wait_start"] = time.time()
             io_db["worldstate_updateable"] = world_db["WORLD_ACTIVE"]
     elif 0 != len(tokens):
         print("Invalid command/argument, or bad number of tokens: " + command)
@@ -307,7 +287,7 @@ def obey_lines_in_file(path, name, do_record=False):
 
 def try_worldstate_update():
     """Write worldstate file if io_db["worldstate_updateable"] is set."""
-    if io_db["worldstate_updateable"]:
+    if world_db["WORLD_ACTIVE"] and io_db["worldstate_updateable"]:
         string = ""
         for entry in io_db["worldstate_write_order"]:
             if entry[1] == "world_int":