Skip to content

Commit ed4ec4c

Browse files
committed
Added average match apm for players and some helper results for events
1 parent 7b1fa8e commit ed4ec4c

File tree

4 files changed

+36
-16
lines changed

4 files changed

+36
-16
lines changed

sc2reader/objects.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,25 +97,37 @@ def __str__(self):
9797
class Event(object):
9898
def __init__(self, elapsed_time, event_type, event_code, global_flag, player_id,
9999
location=None, bytes=""):
100-
self.time, seconds = (elapsed_time, elapsed_time/16)
101-
self.timestr = "%s:%s" % (seconds/60, str(seconds%60).rjust(2, "0"))
100+
self.time, self.seconds = (elapsed_time, elapsed_time/16)
101+
self.timestr = "%s:%s" % (self.seconds/60, str(self.seconds%60).rjust(2, "0"))
102102
self.type = event_type
103103
self.code = event_code
104104
self.local = (global_flag == 0x0)
105105
self.player = player_id
106106
self.location = location
107107
self.bytes = bytes
108-
self.abilitystr = ""
108+
109+
# Added for convenience
110+
self.is_init = (event_type == 0x00)
111+
self.is_player_action = (event_type == 0x01)
112+
self.is_camera_movement = (event_type == 0x03)
113+
self.is_unknown = (event_type == 0x02 or event_type == 0x04 or event_type == 0x05)
109114

110115
def __call__(self, elapsed_time, event_type, global_flag, player_id, event_code, bytes):
111-
self.time, seconds = (elapsed_time, elapsed_time/16)
112-
self.timestr = "%s:%s" % (seconds/60, str(seconds%60).rjust(2, "0"))
116+
self.time, self.seconds = (elapsed_time, elapsed_time/16)
117+
self.timestr = "%s:%s" % (self.seconds/60, str(self.seconds%60).rjust(2, "0"))
113118
self.type = event_type
114119
self.code = event_code
115120
self.local = (global_flag == 0x0)
116121
self.player = player_id
117122
self.bytes = ""
118123
self.abilitystr = ""
124+
125+
# Added for convenience
126+
self.is_init = (event_type == 0x00)
127+
self.is_player_action = (event_type == 0x01)
128+
self.is_camera_movement = (event_type == 0x03)
129+
self.is_unknown = (event_type == 0x02 or event_type == 0x04 or event_type == 0x05)
130+
119131
self.parse(bytes)
120132
return self
121133

@@ -166,6 +178,7 @@ def __init__(self, pid, data, realm="us"):
166178
self.team = None # A number to be supplied later
167179
self.type = "" # Human or Computer
168180
self.events = list()
181+
self.avg_apm = 0
169182

170183
def __str__(self):
171184
return "Player %s - %s (%s)" % (self.pid, self.name, self.actual_race)

sc2reader/replay.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,19 @@ def _parse_events(self):
148148
self.events_by_type = defaultdict(list)
149149
for event in self.events:
150150
self.events_by_type[event.name].append(event)
151-
# self.player[event.player_id].events.append(event)
151+
152+
if event.local:
153+
player = self.player[event.player]
154+
player.events.append(event)
155+
156+
if event.is_player_action:
157+
player.avg_apm += 1
158+
else:
159+
print event.name
160+
161+
# Average the APM
162+
for player in self.players:
163+
player.avg_apm /= player.events[-1].seconds/60
152164

153165
self._process_results()
154166

shell.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@
22
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
33
from sc2reader import Replay
44
from mpyq import MPQArchive
5+
6+
replay = Replay("1.sc2replay")
7+
8+
print replay.player["dblrainbow"].avg_apm

test_replays/test_all.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,18 +83,9 @@ def test_standard_1v1():
8383
assert replay.messages[10].player.name == "Emperor"
8484
assert replay.messages[11].text == "huh?"
8585
assert replay.messages[11].player.name == "Boom"
86-
86+
8787
for msg in replay.messages:
8888
assert msg.sent_to_all == True
89-
90-
try:
91-
for event in replay.events:
92-
if (event.player_id != 1 and event.player_id != 2):
93-
print event
94-
except AttributeError:
95-
print event
96-
97-
assert True == False
9889

9990
def test_private_category():
10091
replay = Replay("test_replays/build17811/2.SC2Replay")

0 commit comments

Comments
 (0)