From 5dda571250dc12d4606d37c9de2c1e97ed9306fa Mon Sep 17 00:00:00 2001 From: Joywayer Date: Tue, 25 Aug 2026 13:25:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9AUI=20?= =?UTF-8?q?=E6=B8=85=E5=8D=95=E8=90=BD=E5=AE=9E=20A/B/C=20=E7=BB=84?= =?UTF-8?q?=E5=86=B3=E7=AD=96=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E5=BE=85=E8=A1=A5=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 规格确认(T-4/6/7/8/10/11/12/15/16/18/19/22/23/26 全部落地): - 叫分按钮配色按【档位位置】固定三档(浅黄/金黄/橙)+ 灰=已叫过, 按钮底与角标底各 4 帧。特别标注:参考图角标 1子/2子/4子 是 mock, 颜色不随子数变(反证:常规算子下 50~5 档同为 6 子却是两种颜色)。 - 选主大数字=该花色张数、角标=对数;手牌标记 3 帧(拖/正2正7/其他主牌)。 - 底栏功能按钮定为 5 个,新增「扣底」;并显著标注术语陷阱——底栏「底牌」 按钮看的是【暗牌】、「扣底」按钮看的才是【底牌】,而协议里两批牌共用 bottomcards 字段名,要求前端用 anCards/diCards 区分。 - 结算底牌文案的 x 后面是扣底倍数;牌型标签只做「毙」;准备标识用平台的; 数字一律用图片多帧(参考图数字带描边渐变)。 - 发牌动画:从右往左铺开。算奖叠加层点遮罩关闭、并列显示奖数。 - 自己发的提示本地回显,作为悲观 UI 的受控例外并写明成立理由 (提示不含对局状态、服务端不校验真实性)。 - T-5 手牌排序定为对齐服务端 order_cards 主牌序,选主后整体重排。 新增 §7.5 服务端待补项: - S-1 抓分倍数字段:协议现无,出牌阶段拿不到任何倍数;服务端 get_upgrade 现成可用,建议补 curmultiple,语义待最终确认。 - S-2 下发应选中的牌:get_followcard 已返回 mustcard,仅用于内部校验、 未下发;建议只发给 nextseat 一家(整表下发会泄露他家手牌结构)。 - S-3 ⚠️ 底栏「底牌」按钮要求所有人可看暗牌,与 design §4「非 70 分时 暗牌只有庄家可见」及协议下发面直接冲突;给出三个方案,确认前前端按 最保守的 (a) 限定可见范围实现。 新增 D-13(扣底查看面板)、验收清单增至 15 条。 Co-Authored-By: Claude Opus 5 (1M context) --- docs_dev/uiref/叫分按钮面板.png | Bin 0 -> 94510 bytes docs_dev/二七王-UI资源与精灵清单.md | 277 +++++++++++++++++++++------- 2 files changed, 214 insertions(+), 63 deletions(-) create mode 100644 docs_dev/uiref/叫分按钮面板.png diff --git a/docs_dev/uiref/叫分按钮面板.png b/docs_dev/uiref/叫分按钮面板.png new file mode 100644 index 0000000000000000000000000000000000000000..d28fc5bd64e8ea8310c80cd265af88ebd3a2927a GIT binary patch literal 94510 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 z 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�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 Ar~m)} literal 0 HcmV?d00001 diff --git a/docs_dev/二七王-UI资源与精灵清单.md b/docs_dev/二七王-UI资源与精灵清单.md index b92e0f3..f7be01d 100644 --- a/docs_dev/二七王-UI资源与精灵清单.md +++ b/docs_dev/二七王-UI资源与精灵清单.md @@ -6,7 +6,7 @@ > > **权威源**:玩法规则以 `server/games/erqiwang/docs/design/design.md` 为准;下发字段以 `server/games/erqiwang/docs/protocol/packet_protocol.md` 为准;前端规范以 `docs/client/development-guide/` 为准。本文只做「规则/协议 → 界面资源」的映射,**不重新定义规则**。 > -> **参考图**:`./uiref/*.png`,共 12 张,设计分辨率 1280×720。 +> **参考图**:`./uiref/*.png`,共 13 张,设计分辨率 1280×720。 --- @@ -32,6 +32,7 @@ - [6.10 配置文件组织](#610-配置文件组织) - [6.11 与平台布局配置的衔接](#611-与平台布局配置的衔接) - [7. 待补充清单](#7-待补充清单) + - [7.5 服务端待补项](#75-服务端待补项需改服务端才能实现的前端需求) --- @@ -41,7 +42,7 @@ | 项 | 值 | 来源 | | --- | --- | --- | -| 设计分辨率 | **1280 × 720** | `client/output/gameabc_Project.json` `ScreenWidth/ScreenHeight`;11 张牌桌参考图均为 1280×720;建房参考图为局部截图,不含整屏尺寸 | +| 设计分辨率 | **1280 × 720** | `client/output/gameabc_Project.json` `ScreenWidth/ScreenHeight`;11 张牌桌参考图均为 1280×720;叫分按钮面板与建房参考图为局部截图 | | 适配模式 | `ScreenFitMode: 1` | 同上 | | 帧率 | 30 fps | 同上 | | 玩家数 | **3 人** | design §2(三家各摸 28 张) | @@ -413,7 +414,7 @@ EQW_RoomOptions = { | 三家玩家位状态文字清空,`主N/对N` 角标隐藏 | §2.2 玩家位附加标记 | | 倒计时显示在 `seat` 对应的位置 | §2.4 倒计时 | -- **发牌动画**【待确认 T-4】:是否需要逐张飞入动画。若做,须遵守 client 02 §3「数据优先、表现延后」——先 `setHandCards()` 写数据,再播动画;动画回调里只刷界面、不写数据。 +- **发牌动画(需要做)**:**从右往左铺开**。须遵守 client 02 §3「数据优先、表现延后」——先 `setHandCards()` 把 28 张写进 `this.data`,再播铺开动画;动画的开始/结束/出错回调里**只刷界面、不写核心数据**。动画缺失或卡住时,数据与界面仍须正确。动画时长、每张延迟进配置(§6.7)。 - **排序**:手牌排序规则(主牌在左还是在右、副牌花色顺序)由前端自行决定,**但选主前后主牌集合会变**,选主后必须重排。见 §7 T-5。 ### 1.3 叫分坐庄 `jiaofen` 【图:等待叫分.png / 自己叫分.png / 自己已经叫分轮到下家叫分.png】 @@ -431,11 +432,31 @@ EQW_RoomOptions = { **叫分面板规格**(群组 220,号段 1600–1649): - 14 档:`70 65 60 55 50 45 40 35 30 25 20 15 10 5`,两行 × 7(行1 = 70…40,行2 = 35…5)。 -- 每档 3 个精灵:按钮底(多帧,见下)+ 分数文字 + **子数角标文字**。 +- 每档 4 个精灵:按钮底 + 分数文字 + 角标底 + **子数角标文字**。 - 角标显示该档的 `multiple`,**随房间「爬坡」开关取值**(协议 §3): - 常规算子:65→2、60→3、55→4、**50 及以下统一 →6**、70→2 - 爬坡:65→2、60→3、55→4、50→6、45→7、40→8、35→9、30→10、25→11、20→12、15→13、10→14、5→15、70→2 -- 按钮底帧:**帧1 = 可选(亮黄)、帧2 = 不可选(灰)、帧3 = 高亮/当前**【待确认 T-6:参考图第二行为橙色,含义待定】。 + +**按钮配色:按档位位置固定,不随状态或数据变** 【图:叫分按钮面板.png】 + +| 位置 | 档位 | 按钮底 | 角标底 | +| --- | --- | --- | --- | +| 1–4 | 70 / 65 / 60 / 55 | 浅黄 | 蓝 | +| 5–7 | 50 / 45 / 40 | 金黄 | 绿 | +| 8–14 | 35 / 30 / 25 / 20 / 15 / 10 / 5 | 橙 | 深橙 | + +> ⚠️ 参考图里角标写的 `1子`/`2子`/`4子` 是 **mock 数值**,恰好与三组配色一一对应,**不要据此以为「颜色随子数变」**——颜色按档位位置写死,角标数值才随爬坡开关变。叫分越低(承诺越苛刻、子数越高)颜色越热。 +> +> 反证:常规算子下 50/45/40 与 35…5 的 `multiple` 同为 6 子,但参考图里它们是两种颜色。 + +**灰色 = 已经叫过的分数**(不可再叫)。故按钮底与角标底各 **4 帧**: + +| 帧 | 按钮底 | 角标底 | +| --- | --- | --- | +| 1 | 浅黄(高分档) | 蓝 | +| 2 | 金黄(中分档) | 绿 | +| 3 | 橙(低分档) | 深橙 | +| 4 | **灰(已叫过 / 不可选)** | 灰 | - 可选性规则(design §4.2,**由服务端权威 `currcall` 决定,前端只据其置灰、不自行推导规则**): - 暂定庄家首叫:5–70 全部可选,**无 `不叫`**; - 其后:只有**严格低于 `currcall`** 的档位可选,`不叫` 可选。 @@ -466,7 +487,7 @@ EQW_RoomOptions = { - 标题斜角条:`亮主` 金色字 + 倒计时数字。 - **4 个花色按钮**,每个含 4 个精灵:按钮底 + 花色大图标 + **中央大数字** + **右上角蓝色角标**。 - - 中央大数字 = 该花色在庄家 36 张手牌中的**总张数**【待确认 T-7:参考图为 6/8/6/7,与角标 `2对` 并存,推定为张数】 + - 中央大数字 = 该花色在庄家 36 张手牌中的**总张数** - 右上角标 = 该花色的**对子数**(design §4/§11 明确要求) - **两个数字都由前端据 `MyCards`/`cards` 自行统计**,协议 §「ChooseMain」明确「服务端不额外下发」。 - **投降按钮**:仅 `touxiang === 1`(即叫分 70)时显示,与 4 个花色按钮并列。 @@ -486,7 +507,12 @@ EQW_RoomOptions = { - 手牌从**单排 36 张**改为**双排**(上排 17 + 下排 19,实测估值)。 - 操作条(群组 222):`提示` 按钮 + 倒计时 + **`埋牌 (N/8)`** 按钮,N 为已选张数,`N < 8` 时按钮置灰不可提交。 - 选中的牌**上浮**表示待埋。 -- 参考图中牌面上有 `拖` 红色圆标、⭐橙星、🔵蓝星等标记 —— 推定为「提示」功能标出的牌型分组【待确认 T-8:标记种类与含义未定义于 design/协议】。 +- 牌面上的三种标记(资源 `MARK_CARD_GROUP` 3 帧): + - **`拖` 红色圆标** = 该牌属于一组**拖拉机** + - **橙色五角星** = **正 2 / 正 7**(选定花色的 2 和 7,design §3 里大小仅次于双王) + - **蓝色五角星** = 除正2正7外的**其他主牌**(双王、副2、副7、主花色普通牌) + + 三种标记互斥、每张牌至多一个;由前端据 `flower`(主牌花色)在本地标注,**不需要服务端下发**。 **收到 `maipai` 推送后**(字段 `cards`、`bottomcards`、`seat`、`countdown`、`liangpai`): - 庄家手牌回到单排 28 张; @@ -508,7 +534,13 @@ EQW_RoomOptions = { 这是最复杂的阶段。 -**出牌操作条**(群组 223):倒计时 + `出牌` 按钮(选中牌数为 0 时置灰)。参考图另有 `提示` 按钮(埋牌图里出现,出牌阶段是否保留待确认 T-10)。 +**出牌操作条**(群组 223):倒计时 + `出牌` 按钮(选中牌数为 0 时置灰)+ **`提示` 按钮(出牌阶段必须有)**。 + +**自动选中**:某些情况下(如跟牌时存在**必出牌**、或整手只有唯一合法出法),服务端会在下发包里带上**应当选中的牌**,前端收到后**自动把这些牌选中**(上浮),玩家确认后点 `出牌` 即可。 + +> ⚠️ **该字段目前协议里没有,需服务端补**——见 §7.5 **S-2**。好消息是服务端已经算过了:`class.arith.js:737` `get_followcard()` 返回 `{ mustcard, cancard, cantype }`,其中 `mustcard` 就是「必出的牌列表」,现在只用于内部校验(`class.arith.js:1055`)、未下发。补一个下发字段即可,无需新增算法。 +> +> 这条**不违反**「请求包只带意图」红线——方向是**服务端 → 前端**的建议选中,前端仍只回传 `cards`;且合法性最终仍由服务端校验。 **自己出牌**:点手牌选中(上浮)→ 点 `出牌` → 发 `chupai { seat, cards }`。 - `cards` 必须是**非空、元素为 0–107 整数、互不重复**的数组(协议 §0.2),否则服务端按 `PARAM` 拒绝。 @@ -541,9 +573,12 @@ EQW_RoomOptions = { **闲家提示 `tishi`** 【图:自己是闲家时,底下的踩有分没分按钮.png】(design §11): - 闲家在出牌阶段可向**对家**(另一闲家)发三种提示:`1 = 踩`(我能大过庄家)、`2 = 没分`、`3 = 有分`。 -- 发送方**收不到成功回执**(协议 §13.7),只有失败才回包 → **前端不得在点击时乐观显示自己发过提示**。 +- 发送方**收不到成功回执**(协议 §13.7),只有失败才回包。 - 接收方(对家)收到 `tishi { seat, tip }` → 在发送者的玩家位弹出气泡。 - 庄家无对家,不提供此功能。 +- **自己发的提示需要本地回显**:服务端只把提示转发给对家、不回执给发送者,所以**发送者自己的气泡由前端在点击时本地弹出**。 + + > 这是「悲观 UI」红线的一处**受控例外**,成立的理由是:提示**不含任何对局状态**,服务端明确「不校验提示真实性」(协议 §13.7、design §11),它既不改阶段、不改控制权、不改分数,纯属玩家间的主观喊话。因此本地回显不会造成与服务端状态不一致。仍须遵守:失败回包(`RULE`/`STEP`/`PARAM`)到达时要把本地回显撤掉。 **发起入口**:底栏三个按钮 `踩` `有分` `没分`,**位置就是庄标的位置**——自己是闲家时没有 `庄` 印章,这块区域正好空出来给这三个按钮。 @@ -601,7 +636,8 @@ EQW_RoomOptions = { **扣底表现**(`bottom` 分组,design §6.3): - `cards`(8 张底牌)**恒有** → 底牌区(群组 215,资源 `CARD_FACE_S`)翻开展示,design §11 明确「牌局结束需要亮出底牌」; - `multiple` / `grade1` / `grade2` **仅闲家扣底时才有** → 展示 `底牌 20 × 4` 之类的翻倍算式。 -- 参考图底牌面板下方文字为 `叫分2子 底牌 20x0`,即 `叫分{multiple}子 底牌 {grade1}x{multiple}`【待确认 T-12:`x0` 说明该局闲家未扣底,此时的文案规则待定】。 +- 文案格式:`叫分{aset.multiple}子 底牌 {bottom.grade1}x{bottom.multiple}`——**`x` 后面是扣底倍数**(design §6.3:单张 ×1、主对 ×2、N 连对 ×2N)。参考图 `底牌 20x0` 即底牌有 20 分、扣底倍数 0(本局闲家未扣底)。 +- 闲家未扣底时 `bottom` 只有 `cards`,`multiple`/`grade1`/`grade2` 都不下发 → 倍数位显示 **0**。 **三家结算数字**(`aset.seatlist`,每家两行): @@ -643,7 +679,9 @@ EQW_RoomOptions = { **算奖牌型叠加层** 【图:算奖牌型显示.png】: -点 `算奖牌型` 后,在结算面板之上盖一层**半透黑遮罩**,三家各展示自己的 `aset.seatlist[i].cards`,资源用 `CARD_FACE_L`、重叠排列。`下一局` 按钮在遮罩层上**继续可见可点**,`算奖牌型` 按钮本身被遮住。再点一次或点遮罩空白处关闭【待确认 T-22:关闭方式】。 +点 `算奖牌型` 后,在结算面板之上盖一层**半透黑遮罩**,三家各展示自己的 `aset.seatlist[i].cards`,资源用 `CARD_FACE_L`、重叠排列。`下一局` 按钮在遮罩层上**继续可见可点**,`算奖牌型` 按钮本身被遮住。 + +**关闭方式:整块全屏半透明黑遮罩本身就是关闭热区,点击遮罩即关闭。** 不另设关闭按钮。因此 `AWARD_MASK` 必须注册点击事件,且 `下一局` 的层级要高于它、点它不被遮罩吃掉。 - 三家牌位:左上家、右上家在各自头像内侧;自己在中央偏下。 - 布局配置见 §6.7。 @@ -660,7 +698,7 @@ EQW_RoomOptions = { | `upgrade` | **判定倍率(带符号)**:`3` 大光 / `2` 小光 / `1` 过庄 / `-N` 升 N 级(倒庄)/ `-99` 投降 / `0` 解散 → 需要一组判定文字或图标:`大光` `小光` `过庄` `升N级` `投降`【待设计 D-8】 | | `bangwang` / `climb` | 本局规则开关,用于结算面板上标注 | | **`cards`** | **算奖牌型叠加层**的牌(见上) | -| `chongguan` / `wang` / `naward` | 常规算奖奖数 / 王数 / 总奖数 —— 是否在叠加层上并列显示数字【待确认 T-23】 | +| `chongguan` / `wang` / `naward` | 常规算奖奖数 / 王数 / **总奖数**。叠加层**需要并列显示奖数**——以 `naward`(该家总奖数 N,8.4 节的支付基数)为主;`chongguan` / `wang` 作为明细可选展示 | **投降结算**:只有 `aset`,无 `chupai`、无 `bottom` → 结算面板必须容忍**底牌区缺失**,不能因为读不到 `bottom.cards` 就崩或显示空框。 @@ -713,7 +751,7 @@ EQW_RoomOptions = { ### 1.12 准备 `zhunbei` -小局结算后各家点准备进入下一局。收 `zhunbei { seat }` → 该家玩家位显示「已准备」标记【待设计:参考图未出现,可能复用平台准备标识,见 T-15】。 +小局结算后各家点 `下一局` 进入下一局(§1.8),发 `zhunbei { seat }`。收 `zhunbei { seat }` → 该家玩家位显示「已准备」标记——**用平台的准备标识**(§0.2),子游戏不另做资源。 --- @@ -792,12 +830,32 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | `庄` 印章 | x≈338–370 | **自己是庄**时显示 | | `踩` / `有分` / `没分` 按钮 | x≈335–573(占用同一区域) | **自己是闲家 + 出牌阶段**时显示,与 `庄` 印章互斥(§1.7) | | 局数 `1/4 局` | 居中 x≈635–700 | 常驻,`asetidx / asetcount` | -| `明牌` 按钮 | x≈876–950, y≈672–702 | **仅可查牌模式 + 出牌阶段 + 已报无主** | -| `已出牌` 按钮 | x≈965–1052 | **仅可查牌模式 + 出牌阶段** | -| `上一轮` 按钮 | x≈1067–1160 | 同上 | -| `底牌` 按钮 | x≈1172–1250 | 常驻【待确认 T-18:庄家看自己埋的底牌?闲家点了看什么?】 | +**右侧功能按钮共 5 个**,按情况显隐(不是全部常驻): -- 精灵:群组 205,号段 1040–1069。 +| 按钮 | 看什么 | 显示条件 | +| --- | --- | --- | +| `上一轮` | **上一轮**所有人出的牌 | 可查牌 + 出牌阶段 + 已打过至少一轮 | +| `出牌历史` | 所有人**出过的全部牌** | 可查牌 + 出牌阶段 | +| `明牌` | 另两家手中全部主牌的具体牌面 | 可查牌 + 出牌阶段 + **已报无主** | +| **`扣底`** | **庄家查看自己埋的 8 张底牌** | **仅庄家** + 已埋牌之后 | +| **`底牌`** | **发牌时桌面留下的 8 张暗牌** | 见下方可见性问题 S-3 | + +> ### ⚠️ 术语陷阱:底栏「底牌」按钮看的不是「底牌」 +> +> design 术语表:**暗牌** = 发牌时留在桌面的 8 张;**底牌** = 庄家埋牌时重新扣下的 8 张。两者是**不同批的牌,不通用、不互换**。 +> +> 底栏按钮的命名恰好**与术语相反**: +> +> | 按钮 | 实际展示 | design 术语 | 协议字段 | +> | --- | --- | --- | --- | +> | `扣底` | 庄家埋的 8 张 | **底牌** | `maipai.bottomcards` / `PushCards.bottomcards`(仅庄家)/ 结算 `bottom.cards` | +> | `底牌` | 发牌留桌的 8 张 | **暗牌** | `shangzhuang.bottomcards`(庄家恒有,闲家仅 70 分时有)/ `ChooseMain`·`BuryCards.bottomcards`(仅庄家) | +> +> 更容易踩的是:协议里这**两批牌用了同一个字段名 `bottomcards`**,只靠「在哪个包/哪个阶段」区分语义。 +> +> **实现要求**:前端内部一律用 `anCards`(暗牌)/ `diCards`(底牌)两个不同变量名,**不要跟着按钮文案命名**;取值时按所在包判断语义。已列入验收清单(§7.3)。 + +- 精灵:群组 205,号段 1040–1069(5 个按钮 × 2 精灵 = 10)。 ### 2.7 手牌区 【图:全部】 @@ -848,7 +906,7 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | 536 | `BTN_BURY` | `埋牌 (N/8)` | 2 | 帧1=可提交(金黄) 帧2=置灰(未满 8 张) | 180 × 63 | | 537 | `BTN_PLAY` | `出牌` | 2 | 帧1=可出 帧2=置灰 | 157 × 55 | | 538 | `BTN_BOTTOM_FUNC` | 底栏功能钮底(明牌/已出牌/上一轮/底牌共用) | 1 | 深色圆角 | 88 × 30 | -| 539 | `BTN_READY` | 准备【T-15】 | 1 | 待设计 | 待定 | +| ~~539~~ | ~~`BTN_READY`~~ | **不需要**:准备标识用平台的(§0.2) | —— | —— | | 540 | `BTN_TISHI` | 底栏 `踩` / `有分` / `没分` 按钮底(三者共用) | 1 | 深色圆角,同 `BTN_BOTTOM_FUNC` 风格但更窄 | 52 × 30 | | 541 | `BTN_NEXT_ASET` | 结算 `下一局` | 1 | 金黄渐变 | 180 × 65 | | 542 | `BTN_AWARD_CARDS` | 结算 `算奖牌型` | 1 | 蓝色渐变 | 183 × 63 | @@ -862,8 +920,8 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | 573 | `MARK_JOKER_BIG` | 大王 `大` 圆标 | 2 | 帧1=大王 帧2=小王 | 34 × 34 | | 574 | `BADGE_ZHU_PAIR` | `主N` / `对N` 角标底 | 2 | 帧1=黄底(主) 帧2=白底(对) | 44 × 20 | | 575 | `BADGE_MULTIPLE` | 子数/倍数角标底 | 2 | 帧1=蓝底 帧2=橙底 | 34 × 18 | -| 576 | `LABEL_CARDTYPE` | 牌型标签 | ≥6 | 帧1=单张 帧2=对子 帧3=拖拉机 帧4=甩牌 帧5=毙 帧6=垫【T-11】 | 76 × 24 | -| 577 | `MARK_CARD_GROUP` | 手牌牌型分组标记(`拖`圆标 / ⭐ / 🔵)【T-8】 | ≥3 | 待定 | 26 × 26 | +| 576 | `LABEL_CARDTYPE` | 牌型标签 | **1** | **只做「毙」一种**(前端只展示这一个标签)。数据层仍保留 毙 / 垫 / 混合出牌 三种标识以备扩展,但当前不出图、不显示 | 76 × 24 | +| 577 | `MARK_CARD_GROUP` | 手牌牌型标记 | **3** | **帧1=`拖`(拖拉机)帧2=橙色五角星(正2 / 正7)帧3=蓝色五角星(除正2正7外的其他主牌)** | 26 × 26 | | 578 | `MARK_SELECTED` | 手牌选中标记 | 1 | 待定(也可只用上浮,不出图) | 待定 | ### 3.5 面板底图 @@ -889,7 +947,7 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | 633 | `NUM_RESULT_LOSE` | 结算得分数字(输,蓝) | 12 | 同上 | 46 × 62 | | 634 | `TXT_JUDGE` | 判定结果文字 | ≥5 | 帧1=大光 帧2=小光 帧3=过庄 帧4=升级 帧5=投降【待设计】 | 待定 | -> 若改用文字精灵(`SpriteManager.setText`)而非图片数字,631–634 可省。见 T-19。 +> **数字一律用图片多帧精灵**(不用 `SpriteManager.setText`)——参考图里的数字都带描边与渐变,文字精灵做不出这种效果。故 631–634 全部需要出图。 ### 3.7 浮层与气泡 @@ -1022,7 +1080,7 @@ design 与协议均**未定义任何音效**。以下是按牌类游戏常规推 | | 1651 | `MAIN_TITLE_TEXT` | 文字 | `亮主` | —— | | | 1652–1655 | `MAIN_SUIT_BTN_1..4` | 图片 ×4 | 花色按钮底 | `BTN_SUIT_CHOOSE` | | | 1656–1659 | `MAIN_SUIT_ICON_1..4` | 图片 ×4 | 花色图标 | `SUIT_ICON_L` 帧1–4 | -| | 1660–1663 | `MAIN_SUIT_COUNT_1..4` | 文字 ×4 | 该花色**张数**【T-7】 | —— | +| | 1660–1663 | `MAIN_SUIT_COUNT_1..4` | 文字 ×4 | 该花色在庄家手中的**张数** | —— | | | 1664–1667 | `MAIN_SUIT_PAIR_BG_1..4` | 图片 ×4 | 对数角标底 | `BADGE_MULTIPLE` 帧1 | | | 1668–1671 | `MAIN_SUIT_PAIR_TEXT_1..4` | 文字 ×4 | `N对` | —— | | | 1672 | `MAIN_BTN_SURRENDER` | 图片 | `投降` | `BTN_SURRENDER` | @@ -1033,7 +1091,8 @@ design 与协议均**未定义任何音效**。以下是按牌类游戏常规推 | | 1703 | `BURY_BTN_SUBMIT_TEXT` | 文字 | `埋牌 (N/8)` | —— | | **223** 出牌操作条 | 1710 | `PLAY_BTN_SUBMIT` | 图片 | `出牌` | `BTN_PLAY` 帧1可出/帧2灰 | | | 1711 | `PLAY_BTN_SUBMIT_TEXT` | 文字 | —— | —— | -| | 1712 | `PLAY_BTN_TIP`【T-10】 | 图片 | `提示` | `BTN_TIP` | +| | 1712 | `PLAY_BTN_TIP` | 图片 | `提示`(出牌阶段必备) | `BTN_TIP` | +| | 1713 | `PLAY_BTN_TIP_TEXT` | 文字 | 按钮文案 | —— | | **224** 倒计时 | 1150 | `CD_LEFT` | 文字 | 左上家位倒计时 | —— | | | 1151 | `CD_RIGHT` | 文字 | 右上家位倒计时 | —— | | | 1152 | `CD_SELF` | 文字 | 自己操作区倒计时 | —— | @@ -1055,7 +1114,7 @@ design 与协议均**未定义任何音效**。以下是按牌类游戏常规推 | 精灵 ID | 键名 | 类型 | 用途 | 资源 / 帧 | | --- | --- | --- | --- | --- | | 1800 | `RESULT_BOTTOM_PANEL` | 图片 | 底牌区面板底 | `PANEL_BOTTOM_CARDS` | -| 1801 | `RESULT_BOTTOM_TEXT` | 文字 | `叫分N子 底牌 GxM`【T-12】 | —— | +| 1801 | `RESULT_BOTTOM_TEXT` | 文字 | `叫分{multiple}子 底牌 {grade1}x{bottom.multiple}` | —— | | 1802–1804 | `RESULT_GLOW_LEFT/RIGHT/SELF` | 图片 ×3 | 三家分数光晕 | `GLOW_RESULT` 帧1赢/帧2输 | | 1805–1807 | `RESULT_SCORE_LEFT/RIGHT/SELF` | 文字 ×3 | 三家总分(`aset.seatlist[i].grade`) | —— | | 1808–1810 | `RESULT_JF_LEFT/RIGHT/SELF` | 文字 ×3 | 捡分子数得分 `grade_jf`【T-13】 | —— | @@ -1081,7 +1140,7 @@ design 与协议均**未定义任何音效**。以下是按牌类游戏常规推 | 1822 | `AWARD_BOX_RIGHT` | **容器** | 右上家算奖牌容器 | —— | | 1823 | `AWARD_BOX_SELF` | **容器** | 自己算奖牌容器 | —— | | 1824 | `AWARD_CARD_TPL` | **模板** | 算奖牌模板(编辑器里放好、默认隐藏,只作样式来源) | `CARD_FACE_L` | -| 1825–1827 | `AWARD_COUNT_LEFT/RIGHT/SELF` | 文字 ×3 | 奖数 `naward` 等【T-23】 | —— | +| 1825–1827 | `AWARD_COUNT_LEFT/RIGHT/SELF` | 文字 ×3 | **奖数**,与该家的算奖牌**并列显示**(取 `aset.seatlist[i].naward`;是否另列 `chongguan`/`wang` 明细见下) | —— | **生成方式**: @@ -1462,56 +1521,76 @@ codes/config/ ## 7. 待补充清单 -### 7.1 待出设计稿的界面 +> **状态汇总**(2026-08-25):待确认规格 29 项**已答 27 项**,剩 T-9(亮牌条文案)与 T-20(音效,已明确后续补充)。 +> 新增 **§7.5 服务端待补项**——3 条需要改服务端才能实现的前端需求。 + +### 7.1 待出设计稿的界面(后续统一补充) | 编号 | 界面 | 所属 | 说明 | | --- | --- | --- | --- | -| D-1▲ | 建房规则选项区 | §1.1 | **已有样式范式**(他游戏参考图)+ 内容已定(4 行);仍缺**二七王自己的定稿**与在平台建房界面里的确切尺寸/位置 | +| D-1▲ | 建房规则选项区 | §1.1 | 样式范式与内容已定(3 类别 / 4 选项组),缺二七王定稿与在 Layer 27 内的确切尺寸位置 | | D-2 | 70 分暗牌公示(3 秒) | §1.4 | 全场可见的暗牌展示 + 倒计时 | | D-3 | 甩错提示 | §1.7 | 整套收回、只出最小一张的表现 | | D-4 | 报无主提示 | §1.7 | 玩家主牌出空时的全场提示 | -| ~~D-5~~ | ~~踩 / 没分 / 有分 气泡与发起入口~~ | §1.7 | **已定**:入口 = 底栏三按钮(占庄标区,闲家时显示);气泡 = 3×2 六帧、按头像相对位置选朝向 | +| ~~D-5~~ | ~~踩 / 没分 / 有分 气泡与入口~~ | §1.7 | **已定**:入口 = 底栏三按钮(占庄标区);气泡 3×2 六帧、按头像相对位置选朝向 | | D-6 | 明牌面板 | §1.7 | 另两家未出主牌的具体牌面 | -| D-7 | 出牌历史面板 | §1.7 | 按轮次 × 3 家 | +| D-7 | 出牌历史面板 | §1.7 | 按轮次 × 3 家;另需 `上一轮` 的单轮视图 | | D-8 | 判定结果文字(大光/小光/过庄/升N级/投降) | §1.8 | 结算时的判定展示 | | D-9 | 大局总结算 | §1.9 | 三家 × N 局成绩表 | -| D-10 | 解散结算 | §1.10 | **投票界面平台全包**(Layer 420),只剩结算面板,可直接复用 D-9 | -| D-11 | 准备标识 | §1.12 | 或复用平台准备标识;**`下一局` 按钮已有图**(§1.8),准备状态标识仍缺 | -| ~~D-12~~ | ~~左上家已出牌区~~ | §2.3 | **已定**:与右上家左右镜像,无需单独设计稿 | +| D-10 | 解散结算 | §1.10 | 投票界面平台全包(Layer 420),只剩结算面板,可复用 D-9 | +| ~~D-11~~ | ~~准备标识~~ | §1.12 | **已定**:用平台准备标识,子游戏不做 | +| ~~D-12~~ | ~~左上家已出牌区~~ | §2.3 | **已定**:与右上家左右镜像 | +| **D-13** | **`扣底` 按钮的查看面板** | §2.6 | 新增:庄家查看自己埋的 8 张底牌;可与 `底牌`(看暗牌)复用同一个「8 张牌」展示面板,仅数据源不同 | ### 7.2 待确认的规格问题 +**仍未决(2 项)** + | 编号 | 问题 | 影响 | | --- | --- | --- | -| ~~T-1~~ | ~~逆时针方向:下家是 `(seat+1)%3` 还是 `(seat+2)%3`~~ | **已定论**,见 §0.1:`class.paiju.js:264` `get_nextseat = (seat+1)%3`,下家显示在右上 | -| ~~T-2~~ | ~~解散投票界面是平台提供还是子游戏自建?~~ | **已定论**:**平台全包**(`Layer 420 CheckFree_Layer` + `GameUI.openCheck` + `Desk.*_free_room` 一族),子游戏只处理解散结算包 | -| ~~T-3~~ | ~~平台创建房间界面在哪个图层?~~ | **已定论**:**Layer 27 `CreateRoom_Layer`**(`Layer 28 SeniorOptions_Layer` 是代开房/抽水,与玩法规则无关) | -| **T-4** | 是否需要发牌动画? | 动画配置与工期 | -| **T-5** | 手牌排序规则(主牌左/右、副牌花色顺序);选主后重排的动画表现 | 布局算法 | -| **T-6** | 叫分档位按钮第 3 帧(参考图第二行橙色)的含义 | `BTN_CALL_SCORE` 帧数 | -| **T-7** | 选主按钮中央大数字是该花色**张数**还是别的?(design 只要求显示对子数) | `MAIN_SUIT_COUNT_*` 的取值 | -| **T-8** | 埋牌图中牌面上的 `拖` 圆标 / ⭐ / 🔵 是什么?「提示」功能的分组标记? | `MARK_CARD_GROUP` 帧数与含义 | -| **T-9** | 亮牌条文案 `主牌对子: 1对` 与 design §8.2 的四类信息(主/王/7/2)对应关系 | 文案模板 | -| **T-10** | 出牌阶段是否保留 `提示` 按钮?提示什么? | 精灵 1712 是否需要 | -| **T-11** | 牌型标签种类:除单张/对子/拖拉机/甩牌外,是否还要标「毙」「垫」「混合出牌」? | `LABEL_CARDTYPE` 帧数 | -| **T-12** | 结算底牌文案 `叫分2子 底牌 20x0` 的完整规则(未扣底时怎么显示) | 文案模板 | -| ~~T-13~~ | ~~结算面板两个小字标签的正式文案~~ | **已定论**:`牌局分`(`grade_jf`) / `算奖分`(`grade_aw`),见更新后的 `小局结算.png` | -| ~~T-14~~ | ~~结算面板是否展示算奖明细~~ | **已定论**:走独立的**算奖牌型叠加层**(`算奖牌型` 按钮打开),见 `算奖牌型显示.png` | -| **T-15** | 准备状态用平台标识还是自建? | D-11 | -| **T-16** | 顶部 `抓分` 列角标:早期图为 `1子`、三张新图均为 `1倍`。**推定为 `1倍`**,但语义待定:是 `aset.upgrade` 判定倍率,还是 `bottom.multiple` 扣底倍数? | 精灵 1008 的数据源 | -| ~~T-17~~ | ~~倒计时归零后显示 `0` 还是隐藏?~~ | **已定**:**停在 `0` 继续显示**。协议 §0.3 明确归零不触发任何动作、牌局原地等待;隐藏会被误读为「已超时/已跳过」 | -| **T-18** | 底栏 `底牌` 按钮:庄家点了看自己埋的 8 张?闲家点了看什么?未埋牌时呢? | 交互定义 | -| **T-19** | 数字用图片精灵(多帧)还是文字精灵(`setText`)? | 是否需要资源 631–634 | -| **T-20** | **整套音效**:清单、是否需要语音包、是否分男女声 | §4 全节 | -| ~~T-21~~ | ~~手牌 `fan` 的 `spacingMin`/`spacingMax` 取值~~ | **已按参考图算定**:单排 `spacingMax:0, spacingMin:-78`(36 张时露 32px,与参考图实测 33px 吻合);埋牌双排 `spacingMin:-65`。见 §6.7 | -| **T-22** | 算奖牌型叠加层的关闭方式(再点按钮 / 点遮罩 / 独立关闭钮) | §1.8 交互 | -| **T-23** | 算奖叠加层是否并列显示奖数(`chongguan` / `wang` / `naward`) | 精灵 1825–1827 是否需要 | -| ~~T-24~~ | ~~算奖牌 `cards` 超过 8 张时怎么排~~ | **已定论**:改用**精灵复制**(§5.6a),张数不设上限,`fan` 自适应压缩 | -| ~~T-25~~ | ~~`line` 是否支持「逐项不等宽」~~ | **已定**:支持。`line` 增加可选 `items:[{width},…]`,给出时逐项取宽、不给时用统一 `itemWidth`。见 §6.1 | -| **T-26** | 自己发的提示是否需要本地回显气泡(协议不回执,默认看不到) | §6.6 SELF 气泡 | -| ~~T-27~~ | ~~埋牌双排分行策略~~ | **已定**:上排 `floor(n/2)`、下排 `ceil(n/2)`(36 张即 18/18)。参考图的 17/19 无规则依据,按 mock 处理 | -| ~~T-28~~ | ~~两份布局配置的坐标一致性~~ | **已定**:`EQW_Layout` 为权威,`01_SubGame_modify.js` 配置区手工同步并加注释;一致性列入验收清单(§7.3 第 10 条) | -| **T-29** | 建房界面的整体位置与可用尺寸(依赖平台创建房间界面,与 T-3 同源) | §6.9b 的 anchor 起点 | +| **T-9** | 亮牌条文案 `主牌对子: 1对` 与 design §8.2 四类信息(主牌总数/对子数/拖拉机数、王数、7 数、2 数)的对应关系与组合展示格式 | 文案模板;`liangpai` 各字段怎么拼成一行 | +| **T-20** | **整套音效**:清单、是否需要语音包、是否分男女声、倒计时提示音从第几秒起 | §4 全节;**已明确「等待后续补充」** | + +**已定论(27 项)** + +| 编号 | 结论 | +| --- | --- | +| ~~T-1~~ | `class.paiju.js:264` `get_nextseat = (seat+1)%3`,下家显示在右上(§0.1) | +| ~~T-2~~ | 解散投票**平台全包**(Layer 420 + `GameUI.openCheck` + `Desk.*_free_room`),子游戏只处理结算包 | +| ~~T-3~~ | 建房界面 = **Layer 27 `CreateRoom_Layer`**(Layer 28 是代开房/抽水,无关) | +| ~~T-4~~ | **需要发牌动画**:从右往左铺开(§1.2) | +| ~~T-5~~ | 见下方「T-5 手牌排序」小节 | +| ~~T-6~~ | 叫分按钮**按档位位置固定三档配色**(浅黄/金黄/橙)+ 灰=已叫过;按钮底与角标底各 4 帧(§1.3) | +| ~~T-7~~ | 选主按钮中央大数字 = 该花色**张数**,右上角标 = 该花色**对数**(§1.5) | +| ~~T-8~~ | 手牌标记 3 帧:`拖`=拖拉机 / 橙星=**正2正7** / 蓝星=**其他主牌**;前端据 `flower` 本地标注(§1.6) | +| ~~T-10~~ | 出牌阶段**必有** `提示` 按钮;另需服务端下发「应选中的牌」以实现自动选中 → **S-2** | +| ~~T-11~~ | 牌型标签**只做「毙」一种**;数据层保留 毙/垫/混合出牌 三种标识备扩展,当前不出图 | +| ~~T-12~~ | `底牌 20x0` 的 `x` 后面是**扣底倍数**(`bottom.multiple`);未扣底显示 0(§1.8) | +| ~~T-13~~ | 结算两个小字 = `牌局分`(`grade_jf`) / `算奖分`(`grade_aw`) | +| ~~T-14~~ | 算奖明细走独立的**算奖牌型叠加层** | +| ~~T-15~~ | 准备标识**用平台的** | +| ~~T-16~~ | `抓分` 角标 = **当前抓分的倍数**;协议现无此字段 → **S-1** | +| ~~T-17~~ | 倒计时归零**停在 `0`** 不隐藏 | +| ~~T-18~~ | 底栏 5 按钮:`上一轮`/`出牌历史`/`明牌`/`扣底`(庄家看底牌)/`底牌`(**看暗牌**);**术语陷阱见 §2.6**;暗牌可见性 → **S-3** | +| ~~T-19~~ | 数字**一律用图片多帧精灵**(参考图数字带描边渐变,文字精灵做不出),资源 631–634 全部要出 | +| ~~T-21~~ | 手牌单排 `spacingMin:-78`、双排 `-65`(§6.7) | +| ~~T-22~~ | 算奖叠加层:**全屏半透明遮罩本身即关闭热区,点击遮罩关闭**,不另设关闭钮 | +| ~~T-23~~ | 叠加层**需要并列显示奖数**(以 `naward` 为主) | +| ~~T-24~~ | 算奖牌用**精灵复制**,张数不设上限 | +| ~~T-25~~ | `line` 支持可选 `items` 逐项不等宽 | +| ~~T-26~~ | 自己发的提示**需要本地回显**(受控例外,理由见 §1.7) | +| ~~T-27~~ | 埋牌双排 `floor(n/2)` / `ceil(n/2)` | +| ~~T-28~~ | `EQW_Layout` 为权威,配置区手工同步 + 验收检查 | +| ~~T-29~~ | 建房整体位置尺寸随 Layer 27 定,编辑器建好后回填 | + +#### T-5 手牌排序(已定) + +前端排序**对齐服务端主牌序**(design §3),不另造一套——服务端 `class.arith.js` 的 `order_cards(mainflower, cards)` 即权威顺序(从大到小),下发的 `pushlist` 等字段也已按此排好。 + +- **选主前**(叫分阶段):`flower` 未定,只有固定主牌(双王 + 全部 2、7)是主牌,其余按花色分组。 +- **选主后**:`flower` 确定,正 2 / 正 7 升格、主花色普通牌并入主牌段,**必须整体重排**。重排动画暂不做(先直接重画),后续可加。 +- 主牌段落在**左侧**——排序从大到小、主牌最大,自然靠左。 + ### 7.3 验收检查清单 @@ -1531,6 +1610,9 @@ codes/config/ | 10 | `EQW_Layout` 与 `Game_Modify.PLAYER_INFO_LAYOUT` 的头像框坐标一致 | §6.11 | | 11 | 丢弃 `this.data`、仅凭最近一次服务端快照重画,界面完全一致 | 前端 05 §6.2 | | 12 | 所有布局参数都在配置文件里,业务代码无裸值 | §6 | +| 13 | **暗牌 / 底牌未写反**:`底牌` 按钮显示暗牌、`扣底` 按钮显示底牌;内部变量用 `anCards`/`diCards` 区分 | §2.6 术语陷阱 | +| 14 | 叫分按钮配色按**档位位置**取(非按子数),已叫过的档位置灰 | §1.3 | +| 15 | 自己发的提示本地回显后,收到失败回包时能撤掉 | §1.7 | ### 7.4 开发前置条件 @@ -1548,6 +1630,75 @@ codes/config/ - **布局配置骨架与布局求解器**(§6)——`kind` 五型的参数结构与求解逻辑是设计决定、不依赖具体数值,可先写好并用占位坐标跑通,等设计稿到位只改配置值 - `shared/` 同步机制 +### 7.5 服务端待补项(需改服务端才能实现的前端需求) + +以下 3 条来自本轮确认的需求,**当前协议/服务端不支持**,需在服务端补齐后前端才能实现。三条都要同步更新 `packet_protocol.md`。 + +#### S-1 · 「当前抓分的倍数」字段(对应 T-16) + +**需求**:顶部信息条 `抓分` 列的角标要显示「当前抓分的倍数」(参考图 `45 [1倍]`)。 + +**现状**:服务端**没有任何**下发此值的字段。`chupai1/2/3` 只带 `grade`(本轮闲家得分),倍数类字段(`aset.upgrade`、`bottom.multiple`)**都要到结算包才有**——出牌过程中前端拿不到。 + +**建议实现**:服务端已有 `class.arith.js` 的 `get_upgrade(call, grade, q)`(返回带符号判定倍率:3 大光 / 2 小光 / 1 过庄 / −N 升 N 级),出牌过程中随时可算。在 `chupai1/2/3`(以及重连包 `PushCards`)里增加一个字段,例如: + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `curmultiple` | 整数 | 按当前累计捡分实时算出的判定倍率绝对值,供顶部 `抓分` 角标显示 | + +**需先确认语义**(本条尚未完全定死):角标要显示的到底是 +(a)**当前捡分对应的判定倍率**(大光×3 / 小光×2 / 过庄×1 / 升N级×N)的实时预览——即「若现在结束是几倍」;还是 +(b)别的口径。 +按字面「当前抓分的倍数」以及 `get_upgrade` 现成可用,(a) 最可能。**确认 (a) 之后即可动工**。 + +> 前端**不得自算**这个值——判定倍率属服务端权威裁定(红线:服务器权威、前端只显示不自算)。 + +#### S-2 · 下发「应当选中的牌」(对应 T-10) + +**需求**:某些情况下(跟牌存在必出牌、或唯一合法出法)服务端下发应选中的牌,前端收到后自动选中。 + +**现状**:`chupai1/2/3` 下发包里没有此字段。 + +**好消息——算法已存在,只差下发**:`class.arith.js:737` `get_followcard(mainflower, inhandcards, startcount, startflower, startcardtype)` 已经返回 + +``` +{ mustcard: 必出的牌列表, cancard: 可出的牌列表, cantype: 可出牌需要的牌型 } +``` + +目前只在 `class.arith.js:1055` 用于内部合法性校验,**从未下发**。建议在 `chupai1/2/3` 里**按座位差异化**下发给「下一个出牌者」: + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `mustcard` | 数组 | 该座位本轮的必出牌 id 列表;**只发给 `nextseat` 对应的那一家**,其他两家不带 | + +**下发面注意**(红线:发全 ≠ 发多):`mustcard` 是**该玩家自己手牌**的子集,只发给他本人不泄露任何信息;**绝不可整表下发三家的 `mustcard`**——那等于把另两家的手牌结构透露出去。 + +**不违反「请求包只带意图」**:方向是服务端 → 前端的建议,前端仍只回传 `cards`,合法性最终由服务端校验。 + +#### S-3 · 底栏「底牌」按钮的暗牌可见性(对应 T-18)⚠️ 与 design 冲突 + +**需求**:底栏 `底牌` 按钮让**所有人**查看发牌时的 8 张**暗牌**。 + +**冲突**:design §4 明确—— + +> **非 70 分坐庄**:桌面 8 张暗牌**只有庄家可见**,庄家查看后摸入手牌。 +> **70 分坐庄**:摸暗牌之前先向所有玩家亮出 3 秒。 + +协议也与之一致:`shangzhuang.bottomcards` **庄家恒有、闲家仅 70 分坐庄时才有**;重连包 `ChooseMain` / `BuryCards` / `PushCards` 的 `bottomcards` 全部标注「**只有庄家有此属性**」。 + +**因此闲家在非 70 分局根本收不到暗牌数据,「所有人可查看」在当前协议下无法实现。** 且这属于服务端红线「**下发即泄露**——包到了客户端就能被抓包看到,『前端拿到但不渲染』不算防护」,不能靠前端自觉。 + +**需要在三种方案里选一个**: + +| 方案 | 含义 | 影响 | +| --- | --- | --- | +| **(a) 限定可见范围**(推荐) | `底牌` 按钮只在**能合法看到暗牌**时可用:庄家全程可用;闲家**仅 70 分坐庄局**(已公示过)可用,其余局按钮置灰或不显示 | 协议无需改,只改前端显隐条件;不破坏 design | +| **(b) 局末开放** | 牌局结束后向所有人下发暗牌,`底牌` 按钮在结算阶段才可用 | 需在 `jiesuan` 包补暗牌字段;不影响对局中的信息对称 | +| **(c) 改规则** | 暗牌对所有人全程可见 | **与 design §4 直接冲突**,需先改 design;且削弱 70 分公示这条规则的意义 | + +**在此确认前,前端按 (a) 实现**(最保守、不需要改服务端、不违反任何红线),并在代码里留注释指向本条。 + + --- ## 附:本文与其他文档的关系 @@ -1557,6 +1708,6 @@ codes/config/ | `server/games/erqiwang/docs/design/design.md` | **玩法规则权威源**。本文引用其条款,不重新定义规则 | | `server/games/erqiwang/docs/protocol/packet_protocol.md` | **协议字段权威源**。本文的「渲染什么」全部溯源到具体字段 | | `docs/client/development-guide/` | **前端规范权威源**。ID 范围、组件范式、红线均以其为准 | -| `docs_dev/uiref/*.png` | 参考图,12 张(11 张牌桌态 + 1 张建房**样式范式**,后者内容属他游戏、不可照抄) | +| `docs_dev/uiref/*.png` | 参考图,13 张(11 张牌桌态 + 叫分按钮面板 + 1 张建房**样式范式**,末者内容属他游戏、不可照抄) | | `client/js/gameabc-framework/ui/AlignmentUtils.js` | **布局求解的框架能力**。§6 的配置参数名与其入参一一对应,配置可原样喂入 | | `client/js/gameabc-framework/templates/*.template.js` | 常量文件写法蓝本。本清单落地为常量文件时按其格式 |