Skip to content

Commit e6d5789

Browse files
committed
provide start_time, end_time, game_type and real_type for s2gs
1 parent ca2213a commit e6d5789

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

sc2reader/resources.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@
1919
from sc2reader.constants import REGIONS, LOCALIZED_RACES, GAME_SPEED_FACTOR, GAME_SPEED_CODES, RACE_CODES, PLAYER_TYPE_CODES, TEAM_COLOR_CODES, GAME_FORMAT_CODES, GAME_TYPE_CODES, DIFFICULTY_CODES
2020

2121

22+
def real_type(teams):
23+
# Special case FFA games and sort outmatched games in ascending order
24+
team_sizes = [len(team.players) for team in teams]
25+
if len(team_sizes) > 2 and sum(team_sizes) == len(team_sizes):
26+
return "FFA"
27+
else:
28+
return "v".join(str(size) for size in sorted(team_sizes))
29+
30+
2231
class Resource(object):
2332
def __init__(self, file_object, filename=None, **options):
2433
self.opt = utils.AttributeDict(options)
@@ -399,12 +408,7 @@ def load_players(self):
399408
for team in self.teams:
400409
team.lineup = ''.join(sorted(player.play_race[0].upper() for player in team))
401410

402-
# Special case FFA games and sort outmatched games in ascending order
403-
team_sizes = [len(team.players) for team in self.teams]
404-
if len(team_sizes) > 2 and sum(team_sizes) == len(team_sizes):
405-
self.real_type = "FFA"
406-
else:
407-
self.real_type = "v".join(str(size) for size in sorted(team_sizes))
411+
self.real_type = real_type(self.teams)
408412

409413
if 'replay.initData' in self.raw_data:
410414
# Assign the default region to computer players for consistency
@@ -660,8 +664,9 @@ def __init__(self, summary_file, filename=None, **options):
660664

661665
self.observers = list()
662666

663-
#: Game completion time
664-
self.time = None
667+
#: Game start and end times
668+
self.start_time = None
669+
self.end_time = None
665670

666671
self.winners = list()
667672
self.player = dict()
@@ -674,6 +679,8 @@ def __init__(self, summary_file, filename=None, **options):
674679
self.lobby_properties = dict()
675680
self.lobby_player_properties = dict()
676681
self.teams = dict()
682+
self.game_type = str()
683+
self.real_type = str()
677684

678685
# The first 16 bytes appear to be some sort of compression header
679686
buffer = utils.ReplayBuffer(zlib.decompress(summary_file.read()[16:]))
@@ -684,18 +691,21 @@ def __init__(self, summary_file, filename=None, **options):
684691
while not buffer.is_empty:
685692
self.parts.append(buffer.read_data_struct())
686693

687-
self.time = self.parts[0][8]
688-
self.date = datetime.utcfromtimestamp(self.parts[0][8])
694+
self.end_time = datetime.utcfromtimestamp(self.parts[0][8])
689695
self.game_speed = GAME_SPEED_CODES[self.parts[0][0][1]]
690696
self.game_length = utils.Length(seconds=self.parts[0][7])
691697
self.real_length = utils.Length(seconds=self.parts[0][7]/GAME_SPEED_FACTOR[self.game_speed])
698+
self.start_time = datetime.utcfromtimestamp(self.parts[0][8] - self.real_length.seconds)
692699

693700
self.load_translations()
694701
self.load_settings()
695702
self.load_player_stats()
696703
self.load_player_builds()
697704
self.load_players()
698705

706+
self.game_type = self.settings['Teams'].replace(" ","")
707+
self.real_type = real_type(self.teams.values())
708+
699709
# The s2gs file also keeps reference to a series of s2mv files
700710
# Some of these appear to be encoded bytes and others appear to be
701711
# the preview images that authors may bundle with their maps.
@@ -966,7 +976,7 @@ def load_players(self):
966976
self.player[player.pid] = player
967977

968978
def __str__(self):
969-
return "{} - {} {}".format(time.ctime(self.time),self.game_length,
979+
return "{} - {} {}".format(time.ctime(self.start_time),self.game_length,
970980
'v'.join(''.join(self.players[p].race[0] for p in self.teams[tid]) for tid in self.teams))
971981

972982

0 commit comments

Comments
 (0)