@@ -15,7 +15,7 @@ def handleInitGame(self, event, replay):
15
15
replay .unit = dict ()
16
16
17
17
# keep track of last TargetAbilityEvent for UpdateTargetAbilityEvent
18
- self .last_target_ability_event = None
18
+ self .last_target_ability_event = {}
19
19
20
20
def handleGameEvent (self , event , replay ):
21
21
self .load_message_game_player (event , replay )
@@ -28,6 +28,10 @@ def handleAbilityEvent(self, event, replay):
28
28
return
29
29
30
30
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
+
31
35
if not getattr (replay , 'marked_error' , None ):
32
36
replay .marked_error = True
33
37
event .logger .error (replay .filename )
@@ -50,7 +54,7 @@ def handleAbilityEvent(self, event, replay):
50
54
self .logger .error ("Other unit {0} not found" .format (event .other_unit_id ))
51
55
52
56
def handleTargetAbilityEvent (self , event , replay ):
53
- self .last_target_ability_event = event
57
+ self .last_target_ability_event [ event . player . pid ] = event
54
58
55
59
if not replay .datapack :
56
60
return
@@ -68,9 +72,13 @@ def handleTargetAbilityEvent(self, event, replay):
68
72
replay .objects [event .target_unit_id ] = unit
69
73
70
74
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
74
82
75
83
self .handleTargetAbilityEvent (event , replay )
76
84
0 commit comments