v1.4.0
和牌判定与役种逻辑大修
本版本全面修复了「很多情况下和不了牌」的问题,重写了和牌判定与役种结算的关键路径。
和不了牌的根因修复
- 修复第一巡闲家荣和被吞:第一巡内的闲家荣和会被 mahjong4j 判定为人和役满,而插件在规则未启用古役时剔除人和后直接跳过了普通役计算,导致被判「无役」无法和牌。现在剔除被禁用的役满后会正确回落到普通役结算。
- 修复门清玩家首巡无法荣和:荣和候选筛选中错误地排除了「尚未弃过牌的门清玩家」,该限制没有任何规则依据,已移除。
- 修复天和/地和/人和判定窗口过宽:原「第一巡」判定为全员弃牌 ≤1 张,导致庄家第二摸自摸被误判天和、闲家第二摸误判地和。现在役种判定要求和牌者本人零弃牌,并在荣和/自摸的判定与结算中使用同一状况对象。
崩溃修复
- 修复赤5加杠导致整局卡死:对三张普通 5 的碰副露加杠摸到的赤 5 时,副露查找因枚举不等返回空导致 NPE、回合协程中断。现按牌面值匹配副露。
规则与计分修复
- 振听判定补全:只要任意一张听牌曾被自己打出即构成振听,而不再只检查当前荣和的那张牌。
- 暗杠后可以立直:原先门清暗杠后因手牌数检查写死 14 张而永远无法宣告立直。
- 一发判定修复:改用精确的立直弃牌索引(避免同种牌错位)、按实际玩家数计算巡目窗口,且两立直现在也能正确获得一发。
- 双役满判定生效:听牌计算不再包含红宝牌与占位牌的重复项,国士无双十三面、四暗刻单骑、纯正九莲宝灯现在可以被正确识别为双倍役满。