diff --git a/README.md b/README.md index dc442c2..54b1c94 100644 --- a/README.md +++ b/README.md @@ -161,59 +161,6 @@ data/id_mapping/ # 由 tools/gen_id_mapping.dart 从机台数据包抽 `MapTreasure.xml` 里(`DataManager.LoadMaps` / `LoadMapTresures` 从本地数据目录读, 不经 title server),App 没有这份表,页面里也明写了这个限制。 -## ID 映射表 - -风险页要填的全是裸 ID,而「填了机台表里没有的 ID」是这一类功能最常见的失败方式: -服务器照样回 `returnCode: 1`,客户端却在建曲池/建角色池时静默跳过,看起来就是 -「上传成功但没生效」。为此把机台数据包里的表抽成可查的映射: - -```bash -# 整合包(自动找 /Sinmai_Data/StreamingAssets/A0xx/) -dart run tools/gen_id_mapping.dart --package G:/Package - -# 再叠一层单独导出的数据包,后面的覆盖前面的同 ID 行 -dart run tools/gen_id_mapping.dart --package G:/Package --data-root D:/A031OptDump/Root -``` - -产物落在 `data/id_mapping/`: - -| 文件 | 内容 | -| --- | --- | -| `music.json` | musicId → 曲名 / 艺术家 / 流派 / `AddVersion` / `disable` / `lockType` / `subLockType` / `eventName` | -| `items.json` | 按 `ItemKind` 分组(1 姓名框 2 称号 3 头像 9 角色 10 搭档 11 背景板 12 功能票)的 id → 名称 | -| `maps.json` | mapId → 区域名 / `IslandId` / `OpenEventId` / `ColorId` / `BonusMusicId` / `IsInfinity` / `IsCollabo` | -| `gates.json` | 万花筒三张表:`gateList`(gateId → 门名 / `gateType` / `eventName`)、`courseList`(courseId ↔ gateId ↔ keyId)、`keyList` | -| `events.json` | eventId → 活动名 / `alwaysOpen` / `infoType` / `disableArea` | - -要点: - -- 真正的 ID 在 XML 的 `` 里,**目录名只是 `dataName`,两者不相等** - (`icon/icon550201/Icon.xml` 的 `name.id` 实际是 1;`music/music111537` 的 - `name.id` 是 111537,属宴曲段)。 -- 数据包按 `Sinmai_Data/StreamingAssets/A0xx/` 分基础包与增补包,抽取时按目录名 - 升序合并、同 ID 后者覆盖前者,与客户端 `DataManager.LoadData` 的语义一致。 -- **本地 event 表没有日期窗口**:开关状态是服务器 `GetGameEventApi` 的 - `GameEvent{startDate,endDate}` 决定的。`events.json` 只能告诉你某个 - `eventName.id` 是哪个活动、是否 `alwaysOpen`,判断「现在开没开」得问服务器。 -- 放在 `data/` 而不是 `assets/`:目前还没有代码在运行时读它,进 `assets/` 会被 - 原样打进每个安装包(约 1.2MB)。真要接进 App 时再连同 `pubspec.yaml` 一起挪。 - -顺手用这份表核出来的几个事实,都能解释此前的「不显示」: - -- **musicId 11820 在任何一层数据包里都不存在**(11819、11821 也不在;11814 之后 - 直接跳到 11822,G:\Package 与 D:/A031OptDump 两层都查过)。它不是万花筒锁—— - `lockType = 4 (KaleidScope)` 的歌整张表只有 6 首(11740 / 11745 / 11749 / - 11753 / 11809 / 11814)。11820 属于「机台没这首歌」,任何 `UpsertUserAll` - 都变不出来。 -- `lockType` 的分布是 `Unlock=1347 / Lock=18 / Challenge=5 / Transmission=2 / - KaleidScope=6`(合并两层数据包后共 1378 首),所以绝大多数歌根本不查 - `itemKind 5`(`lockType == Unlock` 时 `IsPlayable` 直接为 true)——这也解释了 - 为什么有些「解歌」包发下去看不出效果:那首歌本来就可玩。 -- **角色(旅行伙伴)1001 不存在**,合法 ID 从 101 起,整表 983 条、上界到 605905。 - 以前页面里「例如 1001」的提示正是这个坑。 -- **万花筒只有 gate 1~6**(蓝/白/紫/黑/黄/红,course 与 key 同为 1~6 一一对应)。 - 客户端 `ForceAddMasterKey` 写死的 `gateId = 7`(万能钥匙门)在这份数据里没有对应行。 - ## 构建环境注意事项 以下问题在本仓库已确认,改动依赖或升级 Flutter 时请留意: diff --git a/data/id_mapping/events.json b/data/id_mapping/events.json index caa3e36..531febb 100644 --- a/data/id_mapping/events.json +++ b/data/id_mapping/events.json @@ -5627,6 +5627,125 @@ "alwaysOpen": false, "disableArea": "---" }, + { + "id": 26100111, + "name": "261001_01_1:7sRefちほー4 紹介", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100112, + "name": "261001_01_2:連動楽曲紹介《サウンドプレイヤー》", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100113, + "name": "261001_01_3:伝導楽曲の条件緩和(2回目)紹介", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100121, + "name": "261001_02_1:7sRefちほー4 4曲(Lock)追加", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100122, + "name": "261001_02_2:楽曲解禁(イベント1)", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100123, + "name": "261001_02_3:楽曲解禁(希望)", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100124, + "name": "261001_02_4:楽曲解禁(イベント2)", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100125, + "name": "261001_02_5:楽曲解禁(エクストラ)", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100126, + "name": "261001_02_6:チュウニズム&オンゲキ1曲紹介《サウンドプレイヤー》", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100127, + "name": "261001_02_7:NEEDY GIRL OVERDOSEちほー2(1曲)一般開放《きゅびびびびずむ》", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100131, + "name": "261001_03_1:7sRefちほー4 解禁", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100132, + "name": "261001_03_2:虹のカレイドスコープ解禁", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100133, + "name": "261001_03_3:カレイドスコープ解禁(イベント1)", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100134, + "name": "261001_03_4:希望の扉解禁", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100135, + "name": "261001_03_5:カレイドスコープ解禁(イベント2)", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100151, + "name": "261001_05_1:7sRefちほー4 パーフェクトチャレンジ", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, + { + "id": 26100191, + "name": "261001_09_1:伝導楽曲の条件緩和(2回目)", + "infoType": 0, + "alwaysOpen": false, + "disableArea": "---" + }, { "id": 240904110, "name": "240904_01_10:WEC2024告知", @@ -5647,124 +5766,5 @@ "infoType": 0, "alwaysOpen": false, "disableArea": "---" - }, - { - "id": 261002011, - "name": "261002_01_1:ヒメヒナちほー2 紹介", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002012, - "name": "261002_01_2:ヒメヒナちほー 紹介", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002013, - "name": "261002_01_3:宴譜面紹介4", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002014, - "name": "261002_01_4:伝導楽曲紹介", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002021, - "name": "261002_02_1:ヒメヒナちほー2 3曲追加《キスキツネ、WWW、うたかたよいかないで》", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002022, - "name": "261002_02_2:宴譜面追加4", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002023, - "name": "261002_02_3:オンゲキちほー9一般開放《ICEBURN、Daredevil Glaive》", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002024, - "name": "261002_02_4:伝導楽曲 1曲(Lock)", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002041, - "name": "261002_04_1:ヒメヒナちほー2 解禁", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261002042, - "name": "261002_04_2:ヒメヒナちほー 復刻", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261016011, - "name": "261016_01_1:niconico2曲、バラエティ1曲紹介《Intergalactic Bound、LEMON MELON COOKIE、3rd Avenue》", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261016012, - "name": "261016_01_2:バラエティ1曲紹介《Cryogenic》", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261016013, - "name": "261016_01_3:《Cryogenic》アドバタイズムービー1", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261016014, - "name": "261016_01_4:宴譜面紹介3", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261016021, - "name": "261016_02_1:niconico2曲、バラエティ1曲追加《Intergalactic Bound、LEMON MELON COOKIE、3rd Avenue》", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261016022, - "name": "261016_02_2:バラエティ1曲追加《Cryogenic》", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" - }, - { - "id": 261016023, - "name": "261016_02_3:宴譜面追加3", - "infoType": 0, - "alwaysOpen": false, - "disableArea": "---" } ] \ No newline at end of file diff --git a/data/id_mapping/gates.json b/data/id_mapping/gates.json index fa7fa5c..68318ec 100644 --- a/data/id_mapping/gates.json +++ b/data/id_mapping/gates.json @@ -47,6 +47,38 @@ "eventNameName": "260805_03_2:赤のカレイドスコープ解禁", "gateType": "Normal", "positionId": 4 + }, + { + "id": 7, + "name": "棱镜塔", + "eventName": 26100132, + "eventNameName": "261001_03_2:虹のカレイドスコープ解禁", + "gateType": "CenterTower", + "positionId": 7 + }, + { + "id": 8, + "name": "KALEIDXSCOPE", + "eventName": 26100133, + "eventNameName": "261001_03_3:カレイドスコープ解禁(イベント1)", + "gateType": "Boss", + "positionId": 7 + }, + { + "id": 9, + "name": "希望之门", + "eventName": 26100134, + "eventNameName": "261001_03_4:希望の扉解禁", + "gateType": "Hope", + "positionId": 0 + }, + { + "id": 10, + "name": "KALEIDXSCOPE", + "eventName": 26100135, + "eventNameName": "261001_03_5:カレイドスコープ解禁(イベント2)", + "gateType": "LastBoss", + "positionId": 0 } ], "courseList": [ @@ -97,6 +129,38 @@ "gateNameName": "红色之门", "keyName": 6, "keyNameName": "红色钥匙" + }, + { + "id": 7, + "name": "虹のカレイドスコープ", + "gateName": 7, + "gateNameName": "棱镜塔", + "keyName": 7, + "keyNameName": "万能钥匙" + }, + { + "id": 8, + "name": "KALEIDXSCOPE", + "gateName": 8, + "gateNameName": "KALEIDXSCOPE", + "keyName": 8, + "keyNameName": "なし" + }, + { + "id": 9, + "name": "希望の扉", + "gateName": 9, + "gateNameName": "希望之门", + "keyName": 9, + "keyNameName": "希望钥匙" + }, + { + "id": 10, + "name": "KALEIDXSCOPE", + "gateName": 10, + "gateNameName": "KALEIDXSCOPE", + "keyName": 10, + "keyNameName": "KALEIDXSCOPEの鍵" } ], "keyList": [ @@ -135,6 +199,30 @@ "name": "红色钥匙", "gateName": 6, "gateNameName": "红色之门" + }, + { + "id": 7, + "name": "万能钥匙", + "gateName": 7, + "gateNameName": "棱镜塔" + }, + { + "id": 8, + "name": "なし", + "gateName": 8, + "gateNameName": "KALEIDXSCOPE" + }, + { + "id": 9, + "name": "希望钥匙", + "gateName": 9, + "gateNameName": "希望之门" + }, + { + "id": 10, + "name": "KALEIDXSCOPEの鍵", + "gateName": 10, + "gateNameName": "KALEIDXSCOPE" } ] } \ No newline at end of file diff --git a/data/id_mapping/items.json b/data/id_mapping/items.json index d319546..b6434b5 100644 --- a/data/id_mapping/items.json +++ b/data/id_mapping/items.json @@ -1444,6 +1444,10 @@ "id": 550201, "name": "ドラゴンちほー4" }, + { + "id": 550301, + "name": "7sRefちほー4" + }, { "id": 550401, "name": "プリズムちほー2" @@ -1564,6 +1568,10 @@ "id": 558032, "name": "♡みるく(ぷりずむ)♡" }, + { + "id": 558034, + "name": "♡リズ♡" + }, { "id": 559101, "name": "鏡極" @@ -12718,6 +12726,22 @@ "id": 550299, "name": "過誤の歴史の信奉者" }, + { + "id": 550301, + "name": "W?K?Y? すき" + }, + { + "id": 550302, + "name": "ロートスカラ 推し" + }, + { + "id": 550303, + "name": "アシッド ガチ勢" + }, + { + "id": 550399, + "name": "有限で永遠のリフレインを" + }, { "id": 555101, "name": "超てんちゃん(てんしのたからばこ) 推し" @@ -13014,6 +13038,30 @@ "id": 558114, "name": "FLΛME/FRΦST" }, + { + "id": 558115, + "name": "IMBRUED:FLUX" + }, + { + "id": 558116, + "name": "砂の函" + }, + { + "id": 558117, + "name": "Amereistr" + }, + { + "id": 558118, + "name": "World's end BLACKBOX" + }, + { + "id": 558119, + "name": "Xaleid◆scopiX" + }, + { + "id": 558120, + "name": "Ref:rain (for 7th Heaven)" + }, { "id": 558121, "name": "Supersonic Generation" @@ -13238,10 +13286,18 @@ "id": 558176, "name": "Pixel Galaxy" }, + { + "id": 558177, + "name": "Believe the Rainbow" + }, { "id": 558178, "name": "MYTH Re:LEASE" }, + { + "id": 558179, + "name": "AFTER PANDORA" + }, { "id": 558501, "name": "老人がとなりでじっと見てたよ" @@ -13498,6 +13554,14 @@ "id": 558565, "name": "地獄絵図" }, + { + "id": 558566, + "name": "FiNEM MUNDi" + }, + { + "id": 558567, + "name": "WIREPULLER" + }, { "id": 558568, "name": "crazy Crazy 狂razy" @@ -13526,14 +13590,82 @@ "id": 559132, "name": "みるく(ぷりずむ)のパートナー" }, + { + "id": 559134, + "name": "リズのパートナー" + }, { "id": 559232, "name": "みるく(ぷりずむ)の相棒" }, + { + "id": 559234, + "name": "リズの相棒" + }, { "id": 559332, "name": "キラめくおしゃまな魔法使い" }, + { + "id": 559334, + "name": "世界の摂理を静観する者" + }, + { + "id": 559501, + "name": "【差出人不明のデータ1】" + }, + { + "id": 559502, + "name": "【差出人不明のデータ2】" + }, + { + "id": 559503, + "name": "【差出人不明のデータ3】" + }, + { + "id": 559504, + "name": "【差出人不明のデータ4】" + }, + { + "id": 559505, + "name": "【差出人不明のデータ5】" + }, + { + "id": 559506, + "name": "【差出人不明のデータ6】" + }, + { + "id": 559507, + "name": "【差出人不明のデータ7】" + }, + { + "id": 559508, + "name": "【差出人不明のデータ8】" + }, + { + "id": 559509, + "name": "【差出人不明のデータ9】" + }, + { + "id": 559510, + "name": "【差出人不明のデータ10】" + }, + { + "id": 559511, + "name": "【差出人不明のデータ11】" + }, + { + "id": 559512, + "name": "【差出人不明のデータ12】" + }, + { + "id": 559998, + "name": "希望之门已经打开" + }, + { + "id": 559999, + "name": "サイゴノキボウ ヲミツケテ" + }, { "id": 605901, "name": "アルカイド 推し" @@ -13593,10 +13725,6 @@ { "id": 609000, "name": "WEC2026 以光之明" - }, - { - "id": 708106, - "name": "OV3RCLOCK" } ], "3": [ @@ -17548,6 +17676,18 @@ "id": 550204, "name": "ドラゴンの王" }, + { + "id": 550301, + "name": "W?K?Y?" + }, + { + "id": 550302, + "name": "ロートスカラ" + }, + { + "id": 550303, + "name": "アシッド" + }, { "id": 555101, "name": "超てんちゃん(てんしのたからばこ)" @@ -17756,6 +17896,10 @@ "id": 558032, "name": "♡みるく(ぷりずむ)♡" }, + { + "id": 558034, + "name": "♡リズ♡" + }, { "id": 559501, "name": "KALEIDXSCOPE -はじまりエリア-" @@ -17764,6 +17908,42 @@ "id": 559502, "name": "KALEIDXSCOPE -世界樹エリア-" }, + { + "id": 559503, + "name": "KALEIDXSCOPE -プリズムエリア-" + }, + { + "id": 559504, + "name": "KALEIDXSCOPE -旧き世界-" + }, + { + "id": 559505, + "name": "KALEIDXSCOPE -PRiSM-" + }, + { + "id": 559506, + "name": "閉ざされた青の扉" + }, + { + "id": 559507, + "name": "閉ざされた白の扉" + }, + { + "id": 559508, + "name": "閉ざされた紫の扉" + }, + { + "id": 559509, + "name": "閉ざされた黒の扉" + }, + { + "id": 559510, + "name": "閉ざされた黄の扉" + }, + { + "id": 559511, + "name": "閉ざされた赤の扉" + }, { "id": 605901, "name": "アルカイド" @@ -23348,6 +23528,24 @@ "genre": 550002, "genreName": "ドラゴンちほー4" }, + { + "id": 550301, + "name": "W?K?Y?", + "genre": 550003, + "genreName": "7sRefちほー4" + }, + { + "id": 550302, + "name": "ロートスカラ", + "genre": 550003, + "genreName": "7sRefちほー4" + }, + { + "id": 550303, + "name": "アシッド", + "genre": 550003, + "genreName": "7sRefちほー4" + }, { "id": 555101, "name": "超てんちゃん(てんしのたからばこ)", @@ -23654,6 +23852,12 @@ "genre": 550060, "genreName": "Phigrosちほー" }, + { + "id": 559999, + "name": "希望钥匙", + "genre": 550003, + "genreName": "7sRefちほー4" + }, { "id": 605901, "name": "アルカイド", @@ -24988,6 +25192,34 @@ "id": 550202, "name": "KALEIDXSCOPE -世界樹エリア-" }, + { + "id": 550301, + "name": "7sRefちほー4" + }, + { + "id": 550302, + "name": "KALEIDXSCOPE -プリズムエリア-" + }, + { + "id": 550303, + "name": "KALEIDXSCOPE -旧き世界-" + }, + { + "id": 550304, + "name": "KALEIDXSCOPE -アシッド-" + }, + { + "id": 550305, + "name": "KALEIDXSCOPE -プリズム-" + }, + { + "id": 550306, + "name": "KALEIDXSCOPE -PRiSM-" + }, + { + "id": 550307, + "name": "KALEIDXSCOPE -Ref:rain-" + }, { "id": 550401, "name": "プリズムちほー2" @@ -25160,6 +25392,10 @@ "id": 558032, "name": "♡みるく(ぷりずむ)♡" }, + { + "id": 558034, + "name": "♡リズ♡" + }, { "id": 559504, "name": "Cryptarithm" diff --git a/data/id_mapping/maps.json b/data/id_mapping/maps.json index 017394e..f2f040b 100644 --- a/data/id_mapping/maps.json +++ b/data/id_mapping/maps.json @@ -2281,6 +2281,20 @@ "IsCollabo": false, "IsInfinity": false }, + { + "id": 550003, + "name": "7sRef区域4", + "IslandId": 50, + "IslandIdName": "maimaiDX PRiSM", + "OpenEventId": 26100131, + "OpenEventIdName": "261001_03_1:7sRefちほー4 解禁", + "ColorId": 550003, + "ColorIdName": "7sRef4", + "BonusMusicId": 550003, + "BonusMusicIdName": "7sRefちほー4ボーナス曲", + "IsCollabo": false, + "IsInfinity": false + }, { "id": 550004, "name": "棱镜区域2", @@ -2350,19 +2364,5 @@ "BonusMusicIdName": "Paradigm: Rebootちほーボーナス曲", "IsCollabo": true, "IsInfinity": false - }, - { - "id": 650056, - "name": "ヒメヒナちほー2", - "IslandId": 60, - "IslandIdName": "maimaiDX CiRCLE", - "OpenEventId": 261002041, - "OpenEventIdName": "261002_04_1:ヒメヒナちほー2 解禁", - "ColorId": 650056, - "ColorIdName": "ヒメヒナ2", - "BonusMusicId": 650056, - "BonusMusicIdName": "ヒメヒナちほー2ボーナス曲", - "IsCollabo": true, - "IsInfinity": false } ] \ No newline at end of file diff --git a/data/id_mapping/meta.json b/data/id_mapping/meta.json index 4063565..5a39c51 100644 --- a/data/id_mapping/meta.json +++ b/data/id_mapping/meta.json @@ -9,16 +9,16 @@ "counts": { "music": 1378, "map": 169, - "gate": 6, - "course": 6, - "key": 6, + "gate": 10, + "course": 10, + "key": 10, "event": 824, - "itemKind1": 398, - "itemKind2": 3001, - "itemKind3": 1046, - "itemKind9": 983, + "itemKind1": 400, + "itemKind2": 3031, + "itemKind3": 1059, + "itemKind9": 987, "itemKind10": 25, - "itemKind11": 345, + "itemKind11": 353, "itemKind12": 11 } } \ No newline at end of file diff --git a/data/id_mapping/music.json b/data/id_mapping/music.json index 3e196a9..17f3eea 100644 --- a/data/id_mapping/music.json +++ b/data/id_mapping/music.json @@ -9196,6 +9196,40 @@ "longMusic": 0, "version": 25003 }, + { + "id": 1736, + "name": "プリズム△▽リズム", + "artistName": 462, + "artistNameName": "Shoichiro Hirata feat.Sana", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100123, + "eventNameName": "261001_02_3:楽曲解禁(希望)", + "disable": false, + "lockType": 4, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, + { + "id": 1819, + "name": "AFTER PANDORA", + "artistName": 366, + "artistNameName": "削除", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100123, + "eventNameName": "261001_02_3:楽曲解禁(希望)", + "disable": false, + "lockType": 4, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, { "id": 10030, "name": "ネコ日和。", @@ -10029,6 +10063,23 @@ "longMusic": 0, "version": 20106 }, + { + "id": 10835, + "name": "Believe the Rainbow", + "artistName": 462, + "artistNameName": "Shoichiro Hirata feat.Sana", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100123, + "eventNameName": "261001_02_3:楽曲解禁(希望)", + "disable": false, + "lockType": 4, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, { "id": 11001, "name": "BLACK ROSE", @@ -18969,7 +19020,7 @@ "lockType": 0, "subLockType": 1, "longMusic": 0, - "version": 24003 + "version": 24006 }, { "id": 11640, @@ -21776,6 +21827,108 @@ "longMusic": 0, "version": 25502 }, + { + "id": 11815, + "name": "IMBRUED:FLUX", + "artistName": 1022, + "artistNameName": "qfeileadh feat.のあ", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100121, + "eventNameName": "261001_02_1:7sRefちほー4 4曲(Lock)追加", + "disable": false, + "lockType": 1, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, + { + "id": 11816, + "name": "砂の函", + "artistName": 1023, + "artistNameName": "Nego_tiator", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100121, + "eventNameName": "261001_02_1:7sRefちほー4 4曲(Lock)追加", + "disable": false, + "lockType": 1, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, + { + "id": 11817, + "name": "Amereistr", + "artistName": 1029, + "artistNameName": "rN", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100121, + "eventNameName": "261001_02_1:7sRefちほー4 4曲(Lock)追加", + "disable": false, + "lockType": 2, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, + { + "id": 11818, + "name": "World's end BLACKBOX", + "artistName": 761, + "artistNameName": "打打だいず", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100121, + "eventNameName": "261001_02_1:7sRefちほー4 4曲(Lock)追加", + "disable": false, + "lockType": 4, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, + { + "id": 11820, + "name": "Xaleid◆scopiX", + "artistName": 232, + "artistNameName": "xi", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100124, + "eventNameName": "261001_02_4:楽曲解禁(イベント2)", + "disable": false, + "lockType": 4, + "subLockType": 0, + "longMusic": 1, + "version": 25504 + }, + { + "id": 11821, + "name": "Ref:rain (for 7th Heaven)", + "artistName": 1054, + "artistNameName": "カモメサノエレクトリックオーケストラ include Limonène", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100125, + "eventNameName": "261001_02_5:楽曲解禁(エクストラ)", + "disable": false, + "lockType": 4, + "subLockType": 1, + "longMusic": 1, + "version": 25504 + }, { "id": 11822, "name": "Supersonic Generation", @@ -21827,6 +21980,23 @@ "longMusic": 0, "version": 25502 }, + { + "id": 11827, + "name": "サウンドプレイヤー", + "artistName": 1026, + "artistNameName": "tilt-six feat.バル", + "genreName": 106, + "genreNameName": "オンゲキCHUNITHM", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100126, + "eventNameName": "261001_02_6:チュウニズム&オンゲキ1曲紹介《サウンドプレイヤー》", + "disable": false, + "lockType": 1, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, { "id": 11831, "name": "きゅびずむ", @@ -22167,6 +22337,23 @@ "longMusic": 0, "version": 25502 }, + { + "id": 11879, + "name": "Xaleid◆scopiX (2)", + "artistName": 232, + "artistNameName": "xi", + "genreName": 105, + "genreNameName": "maimai", + "AddVersion": 24, + "AddVersionName": "PRiSMPLUS", + "eventName": 26100122, + "eventNameName": "261001_02_2:楽曲解禁(イベント1)", + "disable": false, + "lockType": 4, + "subLockType": 1, + "longMusic": 0, + "version": 25504 + }, { "id": 11919, "name": "エンジェル ドリーム", @@ -22252,142 +22439,6 @@ "longMusic": 0, "version": 25007 }, - { - "id": 11997, - "name": "キスキツネ", - "artistName": 781, - "artistNameName": "HIMEHINA", - "genreName": 101, - "genreNameName": "POPSアニメ", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261002021, - "eventNameName": "261002_02_1:ヒメヒナちほー2 3曲追加《キスキツネ、WWW、うたかたよいかないで》", - "disable": false, - "lockType": 0, - "subLockType": 1, - "longMusic": 0, - "version": 26506 - }, - { - "id": 11998, - "name": "WWW", - "artistName": 781, - "artistNameName": "HIMEHINA", - "genreName": 101, - "genreNameName": "POPSアニメ", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261002021, - "eventNameName": "261002_02_1:ヒメヒナちほー2 3曲追加《キスキツネ、WWW、うたかたよいかないで》", - "disable": false, - "lockType": 0, - "subLockType": 1, - "longMusic": 0, - "version": 26506 - }, - { - "id": 11999, - "name": "うたかたよいかないで", - "artistName": 781, - "artistNameName": "HIMEHINA", - "genreName": 101, - "genreNameName": "POPSアニメ", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261002021, - "eventNameName": "261002_02_1:ヒメヒナちほー2 3曲追加《キスキツネ、WWW、うたかたよいかないで》", - "disable": false, - "lockType": 0, - "subLockType": 1, - "longMusic": 0, - "version": 26506 - }, - { - "id": 12000, - "name": "Intergalactic Bound", - "artistName": 1127, - "artistNameName": "Yunosuke / CircusP", - "genreName": 102, - "genreNameName": "niconicoボーカロイド", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261016021, - "eventNameName": "261016_02_1:niconico2曲、バラエティ1曲追加《Intergalactic Bound、LEMON MELON COOKIE、3rd Avenue》", - "disable": false, - "lockType": 0, - "subLockType": 1, - "longMusic": 0, - "version": 26507 - }, - { - "id": 12001, - "name": "LEMON MELON COOKIE", - "artistName": 1128, - "artistNameName": "TAK", - "genreName": 102, - "genreNameName": "niconicoボーカロイド", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261016021, - "eventNameName": "261016_02_1:niconico2曲、バラエティ1曲追加《Intergalactic Bound、LEMON MELON COOKIE、3rd Avenue》", - "disable": false, - "lockType": 0, - "subLockType": 0, - "longMusic": 0, - "version": 26507 - }, - { - "id": 12002, - "name": "3rd Avenue", - "artistName": 1138, - "artistNameName": "Sound Souler", - "genreName": 104, - "genreNameName": "ゲームバラエティ", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261016021, - "eventNameName": "261016_02_1:niconico2曲、バラエティ1曲追加《Intergalactic Bound、LEMON MELON COOKIE、3rd Avenue》", - "disable": false, - "lockType": 0, - "subLockType": 1, - "longMusic": 0, - "version": 26507 - }, - { - "id": 12019, - "name": "Cryogenic", - "artistName": 1148, - "artistNameName": "Camellia ft. Petra Gurin「In Falsus」", - "genreName": 104, - "genreNameName": "ゲームバラエティ", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261016022, - "eventNameName": "261016_02_2:バラエティ1曲追加《Cryogenic》", - "disable": false, - "lockType": 0, - "subLockType": 1, - "longMusic": 0, - "version": 26507 - }, - { - "id": 12024, - "name": "OV3RCLOCK", - "artistName": 1152, - "artistNameName": "Alicemetix", - "genreName": 105, - "genreNameName": "maimai", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261002024, - "eventNameName": "261002_02_4:伝導楽曲 1曲(Lock)", - "disable": false, - "lockType": 3, - "subLockType": 1, - "longMusic": 0, - "version": 26506 - }, { "id": 100018, "name": "[協]Love You", @@ -23085,23 +23136,6 @@ "longMusic": 0, "version": 24015 }, - { - "id": 111537, - "name": "[即]Straight into the lights", - "artistName": 890, - "artistNameName": "Cosmograph", - "genreName": 107, - "genreNameName": "宴会場", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261016023, - "eventNameName": "261016_02_3:宴譜面追加3", - "disable": false, - "lockType": 0, - "subLockType": 0, - "longMusic": 0, - "version": 26508 - }, { "id": 111557, "name": "[蛸]不機嫌なスリーカード", @@ -23204,23 +23238,6 @@ "longMusic": 0, "version": 25007 }, - { - "id": 111765, - "name": "[音]愛包ダンスホール", - "artistName": 781, - "artistNameName": "HIMEHINA", - "genreName": 107, - "genreNameName": "宴会場", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261002022, - "eventNameName": "261002_02_2:宴譜面追加4", - "disable": false, - "lockType": 0, - "subLockType": 0, - "longMusic": 0, - "version": 26507 - }, { "id": 111772, "name": "[宴]人マニア", @@ -23272,23 +23289,6 @@ "longMusic": 0, "version": 25502 }, - { - "id": 112002, - "name": "[覚]3rd Avenue", - "artistName": 1138, - "artistNameName": "Sound Souler", - "genreName": 107, - "genreNameName": "宴会場", - "AddVersion": 26, - "AddVersionName": "CiRCLEPLUS", - "eventName": 261016023, - "eventNameName": "261016_02_3:宴譜面追加3", - "disable": false, - "lockType": 0, - "subLockType": 0, - "longMusic": 0, - "version": 26508 - }, { "id": 120227, "name": "[r]Garakuta Doll Play", diff --git a/lib/pages/music_risk_feature_view.dart b/lib/pages/music_risk_feature_view.dart index ebf5ca0..afc1d61 100644 --- a/lib/pages/music_risk_feature_view.dart +++ b/lib/pages/music_risk_feature_view.dart @@ -320,21 +320,30 @@ class _MusicRiskFeatureViewState extends State // isNewItemList 得按 (itemKind, itemId) 主键比对服务器快照来给 0/1, // 不能一律发 '1':重复解锁一首已经存在的歌时,服务器会把插入冲突的 // 行整行丢掉,表现就是「上传成功但没生效」。 - final existingKeys = await service.getUserItemKeys( - widget.userId, - items.map((e) => e['itemKind'] as int), - ); + // 但这次回读不能让整件事失败——私服要是不实现 GetUserItemApi, + // 退化成一律 '1'(就是加这段之前的行为)总比解锁整个不能用强。 + Set? existingKeys; + try { + existingKeys = await service.getUserItemKeys( + widget.userId, + items.map((e) => e['itemKind'] as int), + ); + } catch (_) { + existingKeys = null; + } builder.applyItemListPatch( packet, items: items, - newFlags: [ - for (final item in items) - existingKeys.contains( - '${item['itemKind']}:${item['itemId']}', - ) - ? '0' - : '1', - ].join(), + newFlags: existingKeys == null + ? null + : [ + for (final item in items) + existingKeys.contains( + '${item['itemKind']}:${item['itemId']}', + ) + ? '0' + : '1', + ].join(), ); if (_isUnlock) { builder.applyMusicDetailPatch(packet, musicData: musicData);