Exemple #1
0
    def test_gameheartnormalizer_plugin(self):
        from sc2reader.engine.plugins import GameHeartNormalizer
        sc2reader.engine.register_plugin(GameHeartNormalizer())

        # Not a GameHeart game!
        replay = sc2reader.load_replay("test_replays/2.0.0.24247/molten.SC2Replay")
        player_pids = set([ player.pid for player in replay.players])
        spawner_pids = set([ event.player.pid for event in replay.events if "TargetAbilityEvent" in event.name and event.ability.name == "SpawnLarva"])
        self.assertTrue(spawner_pids.issubset(player_pids))

        replay = sc2reader.load_replay("test_replays/gameheart/gameheart.SC2Replay")
        self.assertEqual(replay.events[0].frame, 0)
        self.assertEqual(replay.game_length.seconds, 636)
        self.assertEqual(len(replay.observers), 5)
        self.assertEqual(replay.players[0].name, 'SjoWBBII')
        self.assertEqual(replay.players[0].play_race, 'Terran')
        self.assertEqual(replay.players[1].name, 'Stardust')
        self.assertEqual(replay.players[1].play_race, 'Protoss')
        self.assertEqual(len(replay.teams), 2)
        self.assertEqual(replay.teams[0].players[0].name, 'SjoWBBII')
        self.assertEqual(replay.teams[1].players[0].name, 'Stardust')
        self.assertEqual(replay.winner, replay.teams[1])

        replay = sc2reader.load_replay("test_replays/gameheart/gh_sameteam.SC2Replay")
        self.assertEqual(replay.events[0].frame, 0)
        self.assertEqual(replay.game_length.seconds, 424)
        self.assertEqual(len(replay.observers), 5)
        self.assertEqual(replay.players[0].name, 'EGJDRC')
        self.assertEqual(replay.players[0].play_race, 'Zerg')
        self.assertEqual(replay.players[1].name, 'LiquidTaeJa')
        self.assertEqual(replay.players[1].play_race, 'Terran')
        self.assertEqual(len(replay.teams), 2)
        self.assertEqual(replay.teams[0].players[0].name, 'EGJDRC')
        self.assertEqual(replay.teams[1].players[0].name, 'LiquidTaeJa')
        self.assertEqual(replay.winner, replay.teams[0])
def test_worker_milestones():
    replay = sc2reader.load_replay(
        'replays/Nerchio vs Neeb ZvP  Newkirk Precinct TE (Void) WCS Austin.SC2Replay',
        engine=sc2reader.engine.GameEngine(plugins=[
            APMTracker(),
            SelectionTracker(),
            ContextLoader(),
            GameHeartNormalizer(),
            workers_analysis(),
        ]),
        load_map=False)
    if replay.players[0].name == "Neeb":
        neeb = replay.players[0]
        nerchio = replay.players[1]
    else:
        nerchio = replay.players[0]
        neeb = replay.players[1]

    assert neeb.worker_milestones[40] == 5493
    assert nerchio.worker_milestones[40] == 5213

    assert neeb.worker_milestones[50] == 7466
    assert nerchio.worker_milestones[50] == 7247

    assert neeb.worker_milestones[60] == 8668
    assert nerchio.worker_milestones[60] == 11838

    assert neeb.worker_milestones[70] == 14631
    assert nerchio.worker_milestones[70] == 17087
def test_workers_at_frame():

    replay = sc2reader.load_replay(
        'replays/Nerchio vs Neeb ZvP  Newkirk Precinct TE (Void) WCS Austin.SC2Replay',
        engine=sc2reader.engine.GameEngine(plugins=[
            APMTracker(),
            SelectionTracker(),
            ContextLoader(),
            GameHeartNormalizer(),
            workers_analysis(),
        ]),
        load_map=False)
    if replay.players[0].name == "Neeb":
        neeb = replay.players[0]
        nerchio = replay.players[1]
    else:
        nerchio = replay.players[0]
        neeb = replay.players[1]

    assert workers_at_frame(neeb, time_to_frame('4:06')) == 40
    assert workers_at_frame(nerchio, time_to_frame('4:31')) == 40
    assert workers_at_frame(nerchio, time_to_frame('5:25')) == 50
    assert workers_at_frame(neeb, time_to_frame('5:34')) == 50
    assert workers_at_frame(neeb, time_to_frame('6:28')) == 60
    assert workers_at_frame(neeb, time_to_frame('10:56')) == 70
    assert workers_at_frame(nerchio, time_to_frame('12:22')) == 58
    assert workers_at_frame(nerchio, time_to_frame('12:23')) == 61
