二七王:实现 §11 闲家三提示(踩/没分/有分) + 明确副7/副2 成对语义
全面符合性再审查(4 维度独立对抗核对)结论:与计分/发牌/出牌/跟牌/甩牌 相关规则均一致,无缺陷;仅 §11 闲家三提示服务端缺失、副7/副2 异花色 成对语义存疑两项待办。本次按用户裁定落地: 1. §11 三提示(新增 mod.tishi):闲家在出牌阶段(step5)发 踩/没分/有分, 服务端不校验真实性、只 SendPack 转发给对家(另一闲家 3-banker-seat); 庄家无对家不参与;非法 tip/非出牌阶段/庄家发均拒。 协议补 packet_protocol §13.7/13.8;test_rpc +11 例(正反+边界)。 2. 副7/副2 成对语义:裁定"只同花色同点数两副成对"(代码本已如此,无需改), 在 design §3 补说明闭合该反复出现的存疑(异花色副7 不成对)。 compliance 文档同步:§11 状态转✅、首轮结论摘要加"非当前状态"说明、 计数 259→270。全套 270 项断言全绿(rpc 34→45)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -126,4 +126,31 @@ t.eq('埋牌 不查牌 闲家无liangpai', mpXian && mpXian.data.liangpai, undef
|
||||
t.eq('重连 可查牌 PushCards有seatlist', E.get_deskinfo(e.o_room, 1).PushCards.seatlist !== undefined, true);
|
||||
t.eq('重连 不查牌 PushCards无seatlist', E.get_deskinfo(en.o_room, 1).PushCards.seatlist, undefined);
|
||||
|
||||
// ===================== §11 闲家出牌提示 tishi(只转发给对家,不校验)=====================
|
||||
const mkTip = (step, banker) => ({ step, banker });
|
||||
// 闲家1 发"踩"(tip=1),banker=0 → 对家=2;默认 seatlist fromid==座位号
|
||||
let tp = setup("00000", mkTip(5, 0)); mod.tishi(pack(1, { tip: 1 }));
|
||||
t.eq('提示 合法 下发1包', tp.sent.length, 1);
|
||||
t.eq('提示 只发给对家(fromid=2)', tp.sent[0] && tp.sent[0].fromid, 2);
|
||||
t.eq('提示 rpc=tishi', tp.sent[0] && tp.sent[0].rpc, 'tishi');
|
||||
t.eq('提示 data.seat=发出者1', tp.sent[0] && tp.sent[0].data.seat, 1);
|
||||
t.eq('提示 data.tip=1(踩)', tp.sent[0] && tp.sent[0].data.tip, 1);
|
||||
// 闲家2 发"有分"(tip=3) → 对家=1
|
||||
tp = setup("00000", mkTip(5, 0)); mod.tishi(pack(2, { tip: 3 }));
|
||||
t.eq('提示 闲2发→对家1(fromid=1)', tp.sent[0] && tp.sent[0].fromid, 1);
|
||||
// banker=2 时,闲家0 发"没分"(tip=2) → 对家=1
|
||||
tp = setup("00000", mkTip(5, 2)); mod.tishi(pack(0, { tip: 2 }));
|
||||
t.eq('提示 banker=2·闲0发→对家1', tp.sent[0] && tp.sent[0].fromid, 1);
|
||||
// 庄家发 → 拒(庄家无对家)
|
||||
tp = setup("00000", mkTip(5, 0)); mod.tishi(pack(0, { tip: 1 }));
|
||||
t.eq('提示 庄家发 拒', tp.sent.length, 0);
|
||||
// 非出牌阶段 → 拒
|
||||
tp = setup("00000", mkTip(3, 0)); mod.tishi(pack(1, { tip: 1 }));
|
||||
t.eq('提示 非出牌阶段(step3) 拒', tp.sent.length, 0);
|
||||
// 非法 tip / 缺 tip → 拒
|
||||
tp = setup("00000", mkTip(5, 0)); mod.tishi(pack(1, { tip: 9 }));
|
||||
t.eq('提示 非法tip=9 拒', tp.sent.length, 0);
|
||||
tp = setup("00000", mkTip(5, 0)); mod.tishi(pack(1, {}));
|
||||
t.eq('提示 缺tip 拒', tp.sent.length, 0);
|
||||
|
||||
process.exit(t.done('rpc') ? 0 : 1);
|
||||
|
||||
Reference in New Issue
Block a user