Example #1
0
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))
Example #2
0
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))
Example #3
0
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)
Example #4
0
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)
Example #5
0
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()
Example #6
0
    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)
Example #7
0
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()
Example #8
0
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