def test_alive_at_this_time():

    replay = sc2reader.load_replay(
        'replays/Nerchio vs Neeb ZvP  Newkirk Precinct TE (Void) WCS Austin.SC2Replay',
        engine=sc2reader.engine.GameEngine(plugins=[
            APMTracker(),
            SelectionTracker(),
            ContextLoader(),
            GameHeartNormalizer(),
            workers_analysis(),
        ]),
        load_map=False)
    if replay.players[0].name == "Neeb":
        neeb = replay.players[0]
        nerchio = replay.players[1]
    else:
        nerchio = replay.players[0]
        neeb = replay.players[1]

    probe = neeb.units[54]

    assert alive_at_this_time(probe, 0, replay.frames) is False
    assert alive_at_this_time(probe, 28870, replay.frames) is False
    assert alive_at_this_time(probe, 26000, replay.frames) is False
    assert alive_at_this_time(probe, 4500, replay.frames) is True
    assert alive_at_this_time(probe, 2000, replay.frames) is False
Exemple #5
0
def main():
    args = parse_args(sys.argv[1:])
    print("Accessing replay, id: {0}".format(args.sha1sum))
    r = get_replay(args.sha1sum)
    replay = sc2reader.load_replay(r,
                                   engine=sc2reader.engine.GameEngine(plugins=[
                                       ContextLoader(),
                                       GameHeartNormalizer(),
                                   ]))
    for p in replay.players:
        print(p)
def main():  # noqa: C901
    args = parse_args(sys.argv[1:])
    r = get_replay(args.sha1sum)
    replay = sc2reader.load_replay(r,
                                   engine=sc2reader.engine.GameEngine(plugins=[
                                       ContextLoader(),
                                       GameHeartNormalizer(),
                                   ]))

    data = {}
    data['map'] = replay.map_name
    data['players'] = []

    for player in replay.players:
        if not player.is_human:
            continue
        if player.is_observer:
            continue

        player_data = {}
        player_data['name'] = player.name

        unit_supplies = {}
        for unit_type in army_units:
            unit_supplies[unit_type] = []

        # All done in frames
        times = []
        game_end = replay.frames
        game_start = 0

        for current_frame in range(game_start, game_end, 160):
            times.append(current_frame)
            supply_per_unit = {}
            for unit_type in army_units:
                supply_per_unit[unit_type] = 0
            # Scan all units owned by player
            for unit in player.units:
                if unit.name not in army_units:
                    continue
                if alive_at_this_time(unit, current_frame, replay.frames):
                    supply_per_unit[unit.name] += unit.supply
            for unit_name, supply in supply_per_unit.items():
                unit_supplies[unit_name].append(supply)

        to_pop = []
        for key, value in unit_supplies.items():
            if sum(value) == 0:
                to_pop.append(key)

        for key in to_pop:
            unit_supplies.pop(key, None)

        # Create visualization-ready json object
        constructed_data = []
        for key, value in unit_supplies.items():
            obj = {}
            obj['name'] = key
            color = "#" + hashlib.sha224(bytes(key, 'utf-8')).hexdigest()[:6]
            obj['color'] = color
            xy_tuples = []
            for index, number in enumerate(value):
                point = {}
                point['x'] = times[index]
                point['y'] = number
                xy_tuples.append(point)
            obj['data'] = xy_tuples
            constructed_data.append(obj)

        player_data['army_supply'] = constructed_data
        data['players'].append(player_data)

    print(json.dumps(data))
    matchup = "v".join(race[0] for race in sorted(races))
    return matchup


if __name__ == "__main__":

    data = []
    replays = glob.glob("all_replays/**/*.SC2Replay", recursive=True)
    for filename in replays:
        replay = sc2reader.load_replay(
            filename,
            engine=sc2reader.engine.GameEngine(plugins=[
                APMTracker(),
                SelectionTracker(),
                ContextLoader(),
                GameHeartNormalizer(),
            ]))
        #game['matchup'] = replay.matchup
        for human in replay.players:
            game = {}
            game['length'] = replay.frames / 22.4
            game['map'] = replay.map_name
            game['matchup'] = classify_matchup(replay)
            game['name'] = human.name
            game['race'] = human.play_race
            game['players'] = str(replay.players)
            game['buildings'] = {}
            game['buildings']['stargates'] = []
            for unit in human.units:
                if unit.name == 'Stargate':
                    gate = {}
Exemple #8
0
import sc2reader
from sc2reader.engine.plugins import SelectionTracker, APMTracker,\
        ContextLoader, GameHeartNormalizer

sc2reader.engine.register_plugin(SelectionTracker())
sc2reader.engine.register_plugin(APMTracker())
sc2reader.engine.register_plugin(ContextLoader())
sc2reader.engine.register_plugin(GameHeartNormalizer())

from src.db.raw.config import db
from src.db.raw.models.datapack.unit_type import UNIT_TYPE
from src.db.raw.models.datapack.ability import ABILITY
from src.db.raw.models.replay.info import INFO
from src.db.raw.models.replay.map import MAP
from src.db.raw.models.replay.objects import OBJECT
from src.db.raw.models.replay.player import PLAYER
from src.db.raw.inject import INJECT

from os import listdir

import argparse

parser = argparse.ArgumentParser(description='sdm : Starcraft 2 Data Project')
parser.add_argument('action',
                    metavar='action',
                    type=str,
                    help='db : run database injection \n app : run app')

args = parser.parse_args()

action = args.action