# M2 CP2 首场景自动依赖核查(只读,非完整白名单) 日期:2026-09-29。仅按当前源码的显式调用链核查,未运行 Unity Play/真实账号;所有行号以 `M2-CP2-D1源码事实基线.json` 的版本为准。尚未覆盖反射注册、事件连锁、Prefab/UnityEvent 和配置启用条件;不能据此宣布首场景可运行。 | 顺序/触发 | 显式链 | 当前依赖 | CP2 方案必须确定 | |---|---|---|---| | 登录成功后 | `PFLoginAct.LoginAsync:120` → `InGameMailService.Init:153,162` → `BaseMailHandler.FetchMail:312` | `POST mail/fetch`,使用 `CustomServerMgr` | 正式租约的单路由放行;授权后才发,旧 epoch 回复丢弃 | | 阶段跳转 | `LoginStage.RequestNextAct` → `FishingStage.StartAsync:186–192` → `SurveyService` 构造 `:35,40` | 两次 `PlayFabMgr.Instance.GetLocalData` | 在无旧组件的 KV 模式必需迁移/停用;不能以空 PF 组件兜底 | | 首场景加载后 | `FishingStage.StartAsync:223` → `LeadboardData.SetLvData:189` → `SetLeadboardData` | PlayFab 排行榜异步调用 | 同批迁移或在明确合同下禁止本次调用;不能让其无监控失败 | | 首场景加载后 | `FishingStage.StartAsync:236` → `SurveyService.GetSurveyMatchlist:55` | `UserId` 按 16 进制转换;该 ID 当前是 PF 身份 | 定义后端无关的抽样标识/保留语义;不能把 S101 十进制 ID 当十六进制 PF ID | | 首场景加载后 | `FishingStage.StartAsync:243` → `AntiCheatManager.CheckBan:249` → `OnBan:260` | `POST anti-cheat/CheckBan`,请求内含 `UserId` | 定义新身份字段与 Method/路由许可及失败行为 | | 初始化事件 | `FishingStage.InitEvent:254` → `FriendService.GetInvitedListCount:322` | `POST friend/GetInvitedListCount`,`async void` | 路由许可、失败/登出响应丢弃及异常观察 | | Home 系统切换且已开 Club | `HomePanel.SystemSwitch:1080` → `ClubService.GetSelfClub:215,224` | `POST club/GetSelfClub` | 条件触发的单路由许可及 SessionVersion 检查;不通配开放 Club | | 非 AGG 补单前置 | `FishingStage.StartAsync:204` → `PlayerShopData.GetReplenishmentData:520` → `DevIAPService.GetOrderUnreceived` | 当前 Dev 实现只返回空字典 | 只能说明该非 AGG 调用本身无网络;不代表 AGG 的购买/补单可用 | `FishingStage.InitData` 还启动多个模块,`InitManager` 通过 `Assembly.GetExecutingAssembly().GetTypes()` 动态初始化活动管理器。静态表没有穷尽其后续存档和 API 调用。若 CP2 第一验收仅包含正式登录与句柄交接,阶段切换必须显式阻断并验证;若包含首场景,则以上依赖及动态触发都需纳入同一完整方案、源码白名单和回归矩阵,经原 ZCode 独立审查及主会话裁决后才能编码。