コード例 #1
0
ファイル: maps.py プロジェクト: benfrankel/ch-analysis
def load():
    global is_loaded
    if is_loaded:
        return

    gamedata.load()

    global card_map
    cards = gamedata.get_cards()
    card_map = {parse_util.normalize(card.name): card for card in cards}
    for card in cards:
        if card.short_name:
            card_map[parse_util.normalize(card.short_name)] = card
    for alias, card in CARD_ALIAS_MAP.items():
        card_map[alias] = card_map[card]

    global item_map
    items = gamedata.get_items()
    item_map = {parse_util.normalize(item.name): item for item in items}
    for item in items:
        if item.short_name:
            item_map[parse_util.normalize(item.short_name)] = item
    for alias, item in ITEM_ALIAS_MAP.items():
        item_map[alias] = item_map[item]

    global any_map
    any_map = card_map | item_map

    is_loaded = True
コード例 #2
0
def load():
    import gamedata
    gamedata.load()

    import optimize
    optimize.load()

    from . import maps
    maps.load()

    from . import state
    state.load()
コード例 #3
0
ファイル: optimize.py プロジェクト: benfrankel/ch-analysis
def load():
    global is_loaded
    if is_loaded:
        return

    global items, trait_class

    gamedata.load()
    classify.load()
    items = gamedata.get_items()
    trait_class = classify.get_card_pack('trait')
    cycling_class = classify.get_card_pack('cycling')

    is_loaded = True
コード例 #4
0
def main():
    print('Scraping daily deal thread')
    info = scrape.daily_deal()

    now = datetime.datetime.now()
    now_s = f'{now:%m-%d-%Y}'

    if info['date'] != f'{now:%m-%d-%Y}':
        raise RuntimeError(
            f'Daily Deal is outdated; says {info["date"]} (checked {now_s})')

    if not info['done']:
        raise RuntimeError(
            f'Daily Deal is not done; says {info["date"]} (checked {now_s})')

    matches = [item for item in info['items'] if item in wishlist]

    print('Loading gamedata')
    gamedata.load()

    message = ''
    for match in matches:
        item = gamedata.get_item(match)
        card_names = '*' + '*, *'.join([card.name
                                        for card in item.cards]) + '*'
        image_name = item.image_name + '.png'
        print(f'Downloading image of {item.name}')
        image_path = gamedata.download_item_image(image_name)
        print('Uploading image to imgur')
        link = subprocess.check_output(f'imgur "{image_path}"',
                                       shell=True).decode('ascii')[:-1]
        message += f'**{match}** in DD, {now:%b. %m, %Y}. ({card_names}) [__{link}__]\n'

    print('Done!')

    if message:
        print('\nMaking announcement on Discord')
        chat.announce(message.strip())
        print(message.strip())
    else:
        print('\nNo item from wishlist today\n\n',
              '\n'.join(info['items']),
              sep='')
コード例 #5
0
ファイル: main.py プロジェクト: benfrankel/ch-analysis
def battle_test():
    event_list = []
    scenario = None

    while True:
        print('Commands: (u)pdate, (r)efresh, (s)how, (d)ownload')

        command = input().lower().replace(' ', '')

        if command in "ur":
            event_list, scenario = reconstruct.load_battle()
            if not event_list:
                event_list, scenario = reconstruct.load_battle(log_filename)
        if command in "sr":
            print('> TITLE')
            print(scenario.name, 'aka', scenario.display_name)
            print(scenario.room_name)
            print('\n')
            print('> PLAYERS')
            print('User is {}, index {}'.format(scenario.user.name,
                                                scenario.user.index))
            print('Enemy is {}, index {}'.format(scenario.enemy.name,
                                                 scenario.enemy.index))
            print('\n')
            print('> CHARACTERS')
            for i, enemy in enumerate(scenario.enemy.groups):
                print(i, enemy)
                print()
            print()
            print('> MAP')
            print(scenario.map)
            print('\n')
            print('> EVENTS')
            for i, event in enumerate(event_list):
                print(i, event)
        if command == 'd':
            gamedata.download()
            gamedata.load()

        print()
コード例 #6
0
def main():
    gamedata.load()
    optimize.load()

    archetype = input('Archetype: ')
    print('Card Classes:\n ',
          '\n  '.join(sorted(optimize.get_card_packs().keys())))
    print()
    card_pack_input = input('Optimize for: ')

    card_pack_combo = dict()
    total_weight = 0
    for card_pack_input in card_pack_input.split(','):
        if '=' in card_pack_input:
            name, weight = card_pack_input.split('=')
            name = name.replace(':', '').strip()
            weight = float(weight.strip())
        else:
            name = card_pack_input.replace(':', '').strip()
            weight = 1
        if ':' in card_pack_input:
            card_pack = {name: weight}
        else:
            card_pack = optimize.get_card_pack(name)
        for card in card_pack:
            card_pack_combo[card] = card_pack_combo.get(
                card, 0) + weight * card_pack[card]
        total_weight += weight
    for card in card_pack_combo:
        card_pack_combo[card] /= total_weight

    score, num_traits, optimum = optimize.find(archetype, card_pack_combo)[0]
    print('\nTotal value: {}\nNumber of traits: {}\nAverage value: {}'.format(
        score, num_traits, score / (36 - num_traits)))
    print()
    print(', '.join(str(x) for x in optimum))
    print()
    for item in optimum:
        print(', '.join([str(card) for card in item.cards]), sep='')