feat: 从机台数据包抽出 music/item/map/gate 的 ID 映射表

风险页填的全是裸 ID,而「填了表里没有的 ID」是这类功能最常见的失败方式:
服务器照样回 returnCode: 1,客户端建池时静默跳过,看起来就是没生效。

- tools/gen_id_mapping.dart:读 Sinmai_Data/StreamingAssets/A0xx/<表>/<x>.xml,
  按目录名升序合并、同 ID 后者覆盖(与 DataManager.LoadData 语义一致),
  输出 data/id_mapping/{music,items,maps,gates,meta}.json。
  ID 取 XML 的 <name><id>,不是目录名——目录名只是 dataName。
- 零依赖:自带一个只处理 XmlSerializer 那种规整结构的小扫描器,
  不为此往依赖树里加 xml 包、也不搅动 pubspec.lock。
- 产物放 data/ 不放 assets/:目前没有运行时读取方,进 assets 会白白把
  1.2MB 打进每个安装包。

用这份表顺手证实了三件事:musicId 11820 在曲表里根本不存在(11819、11821
也不在),所以它不是万花筒锁——lockType=4 的歌全表只有 6 首;角色 1001 同样
不存在,合法 ID 从 101 起;万花筒只有 gate 1~6,客户端 ForceAddMasterKey
写死的 gateId 7 在这份数据里没有对应行。
This commit is contained in:
Cookiues committed 2026-10-02 01:08:48 +08:00
1 parent 80df51c239
commit 264b1d0aa7
7 files changed
+51326

No files matched your search

+140
View File
@@ -0,0 +1,140 @@
{
"gateList": [
{
"id": 1,
"name": "蓝色之门",
"eventName": 25122432,
"eventNameName": "251224_03_2:青のカレイドスコープ解禁",
"gateType": "Normal",
"positionId": 1
},
{
"id": 2,
"name": "白色之门",
"eventName": 26021032,
"eventNameName": "260210_03_2:白のカレイドスコープ解禁",
"gateType": "Normal",
"positionId": 2
},
{
"id": 3,
"name": "紫色之门",
"eventName": 26032532,
"eventNameName": "260325_03_2:紫のカレイドスコープ解禁",
"gateType": "Normal",
"positionId": 3
},
{
"id": 4,
"name": "黑色之门",
"eventName": 26042832,
"eventNameName": "260428_03_2:黒のカレイドスコープ解禁",
"gateType": "Normal",
"positionId": 5
},
{
"id": 5,
"name": "黃色之门",
"eventName": 26061032,
"eventNameName": "260610_03_2:黄のカレイドスコープ解禁",
"gateType": "Normal",
"positionId": 6
},
{
"id": 6,
"name": "红色之门",
"eventName": 26080532,
"eventNameName": "260805_03_2:赤のカレイドスコープ解禁",
"gateType": "Normal",
"positionId": 4
}
],
"courseList": [
{
"id": 1,
"name": "青のカレイドスコープ",
"gateName": 1,
"gateNameName": "蓝色之门",
"keyName": 1,
"keyNameName": "蓝色钥匙"
},
{
"id": 2,
"name": "白のカレイドスコープ",
"gateName": 2,
"gateNameName": "白色之门",
"keyName": 2,
"keyNameName": "白色钥匙"
},
{
"id": 3,
"name": "紫のカレイドスコープ",
"gateName": 3,
"gateNameName": "紫色之门",
"keyName": 3,
"keyNameName": "紫色钥匙"
},
{
"id": 4,
"name": "黒のカレイドスコープ",
"gateName": 4,
"gateNameName": "黑色之门",
"keyName": 4,
"keyNameName": "黑色钥匙"
},
{
"id": 5,
"name": "黄のカレイドスコープ",
"gateName": 5,
"gateNameName": "黃色之门",
"keyName": 5,
"keyNameName": "黃色钥匙"
},
{
"id": 6,
"name": "赤のカレイドスコープ",
"gateName": 6,
"gateNameName": "红色之门",
"keyName": 6,
"keyNameName": "红色钥匙"
}
],
"keyList": [
{
"id": 1,
"name": "蓝色钥匙",
"gateName": 1,
"gateNameName": "蓝色之门"
},
{
"id": 2,
"name": "白色钥匙",
"gateName": 2,
"gateNameName": "白色之门"
},
{
"id": 3,
"name": "紫色钥匙",
"gateName": 3,
"gateNameName": "紫色之门"
},
{
"id": 4,
"name": "黑色钥匙",
"gateName": 4,
"gateNameName": "黑色之门"
},
{
"id": 5,
"name": "黃色钥匙",
"gateName": 5,
"gateNameName": "黃色之门"
},
{
"id": 6,
"name": "红色钥匙",
"gateName": 6,
"gateNameName": "红色之门"
}
]
}