Initial NTE history exporter
Initial NTE history exporter Add a Windows live-capture exporter for NTE pull history with support for Permanent Monopoly, Limited Monopoly, and Arc Miracle Box histories. Included: - live packet capture via Windows raw sockets - CSV and JSON export generation - normalized reward and banner mapping files - Monopoly v7 Points Gift / Chase Reward classification - Arc Miracle Box decoding with shared pity metadata - timestamp grouping and UID generation - Windows launcher scripts with admin prompting - docs for usage, export format, limitations, and packet notes - tests covering decoder behaviour and mapping consistency Generated exports, captures, briefs, and local data are ignored for privacy.
This commit is contained in:
commit
bb3fe3b19a
35 changed files with 2439 additions and 0 deletions
32
mappings/arc_miracle_box.json
Normal file
32
mappings/arc_miracle_box.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"pool_key": "arc_miracle_box",
|
||||
"game": "Neverness to Everness",
|
||||
"system": {
|
||||
"id": "gashapon",
|
||||
"name": "Gashapon"
|
||||
},
|
||||
"banner": {
|
||||
"id": "Arc_MiracleBox",
|
||||
"name": "Arc Miracle Box",
|
||||
"shared_pity": true
|
||||
},
|
||||
"request": {
|
||||
"family": "arc",
|
||||
"length": 34,
|
||||
"constant": 2060,
|
||||
"constant_hex": "0x080c",
|
||||
"selector": null,
|
||||
"cursor_offset": 29,
|
||||
"cursor_step": 2,
|
||||
"page_formula": "cursor / 2"
|
||||
},
|
||||
"response": {
|
||||
"records_per_full_page": 5,
|
||||
"timestamp_group_size": 10,
|
||||
"first_record_offset_hex": "0x4c"
|
||||
},
|
||||
"notes": [
|
||||
"Arc history is separate from Monopoly history.",
|
||||
"Arc timestamp groups are expected to be complete 10-pull groups."
|
||||
]
|
||||
}
|
||||
14
mappings/arcs.json
Normal file
14
mappings/arcs.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"fork_dustbin": {"name": "Dangerous Game", "rank": "B"},
|
||||
"fork_vine": {"name": "Be Happy", "rank": "B"},
|
||||
"fork_nonos": {"name": "First Step to Success", "rank": "B"},
|
||||
"fork_appliance": {"name": "\"Real Music\"", "rank": "B"},
|
||||
"fork_Prokaryon": {"name": "Us.", "rank": "B"},
|
||||
"fork_PaperPlane": {"name": "Clear Skies", "rank": "A"},
|
||||
"fork_mofeikesi": {"name": "Good Boy's Grand Adventure", "rank": "S"},
|
||||
"fork_wuhuakuang": {"name": "The Forgotten", "rank": "A"},
|
||||
"fork_jingmotingyuan": {"name": "Camellia Society", "rank": "S"},
|
||||
"fork_Kite": {"name": "Watch Your Heads!", "rank": "A"},
|
||||
"fork_yuren": {"name": "Umbrella", "rank": "A"},
|
||||
"fork_yaodao": {"name": "Drawn Blade", "rank": "A"}
|
||||
}
|
||||
21
mappings/characters.json
Normal file
21
mappings/characters.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"1003": {"name": "Sakiri", "rank": "S"},
|
||||
"1004": {"name": "Lacrimosa", "rank": "S"},
|
||||
"1008": {"name": "Skia", "rank": "A"},
|
||||
"1010": {"name": "Nanally", "rank": "S"},
|
||||
"1019": {"name": "Mint", "rank": "A"},
|
||||
"1020": {"name": "Haniel", "rank": "A"},
|
||||
"1021": {"name": "Edgar", "rank": "A"},
|
||||
"1023": {"name": "Baicang", "rank": "S"},
|
||||
"1025": {"name": "Hathor", "rank": "S"},
|
||||
"1033": {"name": "Adler", "rank": "A"},
|
||||
"1039": {"name": "Fadia", "rank": "S"},
|
||||
"1046": {"name": "Zero", "rank": "S"},
|
||||
"1051": {"name": "Zero", "rank": "S"},
|
||||
"1052": {"name": "Hotori", "rank": "S"},
|
||||
"1054": {"name": "Daffodill", "rank": "S"},
|
||||
"1055": {"name": "Jiuyuan", "rank": "S"},
|
||||
"1056": {"name": "Lacrimosa", "rank": "S"},
|
||||
"1070": {"name": "Aurelia", "rank": "A"},
|
||||
"1073": {"name": "Chiz", "rank": "S"}
|
||||
}
|
||||
31
mappings/limited_character_board.json
Normal file
31
mappings/limited_character_board.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"pool_key": "limited_character",
|
||||
"game": "Neverness to Everness",
|
||||
"system": {
|
||||
"id": "monopoly",
|
||||
"name": "Monopoly"
|
||||
},
|
||||
"banner": {
|
||||
"id": "Lottery_LimitedCharacter",
|
||||
"name": "Limited Character Board",
|
||||
"shared_pity": true
|
||||
},
|
||||
"request": {
|
||||
"family": "monopoly",
|
||||
"length": 45,
|
||||
"constant": 4220,
|
||||
"constant_hex": "0x107c",
|
||||
"selector": 8,
|
||||
"cursor_offset": 31,
|
||||
"cursor_step": 4,
|
||||
"page_formula": "cursor / 4"
|
||||
},
|
||||
"response": {
|
||||
"records_per_full_page": 5,
|
||||
"marker_hex": "4c0000000c85c99141bdbdb17d0da185c9858dd195c901"
|
||||
},
|
||||
"notes": [
|
||||
"Limited character boards are exported under one shared pool group.",
|
||||
"Do not split by individual limited banners such as Nanali, Xun, or AnHunQu."
|
||||
]
|
||||
}
|
||||
57
mappings/permanent_board.json
Normal file
57
mappings/permanent_board.json
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"pool_key": "permanent",
|
||||
"game": "Neverness to Everness",
|
||||
"system": {
|
||||
"id": "monopoly",
|
||||
"name": "Monopoly"
|
||||
},
|
||||
"banner": {
|
||||
"id": "Lottery_Permanent",
|
||||
"name": "Standard Board",
|
||||
"shared_pity": false
|
||||
},
|
||||
"request": {
|
||||
"family": "monopoly",
|
||||
"length": 45,
|
||||
"constant": 4220,
|
||||
"constant_hex": "0x107c",
|
||||
"selector": 4,
|
||||
"cursor_offset": 31,
|
||||
"cursor_step": 4,
|
||||
"page_formula": "cursor / 4"
|
||||
},
|
||||
"response": {
|
||||
"records_per_full_page": 5,
|
||||
"marker_hex": "440000000c85c99141bdbdb17d3995dd49bdb19501"
|
||||
},
|
||||
"character_ids": [
|
||||
"1003",
|
||||
"1023",
|
||||
"1025",
|
||||
"1039",
|
||||
"1054",
|
||||
"1055",
|
||||
"1008",
|
||||
"1019",
|
||||
"1020",
|
||||
"1021",
|
||||
"1033",
|
||||
"1070"
|
||||
],
|
||||
"ssr_character_ids": [
|
||||
"1003",
|
||||
"1023",
|
||||
"1025",
|
||||
"1039",
|
||||
"1054",
|
||||
"1055"
|
||||
],
|
||||
"guarantee": {
|
||||
"pool_guarantee_count": 90,
|
||||
"pool_upgrade_count": 70,
|
||||
"main_cost_item": {
|
||||
"id": "DiceNormal",
|
||||
"quantity": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue