feat: wire lobby task and VIP prefab flows and sync UI assets

This commit is contained in:
2026-09-06 18:46:37 +08:00
parent 842c68ef55
commit 9c4510697c
184 changed files with 8348 additions and 19133 deletions
@@ -0,0 +1,64 @@
# Layer4_MainMenu / Layer6 接线交付
范围按用户确认:接通菜单事件与已有功能,缺失业务明确列出。分支 `codex/layer4-layer6-wiring`;本次不改服务器或网络协议,不实现子游戏。
## 已接通
- `LobbyPanel` 实例化现有 Layer4、Layer6 和相邻通知菜单 prefab;设置、个人信息、加入房间面板、公告、更多菜单及关闭入口已接通。
- 菜单使用 Cocos `Button.EventType.CLICK`,隐藏节点、不可交互按钮、重连状态与弹窗遮挡均阻止底层业务事件。房卡/星星图标、底板、数字、购买按钮指向同一类型事件。
- 按 `11_GameUI.JumpMenuScene` 的执行顺序迁移审核版本、启动来源、代理/支付、隐藏任务/分享、小程序、大厅模式、主菜单四入口、房卡、排行、兑换码等显隐条件。
- 按可见按钮数量排列底栏与更多托盘,托盘扩宽后保持原左边界。原始 1280x720 坐标换算到现有居中布局,保留 Cocos 1600x720 画布。
- `lobby-menu.ts` 是菜单策略的唯一来源,遵循远程配置的层级读取与 hall_config 合并。保留旧 `hallConfigName` 字面量 `actData:` 导致顶层 `actData` 不覆盖活动配置的行为;保留字符串 `'0'` 的旧真值语义。
- 任务红点直接读取用户创建的 `Spirit17/Tip` Sprite,只控制 active;已移除 `taskTipPrefab` 脚本与场景引用。头像/金额继续使用已有 Cocos Sprite/位图字体 Label。
- 用户整理的 `TaskItem` 已通过 MCP 导出为独立 prefab;Spirit311 使用原进度底图与前景图,绑定原生 ProgressBar。Layer26_Task 使用横向 ScrollView + 矩形 Mask + Content Layout,TaskListView 根据数据 instantiate 条目。保留卡片美术与字体,未完成/可领取/已领取状态及仅第一个未完成条目显示“去做任务”与原逻辑一致。
- `TaskListView.render(tasks, roomCardName)` 提供任务响应的渲染入口;`task-do` / `task-claim` 事件携带 taskid。任务按钮现已通过 Runtime/Commands 发送 `agent/get_player_task`;Store 校验回包后驱动 Layer26。领奖发送 `agent/get_task_award`,响应更新任务 state=2 与玩家 taskstate。房卡仅由 `update_roomcard` 绝对余额推送更新;`player_finish_task` 响应遵循原红点条件。
- 任务请求带 agentid/playerid/gameid;领奖按实际旧代码仅带 agentid/playerid/taskid。已同步修正协议文档的 gameid 误记。请求期间防重复发送,超时/服务器 show_message/重连解除等待;普通余额提示不取消任务请求。任务窗口关闭与退出清理监听器和定时器。
- 修复已有加入房间面板打开错误:Spirit236–241 为 Sprite 数字槽,初始化隐藏,不再当成 Label 清空。
- `Launchtype` 按原工程分别读取 URL 或 `app_Launchtype`;从大厅启动时,设置中的退出登录提示返回大厅退出。
## 已发出菜单事件,业务仍待接入
这些入口不发送猜测协议。`PlatformStartup` 记录 `lobby-action`,按明确的中文说明提示缺失功能。后续业务可在这一个入口接入。
- 房间:创建房间的子游戏规则、加入房间键盘/提交与真实 GameEntry、星星场、我的房间、官方试玩/微房号列表。Layer6 的 group-103 仍是隐藏的房间列表资源,尚无服务数据驱动;其动态列表项的 prefab 迁移属于后续房间列表业务。
- 列表业务:普通排行、VIP 排行、子游戏战绩、比赛模块。任务“去做任务”已按旧工程打开分享页,不伪造任务完成上报。
- 原生与外部页面:二维码、更多游戏/返回大厅、商城、背包、活动的完整身份参数与原生页面接口。分享面板与原生调用入口已接通;真实原生分享结果/任务完成回调仍待联调。
- 账号与服务:房卡/星星支付、兑换码提交、绑定手机、代理、保险箱、意见反馈提交。
- 设置原有音乐/音效本地开关仍可操作;音频实际播放系统、震动/语音开关及个人信息中的实名认证仍待接入。
## 验证
在 `cocoscreator_projects` 下:
```powershell
node --test framework-tests/presentation/lobby-menu.test.ts framework-tests/presentation/lobby-policy.test.ts framework-tests/presentation/lobby-model.test.ts framework-tests/platform-login/lobby-links.test.ts
node --test framework-tests/presentation/task-item.test.ts
node node_modules/typescript/bin/tsc -p tsconfig.framework.json --noEmit --lib ES2022,DOM
node node_modules/typescript/bin/tsc -p YouleNexus/tsconfig.json --noEmit --ignoreDeprecations 6.0 --skipLibCheck --lib ES2022,DOM --types node --strict
node scripts/check-import-boundaries.mjs
```
- 14 项针对性测试通过。菜单测试直接执行原工程函数,覆盖 288 组配置/启动来源组合,并额外验证配置来源和字符串真值。
- 上述框架及 Creator 脚本类型检查通过;导入边界检查通过;`git diff --check` 通过。
- 原始无覆盖参数的检查有基线配置限制:框架 ES2020 lib 不包含已有测试使用的 `Array.at`;MCP 内置旧 TypeScript 不支持现有 const 类型参数/allowImportingTsExtensions。未扩大范围改动这些配置。
- Creator 3.8.8 Game View 与浏览器预览分别执行 `scripts/verify-lobby-menu-preview.mjs`,31 项断言通过;测试使用合成账号状态,主动停掉测试预览的连接,不发送登录或业务包,不构成真实业务联调验收。
- 浏览器预览通过 Electron 坐标鼠标输入点击设置,实际打开设置 prefab,提示错误为空。
- 新 prefab 引用验证 missingCount=0;独立代码审查发现的托盘左边界与 actData 来源问题均已修复并复查通过。
- 预览截图:`cocoscreator_projects/YouleNexus/temp/mcp-captures/layer4-layer6-wired.png`(合成账号,1600x720 设计画布)。
- 任务状态模型 3 项测试通过;`scripts/verify-task-list-preview.mjs` 在独立浏览器预览中通过 15 项检查,覆盖实例数量、滚动范围、裁剪组件、进度条宽度、按钮显隐与事件、刷新、空列表及跨帧销毁。真实鼠标拖动到最右端(592 设计像素),裁剪正常,未误发按钮事件或出现运行错误。任务预览截图为 `temp/mcp-captures/task-list.png`。
复跑预览脚本:通过 MCP 启动 PlatformStartup 的 Game View/浏览器预览,待加载到登录场景后,将验证脚本作为函数在对应预览 renderer 中执行。它会停止该测试预览的 runtime 并显示合成大厅;结束后重启预览即可恢复正常启动流程。不要在真实使用中的会话中运行该验证器。
## 任务服务器接线追加验证
- Commands、Runtime、PlatformHandlers 共 87 项测试通过;框架及 Creator 类型检查、导入边界检查通过。
- `scripts/verify-task-network-preview.mjs` 在独立 Creator 浏览器预览使用真实 Runtime/Router/Store/LobbyPanel 和记录型 Wire Port,14 项检查通过,覆盖菜单发包、列表弹出、领奖、红点、余额通知竞态、关闭、服务器提示与重连。该测试不向真实服务提交领奖。
- 实际预览已连接配置中的 `ws://127.0.0.1:3088`,但无缓存登录账号;本次未进行已登录账号的真实任务/领奖服务验收。
## Spirit14 / Spirit679 与网页原生调试
- Spirit14、任务“去做任务”打开现有 Layer22_Share,网页无原生宿主时也正常显示。好友分享使用 friendsSharetypeUrlToptitleDescript;朋友圈按旧 case75,仅 shareType 真值时调用图片分享。url_download、sharename 与 hall_config 分享字段按原来源构造参数,支持远程 shareBgUrl。
- Spirit679 打开 Layer6/group-103 VIP 页面;按 advanced 控制普通玩家/管理入口,主菜单在 VIP 页面期间隐藏,关闭后恢复。仅完成页面入口;房间条目数据、管理操作及进房仍属于未接入房间业务,不把模板样例作为真实房间。
- 新增统一 [NativeCall] 控制台记录:channel、method、完整 args、available。现有 WVJB 调用、settings 配置读取、登录授权、定位、外链及分享均记录;缺少宿主的分享/授权只记录调用,不伪造回调或任务成功。已有宿主照常调用。
- 35 项菜单/分享/原生适配测试及两套类型检查通过;独立浏览器预览验证分享页打开、好友分享完整参数日志、VIP 页打开与关闭。分享截图 temp/mcp-captures/share-wired.png。
- 用户本轮“其他按钮”范围尚未回复确认;本次按明确点名的两个入口处理,未声称所有其他菜单业务完成。
@@ -0,0 +1,13 @@
# Layer6 VIP 列表接线
来源为 Game_Surface_3 的 ConstVal.vipRoomList1/2、GameUI.openVipRoomList/createVipRoomListPageOne/createVipRoomListPageTwo,以及 docs/protocol/02 的 getInfoByShortCode / self_join_room。服务器零改动。
- 使用用户在 Layer6 中归组的 VipRoomItem1/2,通过 Cocos MCP 导出独立 prefab。Layer6 的 VipRoomListView 持有两个 prefab 与两个带 Mask 的 ScrollView 引用,运行时 instantiate 条目,不再复制精灵。
- 列表一行距 199;列表二为双列,间距 285/145。Spirit3185 从条目中移为滚动容器,Spirit3188 人数文本归入条目二。Spirit3187 使用原 00203 BitmapFont,字号按字体源值 72 保持数字原像素尺寸。
- 打开页面发送 getInfoByShortCode,沿 Runtime → Router → Handlers → Store → View 更新。按原本地短码列表排序;沿用原比较器对数字/字符串短码的等值语义。成功登录/进房回包的 shortcode 保存到原 tsgame_vipRoom_{gameid}{agentid} / {data:[]} 格式。
- 保留标题、房主、人数、未建房提示、牌桌开局状态、普通/比赛模式、管理入口显隐。短房号快速进入和具体牌桌进入都使用原 self_join_room 字段(包括 joinmode:0/location/ip)。forbidSelect 与原工程一样只显示模式说明,由服务器决定准入。
- 刷新周期来自 vipFlushTime(原配置缺省 10000 ms),关闭/销毁即清理计时器,断线期间停止发请求。刷新保留选页与滚动位置;选中房间消失时回到第一页;空回包清空条目。源实现有“首次显示桌序号、同数量刷新显示真实房号”的不一致,本次统一显示桌序号,点击始终使用真实房号。
验证:78 项平台/协议回归(包含 VIP Runtime 路由)通过,两套 TypeScript 检查、导入边界检查通过。独立 Creator 浏览器中 13 项 VIP 列表断言、35 项大厅菜单断言通过,检查了两页截图。使用合成响应与记录发送端口,未声称已用真实账号完成服务器进房验收。
当前入口仍为登录阶段 GameEntry。子游戏规则描述和创建/对局场景尚未实现;独立的 VIP/短码排行、黑名单、好友管理、统一魅力值设置业务仍未实现,相关入口明确提示。房间描述显示“子游戏规则描述尚未接入”,不复制旧模板的虚构规则示例。此次不将这些业务声明为完成。