10
10
class ContextLoader (object ):
11
11
12
12
def handleInitGame (self , event , replay ):
13
- if not replay .datapack :
14
- raise ValueError ("ContextLoader requires a datapack to run" )
15
-
16
13
replay .units = set ()
17
14
replay .unit = dict ()
18
15
@@ -23,6 +20,9 @@ def handleMessageEvent(self, event, replay):
23
20
self .load_message_game_player (event , replay )
24
21
25
22
def handleAbilityEvent (self , event , replay ):
23
+ if not replay .datapack :
24
+ return
25
+
26
26
if event .ability_id not in replay .datapack .abilities :
27
27
if not getattr (replay , 'marked_error' , None ):
28
28
replay .marked_error = True
@@ -43,6 +43,9 @@ def handleAbilityEvent(self, event, replay):
43
43
self .logger .error ("Other unit {0} not found" .format (event .other_unit_id ))
44
44
45
45
def handleTargetAbilityEvent (self , event , replay ):
46
+ if not replay .datapack :
47
+ return
48
+
46
49
if event .target_unit_id in replay .objects :
47
50
event .target = replay .objects [event .target_unit_id ]
48
51
if not event .target .is_type (event .target_unit_type ):
@@ -53,6 +56,9 @@ def handleTargetAbilityEvent(self, event, replay):
53
56
replay .objects [event .target_unit_id ] = unit
54
57
55
58
def handleSelectionEvent (self , event , replay ):
59
+ if not replay .datapack :
60
+ return
61
+
56
62
units = list ()
57
63
for (unit_id , unit_type , subgroup , intra_subgroup ) in event .new_unit_info :
58
64
# If we don't have access to tracker events, use selection events to create
@@ -92,6 +98,9 @@ def handleUnitBornEvent(self, event, replay):
92
98
self .load_tracker_upkeeper (event , replay )
93
99
self .load_tracker_controller (event , replay )
94
100
101
+ if not replay .datapack :
102
+ return
103
+
95
104
if event .unit_id in replay .objects :
96
105
# This can happen because game events are done first
97
106
event .unit = replay .objects [event .unit_id ]
@@ -120,37 +129,33 @@ def handleUnitDiedEvent(self, event, replay):
120
129
if event .unit_id_index in replay .active_units :
121
130
del replay .active_units [event .unit_id_index ]
122
131
else :
123
- pass # print ("Unable to delete unit, not index not active: {0} ".format(event.unit_id_index ))
132
+ self . logger . error ("Unable to delete unit index {0} at {1} [{2}], index not active. " .format (event .killer_pid , Length ( seconds = event . second ), event . frame ))
124
133
else :
125
- pass # print ("Unit died before it was born!")
134
+ self . logger . error ("Unit {0} died at {1} [{2}] before it was born!" . format ( event . unit_id , Length ( seconds = event . second ), event . frame ) )
126
135
127
136
if event .killer_pid in replay .player :
128
137
event .killer = replay .player [event .killer_pid ]
129
138
if event .unit :
130
139
event .unit .killed_by = event .killer
131
140
event .killer .killed_units .append (event .unit )
132
141
elif event .killer_pid :
133
- pass # print ("Unknown killer pid: {0}".format(event.killer_pid))
142
+ self . logger . error ("Unknown killer pid {0} at {1} [{2}] " .format (event .killer_pid , Length ( seconds = event . second ), event . frame ))
134
143
135
144
def handleUnitOwnerChangeEvent (self , event , replay ):
136
- if event .control_pid in replay .player :
137
- event .unit_controller = replay .player [event .control_pid ]
138
- elif event .control_pid != 0 :
139
- pass # print("Unknown controller pid: {0}".format(event.control_pid))
145
+ self .load_tracker_controller (event , replay )
146
+ self .load_tracker_upkeeper (event , replay )
140
147
141
- if event .upkeep_pid in replay .player :
142
- event .unit_upkeeper = replay .player [event .upkeep_pid ]
143
- elif event .upkeep_pid != 0 :
144
- pass # print("Unknown upkeep pid: {0}".format(event.upkeep_pid))
148
+ if not replay .datapack :
149
+ return
145
150
146
151
if event .unit_id in replay .objects :
147
152
event .unit = replay .objects [event .unit_id ]
148
153
else :
149
- pass # print ("Unit owner changed before it was born!")
154
+ self . logger . error ("Unit {0} owner changed at {1} [{2}] before it was born!" . format ( event . unit_id , Length ( seconds = event . second ), event . frame ) )
150
155
151
156
if event .unit_upkeeper :
152
157
if event .unit .owner :
153
- event .unit .owner .units .remove (unit )
158
+ event .unit .owner .units .remove (event . unit )
154
159
event .unit .owner = event .unit_upkeeper
155
160
event .unit_upkeeper .units .append (event .unit )
156
161
@@ -162,7 +167,7 @@ def handleUnitTypeChangeEvent(self, event, replay):
162
167
event .unit = replay .objects [event .unit_id ]
163
168
replay .datapack .change_type (event .unit , event .unit_type_name , event .frame )
164
169
else :
165
- pass # print ("Unit type changed before it was born!")
170
+ self . logger . error ("Unit {0} type changed at {1} [{2}] before it was born!" . format ( event . unit_id , Length ( seconds = event . second )) )
166
171
167
172
def handleUpgradeCompleteEvent (self , event , replay ):
168
173
self .load_tracker_player (event , replay )
@@ -173,11 +178,11 @@ def handleUnitInitEvent(self, event, replay):
173
178
self .load_tracker_upkeeper (event , replay )
174
179
self .load_tracker_controller (event , replay )
175
180
181
+ if not replay .datapack :
182
+ return
183
+
176
184
if event .unit_id in replay .objects :
177
- # This can happen because game events are done first
178
185
event .unit = replay .objects [event .unit_id ]
179
- if not event .unit .is_type (event .unit_type_name ):
180
- pass # print("CONFLICT {0} <-_-> {1}".format(event.unit._type_class.str_id, event.unit_type_name))
181
186
else :
182
187
# TODO: How to tell if something is hallucination?
183
188
event .unit = replay .datapack .create_unit (event .unit_id , event .unit_type_name , 0 , event .frame )
@@ -192,54 +197,60 @@ def handleUnitInitEvent(self, event, replay):
192
197
event .unit .owner .units .append (event .unit )
193
198
194
199
def handleUnitDoneEvent (self , event , replay ):
200
+ if not replay .datapack :
201
+ return
202
+
195
203
if event .unit_id in replay .objects :
196
204
event .unit = replay .objects [event .unit_id ]
197
205
event .unit .finished_at = event .frame
198
206
else :
199
- pass # print ("Unit done before it was started!")
207
+ self . logger . error ("Unit {0} done at {1} [{2}] before it was started!" . format ( event . killer_pid , Length ( seconds = event . second ), event . frame ) )
200
208
201
209
def handleUnitPositionsEvent (self , event , replay ):
210
+ if not replay .datapack :
211
+ return
212
+
202
213
for unit_index , (x , y ) in event .positions :
203
214
if unit_index in replay .active_units :
204
215
unit = replay .active_units [unit_index ]
205
216
unit .location = (x , y )
206
217
event .units [unit ] = unit .location
207
218
else :
208
- pass # print ("Unit moved that doesn't exist!")
219
+ self . logger . error ("Unit at active_unit index {0} moved at {1} [{2}] but it doesn't exist!" . format ( event . killer_pid , Length ( seconds = event . second ), event . frame ) )
209
220
210
221
def load_message_game_player (self , event , replay ):
211
222
if replay .versions [1 ] == 1 or (replay .versions [1 ] == 2 and replay .build < 24247 ):
212
- if event .pid <= len ( replay .people ) :
213
- event .player = replay .person [event .pid ]
223
+ if event .pid in replay .entity :
224
+ event .player = replay .entity [event .pid ]
214
225
event .player .events .append (event )
215
226
elif event .pid != 16 :
216
- self .logger .error ("Bad pid ({0}) for event {1} at {2}." .format (event .pid , event .__class__ , Length (seconds = event .second )))
227
+ self .logger .error ("Bad pid ({0}) for event {1} at {2} [{3}] ." .format (event .pid , event .__class__ , Length (seconds = event .second ), event . frame ))
217
228
else :
218
229
pass # This is a global event
219
230
220
- else :
221
- if event .pid < len (replay .clients ):
222
- event .player = replay .client [event .pid ]
231
+ else : # Now event.pid is actually a user id for human entities
232
+ if event .pid < len (replay .humans ):
233
+ event .player = replay .human [event .pid ]
223
234
event .player .events .append (event )
224
235
elif event .pid != 16 :
225
- self .logger .error ("Bad pid ({0}) for event {1} at {2}." .format (event .pid , event .__class__ , Length (seconds = event .second )))
236
+ self .logger .error ("Bad pid ({0}) for event {1} at {2} [{3}] ." .format (event .pid , event .__class__ , Length (seconds = event .second ), event . frames ))
226
237
else :
227
238
pass # This is a global event
228
239
229
240
def load_tracker_player (self , event , replay ):
230
241
if event .pid in replay .player :
231
242
event .player = replay .player [event .pid ]
232
243
else :
233
- pass # print("Unknown upgrade pid: {0}".format(event.pid))
244
+ self . logger . error ( "Bad pid ( {0}) for event {1} at {2} [{3}]. " .format (event .pid , event . __class__ , Length ( seconds = event . second ), event . frame ))
234
245
235
246
def load_tracker_upkeeper (self , event , replay ):
236
247
if event .upkeep_pid in replay .player :
237
248
event .unit_upkeeper = replay .player [event .upkeep_pid ]
238
249
elif event .upkeep_pid != 0 :
239
- pass # print("Unknown upkeep pid: {0} ".format(event.upkeep_pid))
250
+ self . logger . error ( "Bad upkeep_pid ({0}) for event {1} at {2} [{3}]. " .format (event .upkeep_pid , event . __class__ , Length ( seconds = event . second ), event . frame ))
240
251
241
252
def load_tracker_controller (self , event , replay ):
242
253
if event .control_pid in replay .player :
243
254
event .unit_controller = replay .player [event .control_pid ]
244
255
elif event .control_pid != 0 :
245
- pass # print("Unknown controller pid: {0} ".format(event.control_pid))
256
+ self . logger . error ( "Bad control_pid ({0}) for event {1} at {2} [{3}]. " .format (event .control_pid , event . __class__ , Length ( seconds = event . second ), event . frame ))
0 commit comments