X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=server%2Fcommands.py;h=72018be4006a93a58a94d8e69144fed3004d9466;hb=c94c0575b191d0162d8a1cbbbe4e59cca2e40324;hp=4716154f4f338e77fda6709e9cbb312bec95f4ca;hpb=0a56367e8396b2ece4c1bce8a25e93ceabd901c1;p=plomrogue diff --git a/server/commands.py b/server/commands.py index 4716154..72018be 100644 --- a/server/commands.py +++ b/server/commands.py @@ -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,7 +87,7 @@ def command_makeworld(seed_string): """Call make_world().""" val = integer_test(seed_string, 0, 4294967295) if None != val: - from server.world import make_world + from server.make_world import make_world make_world(val) @@ -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,7 @@ 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.") def command_tid(id_string): @@ -148,7 +155,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,19 +312,16 @@ 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 for id in world_db["ThingActions"]: if "wait" == world_db["ThingActions"][id]["TA_NAME"]: - wait_defined = True break - if not wait_defined: + else: set_world_inactive() else: print("Ignoring: Invalid action name.") - # In contrast to the original,naming won't map a function to a ThingAction. def setter(category, key, min, max=None): @@ -426,73 +430,89 @@ def play_wait(): set_command("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: + return True + print("No appropriate ThingAction defined.") + return False + + def play_pickup(): - """Try "pick_up" as player's T_COMMAND".""" - t = world_db["Things"][0] - ids = [id for id in world_db["Things"] if id - if not world_db["Things"][id]["carried"] - if world_db["Things"][id]["T_POSY"] == t["T_POSY"] - if world_db["Things"][id]["T_POSX"] == t["T_POSX"]] - if not len(ids): - log("NOTHING to pick up.") - else: - set_command("pick_up") + """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 + if not world_db["Things"][id]["carried"] + if world_db["Things"][id]["T_POSY"] == t["T_POSY"] + if world_db["Things"][id]["T_POSX"] == t["T_POSX"]] + if not len(ids): + log("NOTHING to pick up.") + else: + set_command("pickup") def play_drop(str_arg): """Try "drop" as player's T_COMMAND, int(str_arg) as T_ARGUMENT / slot.""" - t = world_db["Things"][0] - if 0 == len(t["T_CARRIES"]): - log("You have NOTHING to drop in your inventory.") - else: - val = integer_test(str_arg, 0, 255) - if None != val and val < len(t["T_CARRIES"]): - world_db["Things"][0]["T_ARGUMENT"] = val - set_command("drop") + if action_exists("drop"): + t = world_db["Things"][0] + if 0 == len(t["T_CARRIES"]): + log("You have NOTHING to drop in your inventory.") else: - print("Illegal inventory index.") + val = integer_test(str_arg, 0, 255) + if None != val and val < len(t["T_CARRIES"]): + world_db["Things"][0]["T_ARGUMENT"] = val + set_command("drop") + else: + print("Illegal inventory index.") def play_use(str_arg): """Try "use" as player's T_COMMAND, int(str_arg) as T_ARGUMENT / slot.""" - t = world_db["Things"][0] - if 0 == len(t["T_CARRIES"]): - log("You have NOTHING to use in your inventory.") - else: - val = integer_test(str_arg, 0, 255) - if None != val and val < len(t["T_CARRIES"]): - id = t["T_CARRIES"][val] - type = world_db["Things"][id]["T_TYPE"] - if not world_db["ThingTypes"][type]["TT_TOOL"] == "food": - log("You CAN'T consume this thing.") - return - world_db["Things"][0]["T_ARGUMENT"] = val - set_command("use") + if action_exists("use"): + t = world_db["Things"][0] + if 0 == len(t["T_CARRIES"]): + log("You have NOTHING to use in your inventory.") else: - print("Illegal inventory index.") + val = integer_test(str_arg, 0, 255) + if None != val and val < len(t["T_CARRIES"]): + id = t["T_CARRIES"][val] + type = world_db["Things"][id]["T_TYPE"] + if not world_db["ThingTypes"][type]["TT_TOOL"] == "food": + log("You CAN'T consume this thing.") + return + world_db["Things"][0]["T_ARGUMENT"] = val + set_command("use") + else: + print("Illegal inventory index.") def play_move(str_arg): """Try "move" as player's T_COMMAND, str_arg as T_ARGUMENT / direction.""" - from server.config.world_data import directions_db - t = world_db["Things"][0] - if not str_arg in directions_db: - print("Illegal move direction string.") - return - dir = ord(directions_db[str_arg]) - from server.utils import mv_yx_in_dir_legal - 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]: - world_db["Things"][0]["T_ARGUMENT"] = dir - set_command("move") + if action_exists("move"): + 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.") return - log("You CAN'T move there.") + dir = ord(directions_db[str_arg]) + from server.utils import mv_yx_in_dir_legal + 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]: + 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 + log("You CAN'T move there.") 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()