We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent bb8f9d2 commit 1d03283Copy full SHA for 1d03283
CHANGELOG.rst
@@ -4,6 +4,7 @@ CHANGELOG
4
0.7.0 -
5
---------------------------
6
7
+* Added replay.resume_from_replay flag. See replay.resume_user_info for additional info.
8
* PacketEvent is now ProgressEvent.
9
* SetToHotkeyEvent is now SetControlGroupEvent.
10
* AddToHotkeyEvent is now AddToControlGroupEvent.
sc2reader/engine/plugins/context.py
@@ -99,6 +99,11 @@ def handleResourceTradeEvent(self, event, replay):
99
event.sender = event.player
100
event.recipient = replay.players[event.recipient_id]
101
102
+ def handleHijackReplayGameEvent(self, event, replay):
103
+ replay.resume_from_replay = True
104
+ replay.resume_method = event.method
105
+ replay.resume_user_info = event.user_infos
106
+
107
def handlePlayerStatsEvent(self, event, replay):
108
self.load_tracker_player(event, replay)
109
sc2reader/events/game.py
@@ -581,3 +581,17 @@ def __init__(self, frame, pid, data):
581
582
#: The id of the request being cancelled
583
self.request_id = data['request_id']
584
585
586
+class HijackReplayGameEvent(GameEvent):
587
+ """
588
+ Generated when players take over from a replay.
589
590
+ def __init__(self, frame, pid, data):
591
+ super(HijackReplayGameEvent, self).__init__(frame, pid)
592
593
+ #: The method used. Not sure what 0/1 represent
594
+ self.method = data['method']
595
596
+ #: Information on the users hijacking the game
597
+ self.user_infos = data['user_infos']
sc2reader/readers.py
@@ -1326,7 +1326,7 @@ def __init__(self):
1326
21: (None, self.save_game_event), # New
1327
22: (None, self.save_game_done_event), # Override
1328
23: (None, self.load_game_done_event), # Override
1329
- 43: (None, self.hijack_replay_game_event), # New
+ 43: (HijackReplayGameEvent, self.hijack_replay_game_event), # New
1330
62: (None, self.trigger_target_mode_update_event), # New
1331
101: (PlayerLeaveEvent, self.game_user_leave_event), # New
1332
102: (None, self.game_user_join_event), # New
@@ -1356,7 +1356,7 @@ def load_game_done_event(self, data):
1356
def hijack_replay_game_event(self, data):
1357
return dict(
1358
user_infos=[dict(
1359
- game_unit_id=data.read_bits(4),
+ game_user_id=data.read_bits(4),
1360
observe=data.read_bits(2),
1361
name=data.read_aligned_string(data.read_uint8()),
1362
toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None,
sc2reader/resources.py
@@ -184,6 +184,16 @@ class Replay(Resource):
184
#: SC2 Expansion. One of 'WoL', 'HotS'
185
expasion = str()
186
187
+ #: True of the game was resumed from a replay
188
+ resume_from_replay = False
189
190
+ #: A flag marking which method was used to resume from replay. Unknown interpretation.
191
+ resume_method = None
192
193
+ #: Lists info for each user that is resuming from replay.
194
+ resume_user_info = None
195
196
197
def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, **options):
198
super(Replay, self).__init__(replay_file, filename, **options)
199
self.datapack = None
test_replays/test_all.py
@@ -227,6 +227,8 @@ def test_oracle_parsing(self):
227
228
def test_resume_from_replay(self):
229
replay = sc2reader.load_replay("test_replays/2.0.3.24764/resume_from_replay.SC2Replay")
230
+ self.assertTrue(replay.resume_from_replay)
231
+ self.assertEqual(replay.resume_method, 0)
232
233
def test_clan_players(self):
234
replay = sc2reader.load_replay("test_replays/2.0.4.24944/Lunar Colony V.SC2Replay")
0 commit comments