3.5 KiB
二七王创建房间接入
核对日期:2026-09-07。本篇记录创建房间阶段的实际实现,不代表二七王牌桌玩法已迁移完成。
资源与入口
工程为 cocoscreator_projects/YouleNexus。PlatformStartup.scene 的 PlatformServices / SubgameAssets 已配置:
gameKey = erqiwang。createRoom:assets/games/erqiwang/ErqiwangCreateRoom.prefab。room:assets/games/erqiwang/ErqiwangRoom.prefab。roomScene:沿用assets/scenes/TemplateRoom.scene的通用场景容器。
联调 gameid 按用户确认沿用默认 J9r4022t80pxlb01zOK76DN1WD4QewFl,身份仍由运行配置提供,不在创建页重复定义。
页面与规则
ErqiwangCreateRoomView 继承平台 CreateRoomPage,只通过上下文提交、取消和报告错误。平台统一处理登录身份、IP、定位、请求信封、等待、超时和回包。
Inspector 绑定三组 ToggleContainer,allowSwitchOff=false;八个 Toggle 依次为 6 局、12 局、房主扣卡、AA 每人扣卡、可查牌、不查牌、傍王、爬坡。最后两个 Toggle 没有 ToggleContainer,可以独立勾选或取消。费用由局数与扣卡方式联动计算。
规则模型 erqiwang-room-rules.ts 是前端选项与编码转换的唯一来源。界面顺序为局数、扣卡、查牌、傍王、爬坡;实际服务器编码顺序仍为局数、扣卡、傍王、爬坡、查牌。尾部六位填零,总长度十一位。默认 00000000000。协议依据见 服务端协议 §0.5,不能按界面顺序直接发包。
模型拒绝错误长度、非二进制选项、非零预留位以及数组型历史配置;历史来自平台成功回包保存的 tsgame_roomtype_ + gameid + agentid,格式仍为 JSON {data: roomtype}。没有历史时使用规则来源定义的默认选择,不静默修补非法历史。
平台契约与房间交接
公共 SDK 的 Roomtype = string | readonly unknown[] 用于创建页面、请求、成功响应、状态、GameEntry、GameHost 快照及事件。字符串保持原值,数组仍复制并冻结;平台不解释二七王位含义。VIP 房间配置同样保留字符串。
创建成功后,createErqiwangGame 校验配置并提供三个服务器座位,平台维护权威状态,临时房间页显示房号、玩家以及“玩法尚未接入”。退出使用本房间 GameHost。准备按钮暂不展示,避免进入尚未迁移的牌桌流程。玩法消息处理未实现,收到会显式报错;deskinfo 仅保留原值,尚无玩法恢复表现。
验证与限制
framework-tests/presentation/erqiwang-room-entry.test.ts:穷举 32 种选项组合,对照实际服务端class.config.js验证编码、恢复、费用和人数。framework-tests/platform/runtime.test.ts:模拟登录、创建出站包、成功回包、三座位状态、房间显示与退出命令。- 相关回归测试 157 项通过;Cocos 工程与框架 TypeScript 检查、导入边界检查通过。
- Game View 实际坐标点击验证 11 项:必选互斥、费用、独立开关、精确编码、busy、防重复、关闭清理及历史恢复。新 prefab 共 52 处 UUID 引用有效。
本次未修改服务器代码,未在真实服务器创建房间。本地模拟通过不等于实际服务端创建成功;后续联调从大厅“创建房间”入口进行,并检查出站 roomtype 类型与值。