feat: capture and export gear, cartridges and loadouts
Adds a third export alongside pull history and achievements: the cartridges, modules, character levels and equipped console boards the game sends at login. Shaped as added files plus a handful of one-line calls, so this repo can keep merging upstream: - decoder/gear.py: self-contained bit-level decoder over a list of datagrams. - export/gear_export.py: the nte-gear-export envelope. - live_capture/gear_collector.py: UDP flow accumulation, the mid-capture decode, the fallback scan, the console line and the export file. Gear is reported during the capture rather than only at the stop. The burst arrives in a rush and then stops, so "this flow went quiet" is the only mid-stream marker available; a flow is retried only once it has grown, since decoding per packet would be quadratic in flow size. Flows are tried largest first and the first one that decodes wins - picking the single biggest was wrong, history traffic can outweigh a short login burst. Verified against a live capture: 817 items (310 cartridges, 507 modules), 20 characters, 13 loadouts, every bucket matching the in-game counts exactly. 26 synthetic tests, no real capture used as a fixture; 149 total. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
93c6626640
commit
3c8834e98f
10 changed files with 1568 additions and 5 deletions
|
|
@ -8,7 +8,7 @@ from nte_history_exporter.live_capture.runner import _achievement_path
|
|||
|
||||
class ExportContractTests(unittest.TestCase):
|
||||
def test_public_version_references_match(self):
|
||||
self.assertEqual(__version__, "0.3.0")
|
||||
self.assertEqual(__version__, "0.4.0")
|
||||
self.assertEqual(EXPORTER_VERSION, __version__)
|
||||
|
||||
def test_sanitized_export_omits_raw_packet_fields(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue