1919from 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+
2231class 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