@@ -70,10 +70,6 @@ class Replay(Resource):
7070 #: The game speed: Slower, Slow, Normal, Fast, Faster
7171 speed = str ()
7272
73- #: The operating system the replay was recorded on.
74- #: Useful for interpretting certain kind of raw data.
75- os = str ()
76-
7773 #: Deprecated, use :attr:`game_type` or :attr:`real_type` instead
7874 type = str ()
7975
@@ -203,7 +199,6 @@ def __init__(self, replay_file, filename=None, load_level=4, **options):
203199 self .other_people = set ()
204200 self .speed = ""
205201 self .type = ""
206- self .os = str ()
207202 self .game_type = ""
208203 self .real_type = ""
209204 self .category = ""
@@ -298,13 +293,13 @@ def load_details(self):
298293
299294 self .map_name = details .map
300295
301- # Keep this theory for now but it seems like it could be wrong
302- if details . os == 0 :
303- self .os = "Windows"
304- elif details . os == 1 :
305- self .os = "Mac"
296+ dependency_hashes = [ d . hash for d in details . dependencies ]
297+ if hashlib . sha256 ( 'Standard Data: Swarm.SC2Mod' ). hexdigest () in dependency_hashes :
298+ self .expansion = 'HotS'
299+ elif hashlib . sha256 ( 'Standard Data: Liberty.SC2Mod' ). hexdigest () in dependency_hashes :
300+ self .expansion = 'WoL'
306301 else :
307- raise ValueError ( "Unknown operating system {0} detected." . format ( details . os ))
302+ self . expansion = ''
308303
309304 self .windows_timestamp = details .file_time
310305 self .unix_timestamp = utils .windows_to_unix (self .windows_timestamp )
@@ -537,22 +532,22 @@ def register_datapack(self, datapack, filterfunc=lambda r: True):
537532 def register_default_readers (self ):
538533 """Registers factory default readers."""
539534 self .register_reader ('replay.details' , readers .DetailsReader_Base (), lambda r : r .build < 22612 )
540- self .register_reader ('replay.details' , readers .DetailsReader_22612 (), lambda r : r .build >= 22612 and r .expansion == 'WoL' )
541- self .register_reader ('replay.details' , readers .DetailsReader_Beta (), lambda r : r .build < 24764 and r .expansion == 'HotS' )
535+ self .register_reader ('replay.details' , readers .DetailsReader_22612 (), lambda r : r .build >= 22612 and r .versions [ 1 ] == 1 )
536+ self .register_reader ('replay.details' , readers .DetailsReader_Beta (), lambda r : r .build < 24764 and r .versions [ 1 ] == 2 )
542537 self .register_reader ('replay.details' , readers .DetailsReader_Beta_24764 (), lambda r : r .build >= 24764 )
543538 self .register_reader ('replay.initData' , readers .InitDataReader_Base (), lambda r : r .build < 24764 )
544539 self .register_reader ('replay.initData' , readers .InitDataReader_24764 (), lambda r : r .build >= 24764 )
545- self .register_reader ('replay.message.events' , readers .MessageEventsReader_Base (), lambda r : r .build < 24247 or r .expansion == 'WoL' )
546- self .register_reader ('replay.message.events' , readers .MessageEventsReader_Beta_24247 (), lambda r : r .build >= 24247 and r .expansion == 'HotS' )
540+ self .register_reader ('replay.message.events' , readers .MessageEventsReader_Base (), lambda r : r .build < 24247 or r .versions [ 1 ] == 1 )
541+ self .register_reader ('replay.message.events' , readers .MessageEventsReader_Beta_24247 (), lambda r : r .build >= 24247 and r .versions [ 1 ] == 2 )
547542 self .register_reader ('replay.attributes.events' , readers .AttributesEventsReader_Base (), lambda r : r .build < 17326 )
548543 self .register_reader ('replay.attributes.events' , readers .AttributesEventsReader_17326 (), lambda r : r .build >= 17326 )
549544 self .register_reader ('replay.game.events' , readers .GameEventsReader_16117 (), lambda r : 16117 <= r .build < 16561 )
550545 self .register_reader ('replay.game.events' , readers .GameEventsReader_16561 (), lambda r : 16561 <= r .build < 18574 )
551546 self .register_reader ('replay.game.events' , readers .GameEventsReader_18574 (), lambda r : 18574 <= r .build < 19595 )
552547 self .register_reader ('replay.game.events' , readers .GameEventsReader_19595 (), lambda r : 19595 <= r .build < 22612 )
553- self .register_reader ('replay.game.events' , readers .GameEventsReader_22612 (), lambda r : 22612 <= r .build and r .expansion == 'WoL' )
554- self .register_reader ('replay.game.events' , readers .GameEventsReader_Beta (), lambda r : r .expansion == 'HotS' and r .build < 23925 )
555- self .register_reader ('replay.game.events' , readers .GameEventsReader_Beta_23925 (), lambda r : r .expansion == 'HotS' and 23925 <= r .build )
548+ self .register_reader ('replay.game.events' , readers .GameEventsReader_22612 (), lambda r : 22612 <= r .build and r .versions [ 1 ] == 1 )
549+ self .register_reader ('replay.game.events' , readers .GameEventsReader_Beta (), lambda r : r .versions [ 1 ] == 2 and r .build < 23925 )
550+ self .register_reader ('replay.game.events' , readers .GameEventsReader_Beta_23925 (), lambda r : r .versions [ 1 ] == 2 and 23925 <= r .build )
556551
557552
558553 def register_default_datapacks (self ):
@@ -747,6 +742,14 @@ def __init__(self, summary_file, filename=None, lang='enUS', **options):
747742 self .load_player_stats ()
748743 self .load_players ()
749744
745+ dependencies = [sheet [1 ] for sheet in self .lang_sheets ['enUS' ]]
746+ if 'Swarm (Mod)' in dependencies :
747+ self .expansion = 'HotS'
748+ elif 'Liberty (Mod)' in dependencies :
749+ self .expansion = 'WoL'
750+ else :
751+ self .expansion = ''
752+
750753 self .game_type = self .settings ['Teams' ].replace (" " ,"" )
751754 self .real_type = real_type (self .teams .values ())
752755
0 commit comments