二七王:夹具补甩牌样本,重连恢复 baozhu
导出脚本原来全出单张,单张一手无所谓顺序,服务端两个顺序口径的分岔 在夹具里永远测不出来。改出牌策略(种子不变):首家优先合法甩牌 → 领 最大的一对 → 最小单张;跟家凑合法跟牌;提交时刻意反转成升序,模拟真实 客户端的点击顺序,把「下发顺序是否被请求顺序污染」暴露出来。 中段 step5 快照锚点从 1 个加到 5 个——开局那三张快照的 pushlist 还是空的, 只有打到一半的快照才真的比对到出牌历史。 重导结果:51 手出牌,一手多张 30 手、合法甩牌 4 手,deskinfo 快照 18 张, 仍覆盖 step 1/2/3/5/6;连跑两次逐字节相同。 该样本在修复前使 test_consistency 5 个比对点转红,修复后全绿。 前端 ResyncHandler 补上 PushCards.baozhu 的映射(服务端已补发), test_resync 加正反两条断言。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -28,7 +28,7 @@ EQW_ResyncHandler.handleDeskinfo({
|
||||
grade: 25, playproc: { round: 4, currseat: 1, cards: [[9],[],[]] },
|
||||
seatlist: [[0,0,0,0,[5,2]],[0,0,0,0,[6,1]],[0,0,0,0,[7,3]]],
|
||||
liangpai: { cards: [52,53] }, pushlist: [[[1],[2],[3]]],
|
||||
curmultiple: 2, mustcard: [4,5]
|
||||
curmultiple: 2, mustcard: [4,5], baozhu: 1
|
||||
}
|
||||
});
|
||||
t.eq('总局数', S.room.asetCount, 6);
|
||||
@@ -46,6 +46,17 @@ t.eq('亮牌', S.table.liangpai, { cards: [52,53] });
|
||||
t.eq('必出牌', S.my.mustCard, [4,5]);
|
||||
t.eq('控制权(由 playproc.currseat 给出)', S.turn.seat, 1);
|
||||
t.eq('重连发全量重画事件', evts.indexOf('EQW_RESYNC_ALL') >= 0, true);
|
||||
// 报无主:明牌按钮与余主公示的开关(协议 PushCards.baozhu)。
|
||||
// 增量路径由 chupai1/2/3 的 baozhu 维护,重连路径必须一并恢复,
|
||||
// 否则重连后按钮凭空消失(两条路径对同一状态给出不同结果)。
|
||||
t.eq('报无主(PushCards.baozhu)', S.aset.baozhu, 1);
|
||||
// 反面:不查牌房服务端恒发 0,前端照写不反推
|
||||
S.reset(); S.room.mySeat = 1;
|
||||
EQW_ResyncHandler.handleDeskinfo({
|
||||
count: 6, idx: 2, PlayerInfo: [0,0,0], step: 5, MyCards: [1],
|
||||
PushCards: { banker: 0, flower: 3, playproc: { round: 1, currseat: 1, cards: [[],[],[]] }, baozhu: 0 }
|
||||
});
|
||||
t.eq('不查牌 baozhu 恒 0', S.aset.baozhu, 0);
|
||||
|
||||
// ================= deskinfo:step 1 叫分阶段 =================
|
||||
S.reset(); evts.length = 0;
|
||||
|
||||
Reference in New Issue
Block a user