Skip to content

Commit 89625c1

Browse files
committed
Fix player team assignment, fixes #133.
1 parent ce604e1 commit 89625c1

File tree

2 files changed

+37
-26
lines changed

2 files changed

+37
-26
lines changed

sc2reader/readers.py

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,8 @@ class AttributesEventsReader_17326(AttributesEventsReader_Base):
364364

365365

366366
class DetailsReader_Base(Reader):
367-
PlayerData = namedtuple('PlayerData',['name','bnet','race','color','unknown1','unknown2','handicap','unknown3','result'])
368-
Details = namedtuple('Details',['players','map','unknown1','unknown2','os','file_time','utc_adjustment','unknown4','unknown5','unknown6','dependencies','unknown8','unknown9','unknown10'])
367+
PlayerData = namedtuple('PlayerData',['name','bnet','race','color','control','team','handicap','observe','result'])
368+
Details = namedtuple('Details',['players','map','difficulty','thumbnail','blizzard_map','file_time','utc_adjustment','unknown4','unknown5','unknown6','dependencies','unknown8','unknown9','unknown10'])
369369

370370
def __call__(self, data, replay):
371371
# The entire details file is just a serialized data structure
@@ -378,34 +378,41 @@ def __call__(self, data, replay):
378378
# List of Players:
379379
# Name
380380
# BnetData:
381-
# unknown1
382-
# unknown2
383-
# subregion_id
381+
# region_id
382+
# program_id
383+
# realm_id
384+
# name
384385
# bnet_id
385386
# actual_race (Terran, Protoss, Zerg)
386387
# ColorData:
387388
# alpha (0-255)
388389
# red (0-255)
389390
# green (0-255)
390391
# blue (0-255)
391-
# Unknown1
392-
# Unknown2
392+
# control_id
393+
# team_id
393394
# handicap (0-100)
394-
# Team Number - according to András
395+
# observe
395396
# Result (0,1,2) - (Unknown, Win, Loss), thanks András
396-
# Map
397-
# Unknown1
398-
# Unknown2
399-
# Unknown3
400-
# file_time - Time file was created/replay was made
401-
# utc_adjustment
402-
# Unknown4
403-
# Unknown5
404-
# Unknown6
405-
# Unknown7
406-
# Unknown8
407-
# Unknown9
408-
# Unknown10
397+
# working set slot id
398+
# Map Title
399+
# difficulty
400+
# thumbnail
401+
# path
402+
# isBlizzardMap
403+
# file_time - UTC of end of the game
404+
# utc_adjustment - for the local timezone
405+
# description
406+
# image file path
407+
# campaign index
408+
# map file name
409+
# cache handles (optional array)
410+
# cache handle string
411+
# miniSave flag
412+
# game speed
413+
# defaultDifficulty
414+
# modPaths (optional array)
415+
# path string
409416
#
410417
details = BitPackedDecoder(data).read_struct()
411418

@@ -432,13 +439,13 @@ def __call__(self, data, replay):
432439
return self.Details(*ordered_values(details))
433440

434441
class DetailsReader_22612(DetailsReader_Base):
435-
Details = namedtuple('Details',['players','map','unknown1','unknown2','os','file_time','utc_adjustment','unknown4','unknown5','unknown6','dependencies','unknown8','unknown9','unknown10', 'unknown11'])
442+
Details = namedtuple('Details',['players','map','difficulty','thumbnail','blizzard_map','file_time','utc_adjustment','unknown4','unknown5','unknown6','dependencies','unknown8','unknown9','unknown10', 'unknown11'])
436443

437444
class DetailsReader_Beta(DetailsReader_Base):
438-
Details = namedtuple('Details',['players','map','unknown1','unknown2','os','file_time','utc_adjustment','unknown4','unknown5','unknown6','dependencies','unknown8','unknown9','unknown10', 'unknown11', 'unknown12'])
445+
Details = namedtuple('Details',['players','map','difficulty','thumbnail','blizzard_map','file_time','utc_adjustment','unknown4','unknown5','unknown6','dependencies','unknown8','unknown9','unknown10', 'unknown11', 'unknown12'])
439446

440447
class DetailsReader_Beta_24764(DetailsReader_Beta):
441-
PlayerData = namedtuple('PlayerData',['name','bnet','race','color','unknown1','unknown2','handicap','unknown3','result','unknown4'])
448+
PlayerData = namedtuple('PlayerData',['name','bnet','race','color','control','team','handicap','observe','result','working_set_slot'])
442449

443450
class MessageEventsReader_Base(Reader):
444451
TARGET_BITS=3

sc2reader/resources.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,16 +367,20 @@ def createPlayer(pid, pdata, attributes):
367367
# make sure to strip the clan tag out of the name
368368
# in newer replays, the clan tag can be separated from the
369369
# player name with a <sp/> symbol. It should also be stripped.
370-
name = pdata.name.split("]",1)[-1].split(">",1)[-1]
370+
name = pdata.name.split("]", 1)[-1].split(">", 1)[-1]
371371
player = Player(pid, name)
372372

373373
# In some beta patches attribute information is missing
374374
# Just assign them to team 2 to keep the issue from being fatal
375-
team_number = int(attributes.get('Teams'+self.type,"Team 2")[5:])
375+
team_number = pdata.team+1
376376

377377
if not team_number in self.team:
378378
self.team[team_number] = Team(team_number)
379379
self.teams.append(self.team[team_number])
380+
381+
# Maintain order in case people depended on it
382+
self.teams.sort(key=lambda t: t.number)
383+
380384
self.team[team_number].players.append(player)
381385
player.team = self.team[team_number]
382386

0 commit comments

Comments
 (0)