home · contact · privacy
Server, plugin: Abort command_worldactive checks as early as possible.
[plomrogue] / server / commands.py
index 31bbea633023bca3d5edff3e5e29b7fedc9d12f4..1ce6464a3527965e16da391940217f86cc9269c7 100644 (file)
@@ -7,16 +7,18 @@ from server.config.world_data import world_db
 from server.config.io import io_db
 from server.io import log, strong_write 
 from server.utils import integer_test, id_setter
-from server.world import build_fov_map, update_map_memory, set_world_inactive,\
-        turn_over
+from server.world import set_world_inactive, turn_over
+from server.update_map_memory import update_map_memory
+from server.build_fov_map import build_fov_map
 
 
 def command_plugin(str_plugin):
     """Run code in plugins/[str_plugin]."""
     import os
     if (str_plugin.replace("_", "").isalnum()
-        and os.access("plugins/" + str_plugin, os.F_OK)):
-        exec(open("plugins/" + str_plugin).read())
+        and os.access("plugins/server/" + str_plugin + ".py", os.F_OK)):
+        exec(open("plugins/server/" + str_plugin + ".py").read())
+        world_db["PLUGIN"] += [str_plugin]
         return
     print("Bad plugin name:", str_plugin)
 
@@ -47,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"]
@@ -82,8 +87,8 @@ def command_makeworld(seed_string):
     """Call make_world()."""
     val = integer_test(seed_string, 0, 4294967295)
     if None != val:
-        from server.world import make_world
-        make_world(val)
+        from server.config.misc import make_world_func
+        make_world_func(val)
 
 
 def command_maplength(maplength_string):
@@ -113,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])
@@ -134,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):
@@ -148,7 +156,7 @@ def command_tid(id_string):
             print("Ignoring: No ThingType to settle new Thing in.")
             return
         type = list(world_db["ThingTypes"].keys())[0]
-        from server.world import new_Thing
+        from server.new_thing import new_Thing
         world_db["Things"][id] = new_Thing(type)
 
 
@@ -305,7 +313,7 @@ def command_taname(name):
     setting no ThingAction with name "wait" remains, call set_world_inactive().
     """
     if name == "wait" or name == "move" or name == "use" or name == "drop" \
-       or name == "pick_up":
+       or name == "pickup":
         world_db["ThingActions"][command_taid.id]["TA_NAME"] = name
         if 1 == world_db["WORLD_ACTIVE"]:
             wait_defined = False
@@ -429,14 +437,14 @@ def play_wait():
 def action_exists(action):
     matching_actions = [x for x in world_db["ThingActions"]
                         if world_db["ThingActions"][x]["TA_NAME"] == action]
-    if len(matching_actions) > 1:
+    if len(matching_actions) >= 1:
         return True
     print("No appropriate ThingAction defined.")
     return False
 
 
 def play_pickup():
-    """Try "pick_up" as player's T_COMMAND"."""
+    """Try "pickup" as player's T_COMMAND"."""
     if action_exists("pickup"):
         t = world_db["Things"][0]
         ids = [id for id in world_db["Things"] if id
@@ -446,7 +454,7 @@ def play_pickup():
         if not len(ids):
              log("NOTHING to pick up.")
         else:
-            set_command("pick_up")
+            set_command("pickup")
 
 
 def play_drop(str_arg):
@@ -487,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.")
@@ -497,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
@@ -506,6 +517,6 @@ def play_move(str_arg):
 
 def command_ai():
     """Call ai() on player Thing, then turn_over()."""
-    from server.ai import ai
-    ai(world_db["Things"][0])
+    from server.config.actions import ai_func
+    ai_func(world_db["Things"][0])
     turn_over()