From a821521cbed5a03fe3c315921bfb8106840c77f9 Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Fri, 16 Nov 2018 23:41:23 -0800 Subject: [PATCH] add support for 70154, bump to 1.3.0 --- CHANGELOG.rst | 7 +++++++ sc2reader/data/attributes.json | 3 ++- sc2reader/readers.py | 2 +- setup.py | 2 +- test_replays/4.7.0.70154/1.SC2Replay | Bin 0 -> 36738 bytes test_replays/test_all.py | 7 +++++++ 6 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 test_replays/4.7.0.70154/1.SC2Replay diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 43ddf6b8..52337169 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ CHANGELOG ============ +1.3.0 - November 16, 2018 +------------------------- +* Added support for protocol 70154 (StarCraft 4.7.0) +* Added support for Zeratul +* Updated CircleCI build for Python 3.7 +* Fixed a bug with printing TrackerEvent + 1.2.0 - October 7, 2018 ----------------------- * Added support for Tychus diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index 751f8dc8..773be8c3 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -714,7 +714,8 @@ "Swan": "Swann", "Tych": "Tychus", "Vora": "Vorazun", - "Zaga": "Zagara" + "Zaga": "Zagara", + "Zera": "Zeratul" } ], "3014": [ diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 1428186e..54bf3f54 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -118,7 +118,7 @@ def __call__(self, data, replay): working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, rewards=[data.read_uint32() for i in range(data.read_bits(17 if replay.base_build >= 34784 else 6 if replay.base_build >= 24764 else 5))], toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, - licenses=[data.read_uint32() for i in range(data.read_bits(9))] if replay.base_build >= 19132 else [], + licenses=[data.read_uint32() for i in range(data.read_bits(13 if replay.base_build >= 70154 else 9))] if replay.base_build >= 19132 else [], tandem_leader_user_id=data.read_bits(4) if replay.base_build >= 34784 and data.read_bool() else None, commander=data.read_aligned_bytes(data.read_bits(9)) if replay.base_build >= 34784 else None, commander_level=data.read_uint32() if replay.base_build >= 36442 else None, diff --git a/setup.py b/setup.py index c14bc2a2..c06d6fce 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='1.2.0', + version='1.3.0', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), diff --git a/test_replays/4.7.0.70154/1.SC2Replay b/test_replays/4.7.0.70154/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..3633b09e0c554484e909096a17965649221266c5 GIT binary patch literal 36738 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
$eT_k zbECKA)TD|g(r@#TJ;QsMd4cYrblo_U8W=0KMKzfyEsb7gpr|9u`J8cDY+*)+x@b_tKRGy7=>7qbm$}OAY||XhHy(03ZxN_-z-= z3TRo_h{<2!_$tLkst%H~%a<+WMCF90)Zi{(UI1Wmc&!*Jp2JUw#q#FI+sWt~C;|^K zhu!IF=pS3U+S(7{7=N*Oo`u}h*eb6%L3@sja8HTN)GnOP+2kJsc3MW4ADSx@I`v4Q zYnkm;eF4Iy**)8I;-D#3GI|SQQEA^Xx)&@-g*qzg4M6yR)KbMj@C#w0>_Z9X=5G7b z1KSE&GA{UWP5YH>c}%V72aoR!E!Kd}IK!%g zx%O{BQHPoDULWBMS#tHSf|wtC1;M*y|LXs*3jP088DHFX>t^&#N|oh%t2zqtMr++(WS`j4?%(A*-LNXQ_0YmaMdUvVHn6C4MrGd$s)E0r1~_ z{eP7wY2u+}cn)HJX{8&+F%-wiNNNxQ-y2H2?@{xD5va7Y)=X)MCjJFYxQn6W0iY5_ ze!PNdL~%SuM5WEo)!c8BZH{*}k(dm=9f+SCPPXt_R=6G1=1V|@1){ljAn#^Ysq8T{cQK*@l4)I@N&3)tbFcpP>IxdP zgIp*AW1doB4zZTZ^O$ds{P6wrCbBQ{8#qB5{iIt5c1I>6 zBYUnh0X{K`kvEjFC2adkJ8f14D7=G1P|g&G&^!(^b&&nm53N+w%(=O8uaqB`Ad%1A z5#6*ff_1xQO0%6SGk?brrh}>hL0flxbj%EiOJ!H+(*x7G|B#j`T$_qinCy>%5_(^> zR2R?UU$w*vL7~>SjW$^PR1K5h@XJ45=?5PQUVG5fh@{p?@OF&p&9qS(XAx_7bviYo z!@Hh$qNxk!T_|5v8EwkBoGbR@dl~ClrR3(xo+Z-(rWokI?VEWMK@aP`LHmqzM}kW=kk|O-cHQP0^k|_XwpdjC8i>#TX9alzU z;yrG}?^RqF?s>bJ_wrDucr?tJs@%!`Zb5|6zbFDZfq(h0ax??k+aB`{Z4=HIGKB3a zKW4;E9pI!m$qS{u5hPEEBaOU=;L#3wt!WQoYz5KyHSQPbc9(J#XrDaJjgKvk`rHK? zS>lz@!f1H8qhsRmHSwi56`Wf~t~bGMn&1;0m8%A%Zd*H>4J*0>gp-wqT8V9oN-l9Iz3_veypq(T;?bF$@r%P^s~ z>*(7&H|^o93bR*XV{+WSWi^0V+NNN$TVqH)9@+@XomDpY_p(Rn;l4h$nH9NY$kpWF zhH@(gK_T-e814h0<-Lk^G1LX0)^Eu~(X^pwXp1qHtPu`Zv|`!q$M!0qs5z2~5^#j) zwoYvFAJn6{FTozei|ZMm3A$fL(?TqnBZiu6vI<6gRa)SA!Ta+>>IleGhb z^Lx7ow@X8Jr^&S>;E@VNZM3!^vtl_gu;OkmN)lf4Z0{&UET8ey{B3@0a##pTf nWoF3-U_JiDGZummo{b(lg5aBWY?&cJc0_1g>9cvxFQ!|jT4X)j literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 1667fe1a..b779e7cf 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -596,6 +596,13 @@ def test_event_print(self): sys.stdout = sys.__stdout__ capturedOutput.close() + def test_70154(self): + for replayfilename in [ + "test_replays/4.7.0.70154/1.SC2Replay", + ]: + factory = sc2reader.factories.SC2Factory() + replay = factory.load_replay(replayfilename) + class TestGameEngine(unittest.TestCase): class TestEvent(object):