# M2 LevelB 保持 PlayFab 原语义裁决 日期:2026-09-30。依据:用户明确纠正“LevelB 使用的方案应该和 PlayFab 版本使用的相同”。 ## 当前裁决 LevelB 的原处理方案不需要改变。迁移只替换提供方及玩家身份:原 PlayFab 统计能力由 KV 管理器及接线承接,原 PlayFabId 对应位置使用认证 UserID。用户之前允许“KV先存一份”不是允许重新定义 LevelB、改变原统计流程或把完整统计功能缩成暂存副本。 开发侧撤回《M2-C3c本人统计KV暂存实施增量-2026-09-30.md》的实施候选,及阶段方案中将 LevelB 定义为“可回收临时个人快照”的解释。对应增量hash只保留历史追溯,不再作为编码许可或等待用户批准的当前方案;不继续为该提议组织独立审核。原文件字节保持,避免改写受审证据。 本裁决不预先规定 KV 内部必须采用哪种数据容器;以 LevelB 为键可以是等价存储的实现细节,但不能据此宣称排行榜和好友统计读取已经等价。也不能默认改成服务器在每次查询时从 lv/建筑重新计算,从而改变原统计更新时间。 ## 原客户端链路与必须保持的行为 | 源码位置 | 已核实的原行为 | 迁移边界 | |---|---|---| | Client/Assets/Scripts/DataCenter/DataCenter.LeadboardData.cs:189 SetLvData | 原等级、建筑等级及上限计算 LevelB;分数=lv×100000+建筑值 | 计算来源、上限、原调用点、async void及状态赋值不变 | | 同文件:158 SetLeadboardData | 把 LevelB 和地区统计名及相同分数放入一次 UpdatePlayerStatisticsAsync 请求并等待 | KV承接原统计更新含义,不另立“先刷所有存档、部分成功也可当迁移完成”的方案;批次/失败差异须准确说明 | | 同文件:171 GetLeadboardData | 按统计名读取从0开始、默认最多50名及玩家资料 | KV接线取得同义排名、分数、玩家身份及资料;不返回本人快照充当排行榜 | | Client/Assets/Scripts/Services/FriendService.cs:169 | 从各好友 Profile.Statistics 中取名为 LevelB 的 Value,再按原值排序 | 取得该好友的同义统计分数;不拿普通Level替代、不改原UI的除法/取模解码 | | Client/LocalPackages/asap.playfab.async/Runtime/Gen/PlayFabClientAsyncAPI.cs:2430 | 更新错误回调记日志后以null完成Task | 保留原公开返回与异常行为;不添加新业务阻断或悄悄吞掉未知编程异常 | 全球/地区、好友统计必须指向原来对应的统计含义。原已明确的未知地区边界继续保留,不增加新的地区开关或地区来源。现有LastLoginTimeUtc不是此次纠正要求改动的对象,本轮不改变其实现或宣称其已等价于好友Profile.LastLogin。 ## 撤回原因与后续执行 此前提议保留了计算公式,但将“统计更新→排行榜/好友查询”的完整能力拆成临时个人KV副本,又引入通用Flush可能刷新其他待写项、两键非事务等差异。这些是开发侧新提议,不是原PlayFab业务方案要求,不能要求用户接受后再称纯平移。 后续沿现有 C3c 统一记录原统计更新、排行榜读取、好友统计读取到 KV 的等价调用映射。已批准同合同部分连续执行;只有准确证实的接口或合同缺口集中记录,不能自行用临时副本、客户端拼榜、改排序或停用功能替代。无需再问用户是否存KV或是否使用新ID,也不因撤回本候选新增一轮逐功能审查。 本次核查发现相关生产方法仍为原PF实现;被撤回提议尚未编码或写入正式KV,因此没有需要回滚的生产改动。保留整个现有工作树,不改服务器、配置、测试或其他业务代码;本轮只修正文档与当前执行入口。