for id in world_db["Things"]
if not world_db["Things"][id]["carried"]
if world_db["Things"][id]["T_TYPE"] == tid
- if y == world_db["Things"][id]["T_POSY"]
- if x == world_db["Things"][id]["T_POSX"]]:
+ if pos == world_db["Things"][id]["pos"]]:
type = world_db["Things"][id]["T_TYPE"]
name = world_db["ThingTypes"][type]["TT_NAME"]
strong_write(io_db["file_out"], name + "\n")
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])
- if 0 == id:
- update_map_memory(world_db["Things"][id], False)
- if not world_db["Things"][0]["T_LIFEPOINTS"]:
- empty_fovmap = bytearray(b" " * world_db["MAP_LENGTH"] ** 2)
- world_db["Things"][0]["fovmap"] = empty_fovmap
- world_db["WORLD_ACTIVE"] = 1
- else:
+ if not world_db["MAP"]:
print("Ignoring: No map defined for world to activate.")
+ return
+ from server.config.commands import command_worldactive_test_hook
+ if not command_worldactive_test_hook():
+ return
+ for tid in world_db["Things"]:
+ if world_db["Things"][tid]["T_LIFEPOINTS"]:
+ build_fov_map(world_db["Things"][tid])
+ if 0 == tid:
+ update_map_memory(world_db["Things"][tid], False)
+ if not world_db["Things"][0]["T_LIFEPOINTS"]:
+ empty_fovmap = bytearray(b" " * world_db["MAP_LENGTH"] ** 2)
+ world_db["Things"][0]["fovmap"] = empty_fovmap
+ world_db["WORLD_ACTIVE"] = 1
def command_tid(id_string):
val = integer_test(str_int, 0, 255)
if None != val:
if val < world_db["MAP_LENGTH"]:
- world_db["Things"][command_tid.id]["T_POS" + axis] = val
+ t = world_db["Things"][command_tid.id]
+ t["T_POS" + axis] = val
+ t["pos"] = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
if world_db["WORLD_ACTIVE"] \
and world_db["Things"][command_tid.id]["T_LIFEPOINTS"]:
build_fov_map(world_db["Things"][command_tid.id])
"""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"]]
+ ids = [tid for tid in world_db["Things"] if tid
+ if not world_db["Things"][tid]["carried"]
+ if world_db["Things"][tid]["pos"] == t["pos"]]
+ from server.config.commands import play_pickup_attempt_hook
if not len(ids):
log("NOTHING to pick up.")
- else:
+ elif play_pickup_attempt_hook(t):
set_command("pickup")
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.")
+ tid = t["T_CARRIES"][val]
+ tt = world_db["ThingTypes"][world_db["Things"][tid]["T_TYPE"]]
+ from server.config.commands import play_use_attempt_hook
+ hook_test = play_use_attempt_hook(t, tt)
+ if not (tt["TT_TOOL"] == "food" or hook_test):
+ if hook_test != False:
+ log("You CAN'T use this thing.")
return
world_db["Things"][0]["T_ARGUMENT"] = val
set_command("use")
if not str_arg in directions_db:
print("Illegal move direction string.")
return
- dir = ord(directions_db[str_arg])
+ d = 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"])
+ move_result = mv_yx_in_dir_legal(chr(d), 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
+ from server.config.commands import play_move_attempt_hook
+ if play_move_attempt_hook(t, d, pos):
+ return
if chr(world_db["MAP"][pos]) in symbols_passable:
- world_db["Things"][0]["T_ARGUMENT"] = dir
+ world_db["Things"][0]["T_ARGUMENT"] = d
set_command("move")
return
log("You CAN'T move there.")