Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-C3c正式互加好友结果与字段差异-2026-09-30.md
Liubing\LB 6813da149a feat(upserver): 保存M2客户端KV迁移至本人统计写检查点
保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。
保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。

验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。
包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
2026-09-30 19:19:05 +08:00

48 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# C3c 正式互加好友结果与字段差异
2026-09-30 15:36。用户已明确批准101/102互加好友,必要时可扩展103–110。本次101/102足够,未登录或创建103–110,也未更改客户端正式准入名单。
## 实际结果
双方原好友列表均为空。101调用原`friend/AddFriend`邀请102,HTTP200/code=1;关系尚未直接完成,102按原字段`Status=1, PlayFabId=102, FriendPlayFabId=101`调用`friend/AcceptFriend`,HTTP200/code=1。最后双方各有1个好友,101取得102、102取得101,`mutual=true`。关系保留供后续联调,未删除好友。
## 当前线上非空响应
`friend/GetFriendsList`外层`code/msg/friends`;friends的每项仍为序列化JSON字符串。对101、102的两份非空项,实际都只有以下字段:
| 字段 | 101列表中102的项 | 102列表中101的项 |
|---|---|---|
| PlayFabId | 字符串102 | 字符串101 |
| DisplayName | String(正文不落盘) | String(正文不落盘) |
| AvatarUrl | String(正文不落盘) | String(正文不落盘) |
| Level | 数字1 | 数字1 |
| LastLogin/LastLoginTime/LastLoginTimeUtc | 未返回 | 未返回 |
| LevelB/建筑等级/Statistics | 未返回 | 未返回 |
这已证明现有接口可以一次返回好友的基本资料,而不是“完全不支持”。但本次返回的数据尚不能直接满足原客户端LevelB及LastLogin消费。字段存在不等于昵称/头像为有效真实资料,不从脱敏类型记录推断其内容。
## 与本人KV对照及限制
账号101等级62、102等级60,均来自现行现代存档`NewPlayerDataDic.newData`第0槽(19槽格式),并非独立`Lv`键。原AddFriend请求MySelf.Level按该实际值提交(本次实际邀请者101提交62),昵称/头像缺键沿现有KVUserService默认规则;未写回KV。
两账号本次指定键读取中,DisplayName、AvatarUrl、InfiniteBuildingData、LastLoginTimeUtc均缺失。好友返回Level=1与KV等级62/60不一致,**不能将其当作已验证的KV等级投影**。
原客户端已有`KVUserService.UpdateProfile/UpdateProfileLv`通过account/UpdateProfile同步资料,`CampPanel.cs:1362`会调用UpdateProfileLv。本次只执行授权的好友流程,没有进入场景或发送UpdateProfile;故等级不一致也可能与资料同步尚未执行有关,不据此断言服务端仍访问PlayFab或没有KV能力。
同理,本次未执行FishingStage的LastLoginTimeUtc保存路径;源KV缺时间,非空好友响应也没有时间。**尚不能证明将来KV有时间后该接口会自动返回,也不能仅凭本次缺字段断言永远不支持。** 下一步在同一C3c差异裁决中明确时间投影与缺键行为,不能擅自为测试写入当前时间并冒充历史值。
## 执行边界与证据
- 首次预检仅读独立Lv,不能取得101等级,提前终止,0好友写请求。核现行DecodeCore后补读取现代格式;初次失败保留,不归因于服务器坏档。
- 首次2次正式请求;最终12次正式请求,其中2次为已批准好友写操作(AddFriend/AcceptFriend),其余登录与读取。本轮合计14次;此前只读探测4次属于前一检查点。
- 没有KV Set/Delete、UpdateProfile、删除好友、领奖、付费、Play或打包。认证仍可能有原有服务端副作用。未读取/修改服务器源码,未改客户端生产代码。
- 证据:`M2-C3c正式互加好友实测-2026-09-30.json`(首次预检)、`M2-C3c正式互加好友实测-final-2026-09-30.json`(成功);复跑驱动`M2-C3c正式好友样例验证.ps1`(会检查已有关系,禁止无理由自动重复执行)。
- 此为HTTP原协议测试,不是Unity真实FriendService运行或首场景通关。原C3c待审包保持原hash,本文件作为事实增量交同一次审查。
## 后续集中裁决输入
1. 不再索要好友路由或非空基本结构:本次均已取得。
2. 好友资料源要对齐真实KV数据:现有UpdateProfile是否按原流程足以提供准确等级;建筑等级/LevelB如何保留,不能将Level=1直接填旧value。
3. 采用已有LastLoginTimeUtc作为单一存储来源的候选方向;需确定好友接口读取/投影和旧档缺键处理,保留伙伴邀请的原业务顺序。
4. 103–110授权已记录,但更多空账号不能自动补齐上述语义,不为扩大测试数量额外创建。