From 86c576241655063ec9c2e69ab1de620517bcb084 Mon Sep 17 00:00:00 2001 From: Chazzz <270857+Chazzz@users.noreply.github.com> Date: Thu, 10 Dec 2020 16:28:58 -0800 Subject: [PATCH 1/4] integrated ResourceTradeEvent and added test --- sc2reader/engine/plugins/context.py | 2 +- sc2reader/events/game.py | 11 ++++------- sc2reader/readers.py | 5 +++-- test_replays/test_replays.py | 11 +++++++++++ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index dd846634..40a7e965 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -151,7 +151,7 @@ def handleSelectionEvent(self, event, replay): def handleResourceTradeEvent(self, event, replay): event.sender = event.player - event.recipient = replay.players[event.recipient_id] + event.recipient = replay.players[event.recipient_id-1] def handleHijackReplayGameEvent(self, event, replay): replay.resume_from_replay = True diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 02a054dd..ed3b48aa 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -650,14 +650,14 @@ def __init__(self, frame, pid, data): self.vespene = self.resources[1] if len(self.resources) >= 2 else None #: Amount terrazine sent - self.terrazon = self.resources[2] if len(self.resources) >= 3 else None + self.terrazine = self.resources[2] if len(self.resources) >= 3 else None #: Amount custom resource sent self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}".format( - self.minerals, self.vespene, self.terrazine, self.custom, self.recipient + self.minerals, self.vespene, self.terrazine, self.custom_resource, self.recipient ) @@ -685,11 +685,8 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return ( - self._str_prefix() - + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format( - self.minerals, self.vespene, self.terrazine, self.custom - ) + return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format( + self.minerals, self.vespene, self.terrazine, self.custom ) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 97e18074..382f7c04 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -421,7 +421,7 @@ def __init__(self): 28: (SelectionEvent, self.selection_delta_event), 29: (create_control_group_event, self.control_group_update_event), 30: (None, self.selection_sync_check_event), - 31: (None, self.resource_trade_event), + 31: (ResourceTradeEvent, self.resource_trade_event), 32: (None, self.trigger_chat_message_event), 33: (None, self.ai_communicate_event), 34: (None, self.set_absolute_game_speed_event), @@ -737,12 +737,13 @@ def selection_sync_check_event(self, data): ) def resource_trade_event(self, data): - return dict( + d = dict( recipient_id=data.read_bits(4), resources=[ data.read_uint32() - 2147483648 for i in range(data.read_bits(3)) ], ) + return d def trigger_chat_message_event(self, data): return dict(message=data.read_aligned_string(data.read_bits(10))) diff --git a/test_replays/test_replays.py b/test_replays/test_replays.py index 2d0693ee..c9b34f5b 100644 --- a/test_replays/test_replays.py +++ b/test_replays/test_replays.py @@ -305,6 +305,17 @@ def test_send_resources(self): replay = sc2reader.load_replay( "test_replays/2.0.4.24944/Backwater Complex (15).SC2Replay" ) + trade_events = [ + event + for event in replay.events + if event.name == "ResourceTradeEvent" + ] + self.assertEqual(len(trade_events), 5) + self.assertEqual(trade_events[0].sender.name, "Guardian") + self.assertEqual(trade_events[0].recipient.name, "Sturmkind") + self.assertEqual(trade_events[0].recipient_id, 2) + self.assertEqual(trade_events[0].minerals, 0) + self.assertEqual(trade_events[0].vespene, 750) def test_cn_replays(self): replay = sc2reader.load_replay("test_replays/2.0.5.25092/cn1.SC2Replay") From 0866ea65ca5feab0aea18de4fa42f4eaeb665d31 Mon Sep 17 00:00:00 2001 From: Chazzz <270857+Chazzz@users.noreply.github.com> Date: Thu, 10 Dec 2020 16:31:20 -0800 Subject: [PATCH 2/4] revert return statement change --- sc2reader/readers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 382f7c04..496f66e5 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -737,13 +737,12 @@ def selection_sync_check_event(self, data): ) def resource_trade_event(self, data): - d = dict( + return dict( recipient_id=data.read_bits(4), resources=[ data.read_uint32() - 2147483648 for i in range(data.read_bits(3)) ], ) - return d def trigger_chat_message_event(self, data): return dict(message=data.read_aligned_string(data.read_bits(10))) From dc75e7c998a2383b66deecf7b16f87778dda22e0 Mon Sep 17 00:00:00 2001 From: Chazzz <270857+Chazzz@users.noreply.github.com> Date: Fri, 11 Dec 2020 07:47:28 -0800 Subject: [PATCH 3/4] lookup on self.player instead of self.players and fix custom -> custom_resource --- sc2reader/engine/plugins/context.py | 2 +- sc2reader/events/game.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 40a7e965..3c0950af 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -151,7 +151,7 @@ def handleSelectionEvent(self, event, replay): def handleResourceTradeEvent(self, event, replay): event.sender = event.player - event.recipient = replay.players[event.recipient_id-1] + event.recipient = replay.player[event.recipient_id] def handleHijackReplayGameEvent(self, event, replay): replay.resume_from_replay = True diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index ed3b48aa..aaff75f4 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -686,7 +686,7 @@ def __init__(self, frame, pid, data): def __str__(self): return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format( - self.minerals, self.vespene, self.terrazine, self.custom + self.minerals, self.vespene, self.terrazine, self.custom_resource ) From 3d1c3bac9984b69f6a3fa3d7db75ab934928081b Mon Sep 17 00:00:00 2001 From: Chazzz <270857+Chazzz@users.noreply.github.com> Date: Fri, 11 Dec 2020 08:22:06 -0800 Subject: [PATCH 4/4] Autoformatting provided by black --- sc2reader/events/game.py | 13 ++++++++++--- test_replays/test_replays.py | 6 ++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index aaff75f4..65eacc7e 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -657,7 +657,11 @@ def __init__(self, frame, pid, data): def __str__(self): return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}".format( - self.minerals, self.vespene, self.terrazine, self.custom_resource, self.recipient + self.minerals, + self.vespene, + self.terrazine, + self.custom_resource, + self.recipient, ) @@ -685,8 +689,11 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format( - self.minerals, self.vespene, self.terrazine, self.custom_resource + return ( + self._str_prefix() + + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format( + self.minerals, self.vespene, self.terrazine, self.custom_resource + ) ) diff --git a/test_replays/test_replays.py b/test_replays/test_replays.py index c9b34f5b..5e162327 100644 --- a/test_replays/test_replays.py +++ b/test_replays/test_replays.py @@ -306,10 +306,8 @@ def test_send_resources(self): "test_replays/2.0.4.24944/Backwater Complex (15).SC2Replay" ) trade_events = [ - event - for event in replay.events - if event.name == "ResourceTradeEvent" - ] + event for event in replay.events if event.name == "ResourceTradeEvent" + ] self.assertEqual(len(trade_events), 5) self.assertEqual(trade_events[0].sender.name, "Guardian") self.assertEqual(trade_events[0].recipient.name, "Sturmkind")