Files
ft/CodexOutput/upserver/阶段4最小真实玩法闭环-范围与接线核查-2026-09-24.md

8.1 KiB
Raw Blame History

最小真实玩法闭环:范围与接线核查

最新状态:用户已确认单账号重启式重登;本核查已收敛为《阶段4最小真实玩法闭环方案-待评审-2026-09-24.md》。以下保留设计准备过程;当前完整R1方案待独立审查,尚未批准新生产改动。 用户已明确选择真实游戏内的一条普通玩法闭环,而非再增加独立验证面板。此文件记录源码事实与收敛方向,不冒充已完成方案评审。

目标与代表操作

首选:正常游戏登录→进入已有鱼竿面板→装备另一根已拥有且未锁定的鱼竿→通过KV保存→退出后重新启动游戏登录→装备状态从服务器恢复。使用专用可丢弃测试账号,验收前需明确账号、已有数据备份和允许写入范围;原101/102专用fixture授权不自动覆盖全量业务存档。

不在首轮改变升级、抽奖、付费、扣体力或奖励算法;不做外围迁移、SDK删除、通用回调框架或数据格式重构。现有安全底层和31模块codec继续复用。该闭环不等于正式玩法/G4全部放行,也不能绕过P2-α真实存量档启用门。

已核对的真实调用链

接入点 源码事实 对最小方案的约束
UI/Rod/FishingRodPanel_Level.cs OnClickEquip 调用SetEquipRodID后更新UI与成功提示 先捕获本次归属;失败不能继续显示保存成功
DataCenter/DataCenter.PlayerData.cs SetEquipRodID 修改equipRodID、更新红点、调用SavePlayerData 不能只在最后HTTP请求处判断失效;首轮尽量保留业务顺序和算法
同文件SavePlayerData 先发布PlayerData事件;组装19核心字段及vipL/ld/ad/bd/ct/rt;保存整个NewPlayerDataDic 并非写独立EquipRodID key,需要完整加载关联状态,不能用默认其他字段覆盖
Core/PlayFabMgr.cs 旧读写和40秒同步仍走PF/PlayerPrefs;新四入口尚无业务调用者 应评估在既有facade统一路由,避免逐个重写81个调用文件;不得PF/KV双写或加载拼接两份档
Services/UserService.cs LoginCore 仍先PF登录/初始化,再API登录,最后Done 需要真正调整KV模式加载顺序,不能设置SaveBackend=kv就宣称接通
Services/UserService.KVLoad.cs 明确拒绝kv;受控对象及验证接收者和正常对象不同 验证接口不能直接改名当生产入口;需要最小运行时发布合同
PlayerKVGameLoadCoordinator LoadedForValidation要求guard持续有效;只开放受控加载 释放guard、发布写权限、退出排水必须一起设计,不能只加一个Dispose
PlayerKVControlledLoadCapability 目前工厂只提供Editor合成传输 真实会话绑定需明确复用同一次认证Cookie;不得复用合成工厂偷换真实handler
PlayerKVEditorValidationHost 31模块组合在独立容器中构造 正常游戏应绑定真实容器既有对象,不再创建平行业务对象或复制31模块算法
UserService.GetPlayLv PF读取目标玩家Lv 不能机械改为本人KV;外围身份暂时保留明确分工

三条路线与当前建议

路线 改动与效果 判断
先按原B/C覆盖全部回调、换号及生命周期 完整但首次可运行较晚,业务改动面大 不作为默认先行路线
真实游戏单账号首轮闭环,复用统一facade和完整加载;会话结束后需重启游戏再登录 可在一次运行中固定原handle;有机会避免首轮逐业务改写跨账号回调,仍须真实加载/存储失败处理 用户已接受首轮单账号、重启式重登;按此约束收敛完整接入方案
新独立验证入口 改动最少但不是用户选择的真实游戏闭环 不替代目标

单账号限制若采用,必须是代码硬约束:本进程曾发布游戏会话后不再发布第二个账号/epoch,撤销后保持关闭;不能只靠“测试时不换号”。Unity停止Play再进入不必然销毁静态状态,必须明确域重载条件;不能把销毁Root或手动清静态变量冒充彻底重启。用户已确认此产品限制;技术实现仍需纳入完整接入评审。

