Skip to content

Commit 49158d1

Browse files
committed
Raise an informative error on corrupt tracker file
This way people can reliably catch this issue and deal with it as they wish. Conflicts: sc2reader/resources.py
1 parent 28506b0 commit 49158d1

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

sc2reader/exceptions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ class SC2ReaderLocalizationError(SC2ReaderError):
1010
pass
1111

1212

13+
class CorruptTrackerFileError(SC2ReaderError):
14+
pass
15+
16+
1317
class MPQError(SC2ReaderError):
1418
pass
1519

sc2reader/resources.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from sc2reader import readers
1717
from sc2reader import exceptions
1818
from sc2reader.data import builds as datapacks
19-
from sc2reader.exceptions import SC2ReaderLocalizationError
19+
from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError
2020
from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo
2121
from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES
2222

@@ -184,7 +184,7 @@ class Replay(Resource):
184184
#: SC2 Expansion. One of 'WoL', 'HotS'
185185
expasion = str()
186186

187-
def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, **options):
187+
def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, do_tracker_events=True, **options):
188188
super(Replay, self).__init__(replay_file, filename, **options)
189189
self.datapack = None
190190
self.raw_data = dict()
@@ -279,13 +279,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en
279279
self.load_players()
280280

281281
# Load tracker events if requested
282-
if load_level >= 3:
282+
if load_level >= 3 and do_tracker_events:
283283
self.load_level = 3
284284
for data_file in ['replay.tracker.events']:
285285
self._read_data(data_file, self._get_reader(data_file))
286286
self.load_tracker_events()
287287

288-
289288
# Load events if requested
290289
if load_level >= 4:
291290
self.load_level = 4
@@ -295,6 +294,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en
295294

296295
# Run this replay through the engine as indicated
297296
if engine:
297+
resume_events = [ev for ev in self.game_events if ev.name == 'HijackReplayGameEvent']
298+
if self.base_build <= 26490 and self.tracker_events and len(resume_events) > 0:
299+
raise CorruptTrackerFileError(
300+
"Cannot run engine on resumed games with tracker events. Run again with the " +
301+
"do_tracker_events=False option to generate context without tracker events.")
302+
298303
engine.run(self)
299304

300305
def load_details(self):

0 commit comments

Comments
 (0)