Beispiel #1
0
def test_vo_spell(parser):
    with open(logfile("49534_vo_spell.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    exporter.export()
    assert True
Beispiel #2
0
def test_shuffle_deck(parser):
    with open(logfile("54613_shuffle_deck.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    exporter.export()
    assert True
Beispiel #3
0
def test_game_reset(parser):
    with open(logfile("toki.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    exporter.export()
    assert True
Beispiel #4
0
def test_cached_tag_for_dormant_change(parser):
    with open(logfile("49534_cached_tag_for_dormant_change.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    exporter.export()
    assert True
Beispiel #5
0
def test_puzzle_lab(parser):
    with open(logfile("puzzlelab.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    exporter.export()
    assert True
Beispiel #6
0
def test_inferrable_player(parser):
    with open(logfile("25770_inferrable_player.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    exporter.export()
    assert True
Beispiel #7
0
def test_bad_ids(parser):
    with open(logfile("chaos/change_entity_null_id.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    with pytest.raises(ExporterError):
        exporter.export()
Beispiel #8
0
def test_full_entity_defined_in_subspell(parser):
    with open(logfile("34104_subspell.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    exporter.export()
    assert True
Beispiel #9
0
def test_mercenaries_solo_pvp(parser: LogParser):
    with open(logfile("93227_mercenaries_solo_pvp.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree,
                                  player_manager=parser.player_manager)
    exporter.export()
    assert True
Beispiel #10
0
def test_name_aliasing(parser: LogParser):
    with open(logfile("88998_missing_player_hash.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree,
                                  player_manager=parser.player_manager)
    exporter.export()
    assert True
Beispiel #11
0
def test_puzzle_lab_player(parser: LogParser):
    with open(logfile("puzzle_player.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree,
                                  player_manager=parser.player_manager)
    exporter.export()
    assert True
Beispiel #12
0
def test_async_player_names(parser: LogParser):
    with open(logfile("88998_async_player_name.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree,
                                  player_manager=parser.player_manager)

    with pytest.raises(MissingPlayerData):
        exporter.export()
Beispiel #13
0
def test_unknown_human_player(parser: LogParser):
    with open(logfile("25770_unknown_human_player.power.log")) as f:
        parser.read(f)

    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree,
                                  player_manager=parser.player_manager)

    with pytest.raises(MissingPlayerData):
        exporter.export()
Beispiel #14
0
def test_20457(parser):
    with open(logfile("20457_broken_names.power.log")) as f:
        parser.read(f)

    assert len(parser.games) == 1
    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    game = exporter.export()
    assert game.game.players[0].name == "Necroessenza"
    assert game.game.players[1].name == "Heigan l'Impuro"
Beispiel #15
0
def test_battlegrounds(parser):
    with open(logfile("36393_battlegrounds.power.log")) as f:
        parser.read(f)

    assert len(parser.games) == 1
    packet_tree = parser.games[0]
    exporter = EntityTreeExporter(packet_tree)
    game = exporter.export()
    assert game.game.setup_done
    assert game.game.players[0].name == "BehEh#1355"
    assert len([
        packet for packet in packet_tree if isinstance(packet, packets.Options)
    ]) == 96
Beispiel #16
0
def print_board_at_combat(k):
    pt = copy.copy(packet_tree)
    pt.packets = []
    current_fight = 0
    for i, packet in enumerate(packet_tree.packets):
        if is_starting_block(packet):
            current_fight += 1
            if current_fight == k:
                n = 10
                if i+n < len(packet_tree.packets):
                    pt.packets = packet_tree.packets[:i+n]
                    break
    exporter = EntityTreeExporter(pt)
    export = exporter.export()
    if hasattr(export, "game"):
        game = export.game
        breeky = game.players[0]
        bob = game.players[1]
        bob.minions = get_current_minions(bob)
        breeky.minions = get_current_minions(breeky)
        print("Bob : ", bob.minions)
        print("Breeky : ", breeky.minions)
        print(breeky.minions[0].tags[GameTag.HEALTH])
Beispiel #17
0
from hearthstone.enums import (
    CardType, ChoiceType, GameTag, OptionType, BlockType,
    PlayReq, PlayState, PowerType, State, Step, Zone
)

# logging.getLogger().setLevel(logging.CRITICAL)

start = time.time()
parser = LogParser()
with open("Power.log") as f:
    parser.read(f)

packet_tree = parser.games[0]
print("Reading packets took ", time.time()-start, "s.")
exporter = EntityTreeExporter(packet_tree)
export = exporter.export()
game = export.game
breeky = game.players[0]
bob = game.players[1]
print("Export took ", time.time()-start, "s.")


def get_current_minions(player):
    minions = []
    for e in player.entities:
        if e.tags[GameTag.CONTROLLER] == player.tags[GameTag.CONTROLLER] and e.zone == Zone.PLAY:
            if GameTag.CARDTYPE in e.tags.keys() and e.tags[GameTag.CARDTYPE] == CardType.MINION:
                minions.append(e)
    return minions

Beispiel #18
0
    def scrape_board_state(self, parser: LogParser):
        packet_tree = parser.games[len(parser.games) - 1]
        exporter = EntityTreeExporter(packet_tree)
        export = exporter.export()

        minions = []
        enchantments = []
        hero_powers = []
        entities = {}  # For Debug inspection
        friendly_player = friendly_hero = None
        enemy_player = enemy_hero = None

        for e in export.game.entities:
            entities[e.id] = e

            if e.type == CardType.ENCHANTMENT:
                enchantments.append(e)

            if e.zone == Zone.PLAY:
                if e.type == CardType.HERO_POWER:
                    hero_powers.append(e)
                elif e.type == CardType.MINION:
                    minions.append(e)
                elif e.type == CardType.PLAYER:
                    if e.is_ai:
                        enemy_player = e
                    else:
                        friendly_player = e
                elif e.type == CardType.HERO:
                    if e.controller == enemy_player:
                        enemy_hero = e
                    elif e.controller == friendly_player:
                        friendly_hero = e

        friendlyMinions = []
        enemyMinions = []

        for minion in minions:
            # Create list to hold deathrattle entity ids to convert to ghastcoiler ones
            minion.deathrattle_ids = []
            if GameTag.ATK not in minion.tags:
                # Minions with 0 power dont have an ATK tag. Make sure it exists here
                minion.tags[GameTag.ATK] = 0
            enemyMinions.append(
                minion) if minion.controller.is_ai else friendlyMinions.append(
                    minion)

        self.attach_enchantments(enchantments, minions)

        friendlyMinions.sort(
            key=lambda minion: minion.tags[GameTag.ZONE_POSITION])
        enemyMinions.sort(
            key=lambda minion: minion.tags[GameTag.ZONE_POSITION])

        friendly_health, friendly_tech_level = self.get_hero_tags(
            friendly_hero.tags)
        enemy_health, enemy_tech_level = self.get_hero_tags(enemy_hero.tags)

        state = BoardState(friendlyBoard=friendlyMinions,
                           friendlyPlayerHealth=friendly_health,
                           friendlyTechLevel=friendly_tech_level,
                           friendlyHero=self.get_hero(friendly_hero.card_id),
                           enemyBoard=enemyMinions,
                           enemyPlayerHealth=enemy_health,
                           enemyTechLevel=enemy_tech_level,
                           enemyHero=self.get_hero(enemy_hero.card_id))
        self.apply_hero_powers(state, hero_powers)

        return state