X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=server%2Factions.py;h=f7edb76767d60602a705ac02e57980587d90495d;hb=8187ea4f2fb0c07fd141886a418e3b985f663035;hp=1c835814ab51b6714413945c3648996e86f69eb1;hpb=0a56367e8396b2ece4c1bce8a25e93ceabd901c1;p=plomrogue diff --git a/server/actions.py b/server/actions.py index 1c83581..f7edb76 100644 --- a/server/actions.py +++ b/server/actions.py @@ -14,10 +14,15 @@ def actor_wait(t): def actor_move(t): - """If passable, move/collide(=attack) thing into T_ARGUMENT's direction.""" - from server.world import build_fov_map, decrement_lifepoints + """If passable, move/collide(=attack) thing into T_ARGUMENT's direction. + + On attack, return 0 on non-kill and TT_LIFEPOINTS of killed type on kill, + plus type id of attacked Thing. On move, return mv_yx_in_dir_legal result. + """ + from server.build_fov_map import build_fov_map + from server.config.misc import decrement_lifepoints_func from server.utils import mv_yx_in_dir_legal - from server.config.world_data import directions_db + from server.config.world_data import directions_db, symbols_passable passable = False move_result = mv_yx_in_dir_legal(chr(t["T_ARGUMENT"]), t["T_POSY"], t["T_POSX"]) @@ -30,16 +35,21 @@ def actor_move(t): if world_db["Things"][id]["T_POSX"] == move_result[2]] if len(hitted): hit_id = hitted[0] + hitted_tid = world_db["Things"][hit_id]["T_TYPE"] 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 + ".") + hitted_name = world_db["ThingTypes"][hitted_tid]["TT_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.") - decrement_lifepoints(world_db["Things"][hit_id]) + decr_test = decrement_lifepoints_func(world_db["Things"][hit_id]) + if decr_test > 0 and t == world_db["Things"][0]: + log(hitted_name + " dies.") + return decr_test, hitted_tid + from server.config.actions import actor_move_attempts_hook + if actor_move_attempts_hook(t, move_result, pos): return - passable = "." == chr(world_db["MAP"][pos]) + passable = chr(world_db["MAP"][pos]) in symbols_passable dir = [dir for dir in directions_db if directions_db[dir] == chr(t["T_ARGUMENT"])][0] if passable: @@ -51,10 +61,11 @@ def actor_move(t): build_fov_map(t) if t == world_db["Things"][0]: log("You MOVE " + dir + ".") + return move_result -def actor_pick_up(t): - """Make t pick up (topmost?) Thing from ground into inventory. +def actor_pickup(t): + """Make t pick up (topmost?) Thing from ground into inventory. Return it. Define topmostness by how low the thing's type ID is. """ @@ -66,17 +77,19 @@ def actor_pick_up(t): lowest_tid = -1 for iid in ids: tid = world_db["Things"][iid]["T_TYPE"] - if lowest_tid == -1 or tid < lowest_tid: + from server.config.actions import actor_pickup_test_hook + if (lowest_tid == -1 or tid < lowest_tid) and \ + actor_pickup_test_hook(t, tid): id = iid lowest_tid = tid world_db["Things"][id]["carried"] = True t["T_CARRIES"].append(id) if t == world_db["Things"][0]: log("You PICK UP an object.") - + return world_db["Things"][id] def actor_drop(t): - """Make t rop Thing from inventory to ground indexed by T_ARGUMENT.""" + """Drop to ground from t's inventory, return T_ARGUMENT-indexed Thing.""" # TODO: Handle case where T_ARGUMENT matches nothing. if len(t["T_CARRIES"]): id = t["T_CARRIES"][t["T_ARGUMENT"]] @@ -84,7 +97,7 @@ def actor_drop(t): world_db["Things"][id]["carried"] = False if t == world_db["Things"][0]: log("You DROP an object.") - + return world_db["Things"][id] def actor_use(t): """Make t use (for now: consume) T_ARGUMENT-indexed Thing in inventory.""" @@ -97,6 +110,7 @@ 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.") - elif t == world_db["Things"][0]: - log("You try to use this object, but FAIL.") + log("You CONSUME this thing.") + else: + from server.config.actions import actor_use_attempts_hook + actor_use_attempts_hook(t, type)