X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=roguelike-server;h=2f3480a5d6fc1ea45671c483c0194018e8bde875;hb=7ee118744cf696348c17805bf7b7d27f98e67153;hp=30f9337d0c2287b912ffc05b436e270cfdd1ef59;hpb=fc0fedeaa7cee764f7f65d09a88bc2d7603e98cb;p=plomrogue diff --git a/roguelike-server b/roguelike-server index 30f9337..2f3480a 100755 --- a/roguelike-server +++ b/roguelike-server @@ -648,10 +648,10 @@ def actor_move(t): if t == world_db["Things"][0]: hitted_type = world_db["Things"][hit_id]["T_TYPE"] hitted_name = world_db["ThingTypes"][hitted_type]["TT_NAME"] - log("You wound " + hitted_name + ".") + log("You WOUND" + hitted_name + ".") elif 0 == hit_id: hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] - log(hitter_name +" wounds you.") + log(hitter_name +" WOUNDS you.") decrement_lifepoints(world_db["Things"][hit_id]) return passable = "." == chr(world_db["MAP"][pos]) @@ -665,9 +665,7 @@ def actor_move(t): world_db["Things"][id]["T_POSX"] = move_result[2] build_fov_map(t) if t == world_db["Things"][0]: - log("You move " + dir + ".") - elif t == world_db["Things"][0]: - log("You fail to move " + dir + ".") + log("You MOVE " + dir + ".") def actor_pick_up(t): @@ -689,9 +687,7 @@ def actor_pick_up(t): world_db["Things"][id]["carried"] = True t["T_CARRIES"].append(id) if t == world_db["Things"][0]: - log("You pick up an object.") - elif t == world_db["Things"][0]: - log("You try to pick up an object, but there is none.") + log("You PICK UP an object.") def actor_drop(t): @@ -702,9 +698,7 @@ def actor_drop(t): t["T_CARRIES"].remove(id) world_db["Things"][id]["carried"] = False if t == world_db["Things"][0]: - log("You drop an object.") - elif t == world_db["Things"][0]: - log("You try to drop an object, but you own none.") + log("You DROP an object.") def actor_use(t): @@ -718,11 +712,9 @@ def actor_use(t): del world_db["Things"][id] t["T_SATIATION"] += world_db["ThingTypes"][type]["TT_TOOLPOWER"] if t == world_db["Things"][0]: - log("You consume this object.") + log("You CONSUME this object.") elif t == world_db["Things"][0]: - log("You try to use this object, but fail.") - elif t == world_db["Things"][0]: - log("You try to use an object, but you own none.") + log("You try to use this object, but FAIL.") def thingproliferation(t, prol_map): @@ -759,7 +751,7 @@ def try_healing(t): if (testval <= 1 or 1 == (rand.next() % testval)): t["T_LIFEPOINTS"] += 1 if t == world_db["Things"][0]: - log("You heal.") + log("You HEAL.") def hunger_per_turn(type_id): @@ -774,9 +766,9 @@ def hunger(t): if 0 != t["T_SATIATION"] and 0 == int(rand.next() / abs(t["T_SATIATION"])): if t == world_db["Things"][0]: if t["T_SATIATION"] < 0: - log("You suffer from hunger.") + log("You SUFFER from hunger.") else: - log("You suffer from over-eating.") + log("You SUFFER from over-eating.") decrement_lifepoints(t) @@ -1148,6 +1140,15 @@ def id_setter(id, category, id_store=False, start_at_1=False): return id +def command_plugin(str_plugin): + """Run code in plugins/[str_plugin].""" + if (str_plugin.replace("_", "").isalnum() + and os.access("plugins/" + str_plugin, os.F_OK)): + exec(open("plugins/" + str_plugin).read()) + return + print("Bad plugin name:", str_plugin) + + def command_ping(): """Send PONG line to server output file.""" strong_write(io_db["file_out"], "PONG\n") @@ -1194,37 +1195,80 @@ def command_thingshere(str_y, str_x): print("Ignoring: Command only works on existing worlds.") -def play_commander(action, args=False): - """Setter for player's T_COMMAND and T_ARGUMENT, then calling turn_over(). +def set_command(action): + """Set player's T_COMMAND, then call turn_over().""" + id = [x for x in world_db["ThingActions"] + if world_db["ThingActions"][x]["TA_NAME"] == action][0] + world_db["Things"][0]["T_COMMAND"] = id + turn_over() - T_ARGUMENT is set to direction char if action=="wait",or 8-bit int if args. - """ - def set_command(): - id = [x for x in world_db["ThingActions"] - if world_db["ThingActions"][x]["TA_NAME"] == action][0] - world_db["Things"][0]["T_COMMAND"] = id - turn_over() +def play_wait(): + """Try "wait" as player's T_COMMAND.""" + set_command("wait") + - def set_command_and_argument_int(str_arg): +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") + + +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: + if None != val and val < len(t["T_CARRIES"]): world_db["Things"][0]["T_ARGUMENT"] = val - set_command() - - def set_command_and_argument_movestring(str_arg): - if str_arg in directions_db: - world_db["Things"][0]["T_ARGUMENT"] = ord(directions_db[str_arg]) - set_command() + set_command("drop") else: - print("Ignoring: Argument must be valid direction string.") + print("Illegal inventory index.") - if action == "move": - return set_command_and_argument_movestring - elif args: - return set_command_and_argument_int + +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: - return set_command + 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.""" + t = world_db["Things"][0] + if not str_arg in directions_db: + print("Illegal move direction string.") + return + dir = ord(directions_db[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]: + world_db["Things"][0]["T_ARGUMENT"] = dir + set_command("move") + return + log("You CAN'T move there.") def command_seedrandomness(seed_string): @@ -1629,6 +1673,7 @@ be ignored in replay mode if read from server input file), and ([2]) a function to be called on it. """ commands_db = { + "PLUGIN": (1, True, command_plugin), "QUIT": (0, True, command_quit), "PING": (0, True, command_ping), "THINGS_HERE": (2, True, command_thingshere), @@ -1666,11 +1711,11 @@ commands_db = { "T_MEMTHING": (3, False, command_tmemthing), "T_POSY": (1, False, setter_tpos("Y")), "T_POSX": (1, False, setter_tpos("X")), - "wait": (0, False, play_commander("wait")), - "move": (1, False, play_commander("move")), - "pick_up": (0, False, play_commander("pick_up")), - "drop": (1, False, play_commander("drop", True)), - "use": (1, False, play_commander("use", True)), + "wait": (0, False, play_wait), + "move": (1, False, play_move), + "pick_up": (0, False, play_pickup), + "drop": (1, False, play_drop), + "use": (1, False, play_use), "ai": (0, False, command_ai) } # TODO: Unhandled cases: (Un-)killing animates (esp. player!) with T_LIFEPOINTS.