@@ -15,7 +15,7 @@ def handleInitGame(self, event, replay):
1515 replay .unit = dict ()
1616
1717 # keep track of last TargetAbilityEvent for UpdateTargetAbilityEvent
18- self .last_target_ability_event = None
18+ self .last_target_ability_event = {}
1919
2020 def handleGameEvent (self , event , replay ):
2121 self .load_message_game_player (event , replay )
@@ -28,6 +28,10 @@ def handleAbilityEvent(self, event, replay):
2828 return
2929
3030 if event .ability_id not in replay .datapack .abilities :
31+ # safeguard against missing abilities
32+ if event .player .pid in self .last_target_ability_event :
33+ del self .last_target_ability_event [event .player .pid ]
34+
3135 if not getattr (replay , 'marked_error' , None ):
3236 replay .marked_error = True
3337 event .logger .error (replay .filename )
@@ -50,7 +54,7 @@ def handleAbilityEvent(self, event, replay):
5054 self .logger .error ("Other unit {0} not found" .format (event .other_unit_id ))
5155
5256 def handleTargetAbilityEvent (self , event , replay ):
53- self .last_target_ability_event = event
57+ self .last_target_ability_event [ event . player . pid ] = event
5458
5559 if not replay .datapack :
5660 return
@@ -68,9 +72,13 @@ def handleTargetAbilityEvent(self, event, replay):
6872 replay .objects [event .target_unit_id ] = unit
6973
7074 def handleUpdateTargetAbilityEvent (self , event , replay ):
71- # store corresponding TargetAbilityEvent data in this event
72- # currently using for *MacroTracker only, so only need ability name
73- event .ability_name = self .last_target_ability_event .ability_name
75+ # We may not find a TargetAbilityEvent before finding an
76+ # UpdateTargetAbilityEvent, perhaps due to Missing Abilities in the
77+ # datapack
78+ if event .player .pid in self .last_target_ability_event :
79+ # store corresponding TargetAbilityEvent data in this event
80+ # currently using for *MacroTracker only, so only need ability name
81+ event .ability_name = self .last_target_ability_event [event .player .pid ].ability_name
7482
7583 self .handleTargetAbilityEvent (event , replay )
7684
0 commit comments