Bad0RANG3
|
e9357f5969
|
refactor: 拆分主页与公共组件,扫码登录改走 WinHTTP
- 抽出 lib/core 的日期/JSON 工具,收敛各页重复解析
- 主页与音乐风险页拆成组件,风险功能共用一套运行框架
- 修复设置页作为主页页签保存时弹掉根路由导致的黑屏
- 登录对齐 Astral aimedb 协议:84 位二维码校验、签名与请求头修正,
补 GlobalSign 中间证书;Windows 改用 WinHTTP 绕过服务端对
BoringSSL 的 TLS 指纹拦截(证书校验保持开启)
- 补开发预览数据与测试
|
2026-10-25 15:51:10 +08:00 |
|
Cookiues
|
a5fb2c97cd
|
fix: 解歌 11820 的查表结论与道具回读容错
排查「解锁 11820 机台不显示」的结果:
- 11820 = Xaleid◆scopiX(xi),lockType=4(MusicLockType.KaleidScope)、
longMusic=1,eventName 与 subEventName 都是 26100124。
NotesListManager.cs:251 的分支确认:KaleidScope 曲落到 IsUnlockBase →
MusicUnlockList,也就是 itemKind 5 的行对它确实有效,包没发错。
真正卡点是前一道门:曲池准入要 IsOpenEvent(26100124)(NotesListManager.cs:70),
机台 mai2.ini 的 AllOpen=0,所以完全依赖服务器 GetGameEventApi 给的窗口;
而 G:\Package 的 StreamingAssets 只装了 A000/A005/A011/A015,没有 A031,
GetMusic(11820) 直接是 null —— 这是数据没装,不是协议问题。
- 重生成映射表时改用 D:/A031OptDump/Root 作数据根(上一版读错了根):
现在 music 含 11820、gate 为 1~10(7=棱镜塔、9=希望之门)、
title 3001→3031、chara 983→987。
- 解锁/收藏品路径里 GetUserItemApi 的回读改成失败可降级:私服不实现它时
退回一律 '1'(加这段之前的行为),不要让回读把整个解锁功能拖挂。
- 按你的要求删掉 README 的「ID 映射表」一节。
|
2026-10-02 01:51:11 +08:00 |
|
Cookiues
|
80df51c239
|
fix: 解歌的 isNewItemList 按主键回读再算,不再一律发 1
排查「发 11820 解歌不显示」时发现两处问题:
- applyItemListPatch 的 isNewItemList 一直硬写全 '1'(新增),从没读服务器
已有行。真机 BuildListData 是按 (itemKind, itemId) 比对快照给 0/1 的,
重复解锁一首已存在的歌时服务器按插入冲突丢行,表现就是上传成功但没生效。
这和角色/地图/万花筒三处的处理不一致,现补齐。
- 新增 TitleApiService.getUserItems/getUserItemKeys。GetUserItemApi 是按
itemKind 分页的,首次 nextIndex 要按 itemKind * 1e10 编码
(PacketGetUserItem.cs:19),发 0 只会拿到空页。
- 解锁上传后回读复查,把「服务器没存这行道具」与「存了但曲目池不给进」分开报。
- 待解锁列表含 10000~19999 的 DX 曲时提示:Master/Re:Master 不像老曲那样
白送(IsUnlockMaster 里 id<10000 直接放过),必须显式带 itemKind 6/7。
需要说明:一首歌进不进选曲池由 NotesListManager.cs:70 决定
(IsOpenEvent(eventName) && !IsGameNgMusicId),事件窗口来自 GetGameEventApi、
曲目本体来自机台 Music.xml。11820 若卡在这一层,任何用户包都改不动,
复查那一步就是为了把这种情况和包的问题区分开。
README 补 isNew*List 语义、曲目可见性链路与 DX 段解锁规则三条说明。
删除因此不再被引用的 unlockMusicSuccess。
|
2026-10-01 22:14:50 +08:00 |
|
Bad0RANG3
|
45214b11a0
|
refactor: 抽取高危功能页共享脚手架与传输层日志
诊断:功能票 / 解锁歌曲 / 收藏品 / 旅行伙伴 / 数值修改 / 一键跑图 /
万花筒 / 高危 hub 这些页面各自抄了一份同样的脚手架——冷却计时器、_Step
枚举、自动退登开关、卡片/提示/进度卡;TitleApiService.getUserPreview 还
重复实现了整套传输层;服务层有 37 处裸 print 会把 token / JSESSIONID
打进日志。
- 新增共享原语,7 个功能页切换到:
* widgets/cooldown_mixin.dart CooldownMixin(登录后冷却倒计时)
* widgets/step_progress.dart RiskStep + StepProgressCard
* widgets/app_card.dart AppCard / SectionTitle / AutoLogoutToggle
* widgets/app_notice.dart AppNotice + context.showSnack
- TitleApiService: getUserPreview 收敛进通用 _callApi;新增 fromHolder()
工厂与 config getter,消除散落的 isConfigured + config!
- 传输层 print -> ApiLog(仅 debug 输出),删除全部 avoid_print 忽略
- UserAllPayloadBuilder 新增 placeholderMusicData()(原 5 处重复)
- LoginPage 从 main.dart 抽到 pages/login_page.dart,入口只留 main + MyApp
- 更新 README / CLAUDE.md 目录结构与已过时的 web/依赖说明
验证:flutter analyze 0 issue(含 info);flutter test 96/96 通过。
纯结构重构,行为保持不变;仅有意统一了功能票 / 音乐风险 / hub 的
卡片与步骤视觉样式。
净删除约 2176 行重复代码。
|
2026-09-28 14:50:51 +08:00 |
|
Cookiues
|
8dda399f76
|
feat: 旅行伙伴发放与编组、修复退登卡死、优化宽屏布局、加 CI
自动退出登录卡死:_performLogoutAndExit 只 pop() 一层,而解锁/收藏品页是 push
在 HomePage 之上的,退登后被弹回「风险」hub,同时 _loggingOut 仍为 true,
PopScope(canPop:false) + 返回键转圈形成死局。改为 popUntil(isFirst)。
旅行伙伴发不了:它是 ItemKind.Character = 9,与搭档 Partner = 10 是两种东西,
原先收藏品的类型列表 [1,2,3,10,11,12] 里根本没有 9。按客户端实现,角色不走
userItemList(ExportUserItems 不导出 itemKind 9),而是
upsertUserAll.userCharacterList 的 {characterId, level, awakening, useCount},
配 isNewCharacterList 一行一字符。新增发放与 5 槽 charaSlot 编组页,
含「把槽 0 复制到其他槽位」,并校验所选角色确为已拥有或本次待发放。
宽屏布局:各页只有 ConstrainedBox 限宽、没有居中容器,1440 窗口下内容贴左、
右侧大片空白。抽出 responsiveBody 统一居中;B50 预览改用按宽度适配
(InteractiveViewer constrained:false + FittedBox fitWidth),横屏下不再被
contain 缩成中间一小块,导出仍是原始 1762x1850。
CI:.github/workflows/build.yml 先跑 analyze+test 作为门槛,再产出
Windows exe、Android apk、iOS 未签名 ipa(macOS runner,无证书故不可安装)。
README 从 Flutter 模板改写为实际文档,含 path_provider/jni 与 JBR jlink
两个构建环境坑的说明。
|
2026-09-26 00:37:54 +08:00 |
|
Cookiues
|
24ccd628d1
|
sync
|
2026-08-22 16:52:33 +08:00 |
|