Files
AIGame/Doc/Design/G0_Implementation.md
T

368 lines
57 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.
# G0 玩法原型实现记录
更新日期:2026-10-20。对应 [GameDesign.md](../../GameDesign.md) 的 G0 阶段,用于验证核心循环与操作手感,不等同于完整 P0 或正式服经济系统。
## 已实现
- 营地入口接入弹珠台、伙伴、教学布阵和战斗,首页资源、等级和教学目标读取当前原型存档。
- 一张可瞄准台面,范围为 -35°~35°,按钮每次调整 5°;固定步长碰撞、墙面反弹、圆形弹片偏转,落入五个奖励区后结算。零度垂直命中不会停留在弹片顶部。
- 首次发射获得捕捉券,此后每十次发射再获一张。原型池先补齐未拥有伙伴,全部获得后按固定轮转转换为碎片;正式 P0 概率池另行接入。
- 岩团团、火喵、芽芽三只伙伴,分别提供守护、输出和支援能力。初始拥有前两只,第三只通过首次捕捉获得。
- 共享训练,消费 `30×当前等级` 糖果,最高 Lv.20;T2 进化逻辑需要 Lv.5、对应碎片 40 与金币 500,并提升属性和战斗体型。
- 点击选择伙伴、点击槽位部署;占用槽位会交换,物种不能重复上阵。教学关只开放中央路线前后两个站位,另两条路线显示锁定。
- 一场真实运行的 3D 教学防守:九只敌人、三波、最后一只为首领;固定逻辑步长、伙伴攻击/治疗、敌人阻挡与突破、耐久、胜负、暂停、二倍速和主动放弃。
- 首通发金币 80、糖果 40、弹珠 3;重复挑战不再发首通奖。首次通关后有一次教学目标奖励弹珠 5。
- 弹珠每十分钟自然恢复一枚,上限 30;满额期间不累计恢复,重新降到上限下方时重新计时。
## 存档边界
G0 使用 `PlayerPrefs` 的独立账号命名空间 `AIGame.G0.v1.{pid}`,不写入现有 AIServer 的真实经济数据。登录完成、取得玩家 ID 后才绑定存档,不同 ID 分开保存。
每次变更先复制完整状态,写入双槽快照后再公布内存状态;快照记录修订号和完整性校验。读取较新的有效槽,最新槽损坏时回退另一个有效槽。未完成发射记录保存输入与唯一 ID,重启后完成同一结算,不再次扣弹珠。首通与教学目标状态持久化,重复点击不能重复发奖。
以上是 G0 历史实现边界。2026-10-16 起运行流程改用下文 G1 服务端存档;本地类只供原型规则回归,不将本地余额直接迁入联网钱包。
## 文件与资源
| 文件 | 用途 |
| --- | --- |
| `AIClient/Assets/HotUpdate/Scripts/Gameplay/PrototypeGame.cs` | 原型状态、快照存储、经济与伙伴操作、弹珠轨迹 |
| `AIClient/Assets/HotUpdate/Scripts/Gameplay/PrototypeBattle.cs` | 教学战斗模拟,与表现分离 |
| `AIClient/Assets/HotUpdate/Scripts/Gameplay/PrototypeFlow.cs` | 页面加载、输入绑定、轨迹与 3D 战场表现 |
| `Tools/generate_prototype_ui.py` | 生成四个 UI JSON,运行时不创建业务骨架 |
| `AIClient/AgentScripts/BuildPrototype.cs` | 通过 Pipeline 制作 Arena、伙伴肖像、Prefab 和资源收集规则 |
| `AIClient/AgentScripts/VerifyPrototype.cs` | G0 规则与 Prefab 回归;联网实际点击验证已迁至 `VerifyG1.cs` |
四个页面为 `UI_PrototypePinball`、`UI_PrototypePets`、`UI_PrototypeFormation`、`UI_PrototypeBattle`,位于 `Doc/UIPrefabCreater/` 与对应 UI Prefab 目录。战斗结果面板是战斗 JSON 的持久化子节点。
`Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` 包含战场、三只伙伴简模、九个敌人池、攻击弹体池、独立相机与灯光,所有业务场景对象由编辑器预制后实例化。相机只绘制第 30 层,退出战斗关闭,不改写原主相机设置。角色局部 -Z 为正面,战斗中按敌人方向旋转。
伙伴使用 Unity 原始几何体的原型模型,供后续正式美术替换。肖像由同一模型在 Unity 隔离场景渲染,不引用外部生成服务。资源登记见 `Doc/ResDesc_Model.md`、`Doc/ResDesc_Picture.md` 与 `Doc/ResDesc_Effect.md`。
## 运行与重建
打开现有 Boot 场景进入 Play。保持现有本地 AIServer 配置;登录后点击“弹珠”发射,获得足够糖果后进入“伙伴”训练,在“冒险”进行布阵与防守。其余尚未接入的入口仍保留建设中提示,不表示完整 P0 已实现。
```powershell
python Tools/generate_prototype_ui.py
python Tools/generate_home_ui.py
unity command --project-path D:/UD/AI/AIGame/AIClient set_autotick --enable true
unity command --project-path D:/UD/AI/AIGame/AIClient recompile
# 轮询 recompile_status 到 completed/up_to_date,再继续。
unity command --project-path D:/UD/AI/AIGame/AIClient recompile_status
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildPrototype.cs --entry BuildPrototype.Build
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/VerifyPrototype.cs --entry VerifyPrototype.Domain
```
UI 仍使用 Common 九宫格、TMP 字体和 Candy 主题。Art/UI 收集四个新页面;Art/GameplayPrototype 收集 Arena,材质和肖像随依赖进入资源包。没有手工修改 Prefab、Material 或 `.meta`;未构建 Player 或上传 CDN。
## 验证范围与后续
规则验证覆盖瞄准确定性、全部 71 个整数角度落入奖励区、自然恢复时机和上限、双槽恢复、写入失败、待结算发射恢复、防重复奖励、捕捉转换、训练进化、阵容交换和战斗胜负。实际点击测试使用独立的临时玩家 ID,结束后还原真实账号并删除临时测试键,不改变真实原型进度。
最终运行截图位于 `AIClient/Assets/Screenshots/g0_*.png`。伙伴和敌人目前是简模,攻击表现为预制弹体、缩放和位移反馈;未制作正式 Animator、攻击动画和音频。
2026-10-15 验证结果:Unity 编译完成;上述规则与 Prefab 字体/九宫格检查通过。实际 EventSystem 点击走通弹珠、捕捉、共享训练、阵容交换、推荐布阵、暂停/二倍速、三波防守、精确首通发奖及一次目标领奖;已检查四页与结算截图。测试临时存档已清理,真实原型账号快照保持一致;已退出 Play,恢复原 Game View,Boot 场景无未保存修改,最终一轮无新增 Console 错误。尚未进行微信真机验证、Player 构建或资源发布。
P0 还需补足配置表、存档版本迁移、伙伴与关卡内容、完整概率池、元素/技能规则、拖拽布阵、营地建筑、日常支撑页面与真机性能验证。当前教学关的中性敌人使用简化基础伤害,不声明已完成完整的五元素克制和技能体系。
## G1 本地服务端接入(2026-10-16)
现有 Candy JSON→Prefab 页面直接接入 `PrototypeApi`。登录后读取服务端账户,实时玩法不再写 G0 PlayerPrefs,也不使用客户端时钟发放自然恢复。原型余额不迁入联网钱包;旧 G0 双槽数据仍保留。
`AIServer/src/game.cpp` 在 SQLite 单一事务中保存玩家快照和按玩家唯一的请求日志;共享连接的鉴权读写也纳入互斥。服务端处理弹珠扣费/轨迹/券、捕捉新旧伙伴、训练、进化、阵容、教学战斗开始/结算/放弃、首通和目标领取。业务拒绝持久化,修订号防止另一设备使用旧余额继续操作,原请求重放返回当前快照与原操作结果。数据库写入失败不改变任何余额或活动状态。
弹珠轨迹、落点和奖励全部由服务端返回。教学战斗开始时冻结成长和阵容、计算结果,完成时只根据该结果发奖;客户端只负责表现,不能提交胜利或奖励数值。结算须达到服务端最短播放时间。重新进入会恢复同一次弹珠或挑战;暂停和恢复不会重复创建活动。
客户端按端点和玩家保存一个未确认请求,收到完整有效响应才清理。网络失败时提供重试并锁定新业务操作,401 自动重新登录同一游客再提交原请求。未完成弹珠会继续播放并结算;未完成教学战斗可从冻结快照重新播放。不是完整逐帧反作弊协议,战中输入玩法需要另行扩展。
验证已通过:原生事务测试(鉴权、拒绝重放、16并发重试、存储故障回滚、71个方向、成长、胜负、持久化);HTTP边界测试(账户隔离、24并发重试、进程重启、一次结算、维护);Unity 编译和 G0 规则/字体/九宫格回归;独立服务/账户上的 EventSystem 实际点击(弹珠→捕捉→训练→换阵→暂停/2倍速→教学胜利、准确80金币/40糖果/3弹珠);目标领奖、丢失确认重试、飞行中重进、401/空会话续期及过期修订号下放弃战斗重试不发奖。
本轮只更新代码、协议与测试,没有生成新的美术或修改页面骨架;继续复用已登记的 G0 资源。开发服务 `127.0.0.1:8080` 已更新,保留原用户数据库。未部署生产服、构建 Player、上传 CDN 或进行微信真机验证。正式 P0 尚需配置表提取、迁移策略、全量内容与概率池;现有固定教学池不能当作正式抽取系统。
收尾:独立测试服务已关闭,真实开发账户恢复且余额/进度未受测试影响;已退出 Play 并恢复验证前 Game View。最终 Console 游标365,本轮349之后无新增错误。
## G2 首章前五关与统一配置(2026-10-16)
本轮交付选关、关卡准备、逐关解锁和独立首通奖励。营地主界面“冒险”进入五关列表,可重试已通过关卡;通关结算提供下一关入口。关卡界面显示敌人元素、类型、建议训练等级、战术提示、首通奖励与已领取状态;建议等级不是进入门槛。
| 关卡 | 内容 | 建议训练 | 首通:金币 / 糖果 / 弹珠 |
| --- | --- | --- | --- |
| 1-1 营地初守 | 保留原教学规则,中性敌人 | Lv.1 | 80 / 40 / 3 |
| 1-2 草丛来客 | 草元素,火喵有克制优势,加入队长 | Lv.2 | 90 / 50 / 3 |
| 1-3 疾风小径 | 火元素,加入疾跑怪 | Lv.3 | 100 / 60 / 3 |
| 1-4 岩壳阵线 | 岩元素,加入有防御的硬壳怪 | Lv.4 | 110 / 70 / 3 |
| 1-5 溪口大角王 | 水元素,混合敌人与强化首领 | Lv.5 | 200 / 100 / 5 |
唯一配置源是 `Config/Gameplay/greenfield.json`。服务端CMake将JSON与内容哈希嵌入程序,客户端从响应取得同一份配置;训练/进化、伙伴生命/攻击/射程/治疗、敌人属性、元素环、关卡波次与奖励由此读取。弹珠奖励与主要物理系数也来自配置,台面几何及固定模拟步长仍是当前引擎约定,改变几何须同步调整JSON→Prefab生成器。
新战斗冻结完整配置、关卡和阵容,重新进入仍播放同一份配置。第二关起启用 `max(1,floor(攻击×元素系数−防御))`,伤害包含火→草→岩→电→水→火的单向克制;治疗不参与元素乘算。第一关继续使用原G1基础伤害,以兼容已开始的教学战斗。敌人暂复用已有简模,用移动速度、耐久、伤害、防御及队长/首领体型区分,不是五套正式美术。
服务端存档schema升级为2,新增选中关卡和五个首通标志。旧schema=1余额、目标、已有伙伴和阵容不变;旧首通只对应1-1,不补发奖励。旧未完成弹珠沿用保存轨迹,旧未完成挑战沿用原奖励和legacy表现;未知未来schema拒绝处理,不清空账户。新增关卡数据与迁移在同一事务落盘。
界面全部通过 `Tools/generate_prototype_ui.py` 生成JSON,再由 Pipeline 执行 `BuildProgression.Build` 生成五个Prefab;无运行时业务骨架。选关页、布阵提示、伙伴技能说明、弹珠双资源落区和结算按钮沿用Candy。新资源登记在 `ResDesc_Picture.md` 与 `ResDesc_Config.md`。
验证:服务端1011项断言通过,覆盖五关按推荐等级可通关、越关拒绝、逐关首通、重复挑战不发奖、进程重连与两类G1迁移;66组C++与Unity模拟对照全部一致(55次胜利、11次失败,含旧待结算战斗);五个Prefab的字体/九宫格检查通过。独立服务/账户实际点击走通锁定关卡列表、训练与换阵、首关通关/重试、下一关、回到关卡列表及第二关草元素战斗;1-2准确发90金币/50糖果/3弹珠并解锁1-3。schema=2下丢失确认/飞行中重进、401/空会话及放弃战斗的过期修订号重试回归也通过。已检查八张截图,位于 `Assets/Screenshots/progression_*.png`。
配置重建与对照检查:
```powershell
cmake --build AIServer/build-g1 --config Release
AIServer/build-g1/Release/game_tests.exe D:/UD/AI/AIGame/Tools/output/progression_parity.json
python Tools/generate_prototype_ui.py
unity command --project-path D:/UD/AI/AIGame/AIClient recompile
# 轮询 recompile_status 完成后继续;Edit Mode中生成Prefab。
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildProgression.cs --entry BuildProgression.Build
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/VerifyProgression.cs --entry VerifyProgression.Domain
```
当前仍只开放单路线前后两槽、三只伙伴、固定教学捕捉池,属于G2内容的第一批。P0余下的15关、更多伙伴及正式捕捉池、多路线、T2技能强化、营地建筑、任务与设备性能验证尚未完成。未构建Player或部署生产服。
本轮收尾:已恢复真实开发账户,未向其发送测试玩法操作;独立18081测试服务已关闭,开发8080服务保持健康。Unity已退出Play、恢复原Game View,Boot场景无未保存修改;Console游标403,本轮365之后无新增错误。
## G2 五伙伴与首章捕捉池(2026-10-16)
现行实现覆盖岩团团、火喵、芽芽、电系闪闪雀、水系泡泡龟。后两者的几何简模、材质、透明肖像和Arena绑定已通过Pipeline制作,替代原先仅三只伙伴的容量;仍属于原型美术。伙伴列表、布阵页更新为五只,新捕捉页通过JSON→Prefab制作,沿用Candy,未恢复Studio/Mint。
首章普通池五种等权20%,首次教学固定芽芽并独立计数。普通捕捉连续4次重复后下一次保证未收集伙伴,获得新伙伴清零;集齐后暂停保底,重复转20对应碎片。页面同时展示基础概率和本次条件概率、保底进度、券数量与最近结果。服务端选择随机结果,不接受客户端物种/种子;扣券、次数、保底、结果与碎片同事务落盘。同一请求重试只返回原回执;客户端丢失确认后恢复原结果弹窗,不再次抽取。
schema升级为3,`stages/shards`扩展为5项,新增教学完成、普通捕捉次数和连续重复计数。schema1/2余额、前三伙伴进化/碎片、阵容、目标、关卡进度与待完成活动保留;已拥有芽芽则不重发教学,新增两只初始未拥有。旧G2三伙伴挑战继续按保存的三伙伴配置模拟与发奖,不混用新配置;旧G1 legacy路径继续保留。
验证:服务端1284项断言通过,包含各概率桶、保底边界、全部集齐、教学独立、重复20碎片、16并发同请求、日志写入故障回滚、持久回执、G1/G2迁移及冻结旧配置。97组C++/Unity战斗对照一致(86胜/11负),覆盖新水/电队伍和旧待完成挑战;六个玩法Prefab的字体、九宫格与五伙伴资产绑定检查通过;原G0规则兼容回归通过。HTTP隔离、24并发重试、重启与维护检查通过。
实际EventSystem点击在独立18081测试账号上通过:教学捕捉→五卡列表→训练/换阵→首战;四次重复边界展示缺失泡泡龟100%→单券保底→集齐暂停→随机重复20碎片;闪闪雀后排/泡泡龟前排通过1-2,持久首通回执与钱包准确增加90金币/50糖果/3弹珠;丢失捕捉确认后重放原请求,券/次数/碎片仅变一次且原结果弹窗可恢复。截图与资源已按类型登记。
复验入口:`VerifyCollection.Assets`、`VerifyCollection.PityAndBattle`、战斗结束后的`FinishBattle`、`LostAcknowledgement`、`SettledBattle`、`FreshTutorial`;确定性保底夹具`Tools/seed_collection_test.py`只允许修改`Tools/output/g1-live`内的隔离数据库和`g1live_`账号。新账号首次捕捉页已经复验:教学芽芽100%、普通次数0、无伪造的最近结果。
本轮完成首章五伙伴池。P0目标中另五种伙伴、其余15关、多路线/T2技能强化、营地建筑、任务、经济曲线与设备验证仍未完成;未构建Player或部署生产服。
收尾:真实开发账号已恢复,金币/糖果/发射数/等级快照检查不变;独立18081测试进程已按路径/端口核验并关闭,8080开发服务健康。Unity编译完成并退出Play,已恢复原Game View,Boot场景无未保存修改;Console游标444,本轮403之后无新增错误。
## G2 营地设施与固定装饰槽位(2026-10-16)
首页底部“营地”接通营地生活面板。主营帐复用探险家档案;完成首次发射开放训练屋(复用共享训练/进化);通过1-1开放弹珠树展示/入口,通过1-3开放休息区,通过1-5开放建造台。锁定设施显示条件并禁用操作。弹珠树读取原钱包与恢复锚点,倒计时基于服务端时间加单调时间推算,余额只由服务端确认;没有额外生产、领取或产量升级。
休息区显示五伙伴收藏,选择已拥有伙伴后可打招呼,服务端保存休息伙伴和累计互动次数,重复请求不重复计数;客户端驱动已制肖像节点缩放反馈,不额外发金币/糖果/弹珠/券,没有新AnimationClip。
建造台提供三处固定装饰位置,每种最多拥有一件。小旗/盆栽/路灯测试价120/180/240金币,配置来自`greenfield.json.camp`。先选装饰和位置显示半透明预览与明确费用;撤回、离开页面不提交扣费。点击“确认购买”才提交服务端事务;已有装饰免费放置/移动,移动清空旧位置,占用位置需先收回,收回保留库存且无退款。该看板是当前营地布局表现,首页背景中的房屋尚不可点击,未制作3D营地行走或自由摆放。
服务端新增`camp.place/store/interact`,沿用身份、修订号、在途活动互斥和SQLite操作日志;购买的钱包、库存、布局与回执同事务落盘。丢失响应时重试同一请求,原费用/位置回执可恢复并展示,不二次扣款。schema1/2经现有迁移后继续升级,schema3→4只初始化空装饰拥有/布局与休息字段,保留钱包、伙伴、捕捉保底、关卡、回执及在途活动,不补发资源。客户端继续支持旧冻结战斗配置没有camp字段。
资产:`BuildCampAssets.cs`经Pipeline制作三件原创几何简模与透明肖像;`generate_prototype_ui.py`生成营地46节点和建造台50节点JSON,由项目转换器制作Prefab。控件沿用有效九宫格/TMP,原五伙伴与Home图标复用,资源已登记至Model/Picture/Config描述文件。`BuildProgression.Build`现生成八个玩法Prefab。
验证:1375项服务端断言通过,新增锁定、参数/类型、服务器价格、占位拒绝、免费移动/仓库、余额不足、旧修订号、在途互斥、互动无奖励、16并发重试、日志故障全事务回滚、重开连接和schema3迁移;HTTP鉴权、隔离、24并发重试、进程重启和维护检查通过。97组C++/Unity战斗对照保持86胜/11负,八个Prefab字体/九宫格与营地资产绑定检查通过。
独立18081服务/账号的真实点击通过:首页入口/主营帐/锁定状态、首次发射开启训练屋、1-3伙伴打招呼且四类资源不变、弹珠树读取同一库存、1-5建造台、预览撤回不扣费、购买小旗120仅一次、移动/收回/仓库免费、占位禁止确认、丢失盆栽购买确认后原请求重放只扣180、重新绑定会话保留布局/休息伙伴、金币239时禁止购买240的路灯且可撤回。已检查锁定、休息、预览、仓库、恢复等画面并微调文字留白。
复验:`VerifyCamp.Assets/Start/Rest/BuildFlow/ReviewPreview/Insufficient`,配合`Tools/seed_camp_test.py rest|build|poor`。夹具只接受`Tools/output/g1-live`内数据库和`g1live_camp_`账号;不会修改真实进度。开发服务8080已更新并保留原数据库,更新前备份在`Tools/output/camp-before.db`。未构建Player或发布生产服/CDN。
这批完成营地设施与装饰第一版;完整20关/10伙伴、多路线、T2技能强化、营地行走/自由摆放、任务签到、经济曲线与设备验证仍未完成。
收尾:原首页115项资源/事件/点击/重连绑定检查及G0领域兼容回归通过;首页仍发`MainHUD.Home`,由`GameplayBootstrap`路由到营地,实际进出点击复验通过。开发账号已恢复,金币/糖果/发射数/等级快照检查不变;隔离18081服务已核验并关闭,8080开发服健康。Unity编译完成、退出Play、恢复原Game View,Boot场景无未保存修改;Console游标529,本轮444之后无新增错误。
## G2 每日任务与七日累计登录(2026-10-16)
首页任务入口打开任务/目标页,签到入口打开七日页。任务页保留长期教学首通目标,并增加每日三项:结算3次弹珠、正常结束1场冒险、与伙伴打招呼1次,各发5弹珠。进度来自服务端已提交的`shot.finish/battle.finish/camp.interact`,封顶3/1/1;主动离开、活动开始、页面打开、客户端自报与请求重放不计入,正常失败的冒险也可完成任务。互动仍需先通过1-3;玩家可用“前往完成”进入对应玩法。
日界为服务器UTC+8零点,首次进入新日的存档事务重置每日进度/领取标志,未领每日奖励过期。跨日弹珠/冒险按结算日计数;日任务领取携带原日键,旧日的新提交不能误领新日任务,原先已成功的领取请求跨日重放则返回原奖励回执。时钟回退不回滚已记录日键、不重复累计登录。
累计登录按不同访问日增加1,跳过多天也只增加1,上限7,非连续登录;配置奖励为弹珠10/5/5/10/5/10/20。已解锁未领的项保留,允许任意顺序领取;无付费补签、漏登重置或七日循环。所有领取与钱包、领取标志、操作日志同事务落盘,写入失败整体回滚;丢失确认后同请求重放只发一次,并在客户端恢复“奖励已领取”弹窗。弹珠奖励可超过30,原自然恢复上限与暂停规则不变。
实时存档schema5新增日键/三项进度与领取、累计登录天数/七项领取。schema4迁移保留钱包、教学/关卡、捕捉、营地、回执和在途活动;不追溯旧累计发射/互动作为今日进度,不自动发签到奖励,当次访问只登记第一个累计登录日。schema1~3继续链式迁移;冻结旧战斗不要求daily字段。配置源仍为`greenfield.json`,新增`daily`由CMake嵌入并生成版本哈希。
UI通过`generate_prototype_ui.py`生成40节点任务页、54节点签到页,`generate_home_ui.py`增加首页任务红点;Pipeline执行`BuildDaily.Build`调用JSON转换器生成三份Prefab,沿用Candy、Common有效九宫格、Home弹珠图标和TMP。没有新增美术贴图/模型/音效。红点只在教学/每日目标或签到奖励可领时显示,领取后清除,首页事件与重连契约保留。
验证:1493项原生断言通过,覆盖事件来源、跨零点、过期领取、旧回执重放、时钟回退、漏登、七日封顶/结束、16并发任务和签到重试、日志故障回滚、持久存档及schema4迁移/在途弹珠。HTTP鉴权/账户隔离/24并发重试/进程重启/维护回归通过;97组双端战斗对照仍为86胜/11负,十个玩法Prefab字体/九宫格与115项首页检查通过,G0领域规则兼容通过。
独立18081服务与`g1live_daily_`账号实际点击通过:首日签到+10一次且未来项锁定、同日重进不增登录天数、三次真实发射推进任务并+5一次、真实教学胜利准确80金币/40糖果/3弹珠并推进冒险任务、教学目标+5与每日冒险+5分开领取、真实休息互动无直接资源但任务+5、三项全部领取后红点清除。累计3日/7日的UI夹具验证未领奖励保留、未来项锁定、七日完成和不循环;丢失签到确认后原请求只发5一次、展示回执并清理队列,会话重进保留标志。schema5下丢失弹珠确认/飞行中重进及401/空会话续期回归也通过。跨日与七日累计规则由原生受控时间测试覆盖,未修改系统时钟。
复验入口:`VerifyDaily.Start/Finish/RestAndClaim/EarnedSignin/Completed/FinalViews`,配合`Tools/seed_daily_test.py rest|signin3|complete`。夹具只允许修改`Tools/output/g1-live`内数据库与`g1live_daily_`账号,真实账号不参与奖励测试。资源已按Picture/Config登记;8080开发服已更新,更新前数据库备份为`Tools/output/daily-before.db`。未构建Player、上传CDN或部署生产服。
这批完成三个每日目标与七日登录第一版。更多主线任务/成就、免费补给商店、背包/宝箱/邮件、完整20关/10伙伴、多路线/T2技能、自由营地与设备性能验证仍未完成。
收尾:真实开发账号已恢复,金币/糖果/发射数/等级快照检查不变,未向其发送测试领奖操作;独立18081服务已按路径/端口/数据库参数核验并关闭,8080开发服健康。Unity编译完成、退出Play并恢复原Game View,Boot场景无未保存修改;Console游标569,本轮529之后无新增错误。
## G2 背包与补给商店(2026-10-16)
首页背包接通四分类:消耗品显示捕捉券数量、来源与永久有效说明,可前往捕捉/弹珠台;伙伴材料显示五种碎片及进化条件,点击定位对应伙伴;装饰显示拥有数量、仓库/放置位置与布置入口;活动道具暂无内容,提供空状态。金币/糖果/弹珠只显示原钱包,捕捉券/碎片/装饰直接读取原字段,不维护另一份库存。
商店分免费补给、金币商品与营地装饰。初始每日免费5弹珠;通过1-1可用100金币购买20糖果,每日3次;通过1-3可用300金币购买1捕捉券,每日1次。金币商品先显示获得内容、费用、购买后余额和当日剩余,确认才提交;取消不扣费。商品到账直接供现有训练/捕捉使用。装饰页与背包共用原建造台,预选同一物种后选择位置,已拥有装饰放置/移动免费。
配置源新增`shop.goods`,服务端`shop.buy`校验日键、关卡、余额、限购,以配置价格发确定奖励,不接受客户端奖励/价格/解锁。schema5→6只初始化三项`shopBought`,保留钱包、任务/签到、营地、伙伴、回执和在途活动;日切与任务共用UTC+8日键,未用次数不累计。扣费、到账、次数和请求日志同事务;失败回滚,跨日原请求重放只恢复原回执、不消耗新日库存。免费补给允许弹珠超过自然恢复上限,原自然恢复规则不改。旧冻结战斗可没有shop配置。
两页由`generate_prototype_ui.py`生成85/61节点JSON,Pipeline执行`BuildInventory.Build`经项目转换器生成Prefab,沿用Candy、Common有效九宫格、Home图标和原伙伴/装饰肖像。无新增美术贴图/模型/音效。`BuildProgression`现包含十二页;首页骨架与事件契约不变,旧首页实际点击检查更新为验证已接通页面及剩余支撑弹窗。
验证:1620项原生断言通过,覆盖免费/价格/解锁/限购、伪造输入、16并发付费和免费重试、库存与钱包回滚、余额不足、旧修订号、在途互斥、跨日旧请求重放、时钟回退、持久化与schema5迁移。新增旧schema5冻结战斗不含shop的对照,98组C++/Unity结果一致(87胜/11负);十二页字体/九宫格与115项首页检查通过,HTTP鉴权/账户隔离/24并发/进程重启/维护及G0领域兼容回归通过。
独立`g1live_inventory_`账号实际点击通过:四类背包/空状态/来源入口,锁定金币商品,每日免费+5一次并在重进后保留次数;确认/取消不提前扣款,购买糖果三次正确售罄,丢失糖果确认后原请求只扣100并发20一次;捕捉券到账后真实消耗捕捉,糖果真实用于训练,背包同步减少;材料入口定位伙伴,装饰入口预选模型,免费放置后背包显示位置;金币99时有库存但禁止100金币购买,受控日界夹具刷新后可重新领取5弹珠。首页八个入口与营地通过实际EventSystem点击;schema6下教学领奖、丢失弹珠确认/飞行中重进及401/空会话续期回归通过。测试脚本切分类后等待渲染帧再点击;跨日规则由原生受控时间覆盖,未改系统时钟。
复验入口:`VerifyInventory.Start/Purchases/Decorations/Insufficient/Refreshed`,配合`Tools/seed_inventory_test.py coins|decor|poor|reset`。夹具仅允许`Tools/output/g1-live`内数据库和`g1live_inventory_`账号,不修改真实数据。资源已登记至Picture/Config;8080开发服务已更新,更新前备份为`Tools/output/inventory-before.db`。未构建Player或发布生产服/CDN。
本批是现有库存与补给商店第一版;通用物品表、批量/堆叠溢出、宝箱/邮件、更多任务/成就、完整20关/10伙伴、多路线/T2技能、自由营地及设备验证仍未完成。
收尾:真实开发账号已恢复,金币/糖果/发射数/等级快照检查不变,未向其发送测试购买或免费领取;隔离18081测试服务已核验并关闭,8080开发服健康。Unity编译完成、退出Play并恢复原Game View,Boot场景无未保存修改;Console游标605,本轮569之后无新增错误。
## G2 小镇邮件与版本一致性(2026-10-18)
检查时服务端已有未完成的schema7邮件迁移/领取代码,但canonical配置缺mail、客户端只接受schema6,重新构建后原生测试在首次读取失败。本轮补齐配置校验与端到端业务,没有重置钱包或回退存档。当前服务器为schema7;客户端接受schema6/7滚动更新,schema6的邮件入口显示稍后重进。Unity的JsonUtility会为缺失的新嵌套字段创建空对象,已专项兼容旧服务和冻结战斗配置;schema7实时配置仍必须包含完整mail。
首页邮件入口打开Candy邮件面板:每页五封,显示未读/已读、附件待领/已领、到期和无附件通知;正文支持滑动,单封或一键最多20封领取。首页红点仅显示有效未读信或有效未领附件;打开邮箱不自动领,选择邮件才标已读。倒计时用服务端时间加单调时钟,过期附件禁领,保留已读/已领/到期记录。
`greenfield.json.mail`定义7天有效的欢迎补给(糖果20、弹珠5)和无附件营地通知。schema6→7只保存这两封记录,不自动发资源;已有钱包、伙伴、关卡、捕捉、营地、日常、购买次数、旧回执与在途活动保留。旧冻结战斗缺mail时继续按保存配置结算。schema7后不会重复创建初始信;当前不含运营投递、群发和删除邮件接口,修改initial不会自动给旧schema7账号追加信件。
`mail.read/claim/claimAll`沿用鉴权、revision、在途活动互斥及SQLite操作日志。单封附件、钱包与已读/已领标志原子提交;批量逐封返回成功/已领/过期/无附件/不存在,坏项不阻塞其他有效附件,重复ID/错误类型/超20封则整单拒绝。存储失败全部回滚,同请求重试/进程重启/跨日/过期后重放恢复原回执,不再次发奖。客户端保留未确认请求,匹配完整有效邮件回执后清理,并恢复领取结果弹窗;缺失JSON奖励、错误回执ID等不确认。
资源:`generate_prototype_ui.mail()`生成42节点JSON,Pipeline执行`BuildMail.Build`通过现有转换器生成`UI_PrototypeMail.prefab`,复用Common九宫格与TMP,无新增外部贴图/模型/动画/音频。`BuildProgression`与双端对照资产检查现包含13页。邮件JSON/Prefab、11张隔离实测截图及配置已分别登记Picture/Config描述文件。
验证:原生1717项断言通过,新增首次建信不发钱包、已读不发奖、单封/批量防重复、16并发、错误/混合批量、到期边界与时钟回退、单封/批量日志故障回滚、连接重开、schema6迁移和旧冻结战斗;99组C++/Unity战斗对照一致(88胜/11负);13页字体/九宫格检查和G0领域兼容回归通过。HTTP用独立进程/数据库验证24并发弹珠与邮件重试、账户隔离、进程重启回执、真实已读/领取与维护。
独立18081服务/`g1live_mail_`账号实际EventSystem点击通过:未读红点→读信不发奖→精确糖果20/弹珠5一次→通知无附件→红点清除→会话重进不重复;8封混合状态分页、过期禁领、长正文滚动;三封批量准确金币7/糖果20/弹珠3/券1;丢失确认后重放原请求只发5弹珠,已读/已领/列表文案同步、恢复结果弹窗并清理队列;空邮箱禁用领取。已检查详情、批量结果、到期、长文底部、重放和空状态画面。
复验:`VerifyMail.Assets/Start/Batch/LostAcknowledgement/Empty/Cleanup`,配合`Tools/seed_mail_test.py mixed|lost|empty`。夹具只允许`Tools/output/g1-live`中的`mail-db.path`指向的隔离数据库与`mail-account.txt`中的`g1live_mail_`账号;旧营地/每日/收集/背包夹具增加schema7兼容。原生及双端导出仍使用`game_tests.exe Tools/output/progression_parity.json`,HTTP运行`python Tools/test_game_http.py`。
开发服更新前使用SQLite在线备份到`Tools/output/mail-before.db`,按可执行路径/端口核验后重建并重启8080。真实账号恢复并完成6→7迁移;与备份逐账号比较仅schema/mails/revision有变化,钱包、进度及操作日志总数不变,两封真实邮件均未读/未领。隔离18081进程已按路径/数据库核验并关闭,8080健康;Game View与原有Play状态恢复,Boot不保存临时变更。测试期间Play切换曾使Pipeline请求线程中断,重连后全部实测通过;编辑器保留该工具错误及重启开发服造成的两条WS断连警告,未清空历史Console。未构建Player、上传CDN、部署生产服或进行微信真机验证。
下一批优先三路线/六槽布阵与T2技能,再补关卡/伙伴内容、宝箱/设置及G3体验性能验收;本轮没有扩大至完整P0。
## G2 三路线布阵与 T2 技能(2026-10-18)
本轮在已有五伙伴/五关内容上完成三路线布阵的服务端权威规则与客户端表现。1-1、1-2 仍分别开放 1 条路线,1-3、1-4 开放 2 条,1-5 开放 3 条;每条路线有前后两个槽位,部署时同一伙伴只能出现一次,占用槽位会交换,空路线会记录突破。拖动布阵使用已登记的 `FormationDragHandle`,拖回伙伴区撤下,推荐布阵按当前开放路线填充。
每个伙伴增加 T1/T2 技能:岩团团护盾、火喵范围攻击、芽芽治疗、电系闪闪雀连锁攻击、水系泡泡龟减速。T2 使用既有共享训练等级、碎片与金币条件,并通过已制作的技能脉冲、护盾、减速标记和 T2 冠饰表现。首领对减速按配置缩短效果,治疗和护盾不套元素伤害乘算;战斗开始冻结完整配置、关卡和阵容,结算仍只接受服务端结果。
`AIServer/tests/game_tests.cpp` 新增三路线槽位权限、跨路线交换、空槽撤下、请求重放、存储故障回滚、五技能覆盖、首领控制衰减、治疗/护盾效果及多关卡/等级/进化矩阵。服务端原生测试现为 3505 项;C++ 模拟导出的 `Tools/output/progression_parity.json` 与 Unity `VerifyProgression.Domain` 对照为 189 组(150 胜 / 39 负),十三个业务 Prefab 的字体与九宫格检查通过。`python Tools/test_game_http.py` 的隔离 HTTP 回归也通过。
修正了配置中技能名称和三关战术提示的编码占位符,新增 `bossControlScale` 配置并在 C++/Unity 两端执行一致校验。没有生成新贴图、模型、动画或音效,因此无需新增资源登记;继续复用既有 Arena、伙伴与 UI 资源。
仍待完成:完整 10 伙伴/20 关内容、正式多路线关卡设计、T2 外观替换为正式美术、宝箱/设置、自由营地与 G3 真机性能验收。未构建 Player、上传 CDN 或部署生产服。
## 战斗角色显示修复(2026-10-18)
问题原因是三路线资源脚本 `BuildLanes.Build` 已提交但尚未执行,`PrototypeArena.prefab` 缺少 `DeploymentMarkers`、`SkillEffects`、`Shield`、`SlowMark` 与 T2 冠饰等节点;客户端在刷新战斗时于路线标记节点空引用,后续角色表现因此没有更新。已通过 Unity Pipeline 执行 `BuildLanes.Build` 持久化战场预制体,并为 `PrototypeFlow.RefreshBattle` 增加缺失表现节点保护,避免旧缓存或不完整预制体导致每帧异常。实机 Play Mode 截图确认岩团团、火喵已显示,战斗继续推进;本轮无新增 Console 错误。
## G2 宝箱奖励页(2026-10-19)
首页“宝箱”入口接通奖励页:每日宝箱、首通掉落箱与自选箱。每日宝箱每天领取1个、只进入库存不直接发奖;1-1、1-3、1-5首通各掉落一个箱(绿野补给箱、伙伴碎片自选箱、溪口大礼箱),重复挑战不再掉落。打开固定箱直接发放金币/糖果/弹珠/捕捉券;自选箱先选一种伙伴碎片(×10)再打开。箱子永久有效,暂不做过期转材料。
配置源仍为`greenfield.json`,新增`rewards`(三种箱的内容与自选、每日箱ID、首通掉落表),CMake嵌入并生成新版本哈希,客户端读取同一份配置。服务端新增`chest.claimDaily/chest.open`,扣箱、发奖、写操作日志同一事务;每服务器日可领一次,与商店限购共用UTC+8日切。`battle.finish`首通回执新增`chest`字段。业务拒绝`invalid_chest/chest_missing/chest_claimed/invalid_choice`持久化。
schema升级为8:7→8只新增`chests:[0,0,0]`与`chestDailyClaimed`,迁移不发放免费箱。客户端兼容schema6~8服务滚动更新,schema8以下宝箱入口提示稍后重进。客户端按动作校验回执:打开箱必须携带至少一项非零奖励,每日箱回执不得携带奖励(JsonUtility会把缺失奖励物化为全零对象)。
UI通过`generate_prototype_ui.py`新增`chest()`生成48节点JSON,Pipeline执行`BuildChest.Build`经项目转换器生成`UI_PrototypeChest.prefab`;`BuildProgression`与双端对照资产检查现包含14页,首页`Dot_Rewards`改由每日可领或拥有箱子驱动,首页115项检查仍通过。
验证:原生3598项断言通过,覆盖空库存、每日箱只入库、固定箱精确奖励、自选箱选择校验、重复/丢失回执、首通掉落只一次、过期修订号、在途互斥、日切与时钟回退、16并发、日志故障回滚、重连持久化及schema7迁移;HTTP隔离进程验证24并发每日箱/开箱只发一次与账户隔离;C++/Unity对照189组一致(150胜/39负)。独立18081服务与`g1live_chest_`账号实际EventSystem点击通过:首页入口与空状态、每日箱入库不发奖、固定箱精确60金币/30糖果/2弹珠一次、自选芽芽碎片+10、丢失确认恢复原回执;首页入口实际点击检查扩为9项入口与营地。已检查五张截图,Console无新增错误。测试后真实开发账号由备份比对仅schema/revision变化,钱包80金币/40糖果/48弹珠、等级与发射数不变;隔离服务已关闭,8080开发服务更新并健康。未构建Player、上传CDN或部署生产服。
下一批建议:设置面板(音乐、音效、画质、振动、账号信息,本地偏好+账号信息读取),随后补齐内容量与正式战场。
## 绿野战场方案 A 接入开战(2026-10-20)
`Battlefield_Greenfield` 已嵌进 `PrototypeArena/Greenfield`,方块地面关闭,场景不摆桥。开战相机只画第 30 层,Greenfield 整棵子树已统一设层。隔离 18081 Play Mode 验证 1-1 加载绿野土路与装饰,截图 `battlefield_play_battle.png`。开发 8080 未改动真实账号。未构建 Player、上传 CDN 或部署生产服。
## 设置面板(2026-10-20)
首页设置入口接通 `UI_PrototypeSettings`:音乐/音效开关、画质三档、振动(桌面禁用)、账号 ID/访客名与重新登录说明;删除账号按钮禁用并提示 P0 未开放。偏好存本机 PlayerPrefs,重新登录走 `GameNet.RenewSession`,不删云端进度。JSON→Prefab,`VerifySettings` 资产与 Play 点击通过,截图 `settings_page.png`。玩法页增至 15 个。未构建 Player、上传 CDN 或部署生产服。
下一批建议:补齐内容量(更多伙伴/关卡)与正式美术/音频。
## G2 十伙伴与二十关(2026-10-20)
内容量扩到 P0 目标:`greenfield.json` 现为10只伙伴、20关。新增岩甲犀(岩·控制·减速)、烈焰狮(火·输出·双目标)、藤蔓灵(草·支援·治疗)、雷鸣豹(电·输出·双目标)、潮汐鲸(水·守护·护盾),每元素两只,覆盖守护/输出/支援/控制四种定位;捕捉池十项等权10%,教学仍固定芽芽,自选箱十个碎片选项。关卡为1-1~1-10「绿野初程」与2-1~2-10「溪谷守望」,每关仍为三波九个敌人、五类敌人;后半段`hpScale`最高4.0、`attackScale`最高2.35,1-5起三路线。首通掉落扩展为1-1、1-3、1-5、1-10、1-15、1-20。
服务端`autoDeploy`改为按配置选人(前排最短射程、后排最长射程),不再硬编码五个伙伴;营地互动与进化的伙伴边界改为配置长度。存档schema升级为9:8→9只把`stages/shards`扩到10、`clearedStages`扩到20,新伙伴未拥有、新关卡未通关,不发伙伴、首通奖或宝箱。客户端兼容schema6~9滚动更新。
配置超过MSVC单字符串字面量上限后,`AIServer/CMakeLists.txt`改为按8000字节分块生成相邻字面量,拼接后与原文件逐字节一致;版本哈希仍取整份JSON的SHA256。
UI按双列/双行重排:伙伴、捕捉、背包材料、营地休息区为2×5卡片,布阵伙伴栏为5×2,选关页改为两个章节标签各十行,宝箱自选为2×5。Arena与肖像扩到十套简模,技能特效与T2冠饰扩到十个槽位;伙伴卡只显示元素/定位/生命/攻击/碎片,完整技能说明放在选中区,避免小卡溢出。
验证:原生4335项断言通过,覆盖10/20配置校验、schema8→9迁移、十伙伴捕捉池与保底、20关顺序解锁与推荐等级通关、六处首通掉落、16并发与日志故障回滚;HTTP隔离进程24并发弹珠/邮件/宝箱重试、重启回执与账户隔离通过。C++/Unity对照227组一致(120胜/107负),包含十伙伴技能与20关矩阵;十六个Prefab字体/九宫格通过。实际EventSystem点击走通两章标签切换、十伙伴/捕捉/宝箱列表与首页入口,检查截图`roster_*.png`。真实开发账号与备份比对仅schema/revision变化,钱包80金币/40糖果/48弹珠、等级与操作日志不变;8080开发服已重建并迁移,未构建Player或部署生产服。
仍待完成:设置面板的音效资源、T2正式外观、正式战场、G3真机性能与微信验收。
### 主界面音乐选用与接入(2026-10-20)
用户确认《微风小镇》作为主界面BGM。84秒OGG通过独立 `MainMenuMusic.prefab` 接入,Prefab和AudioSource由Pipeline持久化制作、Art/Sound收集,运行时经YooAsset异步加载。菜单循环播放,设置中的音乐开关独立暂停/续播,音效关闭不影响已开启的音乐;战斗/弹珠页暂停、返回菜单续播,应用后台暂停。Boot实播验证循环、三轮开关、菜单往返不叠音、弹珠暂停和偏好恢复通过,编译及本轮新增错误检查通过。素材和回执见 `Doc/Design/Sound/MainMenuSoft/ProductionBrief.md` 与 `Doc/ResDesc_Sound.md`;未构建或发布,微信音频解锁待真机验收。
## 正式伙伴接入战斗(2026-10-20)
岩团团、火喵、芽芽三只已验收的正式伙伴替换了 `PrototypeArena` 的 Hero0~2 几何简模,肖像 `proto_pet_0~2` 也改为从正式模型渲染。正式模型嵌套在 `Visual` 子节点,统一缩放到 1.5 单位高,T2 仍沿用冠饰和 1.2 倍体型。`PrototypeFlow.RefreshBattle` 在伙伴普攻、治疗或施放技能时触发 Animator 的 `Attack`,暂停或结束时动画速度为 0,二倍速时为 2。正式模型不再做原型的上下弹跳和缩放脉冲;Hero3~9 仍是简模,表现不变。
顺带修复两处已提交的问题。一是十伙伴扩容后,`StartBattle` 仍按 `stages.Length == 5 ? 3 : 1` 构造战斗快照:10 只伙伴得到 schema1,`PrototypeGame` 校验抛出"服务端存档无效",所有关卡都无法开战。现改为 `PrototypeSave.BattleSnapshot`,按伙伴数量补齐各 schema 的必需字段,与 `VerifyProgression` 的回放快照规则一致;它只用于表现,不参与结算。二是十伙伴批次的 `BuildPrototype.Build` 全量重建冲掉了已嵌入的 Greenfield 战场。本次已重新执行 `AttachGreenfield.Build`,并让 `MakeArena` 在全量重建时自动嵌入 Greenfield。
验证:`VerifyFormalHeroes.Assets`、`VerifyBattlefield.Assets` 和 `AttachGreenfield.Verify` 通过。在独立的 18081 服务(`Tools/output/formal_heroes/test.db`)上用新账号实际点击,走通 1-1 开战:岩团团和火喵在绿野战场上显示并播放 Attack,切换二倍速后 Animator 速度为 2;截图为 `formal_heroes_idle/attack.png`。真实开发账号已还原,钱包、发射数、等级与快照一致;18081 服务已关闭,8080 开发服健康。Unity 已退出 Play 并恢复原 Game View,本轮无新增 Console 错误。芽芽的战斗表现只做了资产检查,新账号的 1-1 不会让它上场。未构建 Player 或上传 CDN。
UI 音效暂未接入:10 条 TangoFlux 音效中,9 条是持续 1.5~2.5 秒的声音,`Ui_Open` 前 1.36 秒为静音,不适合直接作为按钮音,需要先裁剪或重新生成。
### UI 音效接入(2026-10-21)
UI 音效换成 v2 一次性短音效(0.12~0.8 秒)并接入运行时。`UiSfx.prefab` 与主界面音乐一同加载,受设置里的音效开关控制。按钮按名称分类:返回/关闭→Close,取消类→Back,页签→Tab,开关→Toggle,其余→Click。首页入口播 Open,服务端确认后:领奖/捕捉/开箱/首通→Claim,训练/进化/购买/营地操作→Confirm,布阵→Toggle,被拒绝或断线→Deny,首页新出现红点→Notify。`VerifyUiSfx` 在隔离 18081 账号上实际点击验证通过,真实账号与偏好已还原。生成、选择与触发表详见 `Doc/Design/Sound/UiSfx/ProductionBrief.md`。听感待人工试听。
- 2026-10-21 UI 音效 v3:clip 换成 `Tools/synth_ui_sfx.py` 程序化合成的木琴、钟琴和气泡音,风格清脆轻松;播放代码和触发映射不变,Prefab 已重建。
- 2026-10-21 岩甲犀(pet 5)接入战斗与肖像,正式伙伴为 0/1/2/5;其余仍为简模。实战验收用隔离库种子账号(stages[5]=1、formation=[0,5]),见 `VerifyFormalHeroes.PlaySeeded`。
- 2026-10-21 闪闪雀(pet 3)、泡泡龟(pet 4)接入战斗与肖像。正式伙伴现为 0/1/2/3/4/5,Hero6~9 仍是简模。`VerifyFormalHeroes.Assets` 确认六只脚底 y=0.00、身高 1.50、第 30 层、带 Animator。隔离 18081 种子账号阵容为泡泡龟前排、闪闪雀后排(龟的普攻距离是 2,放后排打不到),1-1 中两只都播放 Attack 并跟随二倍速。真实账号已还原。截图 `formal_heroes_bird_turtle_idle.png`、`_attack.png`。
- 2026-10-21 主界面底图去掉绘制的探险者、猫咪和对话框,备份为 `Doc/Design/UI/Home/home_camp_with_cast.png`。简模 `ExplorerSimple` 在广场中央来回走,点击后才出现随机台词。常驻问候条默认关闭。`VerifyHomeExplorer.Play` 通过。截图 `home_explorer_walk.png`、`home_explorer_talk.png`。
## G3 经济样例、引导与失败建议(2026-10-21)
按 `GameDesign` 8.2 与 14.1,先做不依赖微信真机的三块。
`Tools/economy_sample.py` 读取 `greenfield.json`,写出 `Doc/Design/G3/EconomySample.md`。首日、七日和卡在 1-5 前三条轨迹都不计自然恢复。设计稿 8.2 已改成现行数字:前五关首通 17 枚,10 发金币均值 520,不计自然恢复的该项合计是 67 枚。训练到 Lv.5、进化金币都能靠弹珠台均值补上,碎片差 30,是卡关时更慢的一项。
首页教学目标按首日顺序提示:发射、用券捕捉芽芽、共享训练、布阵打 1-1、领取目标。弹珠不足时同时指向自然恢复、每日任务、签到和免费补给。战斗失败在原关卡提示下追加建议:克制伙伴是否上阵、训练等级是否低于建议、开放路线是否空着。胜利用原结算文案。
性能预算写在 `Doc/Design/G3/PerformanceBudget.md`。画质三档沿用现有设置。未构建 Player,未测微信帧率、内存和主包体积。
`VerifyG3.Domain` 核对首日引导五步文案。`VerifyG3.Play` 在隔离 18081 新账号上确认首页显示「发射第一枚弹珠」,1-1 放弃后结算含失败建议。流畅档 90 帧平均 55.3 FPS,同屏伙伴 2、敌人 1,最长帧 143.68 ms。这是编辑器诊断,不是微信验收。真实账号金币、糖果、发射数和等级已还原;18081 已关闭。回执 `Doc/Design/G3/editor_frame_sample.json`。
`VerifyG3.Loop` 用另一个隔离新账号走完教学循环:两发弹珠(糖果 40、金币 80)、捕捉芽芽、训练到 Lv.2、默认阵容通过 1-1、领取教学目标 +5 弹珠。结束钱包为弹珠 26、糖果 50、金币 160、券 0。未领邮件、签到、每日任务和后续关卡。回执 `Doc/Design/G3/first_day_loop.json`。
- 2026-10-21 5 类正式敌人接入战斗:小角怪/疾跑怪/硬壳怪/角怪队长/大角首领取代几何简模,按 type 显示,走路播 Walk、出手播 Attack(`PrototypeBattle.Enemy.Moving/Strikes` 仅供表现,不影响结算)。隔离 18081 种子账号 1-5 实战验收通过,详见 `Doc/Design/Character/EnemyCharacterProduction.md`。
## G4 属性挑战(2026-10-21)
首页「活动」在通过 1-1 后打开五场元素试炼。火、草、岩、电、水各一场,只自动上阵已拥有的对应元素伙伴,主线阵容不变,不消耗弹珠。首次胜利给该元素指定伙伴 10 碎片和一枚徽章;再次胜利只在用时更短时刷新纪录。没有对应伙伴时提示去捕捉,不要求付费。存档从 schema 9 迁到 10,只补空的徽章和纪录,不发奖励。操作活动模板还没做。服务端 `game_tests` 覆盖锁定、缺伙伴、放弃、首次发奖和重复不发奖。
- 2026-10-21 10 个伙伴全部换成正式模型并接入战斗与肖像(新做藤蔓灵/雷鸣豹/潮汐鲸,烈焰狮等由另一工具完成)。隔离 18081 种子账号 1-5 实战验收通过。
## 排行榜(2026-10-21)
首页「排行」读取服务器已确认的主线通关数和五场试炼最短用时。同成绩先比达成时间,再比玩家编号;没有成绩不上榜,页面显示前 20 名。客户端不能提交分数。存档从 schema 10 迁到 11 时,只给已有成绩盖上本次进入的时间,不发奖励。没有时间的旧成绩排在同成绩之后。正在进行的弹珠或战斗也可以看榜,不会被榜单请求结算。8080 已在 2026-10-21 15:07 重启,排行已接通。
## 好友(2026-10-21)
首页「好友」按玩家编号查找,支持申请、接受、拒绝、撤回、删除、屏蔽、查看阵容和营地布置。好友、申请、屏蔽各最多 20 人。赠礼每天最多送出 5 次、收到 5 次,每次给对方 20 金币;不能送给自己,同一对好友每天只允许一个方向,重复提交同一次请求不会再次入账。存档从 schema 11 迁到 12 时只补空名单,不发金币。进行中的战斗也可以打开好友页。留言、实时聊天和突袭未做。8080 已在 2026-10-21 15:07 重启,好友和排行已接通。服务端 `game_tests` 覆盖互访、单向赠礼、次数上限和空迁移。
## 钓鱼(2026-10-21)
属性挑战页的「小镇钓鱼」进入钓鱼。通过 1-1 后可玩,每局消耗 1 枚弹珠,每天 5 局,放弃也占次数。服务器开始时冻结 8 条鱼汛,单局 20 秒,超时后再等 3 秒,之后只能放弃。客户端回传点击的鱼和时间,服务器重算积分;不能直接提交分数,超出当前时间的点击整单拒绝。3 分得 10 金币,5 分得 20 金币,8 分得 30 金币和 5 糖果。低于 3 分不返还弹珠。个人最佳只刷新纪录。同一请求重放不重复入账。进行中的弹珠、战斗或钓鱼互相挡住。存档从 schema 12 迁到 13 时只补 0 次和最佳 0 分,不发奖励。寻宝、派对、画册、温泉和首领挑战未做。服务端 `game_tests` 5101 项断言通过,覆盖锁定、消耗、伪造分数、未来点击、重放、放弃、次数上限、日切和空迁移。8080 已在 2026-10-21 16:42 重启,重启前备份为 `AIServer/data/aiserver-before-schema13-20261021-164141.db` 及其 wal、shm。未向真实账号发送请求;玩家下次进入时迁到 schema 13,只补 0 次和最佳 0 分。未构建 Player。
## 营地寻宝(2026-10-21)
好友页在双方已是好友、并且自己通过 1-1 之后,可以对这位好友寻宝。每天 3 次,同一位好友每天一次。服务器按自己的通关数从活动池发奖:1 关 10 金币,4 关 20 金币,10 关 30 金币和 5 糖果。客户端不能指定抽到哪一件。奖励不加给对方,也不减少对方的金币、弹珠或装饰。同一请求重放不重复入账。进行中的战斗也可以寻宝。存档从 schema 13 迁到 14 时只补 0 次,不发奖励。突袭仍会播放战斗,这次没做。服务端 `game_tests` 5192 项断言通过,覆盖未结交、未通关、伪造事件、战斗进行中发奖、对方营地不变、重放、同一营地当天一次、每日 3 次、次日恢复、10 关分档和空迁移。8080 已在 2026-10-21 20:38 重启,重启前备份为 `AIServer/data/aiserver-before-schema14-20261021-203836.db` 及其 wal、shm。未向真实账号发送请求;玩家下次进入时迁到 schema 14,只补 0 次寻宝。未改伙伴模型和战场。
- 2026-10-21 伙伴 T2 进化外观:T1 模型+骨骼挂件(9/10,潮汐鲸待混元额度),战斗按 tier 切换 Visual/VisualT2;隔离 18081 全 T2 阵容 1-5 实战通过。
## 五敌人战场替换与技能闭环样例(2026-10-21)
五类敌人的 Studio 低模已替换正式战场,原Avatar/控制器/三动作不变;45个模型引用、尺寸/贴地和五类型 Walk/Attack、攻击受击反馈通过。保留现有伙伴及T2,不重建整体战场。
火喵/岩团团独立技能样例实现 C++ 50ms整数tick逻辑、动作通道和阶段、投射物到达伤害、护盾及特效音效播放。C++30项检查、Unity1×/2×/暂停/低帧率最终状态一致、静音和清理通过;生成5条TangoFlux音效。生产服务器和主线仍旧规则,未进行网络轨迹协议接入或20关规则迁移。记录 `Doc/Design/Combat/SkillSlice/Production.md`。
## 权威技能协议与正式战场接入(2026-10-21)
新客户端battle.begin/challenge.begin声明combatProtocol1,服务端冻结25技能与配置、结果和事件,分页只读获取。PrototypeBattle.Trace仅应用权威事件,统一动作/特效/音效及数据时钟;旧客户端与旧战斗仍走原规则。正式战场持久化技能池和19个可调挂点,T2缩放同步。
120组C++关卡/进化/阵容矩阵覆盖25技能;23份跨关轨迹在C#最终状态与统计一致;18083真实UI全T2的1-5经服务重启恢复相同场次,实播/结算通过。8080开发服已更新,旧程序与SQLite一致性备份保留,全部game_states核对不变。制作记录 `Doc/Design/Combat/Runtime/Production.md`。未发布Player或生产服,真机性能与完整伙伴专属音效特效仍待完成。
### 2026-10-21:伙伴技能表现补齐
已完成十伙伴专属技能VFX及剩余四条TangoFlux声音,正式战场15类效果/76池根/8音源/9音效。23份服务器轨迹表现回放、暂停倍速静音、去重与生命周期清理、正式战场视觉验收通过;资源已登记。记录 `Doc/Design/Combat/PartnerSkills/Production.md`。后续为微信真机性能和混音验收。
### 2026-10-21:最新技能规则的首日前五关验收
隔离新账号只用初始岩团团/火喵及教学芽芽,正常两次发射、训练至Lv.5、领取基础补给和推荐布阵,真实UI走通1-1~1-5,全程T1,无资源或通关状态预置。五份权威轨迹哈希、结果、奖励、统计和最终钱包与C++事务路径一致;重打1-5不重复发奖。最终金币720/糖果110/弹珠62。修复训练资源不足时仍要求直接训练的引导及隐藏敌人Animator逐帧警告,专项UI/实战通过。新增首日CTest,四组服务端回归通过。结果与边界见 [G3/FirstFiveAcceptance.md](G3/FirstFiveAcceptance.md)。真实账号恢复,18085测试服关闭,Boot无脏状态;未构建Player或重启8080,真机性能仍待测。