Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-CP2B首场景依赖增量核查-2026-09-29.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

14 lines
3.5 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.
# M2 CP2B 首场景依赖增量核查(只读)
日期:2026-09-29。本文件补充[原首场景显式链核查](M2-CP2首场景自动依赖核查-2026-09-29.md),不替代完整调用图、服务端契约或编码前方案。只读当前源码;未运行 Unity、正式账号、API 或打包。CP2A/CP3A 阶段门继续关闭。
| 首场景入口 | 增量源码事实 | 发布前必须解决 |
|---|---|---|
| `FishingStage.InitData()` | 依次 `CampDataMM.Init`、`PlayerData.Init`、`FishingEventData.Init`、`GuideDataCenter.Init`、`AchievementDataManager.Init` 等,末尾发布 `ConditionType.LoginDays`(`FishingStage.cs:284–302`) | 每个 Init 的即时读写和事件接收者需按**实际配置与注册状态**核,不可只核 `SurveyService` 构造 |
| 登录天数事件 | `BattlePassData` 构造订阅 `ConditionTypeEvent`(`BattlePassData.cs:256`);激活时 `UpdateTaskData` 会改变每日/每周任务并调用 `Data.SaveBattleTask()`(约 `:734–814`);保存仍走 `PlayFabMgr.Instance.UpdateUserDataValue("BattlePassRecordTask",...)`(`:117`)。`AchievementDataManager` 与 `FishingEventData` 也订阅同一事件,前者改本地成就计数,后者调用 `SetEvent` | 战令激活条件、事件顺序、保存失败和登录重复计数需审;不得因场景初始事件仅看似本地计数就认为旧 PF 写为零。未确认配置会命中时标为**条件性即时旧 PF 写**,不可误报无条件发生 |
| `FishingStage.InitManager()` | `Assembly.GetExecutingAssembly().GetTypes()` 逐类型交给 Order、SideGame、ActivitySentry、ActivitySubscriber 注册,然后 `ActivityManager.Init()` 建立活动 sentry、订阅全局事件并 `CheckAllActivities()`(`FishingStage.cs:587–597`、`ActivityManager.cs:303–311`) | 静态显式链无法证明活动实例化后的所有存档/API 副作用;需用受控配置和固定场景用例记录实际创建类及调用,按活动业务合同迁移或明确阻断场景。不得简单屏蔽活动初始化后宣称原玩法等价 |
| `AiHelpManager.Instance.Login()` | 场景末尾调用(`FishingStage.cs:237`),AIHelp `Login()` 向外部 SDK 传 `CustomId`,自定义字段仍写 `pfid = userService.UserId`、`CreateTime`、`LoginTime`(`Others/AiHelpManager.cs:23–48`) | 统一身份语义与外部 SDK 字段政策;不能把 S101 十进制 ID 无审查地填入历史 `pfid` 字段,也不能默认为空值安全 |
| `AutoRestart.Init()` | 场景末尾订阅 ActLoaded/Unloaded;后续读取 `IsLogin`、`LoginTime` 判三天重启(`Others/AutoRestart.cs`) | 正式 KV 的公开登录状态、时钟与退出策略必须在开放场景前确定;这不是本次立即网络请求,但会影响后续场景生命周期 |
现有显式链仍包括登录后 Mail、问卷两读两写、排行榜直接 PlayFab SDK、Friend/AntiCheat、条件 Club 查询及 `PlayerShopData` 补单。`AssetsServer` 仅见配置与脚本,工作区 `docs` 未找到这些路由的 OpenAPI/响应合同;既有正式地址 Swagger 候选返回 404 的历史记录不能补足接口语义。**用户明确本机服务器源码可能与线上不同,禁止改动,也不将其作为正式接口契约证据;后续不再据此推断线上行为。**故 CP2B 完整方案至少需同时给出:经确认的线上 `(Method, canonical route)` 与响应/身份契约、初始事件和活动配置的实际命中证据、旧 PF 调用去向、失败/旧 epoch/退出处理、文件白名单及可复现验收。未完成时继续阻止 `FishingStage`,不修改生产代码。