home · contact · privacy
Ignore lowercase-starting (= player) commands when world is inactive.
[plomrogue] / roguelike-server
index 5b37324c0d5f203c4efdacf28a7989c333a1f797..d807447bd46cc968bd462da2fd68bfde3a6125d6 100755 (executable)
@@ -109,7 +109,8 @@ def obey(command, prefix, replay=False, do_record=False):
     is called (and io_db["record_chunk"] written) if 15 seconds have passed
     since the last time it was called. The prefix string is inserted into the
     server's input message between its beginning 'input ' and ':'. All activity
-    is preceded by a server_test() call.
+    is preceded by a server_test() call. Commands that start with a lowercase
+    letter are ignored when world_db["WORLD_ACTIVE"] is False/0.
     """
     server_test()
     if io_db["verbose"]:
@@ -123,6 +124,8 @@ def obey(command, prefix, replay=False, do_record=False):
        and len(tokens) == commands_db[tokens[0]][0] + 1:
         if commands_db[tokens[0]][1]:
             commands_db[tokens[0]][2](*tokens[1:])
+        elif tokens[0][0].islower() and not world_db["WORLD_ACTIVE"]:
+            print("Ignoring lowercase-starting commands when world inactive.")
         elif replay:
             print("Due to replay mode, reading command as 'go on in record'.")
             line = io_db["file_record"].readline()
@@ -139,7 +142,8 @@ def obey(command, prefix, replay=False, do_record=False):
                 if time.time() > io_db["save_wait"] + 15:
                     atomic_write(io_db["path_record"], io_db["record_chunk"],
                                  do_append=True)
-                    save_world()
+                    if world_db["WORLD_ACTIVE"]:
+                        save_world()
                     io_db["record_chunk"] = ""
                     io_db["save_wait"] = time.time()
             io_db["worldstate_updateable"] = world_db["WORLD_ACTIVE"]
@@ -1116,7 +1120,8 @@ def command_ping():
 def command_quit():
     """Abort server process."""
     if None == opts.replay:
-        save_world()
+        if world_db["WORLD_ACTIVE"]:
+            save_world()
         atomic_write(io_db["path_record"], io_db["record_chunk"], do_append=True)
     raise SystemExit("received QUIT command")
 
@@ -1283,10 +1288,9 @@ def command_worldactive(worldactive_string):
     """Toggle world_db["WORLD_ACTIVE"] if possible.
 
     An active world can always be set inactive. An inactive world can only be
-    set active with a "wait" ThingAction, and a player Thing (of ID 0). On
-    activation, rebuild all Things' FOVs, and the player's map memory.
+    set active with a "wait" ThingAction, and a player Thing (of ID 0), and a
+    map. On activation, rebuild all Things' FOVs, and the player's map memory.
     """
-    # In original version, map existence was also tested (unnecessarily?).
     val = integer_test(worldactive_string, 0, 1)
     if val:
         if 0 != world_db["WORLD_ACTIVE"]:
@@ -1305,7 +1309,7 @@ def command_worldactive(worldactive_string):
                 if 0 == Thing:
                     player_exists = True
                     break
-            if wait_exists and player_exists:
+            if wait_exists and player_exists and "MAP" in world_db:
                 for id in world_db["Things"]:
                     if world_db["Things"][id]["T_LIFEPOINTS"]:
                         build_fov_map(world_db["Things"][id])