完整方案必须闭合的三处,合并到一次接入评审

  1. 启动与加载:定位真实Root/配置/PlayFabMgr.Awake顺序,明确在任何PF存档初始化及自动写之前固定后端;将已有31模块Decode/Reset/Replace绑定真实对象,列清配置快照、账号资料与启动后自动副作用。失败不Done、不写默认档,不引入第二套加载器。
  2. 发布与保存:明确同一Context/handle的准备→加载→可写→撤销顺序;原有facade签名尽量保留,错误不得伪装为缺档/成功。Equip实际保存整个NewPlayerDataDic,须验证同一次序列化的关联模块字段及事件副作用。普通同步、暂停、退出复用原Owner,不能出现两个定时器或偷偷改用当前账号。
  3. 真实运行边界:落实已获用户确认的单账号重启式重登;测试账号及数据准备/备份/恢复;菜单可达消费和后台回调是否影响该闭环;精确文件白名单及实测验收。不能通过只写一个key却打开全游戏来掩盖其他保存来源。

待这些点落实后,产出一份合并的最小接入方案与提示词,统一审查原B/C首次范围调整和必要生产改动;不再为每个小接口单独新增阶段。当前候选涉及UserService/KVLoad、既有Context/Coordinator、PlayFabMgr、启动/退出接线和鱼竿装备入口;候选不是修改授权清单。

最小验收结果

  • 真实游戏使用专用账号完成上述装备操作,保留原始游戏界面和业务序列化。
  • 网络证据确认本账号KV加载与Set,存档路径无PF回退/双写;Accepted和远端Confirmed分别记录。
  • 完成Flush后重启,使用新的隔离缓存根读取服务器并恢复装备值;不以同一内存或旧缓存充当重登证据。
  • Get/解析/存储/发送失败明确停止该流程;没有空档覆盖、跨账号写或错误成功提示。
  • 只运行针对接线变更的必要回归;不因文档更新重跑已通过的全套验证。

正式地址固定http://s101.local:18080/;Unity CLI Loop、不用UnitySkills、暂不打包。进入PlayMode和真实业务写应在接入方案审查及测试数据边界明确后执行;本轮只读核查,没有启动游戏或访问正式服务。

设计检查点1:用户确认限制与启动接线事实

用户已接受单账号运行、重启游戏后重登恢复,游戏内重登/换号留后续。无需重复索取该偏好。

进一步核查:SubBoostrap.RegisterServices在第88行AddComponent,会立刻Awake并开启旧40秒循环;RootCtx已注册IConfig,Boostrap在资源加载后调用RegisterServices再调用AfterAssetUpdate。必须在AddComponent之前锁定本次模式,不能等LoginCore后再阻止旧存档初始化。LoginStage随后注册真实IUserService/业务对象;PFLoginAct或AggLoginAct完成后转入FishingStage,FishingStage.InitData还会调用多模块Init并发布登录事件,这些可能触发普通保存,不能只测装备按钮。

发现可缩小的路线:正常UserService已拥有apiSession,CustomServerMgr已用UseAccountSession绑定同Cookie。可优先评估让该服务直接持有已验收的4A Bridge,复用4B2 Schema/Transaction,避免为了接真实网络去改造B2仅验证用的Capability/Context/Coordinator。该复用需明确构造准备结果所依据的真实认证与快照事实、31模块真实对象绑定、发布顺序和退出先排水后Dispose;不是伪造Prepared结果或新增第二个认证会话。此路线可减少对已关闭底层的改动,但尚未完成方法级设计与评审。

现有Logout会直接Dispose apiSession,401还可能自动LoginApiServer;最小模式须在这两处先撤销普通入口、禁自动重认证,待Bridge.Close后再销毁会话。仅有单账号限制不足以豁免同账号重认证或关闭时序。

后续只围绕上述实际连接点形成完整方案,不先扩展81文件回调改造、身份全迁移或新的通用会话框架。