结算与算奖(§6.3/§7/§8) - 扣底倍数改线性:单张×1、主对×2、N连对×2N - 算子实现常规算子 + 爬坡两套(大光×3、Q=40 / 爬坡分段),X=基础子数×判定倍率 - 常规算奖只计庄家;连对链修复(传实际主花色);移除 ≥10 老主误加奖与设计外的 「冲关必叫/四王必踢」作废;算奖快照取庄家埋牌后28张(新增 get_seat_cards_award) - 算奖并入结算改为 X×(2Ni−Nj−Nk);傍王按房间开关、庄闲每王1奖 出牌与甩牌(§5.4) - 副牌绝对禁甩;甩牌最大性按对手全部手牌逐分量判定(新增 trump_rank/ decompose_trump/opp_can_beat_flush);甩错惩罚(收回、只打最小一张、下发 shuaicuo) - 修复 can_followcard 引用未定义 tuolaji_list 的崩溃、can_playcard 14张上限失效 开局/投降/暗牌(§4) - 投降改为选主阶段(step2)与选主互斥、不埋牌、算奖用庄家36张;埋牌后直进出牌(删废弃step4) - 70分暗牌摸牌前向所有玩家亮3秒(+ancard3s),非70分不再泄露暗牌给闲家;叫分上限≤70 查牌/亮牌(§8.2/§9) - 新增亮牌 get_liangpai(庄家埋牌后28张按阈值统计);报无主统计与亮牌按查牌位门控 - 新增 mingpai 明牌 RPC(可查牌+已报无主时查看他家全部主牌) 房间与配置(§10) - 局数6/12、房主扣卡2/4;新增 class.config.js 以位串解析 roomtype(唯一入口 SSOT) - 清理 do_choiceflower 死代码 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
48 lines
2.1 KiB
JavaScript
48 lines
2.1 KiB
JavaScript
///////////////////////////////////////////////////
|
||
////// cls_youle_erqiwang_config: 房间配置解析 //////
|
||
///////////////////////////////////////////////////
|
||
//
|
||
// roomtype 采用定长数字位串(字符串),每一位对应一个开关,'0'/'1',方便前端逐项勾选:
|
||
// 位0 局数: '0'→6局 '1'→12局
|
||
// 位1 扣卡方式: '0'→房主扣卡 '1'→AA每人扣卡
|
||
// 位2 傍王: '0'→关 '1'→开
|
||
// 位3 爬坡: '0'→常规算子 '1'→爬坡
|
||
// 位4 查牌: '0'→可查牌 '1'→不查牌
|
||
// 示例 "10100" = 12局 / 房主扣卡 / 傍王开 / 常规算子 / 可查牌
|
||
// 缺省 "00000" = 6局 / 房主扣卡 / 无傍王 / 常规算子 / 可查牌(对齐 design 缺省)
|
||
//
|
||
// 本模块是 roomtype 位串格式的唯一解析入口(SSOT);游戏逻辑一律经 parse() 读取,
|
||
// 不得在别处按下标硬解析。
|
||
//
|
||
var cls_youle_erqiwang_config = cls_youle_erqiwang_config || {
|
||
|
||
//位索引常量
|
||
IDX_ASET: 0, //局数
|
||
IDX_DEDUCT: 1, //扣卡方式
|
||
IDX_BANGWANG:2, //傍王
|
||
IDX_CLIMB: 3, //爬坡
|
||
IDX_NOCHECK: 4, //查牌
|
||
|
||
//取第 idx 位是否为 '1';roomtype 缺失/过短一律按 '0'(缺省)处理
|
||
bit: function(roomtype, idx){
|
||
if (!roomtype || typeof roomtype != "string"){
|
||
return false;
|
||
}
|
||
if (idx < 0 || idx >= roomtype.length){
|
||
return false;
|
||
}
|
||
return roomtype.charAt(idx) == "1";
|
||
},
|
||
|
||
//解析 roomtype 位串为具名配置对象
|
||
parse: function(roomtype){
|
||
var cfg = {};
|
||
cfg.aset12 = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_ASET); //true=12局 false=6局
|
||
cfg.deductAA = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_DEDUCT); //true=AA每人 false=房主
|
||
cfg.bangwang = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_BANGWANG);//true=开傍王
|
||
cfg.climb = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_CLIMB); //true=爬坡
|
||
cfg.nocheck = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_NOCHECK); //true=不查牌
|
||
return cfg;
|
||
}
|
||
}
|