二七王:design 与协议文档统一「底牌 / 埋牌底牌」术语
原命名与前端界面倒挂——界面上「底牌」按钮查看的正是发牌留桌那 8 张, 旧术语却把它叫「暗牌」,极易写反。现统一为: - 底牌 = 发牌时没有发给玩家、扣在桌面的 8 张(原「暗牌」) - 埋牌底牌 = 庄家埋牌时从手里扣下的 8 张(原「底牌」) design.md:全文 38 处表述替换(术语表、§4 坐庄流程、§6.3 扣底、§7.1 70 分说明、§8 算奖快照、§12.1 流程、§12.3 阶段速览),并在术语表后补 「术语变更记录」说明改名缘由与协议字段尚未拆分的现状。 packet_protocol.md:新增 §0.0 术语小节置于全文之首,逐条列出 bottomcards 在哪些包里指底牌、哪些包里指埋牌底牌;相关字段说明同步改用 新术语,并在 maipai / PushCards 两处加同名不同义的警示。 字段名本身暂未改动(底牌保持 bottomcards、埋牌底牌拟改 burycards), 拆分计划见前端清单 §7.5 S-4;在拆分落地前收发两侧按包判断语义。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,24 @@
|
||||
|
||||
## 0. 通用约定(所有包适用,下文各表不再逐一重复)
|
||||
|
||||
### 0.0 术语:底牌 vs 埋牌底牌(先读这一条)
|
||||
|
||||
本项目于 2026-08-25 修订了这两个术语(`design.md` §1 已同步,本文亦已改用新称):
|
||||
|
||||
| 术语 | 指哪 8 张 | 旧称 |
|
||||
| --- | --- | --- |
|
||||
| **底牌** | 发牌时**没有发给玩家**、扣在桌面的 8 张 | ~~暗牌~~ |
|
||||
| **埋牌底牌** | 庄家**埋牌**时从手里扣下的 8 张 | ~~底牌~~ |
|
||||
|
||||
⚠️ **两批牌目前共用同一个字段名 `bottomcards`**,只能靠「出现在哪个包」区分语义:
|
||||
|
||||
| 字段位置 | 实际含义 |
|
||||
| --- | --- |
|
||||
| `shangzhuang.bottomcards`、`deskinfo.ChooseMain.bottomcards`、`deskinfo.BuryCards.bottomcards` | **底牌** |
|
||||
| `maipai.bottomcards`、`deskinfo.PushCards.bottomcards`、结算 `bottom.cards` | **埋牌底牌** |
|
||||
|
||||
字段名拆分(底牌保持 `bottomcards`、埋牌底牌改 `burycards`)的计划见 `docs_dev/二七王-UI资源与精灵清单.md` §7.5 的 **S-4**;**在拆分落地前,收发两侧都必须按上表判断语义**。
|
||||
|
||||
### 0.1 成败标志 `data.success`
|
||||
|
||||
**每一个「服务器 → 客户端」的包,`data` 都必带 `success`**(布尔):
|
||||
@@ -137,9 +155,9 @@
|
||||
| banker | 整数 | 庄家的位置序号 |
|
||||
| grade | 整数 | 庄家的叫分 |
|
||||
| multiple | 整数 | 叫分对应的基础子数 `get_base_bycall(call, climb)`,**随房间「爬坡」开关取值**(roomtype 位3):常规算子 65→2 60→3 55→4 50及以下→6;爬坡 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;无叫分→0。与结算包 `aset.multiple` 同源同值(design §7.1/§7.3.1)|
|
||||
| bottomcards | 数组 | 8 张暗牌。**庄家恒有**;**闲家仅当 70 分坐庄时才有**(供 3 秒亮牌用),非 70 分时闲家没有该属性(暗牌只有庄家可见,design §4)|
|
||||
| ancard3s | 整数 | 仅 70 分坐庄时出现且为 `1`:表示庄家把暗牌摸入手前,需将 `bottomcards` 这 8 张暗牌向所有玩家亮出 3 秒(design §4/§7.1);非 70 分无此属性 |
|
||||
| cards | 数组 | 拿了暗牌后手上的牌(36 张,含暗牌),庄家才有此属性,闲家没有该属性 |
|
||||
| bottomcards | 数组 | 8 张**底牌**(发牌时没发给玩家、扣在桌面的 8 张)。**庄家恒有**;**闲家仅当 70 分坐庄时才有**(供 3 秒亮牌用),非 70 分时闲家没有该属性(底牌只有庄家可见,design §4)|
|
||||
| ancard3s | 整数 | 仅 70 分坐庄时出现且为 `1`:表示庄家把底牌摸入手前,需将 `bottomcards` 这 8 张**底牌**向所有玩家亮出 3 秒(design §4/§7.1);非 70 分无此属性 |
|
||||
| cards | 数组 | 拿了底牌后手上的牌(36 张,含底牌),庄家才有此属性,闲家没有该属性 |
|
||||
| countdown | 整数 | 选主倒计时 |
|
||||
| touxiang | 整数 | 是否允许投降 0:不允许 1:允许(仅 70 分坐庄为 1)。投降与选主互斥、同为选主阶段(step2)的决策,见 touxiang 包与 design §4 |
|
||||
|
||||
@@ -209,7 +227,7 @@
|
||||
| 参数名 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| cards | 数组 | 埋牌后手上的牌,去掉了埋牌,庄家才有此属性,闲家没有该属性 |
|
||||
| bottomcards | 数组 | 埋的牌,庄家才有此属性,闲家没有该属性 |
|
||||
| bottomcards | 数组 | **埋牌底牌**(庄家埋下的 8 张),庄家才有此属性,闲家没有该属性。⚠️ 与 `shangzhuang.bottomcards`(底牌)**同名不同义**,见文首「术语」|
|
||||
| seat | 整数 | 出牌者的位置序号(即将首出的庄家)|
|
||||
| countdown | 整数 | 出牌倒计时 |
|
||||
| liangpai | json | 庄家亮牌信息(design §8.2),**只有闲家、且可查牌模式、且庄家埋牌后手牌达标时才有**。结构(各字段按是否达标出现):`zhu` 主牌总数、`zhupair` 主对子数、`zhutuo` 主拖拉机组数(固定主牌王+2+7 总数 ≥10 时有这三项);`wang` 王数(王≥3 时);`qi` 7 数(7≥6 时);`er` 2 数(2≥6 时)。都不达标则无此属性。统计口径是庄家**埋牌后 28 张的静态快照**(排除已埋的 8 张、但包含之后已打出的牌),全局固定不随出牌缩水,故重连包里的同名字段取值一致 |
|
||||
@@ -386,11 +404,13 @@
|
||||
|
||||
**bottom(抠底包,仅正常出牌结算存在;`cards` 恒有,其余仅闲家抠底时有)**
|
||||
|
||||
> 本分组的 `cards` 是**埋牌底牌**(庄家埋下的 8 张),不是发牌留桌的底牌。
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| cards | 数组 | 底牌,投降和解散无此属性 |
|
||||
| cards | 数组 | **埋牌底牌**(庄家埋下的 8 张),投降和解散无此属性 |
|
||||
| multiple | 整数 | 闲家抠底倍数,闲家没抠底无此属性,投降和解散无此属性 |
|
||||
| grade1 | 整数 | 底牌分数,闲家没抠底无此属性,投降和解散无此属性 |
|
||||
| grade1 | 整数 | 埋牌底牌的分数,闲家没抠底无此属性,投降和解散无此属性 |
|
||||
| grade2 | 整数 | 闲家抠底得分,闲家没抠底无此属性,投降和解散无此属性 |
|
||||
|
||||
**aset(单局结算包)**
|
||||
@@ -496,7 +516,7 @@
|
||||
| call | 整数 | 叫分 |
|
||||
| multiple | 整数 | 叫分对应的基础子数 `get_base_bycall(call, climb)`,**随房间「爬坡」开关取值**(roomtype 位3):常规算子 65→2 60→3 55→4 50及以下→6;爬坡 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;无叫分→0。与结算包 `aset.multiple` 同源同值(design §7.1/§7.3.1)|
|
||||
| countdown | 整数 | 选主倒计时 |
|
||||
| bottomcards | 数组 | 8 张暗牌,**只有庄家有此属性**(暗牌仅庄家可见;70 分的 3 秒亮牌是上庄时的一次性事件,重连不重放)|
|
||||
| bottomcards | 数组 | 8 张**底牌**(发牌留桌的 8 张),**只有庄家有此属性**(底牌仅庄家可见;70 分的 3 秒亮牌是上庄时的一次性事件,重连不重放)|
|
||||
| touxiang | 整数 | 是否允许投降 0:不允许 1:允许(仅 70 分坐庄为 1)。投降与选主互斥、同一决策点,见 touxiang 包与 design §4 |
|
||||
|
||||
> 选主阶段前端需在每个花色按钮上显示"该花色在庄家手中的对子数"(design §4/§11)——庄家的完整手牌由 `MyCards` 提供(庄家为 36 张),对子数由前端据此计算,服务端不额外下发。
|
||||
@@ -510,7 +530,7 @@
|
||||
| multiple | 整数 | 叫分对应的基础子数 `get_base_bycall(call, climb)`,**随房间「爬坡」开关取值**(roomtype 位3):常规算子 65→2 60→3 55→4 50及以下→6;爬坡 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;无叫分→0。与结算包 `aset.multiple` 同源同值(design §7.1/§7.3.1)|
|
||||
| flower | 整数 | 主牌花色 |
|
||||
| countdown | 整数 | 埋牌倒计时 |
|
||||
| bottomcards | 数组 | 8 张暗牌,**只有庄家有此属性**(暗牌仅庄家可见;70 分的 3 秒亮牌是上庄时的一次性事件,重连不重放)|
|
||||
| bottomcards | 数组 | 8 张**底牌**(发牌留桌的 8 张),**只有庄家有此属性**(底牌仅庄家可见;70 分的 3 秒亮牌是上庄时的一次性事件,重连不重放)|
|
||||
|
||||
> 埋牌阶段无投降(投降是 step2 与选主互斥的选择,选主后即不可再投降)。
|
||||
|
||||
@@ -523,7 +543,7 @@
|
||||
| multiple | 整数 | 叫分对应的基础子数 `get_base_bycall(call, climb)`,**随房间「爬坡」开关取值**(roomtype 位3):常规算子 65→2 60→3 55→4 50及以下→6;爬坡 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;无叫分→0。与结算包 `aset.multiple` 同源同值(design §7.1/§7.3.1)|
|
||||
| flower | 整数 | 主牌花色 |
|
||||
| countdown | 整数 | 出牌倒计时 |
|
||||
| bottomcards | 数组 | 埋的牌,只有庄家有此属性 |
|
||||
| bottomcards | 数组 | **埋牌底牌**(庄家埋下的 8 张),只有庄家有此属性。⚠️ 与 `ChooseMain`/`BuryCards.bottomcards`(底牌)**同名不同义** |
|
||||
| grade | 整数 | 当前的捡分分数 |
|
||||
| gradecards | 数组 | 当前的捡分分牌,只有闲家有此属性 |
|
||||
| playproc | json | 当前出牌情况 `o_paiju.playproc`:`round` 第几轮、`start` 本轮首出位置、`currseat` 当前出牌位置、`startcount` 首出张数、`startflower` 首出花色、`starttype` 首出牌型、`maxseat` 本轮最大者位置、`maxcard` 最大牌编码、`cards` 本轮三家各自出的牌(数组下标=位置序号)、`shuai_demand` 首家甩牌的分量需求 `{tractors:[连对数...],pairs,singles}`(非甩牌为 null,供跟牌逐分量强制匹配,design §5.4.4)。**两种查牌模式下恒有此属性**——`cards` 是当前这一轮桌面上的牌,不属于「查牌」,屏蔽了后出的人就无从跟牌(design §9 末尾)|
|
||||
|
||||
Reference in New Issue
Block a user