44from objects import Attribute ,Message ,Player ,Event
55from eventparsers import *
66from utils import ByteStream
7+ from exceptions import ParseError
8+
9+ from pprint import PrettyPrinter
10+ pprint = PrettyPrinter (indent = 2 ).pprint
711
812#################################################
913# Parser Dispatch Functions
@@ -148,9 +152,13 @@ def load(self,replay,filecontents):
148152 replay .messages .append (Message (time ,playerId ,target ,text ))
149153
150154 recorders = [player for player in replay .players if player and player .recorder == True ]
151- if len (recorders ) != 1 :
155+ if len (recorders ) > 1 :
152156 raise ValueError ("There should be 1 and only 1 recorder; %s were found" % len (recorders ))
153- replay .recorder = recorders [0 ]
157+ elif len (recorders ) == 0 :
158+ #If there are no recorders, then the recorder must not be a player, spectator or referee then
159+ replay .recorder = None
160+ else :
161+ replay .recorder = recorders [0 ]
154162
155163####################################################
156164# replay.game.events parsing classes
@@ -179,7 +187,7 @@ class EventParser(object):
179187 (UnknownEventParser_04X2 (), lambda e : e .code & 0x0F == 2 ),
180188 (UnknownEventParser_0416 (), lambda e : e .code == 0x16 ),
181189 (UnknownEventParser_04C6 (), lambda e : e .code == 0xC6 ),
182- (UnknownEventParser_0418or87 (), lambda e : e . code == 0x18 or e .code == 0x87 ),
190+ (UnknownEventParser_0487 (), lambda e : e .code == 0x87 ),
183191 (UnknownEventParser_0400 (), lambda e : e .code == 0x00 ),],
184192 0x05 : [
185193 (UnknownEventParser_0589 (), lambda e : e .code == 0x89 ),],
@@ -203,20 +211,24 @@ def load(self,replay,filecontents):
203211 #The following byte completes the unique eventObjectidentifier
204212 first ,eventCode = bytes .getBigInt (1 ),bytes .getBigInt (1 )
205213 eventType ,globalFlag ,playerId = first >> 5 ,first & 0x10 ,first & 0xF
206-
214+
207215 #Create a barebones event from the gathered information
208216 event = Event (elapsedTime ,eventType ,eventCode ,
209217 globalFlag ,playerId ,location ,eventBytes )
210218
211- #Get the parser and load the data into the event
212- replay .events .append (self .getParser (event ).load (event ,bytes ))
219+ try :
220+ #Get the parser and load the data into the event
221+ replay .events .append (self .getParser (event ).load (event ,bytes ))
222+ except TypeError as e :
223+ raise ParseError (e .message ,replay ,event ,bytes )
213224
214225 def getParser (self ,event ):
215226 if event .type not in self .parserMap .keys ():
216227 raise TypeError ("Unknown eventType: %s at location %s" % (hex (event .type ),event .location ))
217228
218229 for parser ,accept in self .parserMap [event .type ]:
219- if accept (event ): return parser
230+ if accept (event ):
231+ return parser
220232
221233 raise TypeError ("Unknown event: %s - %s at %s" % (hex (event .type ),hex (event .code ),event .location ))
222234
@@ -241,15 +253,25 @@ class EventParser_16561(EventParser):
241253 (CameraMovementEventParser_18 (), lambda e : e .code == 0x18 ),
242254 (CameraMovementEventParser_X1 (), lambda e : e .code & 0x0F == 1 ),],
243255 0x04 : [
244- (UnknownEventParser_04X2 (), lambda e : e .code & 0x0F == 2 ),
245- (UnknownEventParser_0416 (), lambda e : e .code == 0x16 ),
256+ (UnknownEventParser_0487 (), lambda e : e .code == 0x87 ),
246257 (UnknownEventParser_04C6 (), lambda e : e .code == 0xC6 ),
247- (UnknownEventParser_0418or87 (), lambda e : e .code == 0x18 or e .code == 0x87 ),
248- (UnknownEventParser_0400 (), lambda e : e .code == 0x00 ),],
258+ (UnknownEventParser_04XC (), lambda e : e .code & 0x0F == 0x0C and e .code >> 4 <= 0x04 ),],
249259 0x05 : [
250260 (UnknownEventParser_0589 (), lambda e : e .code == 0x89 ),],
251261 }
252262
263+ """
264+ (UnknownEventParser_04X2(), lambda e: e.code & 0x0F == 2 ),
265+ (UnknownEventParser_0416(), lambda e: e.code == 0x16 ),
266+ (UnknownEventParser_0400(), lambda e: e.code == 0x00 ),
267+
268+
269+
270+ (UnknownEventParser_04X2(), lambda e: e.code & 0x0F == 2 ),
271+ (UnknownEventParser_0416(), lambda e: e.code == 0x16 ),
272+ (UnknownEventParser_0400(), lambda e: e.code == 0x00 ),
273+ """
274+
253275class EventParser_17326 (EventParser ):
254276 parserMap = {
255277 0x00 : [
@@ -271,12 +293,9 @@ class EventParser_17326(EventParser):
271293 (CameraMovementEventParser_18 (), lambda e : e .code == 0x18 ),
272294 (CameraMovementEventParser_X1 (), lambda e : e .code & 0x0F == 1 ),],
273295 0x04 : [
274- (UnknownEventParser_04X2 (), lambda e : e .code & 0x0F == 2 ),
275- (UnknownEventParser_0416 (), lambda e : e .code == 0x16 ),
296+ (UnknownEventParser_0487 (), lambda e : e .code == 0x87 ),
276297 (UnknownEventParser_04C6 (), lambda e : e .code == 0xC6 ),
277- (UnknownEventParser_0418or87 (), lambda e : e .code == 0x18 or e .code == 0x87 ),
278- (UnknownEventParser_0400 (), lambda e : e .code == 0x00 ),
279- (UnknownEventParser_041C (), lambda e : e .code == 0x1C ),],
298+ (UnknownEventParser_04XC (), lambda e : e .code & 0x0F == 0x0C and e .code >> 4 <= 0x04 ),],
280299 0x05 : [
281300 (UnknownEventParser_0589 (), lambda e : e .code == 0x89 ),],
282301 }
0 commit comments