游玩记录公开字段深度参考
本页把游玩记录对象按页面显示区域解释。字段可能随版本增加;客户端应保留未知字段,不要因为页面暂时不显示就删除。个人标识、地点、对手和时间在公开分享前必须脱敏。
请求与响应外层
token
当前会话凭据。只放在受保护请求体中,不写 URL、日志、文件名或错误截图。
start / end
范围读取边界,约定为 [start, end)。它们是记录索引范围,不是日期范围。请求前保证非负、end > start,下一页按实际返回条数推进。
success / msg
success 表示业务层是否接受请求,msg 是用户提示。HTTP 成功不等于 success 为真;空列表也不等于请求失败。
total
当前读取条件下的总数参考。数据可能在分页期间变化,不能把 total 当作永远稳定的数据库快照。
记录身份和地点
| 字段 | 页面用途 | 注意 |
|---|---|---|
userId | 关联当前用户 | 对外隐藏或脱敏 |
orderId | 服务记录关联 | 不要当作游玩日期 |
playlogId | 记录唯一关联 | 适合去重/反馈引用 |
version | 内容/客户端版本标识 | 不一定等于页面显示版本 |
placeId | 地点编号 | 不公开完整值 |
placeName | 地点名称 | 可能暴露现场位置 |
loginDate | 登录相关时间戳 | 解析时确认单位/时区 |
playDate | 记录发生时间 | 与上传时间可能不同 |
userPlayDate | 用户侧游玩时间 | 优先显示页面格式化值 |
type | 记录类型 | 未知枚举保留原值 |
地点和时间的组合可能识别个人。公开反馈只需提供脱敏地点、日期范围和时区。
曲目和游玩范围
| 字段 | 说明 |
|---|---|
musicId | 曲目编号,来自公开索引 |
level | 难度索引/等级字段,具体显示由页面映射 |
trackNo | 本次记录中的曲目序号 |
playMode | 游玩模式索引,未知值保留 |
isPlayTutorial | 是否为教程/引导流程 |
isEventMode | 是否为活动/特殊流程 |
isNewFree | 是否处于特定免费流程 |
trialPlayAchievement | 试用流程的达成字段 |
level 是数据字段,不应直接用颜色替代。模式字段是索引值,客户端要给未知值保留“未知模式”而不是强行映射。
对战与参与者
| 字段组 | 字段 | 含义 |
|---|---|---|
| 对战 | vsMode | 对战模式索引 |
| 对手 | vsUserName | 对手显示名,需脱敏 |
| 对手 | vsStatus | 对手状态索引 |
| 对手 | vsUserRating | 对手 Rating |
| 对手 | vsUserAchievement | 对手达成字段 |
| 对手 | vsUserGradeRank | 对手评级索引 |
| 对战 | vsRank | 当前对战排名/结果字段 |
| 参与者 | playerNum | 本次记录中的参与人数 |
playerNum 不一定等于同时在线人数。对手为空时不要显示成匿名用户;按页面空值规则处理。
成组字段 playedUserId1–playedUserId3、playedUserName1–playedUserName3 和 playedMusicLevel1–playedMusicLevel3 表示参与者摘要。缺少某个序号时不要向前补位后再写回。
伙伴/角色字段
每个角色槽可能有:
characterId1–characterId5;characterLevel1–characterLevel5;characterAwakening1–characterAwakening5。
页面可能把它们显示成伙伴卡片。ID 为 0、缺失或详情找不到时,应显示占位或隐藏,而不是把 0 当作有效角色名称。角色名称和等级也可能属于个人数据,截图前注意隐私。
成绩字段
achievement
达成率或放大后的服务数字。页面会格式化为百分比;导出工具保留原始数值并单独记录格式化规则。
deluxscore
独立的 DX 分数。不要与达成率、评级或游玩次数混算。
scoreRank
评级索引。未知值显示为未知评级,不能把索引直接当文字。
maxCombo / totalCombo
最大连击与总连击参考值。最大连击超过总量时应提示数据异常,不要静默裁剪。
maxSync / totalSync
最大同步与同步总量。页面可能以比例或图标显示,但原始字段要保留。
判定统计
判定字段按音符类别和结果组合:
| 类别 | 结果字段 |
|---|---|
| Tap | tapCriticalPerfect、tapPerfect、tapGreat、tapGood、tapMiss |
| Hold | holdCriticalPerfect、holdPerfect、holdGreat、holdGood、holdMiss |
| Slide | slideCriticalPerfect、slidePerfect、slideGreat、slideGood、slideMiss |
| Touch | touchCriticalPerfect、touchPerfect、touchGreat、touchGood、touchMiss |
| Break | breakCriticalPerfect、breakPerfect、breakGreat、breakGood、breakMiss |
字段缺失、负数和非有限数都应保留为异常输入,不能当作正常 0。合计时注明是否忽略了缺失项。
判定开关
可能出现:
isTap、isHold、isSlide、isTouch、isBreak:记录包含哪些类别;isCriticalDisp:是否显示关键判定;isFastLateDisp:是否显示 FAST/LATE;fastCount/lateCount:对应计数。
isSlide 等字段可能在历史数据中不是严格布尔语义,客户端应按响应类型和页面版本处理未知值。FAST/LATE 计数为 0 不一定代表页面没有显示该区域,需结合显示开关。
新纪录和状态
| 字段 | 含义 |
|---|---|
isAchieveNewRecord | 达成率是否创造新纪录 |
isDeluxscoreNewRecord | DX 分数是否创造新纪录 |
comboStatus | 连击状态索引 |
syncStatus | 同步状态索引 |
isClear | 是否通过/完成 |
beforeRating / afterRating | 前后 Rating |
beforeGrade / afterGrade | 前后评级索引 |
afterGradeRank | 结果评级排名/索引 |
beforeDeluxRating / afterDeluxRating | 前后扩展 Rating |
前后字段用于展示变化,不应把 after 写回成绩。未知状态保留原值并显示“未知”。
模式和扩展字段
可能出现:
isFreedomMode:特殊模式标记;extNum1、extNum2、extNum4:版本扩展数字;extBool1:版本扩展开关;playCount:可选的游玩计数。
扩展字段没有公开语义时只读保留,不要根据数字大小猜测用途。客户端升级时要兼容字段缺失和新增。
页面转换规则
页面可以把原始记录转换为:
- 百分比;
- 评级文字;
- 时间字符串;
- 判定总数;
- 图标颜色;
- 对手/伙伴卡片。
转换层应可逆或保留原字段。错误转换只影响显示,不应覆盖原始导出。
隐私分层
可用于普通反馈
- 曲目编号;
- 难度;
- 非敏感错误;
- 脱敏时间;
- 版本/分支摘要。
只交给授权人员
- 记录关联 ID;
- 完整时间和地点;
- 对手/伙伴数据;
- 完整判定数组。
不应分享
- Token、密码、访问码;
- 完整备份;
- 未脱敏用户名/地点;
- 完整日志和服务 JSON。
兼容性清单
- [ ] 未知字段不会让解析崩溃;
- [ ] 缺失字段不会变成错误的 0;
- [ ] 百分比不会重复换算;
- [ ] 时间保留时区;
- [ ] 分页按实际返回数量推进;
- [ ] 记录 ID 可用于去重;
- [ ] 账号切换会清理旧记录;
- [ ] 导出保留原始对象;
- [ ] 公开反馈已脱敏。
