Skip to content

Commit 4682853

Browse files
committed
Work on parsing GameSummary
1 parent d936ac3 commit 4682853

File tree

2 files changed

+57
-7
lines changed

2 files changed

+57
-7
lines changed

sc2reader/objects.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,31 @@ def format(self, format_string):
207207

208208
def __repr__(self):
209209
return str(self)
210+
211+
class PlayerSummary():
212+
"""
213+
A class to represent a player in the game summary (.s2gs)
214+
"""
215+
#: The index of the player in the game
216+
pid = int()
217+
218+
#: The race the player used
219+
race = str()
220+
221+
#: Battle.Net id of the player
222+
bnetid = int()
223+
224+
#: Subregion id of player
225+
subregion = int()
226+
227+
#: unknown1
228+
unknown1 = int()
229+
230+
#: unknown2
231+
unknown2 = dict()
232+
233+
def __init__(self, pid):
234+
self.pid = pid
235+
236+
def __str__(self):
237+
return '{} - {}/{}/'.format(self.race, self.subregion, self.bnetid)

sc2reader/resources.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from sc2reader import utils
1313
from sc2reader import log_utils
14-
from sc2reader.objects import Player, Observer, Team
14+
from sc2reader.objects import Player, Observer, Team, PlayerSummary
1515
from sc2reader.constants import REGIONS, LOCALIZED_RACES, GAME_SPEED_FACTOR
1616

1717

@@ -407,20 +407,42 @@ def read_game_strings(self):
407407

408408
class GameSummary(Resource):
409409
url_template = 'http://{0}.depot.battle.net:1119/{1}.s2gs'
410+
411+
race_map = {
412+
'Zerg' : 'Zerg',
413+
'Terr' : 'Terran',
414+
'Prot' : 'Protoss',
415+
'RAND' : 'Random'
416+
}
417+
418+
419+
#: Players, a list of :class`PlayerSummary` from the game
420+
players = list()
421+
410422
def __init__(self, summary_file, filename=None, **options):
411423
super(GameSummary, self).__init__(summary_file, filename,**options)
412424
self.data = zlib.decompress(summary_file.read()[16:])
413425
self.parts = list()
414426
buffer = utils.ReplayBuffer(self.data)
415427
while buffer.left:
416428
part = buffer.read_data_struct()
417-
# print str(part)+"\n\n\n"
418429
self.parts.append(part)
419-
# print len(self.parts)
420-
# pprint.PrettyPrinter(indent=2).pprint(self.parts)
421-
for index, name in s2gsmap:
422-
for player in [0, 1]:
423-
print "Player", player, name, self.parts[3][0][index][1][player][0][0]
430+
431+
#Parse players, 16 is the maximum amount of players
432+
for i in range(16):
433+
player = None
434+
# Check if player, break if not
435+
if self.parts[0][3][i][2] == '\x00\x00\x00\x00':
436+
break
437+
player_struct = self.parts[0][3][i]
438+
439+
player = PlayerSummary(i)
440+
player.race = self.race_map[player_struct[2]]
441+
player.bnetid = player_struct[0][1][0][3]
442+
player.subregion = player_struct[0][1][0][2]
443+
444+
self.players.append(player)
445+
424446

425447
class MapInfo(Resource):
426448
url_template = 'http://{0}.depot.battle.net:1119/{1}.s2mi'

0 commit comments

Comments
 (0)