Files
ft/CodexOutput/upserver/阶段4C2引导准入最小补充方案-待评审-2026-09-24.md

61 lines
6.6 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.
# 阶段4C2引导准入最小补充方案(待完整评审)
2026-09-24。**仅申请调整4C2原方案的引导准入条件。尚未编码、未获批准,不是4C2关闭申请。**原奖励保存合同、旧许可边界、101/102授权和一次真实消费上限全部保持。
## 1. 问题与选择
真实102缺少7组特殊技能引导,原方案“所有相关引导完成”的门会拒绝所有普通捕鱼。七组均为None触发条件,`GuideDataCenter.InspectTriggerGuide`的switch默认continue;它们主要由 `FishingEventData.TargetGuidance`显式触发。不能只凭None就放行:原控制器StartFishSpSkill、ShowSpSkill、ShowFrostSkill、DamageProtectionEnd确实存在显式入口。
| 候选 | 裁量 |
|---|---|
| 继续要求全部11组完成 | 保持最保守,但现有专用档无法进入真实验收;不通过改测试档完成引导 |
| 放开所有未完成引导并依靠事后停机 | 不接受;可能先推进引导或写档,扩大副作用范围 |
| **仅无特殊技能的原生普通鱼,精确排除不可触达的7组** | 推荐;改Editor测试准入,保持自然选鱼、战斗及引导原行为,不改生产引导模块 |
不改鱼概率,不强制鱼ID,不重抽。自然抽到不满足条件的鱼就在消费前停止;不能付费失败后再跑第二次。Map102配置中存在满足条件的普通鱼(例如10211的FishSKillList为空、FishEscape.SpSkillID=-1),这只是静态可行性证据,实际每次仍检查当前运行对象。
## 2. 精确准入合同
在原PrepareFishingReward扣费前门内,以及原CheckRewardContext的S1/S2/S3检查点,追加/调整以下规则:
1. 保留普通SubType1、非免费/重试/固定鱼/对战/礼包/活动游戏、已有备份Map键、巡游/额外收集/礼包/挑战/活动稳定性等原门。
2. `curDefine`与`curGroupDefine`必须为空,guidanceGroupDefines完整可读;相关引导配置异常/未知直接拒绝。
3. 相关引导默认仍要求完成。唯一允许未完成的名字固定为:FishSkill01、Pollution01、FishSkill02、FishSkill03、FishSkill04、Egyptian01、EasterFish01。每组运行时必须仍是None触发、首节点是FishingPanel_Advanced,且整个相关组配置与本次冻结的GuidanceConfig基线一致。新增组、改名、改触发条件或其他不一致均拒绝;不以“所有None”代替白名单。
4. 使用当前选中的真实 `curFishData`,逐个检查 `FishSKillList`与`FishEscape`:对象/列表必须可读,所有SpSkillID均须≤0,且运行时TbFishSpSkill.GetOrDefault(id)均为空;有任何可解析特殊技能或正ID即拒绝。不忽略暂时不触发的HP/时间条件,不只检查第一个技能。
5. `fishingData.fishSpSkillData`、`superDashSpSkillData`、`dirtyStuckSpSkillData`必须为空。当前控制器从同一curFishData的完整技能与逃跑项生成事件,不额外建立技能框架或改原技能流程。复核者必须确认没有其他路径注入特殊技能/触发上述7组;发现遗漏则退回此方案。
6. 新条件在扣费前执行,现有CheckRewardContext继续核对原鱼/物品/地图/鱼竿/倍率及活动。奖励阶段的Guide通知仍原样发布一次,之后实际活跃引导必须仍为空;不能禁用通知、调用MarkGuideFinished/GMClearGuide或保存新引导记录。
7. 因角色/条件动态变化失败时沿用原Fault/排水合同。已经消耗的费用不回滚、不重试、不补发;段外写/未知结果原规则不变。
配置完整性实现采用窄的固定基线:读取GuidanceConfig原资产hash,并比较当前相关11组的序列化投影(名字、触发条件/参数和完整节点字段)。不改资产;不新增公共配置验证框架。投影与源码字段由评审确认后固化在新增reward文件/固定host中,不能只比较组名而漏掉运行时节点改变。
## 3. 修改边界与顺序
批准后仅调整已新增的 `Client/Assets/Scripts/Services/UserService.KVFishingReward.cs` 的引导/普通鱼预检及 `UserService.KVFishingRewardValidation.cs` 固定测试;如验证需要,原7旧源码白名单的现有门调用处只能补同一检查,不改原引导或技能算法。新增资料只在KVFishingRewardTests。需要新增业务文件、改GuideDataCenter/事件算法、引入新服务器键或启用新活动必须再评审,不能由本补充概括授权。
- R0:受审hash核对,独立结论逐条裁决,明确允许修改的两个新文件;裁决前当前严格门保持。
- R1:保留当前真实102被拒绝证据;先测试新边界,再实现局部预检。
- R2:补齐原C1/C2未完成验证、当前奖励host及实际入口回归、Editor/SERVICE_HOST编译;默认非Editor历史错误仍单列。
- R3:更新真实运行允许字段矩阵、新只读备份、当前Tables/guide/活动/服务时间预检及CLI脚本,全部满足后才创建v3许可。
- R4:按原C3执行一次新真实UI消费/收鱼/确认后展示/正常Quit/新进程恢复;最终独立实施复核才关闭4C2。
每个检查点更新开发日志、入口、状态、TODO;不创建自动付费循环。
## 4. 必测与否决条件
| 项 | 必须满足 |
|---|---|
| 七组当前缺失+普通无技能鱼 | 预检可过,GuideSaveDataDic/服务器GuideSaveDataNew不变,无引导推进 |
| 四个普通组任一未完成 | 扣费前拒绝 |
| 未知相关组、None改其他类型、节点/触发参数漂移 | 拒绝;不能靠磁盘资产hash掩盖运行时对象变化 |
| 任一普通技能项、最后一项或FishEscape带正SpSkillID/可解析技能 | 拒绝,原消费入口未被调用 |
| 当前三类特殊技能对象任一非空 | 拒绝 |
| S1后、S2后、S3前活跃引导或技能状态变化 | 原动作失败,无第二次费用/奖励,不掩盖已经发生的部分写 |
| 正常原Guide事件 | 发布一次、实际开启/推进零次;不新建Guide键、不改原引导档 |
| 原奖励合同回归 | 鱼数量一次倍率、金币/次数原公式、最终main/Map/任务原票据;Pending无结果、Confirmed一次显示,取消与故障无重放 |
必须保留中间报告列出的未覆盖项和StorageError未定根因。若独立复核认为无法在此白名单证明7组不可触达,退回并保持待运行;不能选择“先跑一下看会不会触发”代替批准。
## 5. 评审材料
原方案及审查/裁决、`阶段4C2实施进展与准入阻塞-2026-09-24.md`、`KVFishingRewardTests/offline-guide-gate-final.json`、`guide-details.json`、真实备份及固定host拒绝证据。当前源码/资料基线冻结于 `KVFishingRewardTests/guide-supplement-review-hashes.json`;当前严格门仍应存在,不能把新方案当成已实施结果。