Skip to content

Commit 6fb12e8

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.
1 parent a3153db commit 6fb12e8

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

@@ -194,7 +194,7 @@ class Replay(Resource):
194194
resume_user_info = None
195195

196196

197-
def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, **options):
197+
def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, do_tracker_events=True, **options):
198198
super(Replay, self).__init__(replay_file, filename, **options)
199199
self.datapack = None
200200
self.raw_data = dict()
@@ -289,13 +289,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en
289289
self.load_players()
290290

291291
# Load tracker events if requested
292-
if load_level >= 3:
292+
if load_level >= 3 and do_tracker_events:
293293
self.load_level = 3
294294
for data_file in ['replay.tracker.events']:
295295
self._read_data(data_file, self._get_reader(data_file))
296296
self.load_tracker_events()
297297

298-
299298
# Load events if requested
300299
if load_level >= 4:
301300
self.load_level = 4
@@ -305,6 +304,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en
305304

306305
# Run this replay through the engine as indicated
307306
if engine:
307+
resume_events = [ev for ev in self.game_events if ev.name == 'HijackReplayGameEvent']
308+
if self.base_build <= 26490 and self.tracker_events and len(resume_events) > 0:
309+
raise CorruptTrackerFileError(
310+
"Cannot run engine on resumed games with tracker events. Run again with the " +
311+
"do_tracker_events=False option to generate context without tracker events.")
312+
308313
engine.run(self)
309314

310315
def load_details(self):

0 commit comments

Comments
 (0)