home · contact · privacy
Server, plugin: Abort command_worldactive checks as early as possible.
[plomrogue] / server / commands.py
index f55400b4b8595f7113702a523952ba47a013934f..1ce6464a3527965e16da391940217f86cc9269c7 100644 (file)
@@ -49,6 +49,9 @@ def command_thingshere(str_y, str_x):
         if None != y and None != x and y < length and x < length:
             pos = (y * world_db["MAP_LENGTH"]) + x
             strong_write(io_db["file_out"], "THINGS_HERE START\n")
+            terrain = chr(world_db["Things"][0]["T_MEMMAP"][pos])
+            terrain_name = world_db["terrain_names"][terrain]
+            strong_write(io_db["file_out"], "terrain: " + terrain_name + "\n")
             if "v" == chr(world_db["Things"][0]["fovmap"][pos]):
                 for id in [id for tid in sorted(list(world_db["ThingTypes"]))
                               for id in world_db["Things"]
@@ -115,17 +118,19 @@ def command_worldactive(worldactive_string):
             else:
                 print("World already active.")
         elif 0 == world_db["WORLD_ACTIVE"]:
-            wait_exists = False
             for ThingAction in world_db["ThingActions"]:
                 if "wait" == world_db["ThingActions"][ThingAction]["TA_NAME"]:
-                    wait_exists = True
                     break
-            player_exists = False
+            else:
+                print("Ignored: No wait action defined for world to activate.")
+                return
             for Thing in world_db["Things"]:
                 if 0 == Thing:
-                    player_exists = True
                     break
-            if wait_exists and player_exists and world_db["MAP"]:
+            else:
+                print("Ignored: No player defined for world to activate.")
+                return
+            if world_db["MAP"]:
                 for id in world_db["Things"]:
                     if world_db["Things"][id]["T_LIFEPOINTS"]:
                         build_fov_map(world_db["Things"][id])
@@ -136,7 +141,8 @@ def command_worldactive(worldactive_string):
                     world_db["Things"][0]["fovmap"] = empty_fovmap
                 world_db["WORLD_ACTIVE"] = 1
             else:
-                print("Ignoring: Not all conditions for world activation met.")
+                print("Ignoring: No map defined for world to activate.")
+                return
 
 
 def command_tid(id_string):
@@ -489,7 +495,7 @@ def play_use(str_arg):
 def play_move(str_arg):
     """Try "move" as player's T_COMMAND, str_arg as T_ARGUMENT / direction."""
     if action_exists("move"):
-        from server.config.world_data import directions_db
+        from server.config.world_data import directions_db, symbols_passable
         t = world_db["Things"][0]
         if not str_arg in directions_db:
             print("Illegal move direction string.")
@@ -499,7 +505,10 @@ def play_move(str_arg):
         move_result = mv_yx_in_dir_legal(chr(dir), t["T_POSY"], t["T_POSX"])
         if 1 == move_result[0]:
             pos = (move_result[1] * world_db["MAP_LENGTH"]) + move_result[2]
-            if ord(".") == world_db["MAP"][pos]:
+            if ord("~") == world_db["MAP"][pos]:
+                log("You can't SWIM.")
+                return
+            if chr(world_db["MAP"][pos]) in symbols_passable:
                 world_db["Things"][0]["T_ARGUMENT"] = dir
                 set_command("move")
                 return