二七王:修复跟牌判定依赖客户端入参顺序(可翻转本轮胜负与结算)
can_followcard 尾段计算 cardvalue/noflower/nopair 时用的是入参原始数组 followcards(客户端提交顺序),而 get_pairlist/get_tuolaji_list 都按降序 相邻取对。端到端实测:闲家用主拖拉机毙牌且为末轮,降序提交时闲家赢下本轮 (捡分 40、扣底 ×4),把同一手牌打乱成 [51,50,105,104] 后对子漏判、 cardvalue 归 0,变成庄家赢、闲家 0 分大光、不扣底——同一手合法牌仅靠数组 顺序就能翻转胜负、捡分归属与最终结算,同源问题还能抹掉 noflower 缺门标志 污染 §9 下发给全场的牌况表。 改为在 min_ary_deduct 削减 _followcards 之前另存完整排序快照 _sortfollow, 尾段 8 处全部改用它(_followcards 会被削减、不可复用)。 顺带给 get_disbandRoom 加空守卫:平台在 makewar 后立刻置 battlestate=1, 而首局是延迟 1 秒创建的,这段窗口内解散会在 curr_paiju() 的 undefined 上 解引用抛异常、打断平台解散链路;现返回 null 走平台既有的「不带 deskfree」分支。 补 8 条回归(入参顺序无关性 5 条 + 端到端 1 条 + 解散空守卫 2 条), 已用「回退修复 → 用例转红」反验有效性;全套单测 401 项全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -217,10 +217,21 @@ var cls_youle_erqiwang_export = cls_youle_erqiwang_export || {
|
||||
}
|
||||
|
||||
//解散房间
|
||||
//平台在 battlestate==1 时即会调用(rpc.js 开战处 makewar 后立刻置 1),而本游戏的首个牌局
|
||||
//是 makewar 里 min_ontimeout(...,1000) 延迟创建的——这段窗口内 o_desk 已存在但 paiju_list 为空。
|
||||
//此时返回 null(平台对 null 的 _deskfree 有分支:照常发解散包、不带 deskfree),
|
||||
//而不是让 curr_paiju() 的 undefined 解引用抛异常打断整条解散链路。
|
||||
exp.get_disbandRoom = function(o_room){
|
||||
if (!o_room.o_desk){
|
||||
return null;
|
||||
}
|
||||
var paiju = o_room.o_desk.method.curr_paiju();
|
||||
if (!paiju){
|
||||
return null;
|
||||
}
|
||||
var msg = {};
|
||||
return o_room.o_desk.method.curr_paiju().method.get_paiju_account(2, msg);
|
||||
}
|
||||
return paiju.method.get_paiju_account(2, msg);
|
||||
}
|
||||
|
||||
return exp;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user