happyleavesaoc / aoc-mgz

Age of Empires II recorded game parsing and summarization in Python 3.
MIT License
195 stars 41 forks source link

Decoding error when calling summary.Summary() #103

Closed emile-lochner closed 5 days ago

emile-lochner commented 4 months ago

I use mgz as part of a website that analyses uploaded games. Last successful upload was 2024-03-13 17:39:26 UTC (in case they changed something on AoE2's side). I have attached the recording file. It can be played using CaptureAge so I an fairly sure the file is not corrupt. test_recording.zip

Test script:

from mgz.summary import Summary
fpath = ".../test_recording.aoe2record"

with open(fpath, 'rb') as data:
    s = Summary(data)

Traceback:

could not fast parse; falling back: could not parse: 
Traceback (most recent call last):
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 2844, in _decode
    return self.decoding[obj]
KeyError: 120

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 311, in _parse
    return self._decode(self.subcon._parse(stream, context, path), context)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 2849, in _decode
    raise MappingError("no decoding mapping for %r" % (obj,))
construct.core.MappingError: no decoding mapping for 120

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/mgz/summary/full.py", line 75, in __init__
    self._header = mgz.header.parse_stream(self._handle)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 171, in parse_stream
    return self._parse(stream, context2, "(parsing)")
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 295, in _parse
    return self.subcon._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 295, in _parse
    return self.subcon._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/mgz/util.py", line 58, in _parse
    return self.subcon._parse(new_stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 357, in _parse
    return self.subcon.parse(data, context)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 158, in parse
    return self.parse_stream(BytesIO(data), context, **kw)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 171, in parse_stream
    return self._parse(stream, context2, "(parsing)")
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 1594, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context, path)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/construct/core.py", line 2788, in _parse
    raise e.__class__("%s\n    %s" % (e, path))
construct.core.MappingError: no decoding mapping for 120
    (parsing) -> de -> de

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/webapp_kerfuffle/scribbles/recordings/rec_analysis.py", line 5, in <module>
    s = Summary(data)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/mgz/summary/__init__.py", line 27, in __call__
    return FullSummary(data)
  File "/home/ubuntu/webapp_kerfuffle/py3env/lib/python3.8/site-packages/mgz/summary/full.py", line 87, in __init__
    raise RuntimeError("invalid mgz file: {}".format(e))
RuntimeError: invalid mgz file: no decoding mapping for 120
    (parsing) -> de -> de
happyleavesaoc commented 4 months ago

The latest patch is not yet supported.

burakonal89 commented 4 weeks ago

I guess there is still no support for the latest patch :(

happyleavesaoc commented 5 days ago

Fixed in mgz-1.8.26