@@ -169,7 +169,7 @@ class DetailsReader_Beta(DetailsReader_Base):
169
169
170
170
class MessageEventsReader_Base (Reader ):
171
171
POFFSET = - 1
172
-
172
+ TARGET_BITS = 3
173
173
def __call__ (self , data , replay ):
174
174
# The replay.message.events file is a single long list containing three
175
175
# different element types (minimap pings, player messages, and some sort
@@ -187,7 +187,7 @@ def __call__(self, data, replay):
187
187
t = data .read_bits (3 )
188
188
flags = data .read_byte ()
189
189
190
- if flags == 0x83 :
190
+ if flags in ( 0x83 , 0x89 ) :
191
191
# We need some tests for this
192
192
x = data .read_int (LITTLE_ENDIAN )
193
193
y = data .read_int (LITTLE_ENDIAN )
@@ -198,16 +198,19 @@ def __call__(self, data, replay):
198
198
packets .append (PacketEvent (frame , pid , flags , info ))
199
199
200
200
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
203
205
length = data .read_byte ()
204
206
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 ) ))
206
208
207
209
return AttributeDict (pings = pings , messages = messages , packets = packets )
208
210
209
211
class MessageEventsReader_Beta_24247 (MessageEventsReader_Base ):
210
212
POFFSET = 0
213
+ TARGET_BITS = 4
211
214
212
215
class GameEventsReader_Base (object ):
213
216
PLAYER_JOIN_FLAGS = 4
0 commit comments