Skip to content

Commit 865272f

Browse files
committed
Fix message.events parsing.
1 parent e0227c5 commit 865272f

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

sc2reader/events.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ def __init__(self, frame, pid, flags):
5757
class ChatEvent(MessageEvent):
5858
name = 'ChatEvent'
5959

60-
def __init__(self, frame, pid, flags, target, text):
60+
def __init__(self, frame, pid, flags, target, text, extension):
6161
super(ChatEvent, self).__init__(frame, pid, flags)
6262
self.target = target
63+
self.extension = extension
6364
self.text = text
6465
self.to_all = (self.target == 0)
6566
self.to_allies = (self.target == 2)

sc2reader/readers.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ class DetailsReader_Beta(DetailsReader_Base):
169169

170170
class MessageEventsReader_Base(Reader):
171171
POFFSET=-1
172-
172+
TARGET_BITS=3
173173
def __call__(self, data, replay):
174174
# The replay.message.events file is a single long list containing three
175175
# different element types (minimap pings, player messages, and some sort
@@ -187,7 +187,7 @@ def __call__(self, data, replay):
187187
t = data.read_bits(3)
188188
flags = data.read_byte()
189189

190-
if flags == 0x83:
190+
if flags in (0x83,0x89):
191191
# We need some tests for this
192192
x = data.read_int(LITTLE_ENDIAN)
193193
y = data.read_int(LITTLE_ENDIAN)
@@ -198,16 +198,19 @@ def __call__(self, data, replay):
198198
packets.append(PacketEvent(frame, pid, flags, info))
199199

200200
elif flags & 0x80 == 0:
201-
target = flags & 0x07
202-
extension = (flags & 0x18) << 3
201+
lo_mask = 2**self.TARGET_BITS-1
202+
hi_mask = 0xFF ^ lo_mask
203+
target = flags & lo_mask
204+
extension = (flags & hi_mask) << 3
203205
length = data.read_byte()
204206
text = data.read_bytes(length + extension)
205-
messages.append(ChatEvent(frame, pid, flags, target, text))
207+
messages.append(ChatEvent(frame, pid, flags, target, text, (flags, lo_mask, hi_mask, length, extension)))
206208

207209
return AttributeDict(pings=pings, messages=messages, packets=packets)
208210

209211
class MessageEventsReader_Beta_24247(MessageEventsReader_Base):
210212
POFFSET=0
213+
TARGET_BITS=4
211214

212215
class GameEventsReader_Base(object):
213216
PLAYER_JOIN_FLAGS = 4

0 commit comments

Comments
 (0)