Closed gregstein closed 4 years ago
I ended up making major changes to your mgz library as well as the struct library itself. It took me a few hours but totally worth it :)
Thank you for the extraordinary work put into this library <3
Have a nice day. GregStein
As you found, the examples are out of date. The actual parsing should all be correct though. If you want to see an up to date usage example, check mgz/summary.py
.
To address the specific issue: Strings are returned as bytes from the parser because the encoding is not known at parse-time. Once we detect encoding, we can then decode the strings appropriately. There is an encoding-detection function that uses a heuristic in the aforementioned file.
Fantastic! Thank you! I will look into it and let you know in a few minutes.
Hmm... I do not see any argument example within your class mgz/summary.py
.
rec.py
seems to do the job.. I don't know
import sys
import pprint
from mgz.recorded_game import RecordedGame
if __name__ == "__main__":
game = RecordedGame(sys.argv[1])
pp = pprint.PrettyPrinter(indent=4)
for op in game.operations(op_types=['message']):
print(op)
#pp.pprint(game.summarize())
gh = open(sys.argv[2], 'w' )
gh.write(pprint.pformat(game.summarize(), indent=4))
gh.close()
Is this output correct and updated????
{ 'action_histogram': { 'backtowork': 33,
'gatherpoint': 320,
'order': 55,
'patrol': 101,
'postgame': 1,
'queue': 561,
'release': 71,
'stance': 322,
'stop': 5,
'waypoint': 9},
'diplomacy': { '1v1': True,
'TG': False,
'ffa': False,
'teams': [ {'player_numbers': [1], 'winner': False},
{'player_numbers': [4], 'winner': True}],
'type': '1v1'},
'duration': '00:39:31',
'finished': True,
'map': { 'arena': 'False',
'hash': 'b86e20ed7b327d72a52f7814058419032b632d6a',
'name': 'Arabia',
'nomad': 'False',
'regicide': 'False',
'size': 'tiny',
'x': '120',
'y': '120'},
'metadata': { 'filename': 'example1.mgz',
'hash': '08883c52a12224af4f70a756f8dbf253c208e399',
'sub_version': 11.76,
'timestamp': 'None',
'version': 'userpatch 1.4 rc 2'},
'mod': None,
'number_of_ai': 0,
'number_of_humans': 2,
'players': [ { 'achievements': { 'buildings_lost': 4,
'buildings_razed': 0,
'conversions': 0,
'explored_percent': 50,
'food_collected': 12340,
'gold_collected': 8666,
'relic_gold': 96,
'relics_collected': 1,
'stone_collected': 680,
'total_castles': 0,
'trade_gold': 0,
'tribute_received': 0,
'tribute_sent': 0,
'units_killed': 58,
'units_lost': 94,
'villager_high': 114,
'wood_collected': 16081},
'action_histogram': { 'build': 89,
'delete': 16,
'interact': 227,
'move': 948,
'research': 40,
'resign': 1,
'sell': 12,
'wall': 16},
'ages': { 'castle': datetime.time(0, 18, 21),
'feudal': datetime.time(0, 10, 13),
'imperial': datetime.time(0, 37, 43)},
'apm': 46,
'build': [ { 'building': 'Lumber Camp',
'coordinates': {'x': 11.0, 'y': 71.0},
'timestamp': datetime.time(0, 2, 1)},
{ 'building': 'Mill',
'coordinates': {'x': 25.0, 'y': 71.0},
'timestamp': datetime.time(0, 4, 13)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 27.0, 'y': 77.0},
'timestamp': datetime.time(0, 6, 47)},
{ 'building': 'Barracks',
'coordinates': {'x': 28.5, 'y': 62.5},
'timestamp': datetime.time(0, 8, 58)},
{ 'building': 'Stable',
'coordinates': {'x': 25.5, 'y': 59.5},
'timestamp': datetime.time(0, 10, 14)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 16.0, 'y': 75.0},
'timestamp': datetime.time(0, 10, 53)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 60.5},
'timestamp': datetime.time(0, 10, 59)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 63.5},
'timestamp': datetime.time(0, 11, 1)},
{ 'building': 'Blacksmith',
'coordinates': {'x': 11.5, 'y': 56.5},
'timestamp': datetime.time(0, 12, 3)},
{ 'building': 'Farm',
'coordinates': {'x': 17.5, 'y': 65.5},
'timestamp': datetime.time(0, 12, 12)},
{ 'building': 'Farm',
'coordinates': {'x': 14.5, 'y': 65.5},
'timestamp': datetime.time(0, 12, 14)},
{ 'building': 'Farm',
'coordinates': {'x': 14.5, 'y': 58.5},
'timestamp': datetime.time(0, 12, 48)},
{ 'building': 'Farm',
'coordinates': {'x': 17.5, 'y': 58.5},
'timestamp': datetime.time(0, 12, 50)},
{ 'building': 'Farm',
'coordinates': {'x': 13.5, 'y': 62.5},
'timestamp': datetime.time(0, 13, 4)},
{ 'building': 'Farm',
'coordinates': {'x': 11.5, 'y': 65.5},
'timestamp': datetime.time(0, 13, 6)},
{ 'building': 'Farm',
'coordinates': {'x': 10.5, 'y': 62.5},
'timestamp': datetime.time(0, 14, 7)},
{ 'building': 'Archery Range',
'coordinates': {'x': 16.5, 'y': 55.5},
'timestamp': datetime.time(0, 14, 24)},
{ 'building': 'Archery Range',
'coordinates': {'x': 19.5, 'y': 54.5},
'timestamp': datetime.time(0, 15, 36)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 57.5},
'timestamp': datetime.time(0, 16, 36)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 66.5},
'timestamp': datetime.time(0, 16, 55)},
{ 'building': 'Town Center',
'coordinates': {'x': 17.0, 'y': 81.0},
'timestamp': datetime.time(0, 18, 24)},
{ 'building': 'Farm',
'coordinates': {'x': 22.5, 'y': 70.5},
'timestamp': datetime.time(0, 19, 40)},
{ 'building': 'Farm',
'coordinates': {'x': 18.5, 'y': 77.5},
'timestamp': datetime.time(0, 21, 13)},
{ 'building': 'Farm',
'coordinates': {'x': 21.5, 'y': 77.5},
'timestamp': datetime.time(0, 21, 15)},
{ 'building': 'Archery Range',
'coordinates': {'x': 16.5, 'y': 69.5},
'timestamp': datetime.time(0, 21, 22)},
{ 'building': 'Farm',
'coordinates': {'x': 23.5, 'y': 67.5},
'timestamp': datetime.time(0, 21, 39)},
{ 'building': 'Farm',
'coordinates': {'x': 13.5, 'y': 68.5},
'timestamp': datetime.time(0, 22, 12)},
{ 'building': 'Farm',
'coordinates': {'x': 23.5, 'y': 73.5},
'timestamp': datetime.time(0, 22, 23)},
{ 'building': 'Farm',
'coordinates': {'x': 10.5, 'y': 68.5},
'timestamp': datetime.time(0, 22, 40)},
{ 'building': 'Town Center',
'coordinates': {'x': 28.0, 'y': 85.0},
'timestamp': datetime.time(0, 23, 35)},
{ 'building': 'Farm',
'coordinates': {'x': 13.5, 'y': 80.5},
'timestamp': datetime.time(0, 24, 22)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 81.5},
'timestamp': datetime.time(0, 24, 25)},
{ 'building': 'Farm',
'coordinates': {'x': 17.5, 'y': 65.5},
'timestamp': datetime.time(0, 24, 56)},
{ 'building': 'University',
'coordinates': {'x': 14.0, 'y': 89.0},
'timestamp': datetime.time(0, 25, 5)},
{ 'building': 'Farm',
'coordinates': {'x': 14.5, 'y': 65.5},
'timestamp': datetime.time(0, 25, 9)},
{ 'building': 'Farm',
'coordinates': {'x': 19.5, 'y': 69.5},
'timestamp': datetime.time(0, 25, 12)},
{ 'building': 'Farm',
'coordinates': {'x': 13.5, 'y': 84.5},
'timestamp': datetime.time(0, 25, 21)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 63.5},
'timestamp': datetime.time(0, 25, 48)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 10.0, 'y': 76.0},
'timestamp': datetime.time(0, 25, 55)},
{ 'building': 'Farm',
'coordinates': {'x': 24.5, 'y': 80.5},
'timestamp': datetime.time(0, 26, 42)},
{ 'building': 'Mill',
'coordinates': {'x': 6.0, 'y': 66.0},
'timestamp': datetime.time(0, 27, 45)},
{ 'building': 'Farm',
'coordinates': {'x': 16.5, 'y': 84.5},
'timestamp': datetime.time(0, 27, 55)},
{ 'building': 'Farm',
'coordinates': {'x': 8.5, 'y': 65.5},
'timestamp': datetime.time(0, 27, 58)},
{ 'building': 'Farm',
'coordinates': {'x': 7.5, 'y': 62.5},
'timestamp': datetime.time(0, 27, 59)},
{ 'building': 'Farm',
'coordinates': {'x': 6.5, 'y': 69.5},
'timestamp': datetime.time(0, 28, 2)},
{ 'building': 'Farm',
'coordinates': {'x': 2.5, 'y': 65.5},
'timestamp': datetime.time(0, 28, 3)},
{ 'building': 'Farm',
'coordinates': {'x': 13.5, 'y': 62.5},
'timestamp': datetime.time(0, 28, 4)},
{ 'building': 'Farm',
'coordinates': {'x': 3.5, 'y': 68.5},
'timestamp': datetime.time(0, 28, 33)},
{ 'building': 'Farm',
'coordinates': {'x': 11.5, 'y': 65.5},
'timestamp': datetime.time(0, 28, 34)},
{ 'building': 'Archery Range',
'coordinates': {'x': 23.5, 'y': 64.5},
'timestamp': datetime.time(0, 29, 11)},
{ 'building': 'Farm',
'coordinates': {'x': 30.5, 'y': 88.5},
'timestamp': datetime.time(0, 29, 22)},
{ 'building': 'Farm',
'coordinates': {'x': 24.5, 'y': 83.5},
'timestamp': datetime.time(0, 29, 24)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 2.0, 'y': 77.0},
'timestamp': datetime.time(0, 29, 32)},
{ 'building': 'Farm',
'coordinates': {'x': 26.5, 'y': 73.5},
'timestamp': datetime.time(0, 29, 40)},
{ 'building': 'Farm',
'coordinates': {'x': 4.5, 'y': 62.5},
'timestamp': datetime.time(0, 29, 50)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 84.5},
'timestamp': datetime.time(0, 30)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 74.5},
'timestamp': datetime.time(0, 30, 4)},
{ 'building': 'Archery Range',
'coordinates': {'x': 23.5, 'y': 48.5},
'timestamp': datetime.time(0, 30, 20)},
{ 'building': 'Archery Range',
'coordinates': {'x': 8.5, 'y': 58.5},
'timestamp': datetime.time(0, 30, 44)},
{ 'building': 'Farm',
'coordinates': {'x': 10.5, 'y': 62.5},
'timestamp': datetime.time(0, 31, 2)},
{ 'building': 'Farm',
'coordinates': {'x': 24.5, 'y': 86.5},
'timestamp': datetime.time(0, 31, 23)},
{ 'building': 'Farm',
'coordinates': {'x': 27.5, 'y': 81.5},
'timestamp': datetime.time(0, 31, 25)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 66.5},
'timestamp': datetime.time(0, 31, 34)},
{ 'building': 'Archery Range',
'coordinates': {'x': 5.5, 'y': 58.5},
'timestamp': datetime.time(0, 32, 9)},
{ 'building': 'Market',
'coordinates': {'x': 25.0, 'y': 94.0},
'timestamp': datetime.time(0, 32, 19)},
{ 'building': 'Monastery',
'coordinates': {'x': 24.5, 'y': 77.5},
'timestamp': datetime.time(0, 32, 22)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 6.0, 'y': 87.0},
'timestamp': datetime.time(0, 33, 9)},
{ 'building': 'Archery Range',
'coordinates': {'x': 12.5, 'y': 59.5},
'timestamp': datetime.time(0, 33, 26)},
{ 'building': 'Farm',
'coordinates': {'x': 18.5, 'y': 77.5},
'timestamp': datetime.time(0, 34, 11)},
{ 'building': 'Farm',
'coordinates': {'x': 23.5, 'y': 73.5},
'timestamp': datetime.time(0, 34, 25)},
{ 'building': 'Archery Range',
'coordinates': {'x': 15.5, 'y': 50.5},
'timestamp': datetime.time(0, 34, 37)},
{ 'building': 'Farm',
'coordinates': {'x': 21.5, 'y': 77.5},
'timestamp': datetime.time(0, 34, 51)},
{ 'building': 'Farm',
'coordinates': {'x': 22.5, 'y': 70.5},
'timestamp': datetime.time(0, 34, 51)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 9.0, 'y': 101.0},
'timestamp': datetime.time(0, 35, 4)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 6.0, 'y': 100.0},
'timestamp': datetime.time(0, 35, 10)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 18.0, 'y': 103.0},
'timestamp': datetime.time(0, 35, 46)},
{ 'building': 'Farm',
'coordinates': {'x': 20.5, 'y': 81.5},
'timestamp': datetime.time(0, 36, 3)},
{ 'building': 'Farm',
'coordinates': {'x': 13.5, 'y': 80.5},
'timestamp': datetime.time(0, 36, 12)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 8.0, 'y': 79.0},
'timestamp': datetime.time(0, 36, 14)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 8.0, 'y': 110.0},
'timestamp': datetime.time(0, 36, 18)},
{ 'building': 'Stable',
'coordinates': {'x': 8.5, 'y': 93.5},
'timestamp': datetime.time(0, 37, 29)},
{ 'building': 'Stable',
'coordinates': {'x': 12.5, 'y': 94.5},
'timestamp': datetime.time(0, 37, 29)},
{ 'building': 'Stable',
'coordinates': {'x': 15.5, 'y': 95.5},
'timestamp': datetime.time(0, 37, 30)},
{ 'building': 'Stable',
'coordinates': {'x': 2.5, 'y': 93.5},
'timestamp': datetime.time(0, 37, 30)},
{ 'building': 'Stable',
'coordinates': {'x': 2.5, 'y': 93.5},
'timestamp': datetime.time(0, 37, 30)},
{ 'building': 'Stable',
'coordinates': {'x': 15.5, 'y': 100.5},
'timestamp': datetime.time(0, 37, 32)},
{ 'building': 'Farm',
'coordinates': {'x': 33.5, 'y': 88.5},
'timestamp': datetime.time(0, 38, 14)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 1.0, 'y': 55.0},
'timestamp': datetime.time(0, 38, 28)},
{ 'building': 'Stable',
'coordinates': {'x': 18.5, 'y': 95.5},
'timestamp': datetime.time(0, 39, 22)}],
'civilization': 'Huns',
'color': 'blue',
'coordinates': {'x': 17.0, 'y': 62.0},
'index': 1,
'mvp': False,
'name': '[TyRanT]_DauT_',
'number': 1,
'position': 'southwest',
'research': [ { 'technology': 'Loom',
'timestamp': datetime.time(0, 7, 35)},
{ 'technology': 'Loom',
'timestamp': datetime.time(0, 7, 36)},
{ 'technology': 'Feudal Age',
'timestamp': datetime.time(0, 8, 2)},
{ 'technology': 'Feudal Age',
'timestamp': datetime.time(0, 8, 2)},
{ 'technology': 'Double-Bit Axe',
'timestamp': datetime.time(0, 10, 23)},
{ 'technology': 'Double-Bit Axe',
'timestamp': datetime.time(0, 10, 23)},
{ 'technology': 'Horse Collar',
'timestamp': datetime.time(0, 10, 28)},
{ 'technology': 'Horse Collar',
'timestamp': datetime.time(0, 10, 28)},
{ 'technology': 'Castle Age',
'timestamp': datetime.time(0, 15, 41)},
{ 'technology': 'Castle Age',
'timestamp': datetime.time(0, 15, 41)},
{ 'technology': 'Gold Mining',
'timestamp': datetime.time(0, 16, 22)},
{ 'technology': 'Gold Mining',
'timestamp': datetime.time(0, 16, 22)},
{ 'technology': 'Fletching',
'timestamp': datetime.time(0, 16, 49)},
{ 'technology': 'Fletching',
'timestamp': datetime.time(0, 16, 49)},
{ 'technology': 'Bodkin Arrow',
'timestamp': datetime.time(0, 18, 28)},
{ 'technology': 'Bodkin Arrow',
'timestamp': datetime.time(0, 18, 28)},
{ 'technology': 'Bow Saw',
'timestamp': datetime.time(0, 18, 50)},
{ 'technology': 'Bow Saw',
'timestamp': datetime.time(0, 18, 50)},
{ 'technology': 'Town Watch',
'timestamp': datetime.time(0, 23, 58)},
{ 'technology': 'Wheelbarrow',
'timestamp': datetime.time(0, 25, 46)},
{ 'technology': 'Ballistics',
'timestamp': datetime.time(0, 26, 25)},
{ 'technology': 'Ballistics',
'timestamp': datetime.time(0, 26, 25)},
{ 'technology': 'Bloodlines',
'timestamp': datetime.time(0, 28, 18)},
{ 'technology': 'Bloodlines',
'timestamp': datetime.time(0, 28, 18)},
{ 'technology': 'Padded Archer Armor',
'timestamp': datetime.time(0, 29, 4)},
{ 'technology': 'Leather Archer Armor',
'timestamp': datetime.time(0, 30, 12)},
{ 'technology': 'Leather Archer Armor',
'timestamp': datetime.time(0, 30, 13)},
{ 'technology': 'Thumb Ring',
'timestamp': datetime.time(0, 31, 11)},
{ 'technology': 'Thumb Ring',
'timestamp': datetime.time(0, 31, 11)},
{ 'technology': 'Imperial Age',
'timestamp': datetime.time(0, 34, 33)},
{ 'technology': 'Imperial Age',
'timestamp': datetime.time(0, 34, 34)},
{ 'technology': 'Hand Cart',
'timestamp': datetime.time(0, 34, 48)},
{ 'technology': 'Hand Cart',
'timestamp': datetime.time(0, 34, 48)},
{ 'technology': 'Light Cavalry',
'timestamp': datetime.time(0, 37, 36)},
{ 'technology': 'Light Cavalry',
'timestamp': datetime.time(0, 37, 37)},
{ 'technology': 'Heavy Cav Archer',
'timestamp': datetime.time(0, 37, 49)},
{ 'technology': 'Heavy Cav Archer',
'timestamp': datetime.time(0, 37, 49)},
{ 'technology': 'Bracer',
'timestamp': datetime.time(0, 37, 55)},
{ 'technology': 'Bracer',
'timestamp': datetime.time(0, 37, 55)},
{ 'technology': 'Chemistry',
'timestamp': datetime.time(0, 38, 20)}],
'score': 6529,
'voobly': { 'nation': None,
'rating_current': None,
'rating_game': 2299,
'uid': None},
'winner': False},
{ 'achievements': { 'buildings_lost': 0,
'buildings_razed': 4,
'conversions': 0,
'explored_percent': 76,
'food_collected': 13278,
'gold_collected': 10738,
'relic_gold': 168,
'relics_collected': 1,
'stone_collected': 755,
'total_castles': 0,
'trade_gold': 0,
'tribute_received': 0,
'tribute_sent': 0,
'units_killed': 95,
'units_lost': 58,
'villager_high': 112,
'wood_collected': 16029},
'action_histogram': { 'build': 113,
'delete': 13,
'formation': 492,
'game': 3,
'interact': 313,
'move': 1672,
'research': 69,
'wall': 7},
'ages': { 'castle': datetime.time(0, 16, 58),
'feudal': datetime.time(0, 12, 49),
'imperial': datetime.time(0, 36, 20)},
'apm': 92,
'build': [ { 'building': 'Lumber Camp',
'coordinates': {'x': 115.0, 'y': 85.0},
'timestamp': datetime.time(0, 1, 47)},
{ 'building': 'Mill',
'coordinates': {'x': 98.0, 'y': 85.0},
'timestamp': datetime.time(0, 4, 3)},
{ 'building': 'Barracks',
'coordinates': {'x': 94.5, 'y': 70.5},
'timestamp': datetime.time(0, 6, 30)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 73.5},
'timestamp': datetime.time(0, 7, 44)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 75.5},
'timestamp': datetime.time(0, 8, 39)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 79.5},
'timestamp': datetime.time(0, 8, 40)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 78.5},
'timestamp': datetime.time(0, 8, 46)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 80.5},
'timestamp': datetime.time(0, 9, 27)},
{ 'building': 'Farm',
'coordinates': {'x': 104.5, 'y': 80.5},
'timestamp': datetime.time(0, 9, 44)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 77.5},
'timestamp': datetime.time(0, 9, 46)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 108.0, 'y': 65.0},
'timestamp': datetime.time(0, 10, 27)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 74.5},
'timestamp': datetime.time(0, 11, 6)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 81.5},
'timestamp': datetime.time(0, 11, 12)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 72.5},
'timestamp': datetime.time(0, 11, 33)},
{ 'building': 'Archery Range',
'coordinates': {'x': 99.5, 'y': 67.5},
'timestamp': datetime.time(0, 12, 53)},
{ 'building': 'Blacksmith',
'coordinates': {'x': 100.5, 'y': 92.5},
'timestamp': datetime.time(0, 13, 16)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 110.0, 'y': 93.0},
'timestamp': datetime.time(0, 13, 53)},
{ 'building': 'Farm',
'coordinates': {'x': 101.5, 'y': 80.5},
'timestamp': datetime.time(0, 15, 10)},
{ 'building': 'Archery Range',
'coordinates': {'x': 97.5, 'y': 63.5},
'timestamp': datetime.time(0, 15, 51)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 73.5},
'timestamp': datetime.time(0, 17, 7)},
{ 'building': 'Town Center',
'coordinates': {'x': 110.0, 'y': 61.0},
'timestamp': datetime.time(0, 17, 9)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 75.5},
'timestamp': datetime.time(0, 17, 24)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 78.5},
'timestamp': datetime.time(0, 17, 47)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 80.5},
'timestamp': datetime.time(0, 18, 24)},
{ 'building': 'Farm',
'coordinates': {'x': 104.5, 'y': 80.5},
'timestamp': datetime.time(0, 19, 7)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 77.5},
'timestamp': datetime.time(0, 19, 12)},
{ 'building': 'Town Center',
'coordinates': {'x': 112.0, 'y': 87.0},
'timestamp': datetime.time(0, 20, 9)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 74.5},
'timestamp': datetime.time(0, 21, 1)},
{ 'building': 'Farm',
'coordinates': {'x': 108.5, 'y': 90.5},
'timestamp': datetime.time(0, 21, 23)},
{ 'building': 'Farm',
'coordinates': {'x': 108.5, 'y': 87.5},
'timestamp': datetime.time(0, 21, 23)},
{ 'building': 'Farm',
'coordinates': {'x': 108.5, 'y': 84.5},
'timestamp': datetime.time(0, 21, 24)},
{ 'building': 'Farm',
'coordinates': {'x': 111.5, 'y': 83.5},
'timestamp': datetime.time(0, 21, 25)},
{ 'building': 'Farm',
'coordinates': {'x': 105.5, 'y': 83.5},
'timestamp': datetime.time(0, 21, 33)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 72.5},
'timestamp': datetime.time(0, 21, 49)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 72.5},
'timestamp': datetime.time(0, 21, 49)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 72.5},
'timestamp': datetime.time(0, 21, 49)},
{ 'building': 'Archery Range',
'coordinates': {'x': 93.5, 'y': 58.5},
'timestamp': datetime.time(0, 22, 21)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 116.0, 'y': 87.0},
'timestamp': datetime.time(0, 22, 41)},
{ 'building': 'University',
'coordinates': {'x': 99.0, 'y': 55.0},
'timestamp': datetime.time(0, 23, 15)},
{ 'building': 'Stable',
'coordinates': {'x': 94.5, 'y': 53.5},
'timestamp': datetime.time(0, 24, 18)},
{ 'building': 'Archery Range',
'coordinates': {'x': 89.5, 'y': 54.5},
'timestamp': datetime.time(0, 25, 13)},
{ 'building': 'Archery Range',
'coordinates': {'x': 88.5, 'y': 58.5},
'timestamp': datetime.time(0, 25, 14)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 102.0, 'y': 65.0},
'timestamp': datetime.time(0, 25, 25)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 105.0, 'y': 99.0},
'timestamp': datetime.time(0, 25, 33)},
{ 'building': 'Farm',
'coordinates': {'x': 106.5, 'y': 62.5},
'timestamp': datetime.time(0, 26, 3)},
{ 'building': 'Farm',
'coordinates': {'x': 109.5, 'y': 57.5},
'timestamp': datetime.time(0, 26, 5)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 75.5},
'timestamp': datetime.time(0, 26, 8)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 75.5},
'timestamp': datetime.time(0, 26, 8)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 73.5},
'timestamp': datetime.time(0, 26, 9)},
{ 'building': 'Farm',
'coordinates': {'x': 101.5, 'y': 80.5},
'timestamp': datetime.time(0, 26, 9)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 78.5},
'timestamp': datetime.time(0, 26, 26)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 78.5},
'timestamp': datetime.time(0, 26, 26)},
{ 'building': 'Farm',
'coordinates': {'x': 114.5, 'y': 83.5},
'timestamp': datetime.time(0, 27, 36)},
{ 'building': 'Farm',
'coordinates': {'x': 114.5, 'y': 80.5},
'timestamp': datetime.time(0, 27, 36)},
{ 'building': 'Farm',
'coordinates': {'x': 113.5, 'y': 77.5},
'timestamp': datetime.time(0, 27, 37)},
{ 'building': 'Farm',
'coordinates': {'x': 113.5, 'y': 74.5},
'timestamp': datetime.time(0, 27, 38)},
{ 'building': 'Mill',
'coordinates': {'x': 116.0, 'y': 78.0},
'timestamp': datetime.time(0, 27, 39)},
{ 'building': 'Town Center',
'coordinates': {'x': 103.0, 'y': 45.0},
'timestamp': datetime.time(0, 28, 23)},
{ 'building': 'Farm',
'coordinates': {'x': 111.5, 'y': 90.5},
'timestamp': datetime.time(0, 29, 17)},
{ 'building': 'Farm',
'coordinates': {'x': 117.5, 'y': 80.5},
'timestamp': datetime.time(0, 29, 18)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 48.5},
'timestamp': datetime.time(0, 30, 4)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 48.5},
'timestamp': datetime.time(0, 30, 4)},
{ 'building': 'Farm',
'coordinates': {'x': 100.5, 'y': 48.5},
'timestamp': datetime.time(0, 30, 10)},
{ 'building': 'Farm',
'coordinates': {'x': 99.5, 'y': 45.5},
'timestamp': datetime.time(0, 30, 11)},
{ 'building': 'Farm',
'coordinates': {'x': 99.5, 'y': 42.5},
'timestamp': datetime.time(0, 30, 12)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 41.5},
'timestamp': datetime.time(0, 30, 12)},
{ 'building': 'Farm',
'coordinates': {'x': 106.5, 'y': 41.5},
'timestamp': datetime.time(0, 30, 13)},
{ 'building': 'Farm',
'coordinates': {'x': 117.5, 'y': 83.5},
'timestamp': datetime.time(0, 30, 36)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 117.0, 'y': 89.0},
'timestamp': datetime.time(0, 30, 41)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 77.5},
'timestamp': datetime.time(0, 31, 21)},
{ 'building': 'Farm',
'coordinates': {'x': 104.5, 'y': 80.5},
'timestamp': datetime.time(0, 31, 22)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 80.5},
'timestamp': datetime.time(0, 31, 22)},
{ 'building': 'Monastery',
'coordinates': {'x': 86.5, 'y': 43.5},
'timestamp': datetime.time(0, 31, 30)},
{ 'building': 'Farm',
'coordinates': {'x': 115.5, 'y': 86.5},
'timestamp': datetime.time(0, 31, 52)},
{ 'building': 'Farm',
'coordinates': {'x': 118.5, 'y': 86.5},
'timestamp': datetime.time(0, 31, 53)},
{ 'building': 'Archery Range',
'coordinates': {'x': 85.5, 'y': 51.5},
'timestamp': datetime.time(0, 32, 15)},
{ 'building': 'Archery Range',
'coordinates': {'x': 85.5, 'y': 47.5},
'timestamp': datetime.time(0, 32, 15)},
{ 'building': 'Archery Range',
'coordinates': {'x': 82.5, 'y': 43.5},
'timestamp': datetime.time(0, 32, 19)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 114.0, 'y': 61.0},
'timestamp': datetime.time(0, 32, 48)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 107.0, 'y': 35.0},
'timestamp': datetime.time(0, 32, 51)},
{ 'building': 'Siege Workshop',
'coordinates': {'x': 52.0, 'y': 67.0},
'timestamp': datetime.time(0, 33, 28)},
{ 'building': 'Siege Workshop',
'coordinates': {'x': 51.0, 'y': 61.0},
'timestamp': datetime.time(0, 33, 28)},
{ 'building': 'Farm',
'coordinates': {'x': 111.5, 'y': 83.5},
'timestamp': datetime.time(0, 33, 45)},
{ 'building': 'Farm',
'coordinates': {'x': 111.5, 'y': 83.5},
'timestamp': datetime.time(0, 33, 45)},
{ 'building': 'Farm',
'coordinates': {'x': 111.5, 'y': 83.5},
'timestamp': datetime.time(0, 33, 45)},
{ 'building': 'Farm',
'coordinates': {'x': 108.5, 'y': 90.5},
'timestamp': datetime.time(0, 33, 47)},
{ 'building': 'Farm',
'coordinates': {'x': 108.5, 'y': 87.5},
'timestamp': datetime.time(0, 33, 47)},
{ 'building': 'Farm',
'coordinates': {'x': 103.5, 'y': 74.5},
'timestamp': datetime.time(0, 34, 34)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 72.5},
'timestamp': datetime.time(0, 34, 34)},
{ 'building': 'Farm',
'coordinates': {'x': 108.5, 'y': 84.5},
'timestamp': datetime.time(0, 34, 36)},
{ 'building': 'Siege Workshop',
'coordinates': {'x': 51.0, 'y': 61.0},
'timestamp': datetime.time(0, 35, 7)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 114.0, 'y': 99.0},
'timestamp': datetime.time(0, 35, 22)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 84.0, 'y': 69.0},
'timestamp': datetime.time(0, 36, 1)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 113.0, 'y': 70.0},
'timestamp': datetime.time(0, 36, 8)},
{ 'building': 'Farm',
'coordinates': {'x': 105.5, 'y': 83.5},
'timestamp': datetime.time(0, 36, 19)},
{ 'building': 'Farm',
'coordinates': {'x': 105.5, 'y': 83.5},
'timestamp': datetime.time(0, 36, 19)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 116.0, 'y': 94.0},
'timestamp': datetime.time(0, 37, 32)},
{ 'building': 'Farm',
'coordinates': {'x': 114.5, 'y': 90.5},
'timestamp': datetime.time(0, 37, 33)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 78.5},
'timestamp': datetime.time(0, 37, 34)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 78.5},
'timestamp': datetime.time(0, 37, 34)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 78.5},
'timestamp': datetime.time(0, 37, 34)},
{ 'building': 'Farm',
'coordinates': {'x': 110.5, 'y': 75.5},
'timestamp': datetime.time(0, 37, 34)},
{ 'building': 'Farm',
'coordinates': {'x': 107.5, 'y': 73.5},
'timestamp': datetime.time(0, 37, 35)},
{ 'building': 'Farm',
'coordinates': {'x': 106.5, 'y': 62.5},
'timestamp': datetime.time(0, 38, 34)},
{ 'building': 'Farm',
'coordinates': {'x': 109.5, 'y': 57.5},
'timestamp': datetime.time(0, 38, 34)},
{ 'building': 'Mining Camp',
'coordinates': {'x': 39.0, 'y': 38.0},
'timestamp': datetime.time(0, 38, 37)},
{ 'building': 'Lumber Camp',
'coordinates': {'x': 92.0, 'y': 83.0},
'timestamp': datetime.time(0, 39, 9)},
{ 'building': 'Farm',
'coordinates': {'x': 101.5, 'y': 80.5},
'timestamp': datetime.time(0, 39, 9)},
{ 'building': 'Farm',
'coordinates': {'x': 114.5, 'y': 83.5},
'timestamp': datetime.time(0, 39, 19)},
{ 'building': 'Farm',
'coordinates': {'x': 114.5, 'y': 83.5},
'timestamp': datetime.time(0, 39, 19)},
{ 'building': 'Farm',
'coordinates': {'x': 114.5, 'y': 80.5},
'timestamp': datetime.time(0, 39, 20)},
{ 'building': 'Farm',
'coordinates': {'x': 113.5, 'y': 77.5},
'timestamp': datetime.time(0, 39, 21)},
{ 'building': 'Castle',
'coordinates': {'x': 43.0, 'y': 80.0},
'timestamp': datetime.time(0, 39, 30)}],
'civilization': 'Huns',
'color': 'yellow',
'coordinates': {'x': 107.0, 'y': 77.0},
'index': 2,
'mvp': False,
'name': 'TheViper',
'number': 4,
'position': 'northeast',
'research': [ { 'technology': 'Loom',
'timestamp': datetime.time(0, 9, 20)},
{ 'technology': 'Loom',
'timestamp': datetime.time(0, 9, 20)},
{ 'technology': 'Feudal Age',
'timestamp': datetime.time(0, 10, 39)},
{ 'technology': 'Feudal Age',
'timestamp': datetime.time(0, 10, 39)},
{ 'technology': 'Castle Age',
'timestamp': datetime.time(0, 14, 18)},
{ 'technology': 'Castle Age',
'timestamp': datetime.time(0, 14, 18)},
{ 'technology': 'Double-Bit Axe',
'timestamp': datetime.time(0, 15, 5)},
{ 'technology': 'Fletching',
'timestamp': datetime.time(0, 15, 20)},
{ 'technology': 'Fletching',
'timestamp': datetime.time(0, 15, 21)},
{ 'technology': 'Crossbowman',
'timestamp': datetime.time(0, 17, 1)},
{ 'technology': 'Crossbowman',
'timestamp': datetime.time(0, 17, 1)},
{ 'technology': 'Crossbowman',
'timestamp': datetime.time(0, 17, 2)},
{ 'technology': 'Bodkin Arrow',
'timestamp': datetime.time(0, 17, 2)},
{ 'technology': 'Bodkin Arrow',
'timestamp': datetime.time(0, 17, 3)},
{ 'technology': 'Bodkin Arrow',
'timestamp': datetime.time(0, 17, 3)},
{ 'technology': 'Horse Collar',
'timestamp': datetime.time(0, 18, 31)},
{ 'technology': 'Bow Saw',
'timestamp': datetime.time(0, 21, 38)},
{ 'technology': 'Bow Saw',
'timestamp': datetime.time(0, 21, 38)},
{ 'technology': 'Bow Saw',
'timestamp': datetime.time(0, 21, 39)},
{ 'technology': 'Bow Saw',
'timestamp': datetime.time(0, 21, 39)},
{ 'technology': 'Wheelbarrow',
'timestamp': datetime.time(0, 23, 49)},
{ 'technology': 'Wheelbarrow',
'timestamp': datetime.time(0, 23, 49)},
{ 'technology': 'Wheelbarrow',
'timestamp': datetime.time(0, 23, 50)},
{ 'technology': 'Wheelbarrow',
'timestamp': datetime.time(0, 23, 50)},
{ 'technology': 'Ballistics',
'timestamp': datetime.time(0, 25, 46)},
{ 'technology': 'Ballistics',
'timestamp': datetime.time(0, 25, 46)},
{ 'technology': 'Ballistics',
'timestamp': datetime.time(0, 25, 46)},
{ 'technology': 'Padded Archer Armor',
'timestamp': datetime.time(0, 26, 30)},
{ 'technology': 'Padded Archer Armor',
'timestamp': datetime.time(0, 26, 30)},
{ 'technology': 'Padded Archer Armor',
'timestamp': datetime.time(0, 26, 30)},
{ 'technology': 'Bloodlines',
'timestamp': datetime.time(0, 29, 3)},
{ 'technology': 'Bloodlines',
'timestamp': datetime.time(0, 29, 3)},
{ 'technology': 'Gold Mining',
'timestamp': datetime.time(0, 29, 29)},
{ 'technology': 'Gold Mining',
'timestamp': datetime.time(0, 29, 29)},
{ 'technology': 'Leather Archer Armor',
'timestamp': datetime.time(0, 30, 54)},
{ 'technology': 'Leather Archer Armor',
'timestamp': datetime.time(0, 30, 54)},
{ 'technology': 'Imperial Age',
'timestamp': datetime.time(0, 33, 9)},
{ 'technology': 'Thumb Ring',
'timestamp': datetime.time(0, 33, 10)},
{ 'technology': 'Thumb Ring',
'timestamp': datetime.time(0, 33, 32)},
{ 'technology': 'Thumb Ring',
'timestamp': datetime.time(0, 33, 32)},
{ 'technology': 'Thumb Ring',
'timestamp': datetime.time(0, 33, 33)},
{ 'technology': 'Hand Cart',
'timestamp': datetime.time(0, 34, 5)},
{ 'technology': 'Hand Cart',
'timestamp': datetime.time(0, 34, 5)},
{ 'technology': 'Hand Cart',
'timestamp': datetime.time(0, 34, 6)},
{ 'technology': 'Hand Cart',
'timestamp': datetime.time(0, 34, 6)},
{ 'technology': 'Husbandry',
'timestamp': datetime.time(0, 34, 39)},
{ 'technology': 'Husbandry',
'timestamp': datetime.time(0, 34, 39)},
{ 'technology': 'Gold Shaft Mining',
'timestamp': datetime.time(0, 34, 58)},
{ 'technology': 'Gold Shaft Mining',
'timestamp': datetime.time(0, 34, 59)},
{ 'technology': 'Gold Shaft Mining',
'timestamp': datetime.time(0, 34, 59)},
{ 'technology': 'Bracer',
'timestamp': datetime.time(0, 36, 22)},
{ 'technology': 'Bracer',
'timestamp': datetime.time(0, 36, 22)},
{ 'technology': 'Two-Man Saw',
'timestamp': datetime.time(0, 36, 22)},
{ 'technology': 'Two-Man Saw',
'timestamp': datetime.time(0, 36, 23)},
{ 'technology': 'Two-Man Saw',
'timestamp': datetime.time(0, 36, 23)},
{ 'technology': 'Parthian Tactics',
'timestamp': datetime.time(0, 36, 25)},
{ 'technology': 'Parthian Tactics',
'timestamp': datetime.time(0, 36, 25)},
{ 'technology': 'Parthian Tactics',
'timestamp': datetime.time(0, 36, 25)},
{ 'technology': 'Parthian Tactics',
'timestamp': datetime.time(0, 36, 25)},
{ 'technology': 'Capped Ram',
'timestamp': datetime.time(0, 36, 41)},
{ 'technology': 'Capped Ram',
'timestamp': datetime.time(0, 36, 41)},
{ 'technology': 'Capped Ram',
'timestamp': datetime.time(0, 36, 41)},
{ 'technology': 'Capped Ram',
'timestamp': datetime.time(0, 36, 41)},
{ 'technology': 'Heavy Plow',
'timestamp': datetime.time(0, 37, 36)},
{ 'technology': 'Heavy Plow',
'timestamp': datetime.time(0, 37, 37)},
{ 'technology': 'Heavy Cav Archer',
'timestamp': datetime.time(0, 38, 13)},
{ 'technology': 'Heavy Cav Archer',
'timestamp': datetime.time(0, 38, 13)},
{ 'technology': 'Chemistry',
'timestamp': datetime.time(0, 39, 1)},
{ 'technology': 'Chemistry',
'timestamp': datetime.time(0, 39, 2)}],
'score': 8585,
'voobly': { 'nation': None,
'rating_current': None,
'rating_game': 2407,
'uid': None},
'winner': True}],
'queue': [ {'timestamp': datetime.time(0, 0, 2), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 2), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 4), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 4), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 4), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 8), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 8), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 8), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 10), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 10), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 10), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 10), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 0, 10), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 1, 24), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 1, 25), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 1, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 1, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 1, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 1, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 1, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 2), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 16), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 18), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 2, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 3, 9), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 3, 18), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 3, 19), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 3, 41), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 3, 41), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 3, 47), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 3, 47), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 36), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 36), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 36), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 4, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 8), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 29), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 29), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 29), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 45), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 45), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 46), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 46), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 5, 47), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 5), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 9), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 10), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 33), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 33), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 57), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 6, 59), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 7, 18), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 7, 19), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 7, 19), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 7, 30), 'unit': 'Militia'},
{'timestamp': datetime.time(0, 7, 31), 'unit': 'Militia'},
{'timestamp': datetime.time(0, 7, 41), 'unit': 'Militia'},
{'timestamp': datetime.time(0, 7, 44), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 8, 3), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 8, 6), 'unit': 'Militia'},
{'timestamp': datetime.time(0, 8, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 8, 38), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 9, 48), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 10, 3), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 10, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 10, 32), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 10, 39), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 10, 55), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 11, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 11, 57), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 11, 57), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 12, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 12, 52), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 12, 54), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 13, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 13, 29), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 13, 39), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 14, 20), 'unit': 'Archer'},
{'timestamp': datetime.time(0, 14, 28), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 15, 17), 'unit': 'Archer'},
{'timestamp': datetime.time(0, 15, 31), 'unit': 'Archer'},
{'timestamp': datetime.time(0, 15, 53), 'unit': 'Archer'},
{'timestamp': datetime.time(0, 16, 20), 'unit': 'Archer'},
{'timestamp': datetime.time(0, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 17, 18), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 17, 29),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 17, 39), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 17, 57),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 17, 58),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 18, 9),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 18, 25),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 18, 25),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 18, 26),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 18, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 18, 27), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 18, 38),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 18, 41), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 18, 44), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 18, 47),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 18, 47),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 18, 53), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 18, 53), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 18, 54), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 19, 2),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 19, 3),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 19, 11), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 19, 14),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 19, 18), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 19, 32), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 19, 37), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 19, 43),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 19, 44),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 19, 44),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 19, 52), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 5), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 19), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 31), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 31), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 20, 33),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 20, 34), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 20, 34),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 20, 46),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 20, 51),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 20, 52),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 20, 55), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 56), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 20, 59), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 21), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 21, 9), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 21, 9),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 21, 10),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 21, 24),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 21, 34), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 21, 40),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 21, 40),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 21, 41),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 21, 42),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 21, 58), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 21, 58), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 21, 58), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 22), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 22, 12),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 22, 12),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 22, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 22, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 22, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 22, 19), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 22, 20),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 22, 21),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 22, 21),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 22, 33),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 22, 33),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 22, 34),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 22, 35), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 22, 36), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 22, 36), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 22, 47), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 22, 55),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 22, 55),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 23), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 23, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 23, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 23, 1), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 23, 10),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 23, 12), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 23, 13), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 23, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 23, 16), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 23, 20),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 23, 25),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 23, 25),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 23, 37),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 23, 37),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 23, 37),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 23, 43), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 23, 43), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 23, 58),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 23, 59), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 23, 59),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 24), 'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 8),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 9),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 9),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 24, 14), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 24, 14), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 24, 19), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 24, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 24, 42), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 24, 43), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 24, 45), 'unit': 'Archer'},
{ 'timestamp': datetime.time(0, 24, 47),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 48),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 50),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 24, 53), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 24, 54), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 24, 54),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 55),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 55),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 24, 56),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 25, 3), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 5), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 5), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 6), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 8), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 22), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 22), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 22), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 25, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 25, 29),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 25, 31),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 25, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 35), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 36), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 38), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 25, 48),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 25, 48),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 25, 48),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 25, 54), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 25, 55), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 26, 2), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 26, 8), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 26, 9), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 26, 14), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 26, 15),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 26, 16), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 26, 16),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 26, 16),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 26, 17), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 26, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 26, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 26, 29),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 26, 38), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 26, 39), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 26, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 26, 51), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 26, 55),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 26, 56),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 26, 56),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 2), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 27, 4),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 4),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 4),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 27, 14), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 16), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 27), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 27, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 33),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 27, 34), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 27, 43),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 44),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 44),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 45),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 45),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 50),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 27, 50),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 27, 50), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 52), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 27, 53), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 11), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 12), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 16), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 28, 21),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 21),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 21),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 25),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 28, 28), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 29), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 30), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 28, 31), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 28, 45),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 45),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 46),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 46),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 46),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 51),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 52),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 28, 52),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 4),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 4),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 4), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 29, 4),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 5),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 5),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 5), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 29, 5),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 6), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 29, 12),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 13),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 13), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 29, 14),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 14), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 29, 14),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 14), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 16), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 18), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 19), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 26), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 29, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 33),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 35), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 37), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 41), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 41), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 42), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 29, 43),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 29, 43),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 29, 56), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 58), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 58), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 29, 58), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 9), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 30, 13),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 13),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 15),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 18),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 19),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 19),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 20),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 20),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 30, 24), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 25), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 33), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 33), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 34), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 30, 35),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 35),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 36),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 49),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 49),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 30, 50), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 30, 50),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 30, 50),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 30, 51), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 30, 51),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 30, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 30, 58), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 30, 59),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 30, 59), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 4), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 12), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 18), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 21), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 21), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 27), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 28), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 31, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 30),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 30),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 34),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 34),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 34),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 34),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 35),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 35),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 31, 45), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 46), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 47), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 47), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 48), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 31, 48), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 31, 58),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 31, 58),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 32, 1), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 32, 1), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 32, 8),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 8),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 10),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 32, 13), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 32, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 32, 15), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 32, 21), 'unit': 'Monk'},
{ 'timestamp': datetime.time(0, 32, 29),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 30),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 31),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 43),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 44),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 53),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 54),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 32, 54),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 33, 6),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 33, 17), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 33, 18), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 33, 18), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 33, 21),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 33, 22),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 33, 22),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 33, 22),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 33, 22),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 33, 23),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 33, 33), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 33, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 33, 34), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 33, 36), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 33, 38), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 34, 7),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 7),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 7),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 7),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 7),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 8),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 8),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 8),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 30),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 30),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 31),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 31),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 32),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 32),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 34, 37), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 34, 38),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 34, 38), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 34, 38),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 48),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 34, 49), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 34, 49),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 49),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 50),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 50),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 51),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 34, 51),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 34, 53), 'unit': 'Monk'},
{'timestamp': datetime.time(0, 35, 13), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 35, 14), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 35, 14), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 35, 19), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 35, 20), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 35, 27),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 28),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 29),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 29),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 29),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 29),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 30),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 35, 37), 'unit': 'Monk'},
{'timestamp': datetime.time(0, 35, 39), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 35, 42), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 35, 53),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 54),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 54),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 54),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 55),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 55),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 55),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 35, 55),
'unit': 'Battering Ram'},
{ 'timestamp': datetime.time(0, 35, 57),
'unit': 'Battering Ram'},
{'timestamp': datetime.time(0, 36, 2), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 36, 2), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 36, 7), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 36, 36),
'unit': 'Battering Ram'},
{'timestamp': datetime.time(0, 36, 37), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 36, 48),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 36, 49),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 36, 49),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 36, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 36, 51), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 36, 52), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 37, 11),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 37, 11),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 37, 11),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 37, 12),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 37, 13),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 37, 14),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 37, 14),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 37, 15),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 37, 25), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 37, 26), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 37, 39), 'unit': 'Monk'},
{ 'timestamp': datetime.time(0, 38, 1),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 1),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 1),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 2),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 2),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 2),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 3),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 14),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 14),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 15),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 15),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 15),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 15),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 15),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 16),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 21),
'unit': 'Battering Ram'},
{ 'timestamp': datetime.time(0, 38, 21),
'unit': 'Battering Ram'},
{ 'timestamp': datetime.time(0, 38, 22),
'unit': 'Battering Ram'},
{ 'timestamp': datetime.time(0, 38, 22),
'unit': 'Battering Ram'},
{'timestamp': datetime.time(0, 38, 32), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 38, 33), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 38, 47),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 47),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 47),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 47),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 48),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 38, 48),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 38, 56), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 38, 56), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 39), 'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 39), 'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 2),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 3),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 3),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 3),
'unit': 'Cavalry Archer'},
{'timestamp': datetime.time(0, 39, 10), 'unit': 'Villager'},
{'timestamp': datetime.time(0, 39, 12), 'unit': 'Villager'},
{ 'timestamp': datetime.time(0, 39, 12),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 13),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 13),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 18),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 18),
'unit': 'Scout Cavalry'},
{ 'timestamp': datetime.time(0, 39, 18),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 18),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 18),
'unit': 'Scout Cavalry'},
{ 'timestamp': datetime.time(0, 39, 18),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 18),
'unit': 'Cavalry Archer'},
{ 'timestamp': datetime.time(0, 39, 20),
'unit': 'Scout Cavalry'},
{ 'timestamp': datetime.time(0, 39, 21),
'unit': 'Scout Cavalry'},
{ 'timestamp': datetime.time(0, 39, 22),
'unit': 'Scout Cavalry'},
{ 'timestamp': datetime.time(0, 39, 28),
'unit': 'Cavalry Archer'}],
'rec_owner_index': '2',
'rec_owner_number': '4',
'restore': { 'restored': 'False',
'start_int': '0',
'start_time': '00:00:00'},
'settings': { 'all_technologies': 'False',
'cheats': 'False',
'difficulty': 'easy',
'lock_speed': 'True',
'lock_teams': 'True',
'population_limit': '200',
'record_game': 'True',
'resource_level': 'standard',
'reveal_map': 'normal',
'speed': 'standard',
'starting_age': 'Dark',
'team_together': 'True',
'type': 'RM',
'victory_condition': 'conquest'},
'time_int': '2371950',
'voobly': {'ladder': 'RM - 1v1', 'rated': True},
'won_in': 'Imperial'}
Hello Happyleaves,
All your examples in the
\examples\
directory work like a charm except for\examples\rec.py
which returns this error "TypeError: a bytes-like object is required, not 'str'"I tried to fix that function mgz\recorded_game__init__.py as follows
But.. more errors came up and basically the fix didn't resolve anything. Btw I'm using
pyinstaller
to convert the examples to windows compatibility.There is another error in mgz\recorded_game\chat.py as you can observe in the image above.
I would appreciate it if you could take a look at that. Thank you,
Warm regards GregStein