def run_generate_item(conn, args): '''Runs the individual item generator.''' # Set up the roller. if args.manual: roller = rollers.ManualDiceRoller() else: roller = rollers.PseudorandomRoller() # Generate an item. keywords = (' '.join(args.item_args)).lower() x = item.generate_item(conn, keywords, roller, None) item.print_item(str(x))
def run_lookup(conn, args): '''Runs the lookup generator.''' class SerialRoller(rollers.Roller): def __init__(self, rolls): self.rolls = rolls self.rolls.reverse() def roll(self, dice_expression, purpose): if len(self.rolls) > 0: return self.rolls.pop() raise NotEnoughRolls roller = SerialRoller(args.rolls) x = item.generate_item(conn, args.strength + ' ' + args.kind.lower(), roller, None) item.print_item(x)
def run_test(conn, args): '''Runs a test that exhaustively tests the item generation code.''' print("run_test") # Use an automatic dice roller. roller = rollers.PseudorandomRoller() # Run a test. strengths = ['least minor', 'lesser minor', 'greater minor', 'lesser medium', 'greater medium', 'lesser major', 'greater major'] items = ['Armor/Shield', 'Weapon', 'Potion', 'Ring', 'Rod', 'Scroll', 'Staff', 'Wand', 'Wondrous'] for s in strengths: for i in items: print(s + ' ' + i) print('-' * 78) for c in range(1000): x = item.generate_item(conn, s + ' ' + i.lower(), roller, None) x = str(x).replace('\u2019', "'") x = str(x).replace('\u2014', "-") print(x, end=', ') print()
def move(self, direction): position = self.hero_position if direction == 'up' and self.is_move_valid(position, direction): new_position = Position(position.x - 1, position.y) elif direction == 'down' and self.is_move_valid(position, direction): new_position = Position(position.x + 1, position.y) elif direction == 'left' and self.is_move_valid(position, direction): new_position = Position(position.x, position.y - 1) elif direction == 'right' and self.is_move_valid(position, direction): new_position = Position(position.x, position.y + 1) else: return False if self.is_game_won(new_position): self.game_ended = True if self.map[new_position.x][new_position.y] == 'I': item = generate_item() if isinstance(item, Weapon): if item.damage >= self.hero.weapon.damage and item.critical_strike_percent >= self.hero.weapon.critical_strike_percent: self.hero.equip_weapon(item) elif isinstance(item, HealingPotion): self.hero.take_healing(item.healing_points) else: return False if not self.should_fight(new_position): self.change_position(position, new_position) return True else: self.fight_for_territory(position, new_position)
def run_test(conn, args): '''Runs a test that exhaustively tests the item generation code.''' print("run_test") # Use an automatic dice roller. roller = rollers.PseudorandomRoller() # Run a test. strengths = [ 'least minor', 'lesser minor', 'greater minor', 'lesser medium', 'greater medium', 'lesser major', 'greater major' ] items = [ 'Armor/Shield', 'Weapon', 'Potion', 'Ring', 'Rod', 'Scroll', 'Staff', 'Wand', 'Wondrous' ] for s in strengths: for i in items: print(s + ' ' + i) print('-' * 78) for c in range(1000): x = item.generate_item(conn, s + ' ' + i.lower(), roller, None) x = str(x).replace('\u2019', "'") x = str(x).replace('\u2014', "-") print(x, end=', ') print()
def run_webgen_internal(params): conn = None result = "Error: unspecified program error" try: # Mode of operation: mode = params['mode'] if mode == 'echo_test': # Echo back the input. result = params elif mode == 'settlement': # Open the database. conn = sqlite.connect('data/data.db') conn.row_factory = sqlite.Row settlement_size = params['size'] result = settlements.generate_settlement_items(conn, settlement_size, rollers.PseudorandomRoller()) elif mode == 'custom': # Open the database. conn = sqlite.connect('data/freq.db') conn.row_factory = sqlite.Row base_value = default_get(params, 'base_value', 0) q_ls_min = default_get(params, 'q_ls_min', '1') q_gt_min = default_get(params, 'q_gt_min', '1') q_ls_med = default_get(params, 'q_ls_med', '1') q_gt_med = default_get(params, 'q_gt_med', '1') q_ls_maj = default_get(params, 'q_ls_maj', '1') q_gt_maj = default_get(params, 'q_gt_maj', '1') result = settlements.generate_custom(conn, base_value, q_ls_min, q_gt_min, q_ls_med, q_gt_med, q_ls_maj, q_gt_maj) elif mode == 'individual': # Open the database. conn = sqlite.connect('data/data.db') conn.row_factory = sqlite.Row strength = params['strength'] kind = params['type'] result = item.generate_item(conn, strength + ' ' + kind, rollers.PseudorandomRoller(), None) # In this case, item is an Item object. result = str(result) elif mode == 'hoard_budget': # Open the database. conn = sqlite.connect('data/data.db') conn.row_factory = sqlite.Row if params['type'] == 'custom': result = hoard.calculate_budget_custom(conn, params['custom_gp']) elif params['type'] == 'encounter': apl = params['apl'] rate = params['rate'] magnitude = params['magnitude'] result = hoard.calculate_budget_encounter(conn, apl, rate, magnitude) elif params['type'] == 'npc_gear': npc_level = params['npc_level'] is_heroic = default_get(params, 'heroic', "false") == "true" result = hoard.calculate_budget_npc_gear(conn, npc_level, is_heroic) else: result = {} elif mode == 'hoard_types': # Open the database. conn = sqlite.connect('data/data.db') conn.row_factory = sqlite.Row types = '' if default_get(params, 'type_a', 'false') == 'true': types += 'a' if default_get(params, 'type_b', 'false') == 'true': types += 'b' if default_get(params, 'type_c', 'false') == 'true': types += 'c' if default_get(params, 'type_d', 'false') == 'true': types += 'd' if default_get(params, 'type_e', 'false') == 'true': types += 'e' if default_get(params, 'type_f', 'false') == 'true': types += 'f' if default_get(params, 'type_g', 'false') == 'true': types += 'g' if default_get(params, 'type_h', 'false') == 'true': types += 'h' if default_get(params, 'type_i', 'false') == 'true': types += 'i' result = hoard.get_treasure_list(conn, types) elif mode == 'hoard_generate': # Open the database. conn = sqlite.connect('data/data.db') conn.row_factory = sqlite.Row # This one is so complex, it only operates via a map. It'll ignore # the transmission-related keys in the dict, e.g. "mode". So we # can simple pass the param dict to the function. result = hoard.generate_treasure(conn, params, rollers.PseudorandomRoller(), None) else: result = "Error: invalid mode value" except sqlite.Error as e: if DEBUG: traceback.print_exc(file=sys.stderr) except: if DEBUG: traceback.print_exc(file=sys.stderr) finally: if conn: conn.close() return result