+def command_worldactive(worldactive_string):
+ val = integer_test(worldactive_string, 0, 1)
+ if None != val:
+ if 0 != world_db["WORLD_ACTIVE"]:
+ if 0 == val:
+ set_world_inactive()
+ 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
+ for Thing in world_db["Things"]:
+ if 0 == Thing:
+ player_exists = True
+ break
+ altar_found = False
+ if world_db["MAP"]:
+ pos = world_db["MAP"].find(b'_')
+ if pos > 0:
+ y = int(pos / world_db["MAP_LENGTH"])
+ x = pos % world_db["MAP_LENGTH"]
+ world_db["altar"] = (y, x)
+ altar_found = True
+ valid_slippers = world_db["SLIPPERS"] in world_db["ThingTypes"]
+ valid_plant0 = world_db["PLANT_0"] in world_db["ThingTypes"]
+ valid_lumber = world_db["LUMBER"] in world_db["ThingTypes"]
+ if altar_found and wait_exists and player_exists and \
+ world_db["MAP"] and valid_slippers and valid_plant0 and \
+ valid_lumber:
+ 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:
+ print("Ignoring: Not all conditions for world activation met.")
+
+def command_slippers(str_int):
+ val = integer_test(str_int, 0)
+ if None != val:
+ world_db["SLIPPERS"] = val
+ if world_db["WORLD_ACTIVE"] and \
+ world_db["SLIPPERS"] not in world_db["ThingTypes"]:
+ world_db["WORLD_ACTIVE"] = 0
+ print("SLIPPERS matches no known ThingTypes, deactivating world.")
+
+def command_plant0(str_int):
+ val = integer_test(str_int, 0)
+ if None != val:
+ world_db["PLANT_0"] = val
+ if world_db["WORLD_ACTIVE"] and \
+ world_db["PLANT_0"] not in world_db["ThingTypes"]:
+ world_db["WORLD_ACTIVE"] = 0
+ print("PLANT_0 matches no known ThingTypes, deactivating world.")
+
+def play_move(str_arg):
+ 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
+ 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 (ord("X") == world_db["MAP"][pos]
+ or ord("|") == world_db["MAP"][pos]):
+ carries_axe = False
+ for id in t["T_CARRIES"]:
+ type = world_db["Things"][id]["T_TYPE"]
+ if world_db["ThingTypes"][type]["TT_TOOL"] == "axe":
+ world_db["Things"][0]["T_ARGUMENT"] = dir
+ set_command("move")
+ 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 play_use(str_arg):
+ 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:
+ 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 (world_db["ThingTypes"][type]["TT_TOOL"] == "axe"
+ and t == world_db["Things"][0]):
+ log("To use this item for chopping, move towards a tree "
+ + "while carrying it in your inventory.")
+ elif type != world_db["SLIPPERS"] and 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 command_lumber(str_int): # #
+ val = integer_test(str_int, 0)
+ if None != val:
+ world_db["LUMBER"] = val
+ if world_db["WORLD_ACTIVE"] and \
+ world_db["LUMBER"] not in world_db["ThingTypes"]:
+ world_db["WORLD_ACTIVE"] = 0
+ print("LUMBER matches no known ThingTypes, deactivating world.")
+