Home

Awesome

日本麻将助手

主要功能

支持平台

导航

安装

分下面几步:

  1. 在浏览器地址栏中输入 chrome://flags/#allow-insecure-localhost,然后把高亮那一项从「已禁用」改为「已启用」(若没有该项见此)。该功能仅限基于 Chrome 内核开发的浏览器。

    (不同浏览器/版本的描述可能不一样,如果打开的页面是英文的话,高亮的就是 Allow invalid certificates for resources loaded from localhost,把它的 Disabled 改成 Enabled)

    设置完成后重启浏览器

  2. 安装浏览器扩展 Header Editor,用于修改 code.js 文件,发送游戏中的玩家操作信息至本地运行的助手。

    若能翻墙请前往 谷歌商城 下载该扩展。或者 从 CRX 安装该扩展(若无法安装试试 360 浏览器)。

    安装好扩展后点进该扩展的管理界面,点击导入和导出,在下载规则中填入 https://endlesscheng.gitee.io/public/mahjong-helper.json,点击右侧的下载按钮,然后点击下方的保存。(如果您是海外用户,请在下载规则中填入 https://mjhelper.github.io/mahjong-helper.json 以获得更好的加载速度。)

  3. 前往 releases 页面下载助手。解压到本地后打开。

  4. 如果您的浏览器之前打开过雀魂网页,需要清除缓存:打开雀魂网页,按下 F12,右键地址栏左侧的刷新按钮,选择「清空缓存并进行硬刷新」。如遇问题,请参考 #104

安装完成!在使用助手前,请先阅读本页面下方的示例,以了解助手输出信息的含义。

从源码安装此助手

您也可以选择从源码安装此助手:

go get -u -v github.com/EndlessCheng/mahjong-helper/...

完成后程序生成于 $GOPATH/bin/ 目录下。

使用说明

按照上述流程安装完成后,启动助手,选择平台即可。

需要先启动本助手,再打开网页。

注意事项

终端有个小 bug,在使用中若鼠标点击到了空白处,可能会导致终端卡住,此时按下回车键就可以恢复正常。

示例

牌效率

每个切牌选择会显示进张数、向听前进后的进张数、可以做的役种等等信息。

助手会综合每个切牌选择的速度、打点、和率,速度越快,打点和率越高的越靠前。

每个切牌选择以如下格式显示:

进张数[改良后的进张数加权均值] 切哪张牌 => 向听前进后的进张数的加权均值 [手牌速度] [期望打点] [役种] [是否振听] [进张牌]

例如:

补充说明:

进张数颜色说明:

来看看下面这几道何切题吧。

1. 完全一向听

标准的完全一向听形状,切 8s。

2. 三个复合形的一向听(选自《麻雀 傑作「何切る」300選》Q106)

这种情况要切哪一张牌呢?

单看进张,切 7s 是进张最广的,但是从更长远的角度来看,切 7s 后会有愚型听牌的可能。

一般来说,牺牲一点进张去换取更高的好型听牌率,或者更高的打点是可以接受的。

如下图所示,这里展示了本助手对进张数、好型听牌和打点的综合判断。相比 7s,切 4m 虽然进张数少了四枚,但是能好型听牌,综合和牌率比 7s 要高,同时还有平和的可能,可以说在保证了速度的同时又兼顾了打点,是最平衡的一打。所以切 4m 这个选项排在第一位。

3. 向听倒退

这里巡目尚早,相比切 8m,切 1m 虽然向听倒退但是进张面广且有断幺一役,速度是高于 8m 的。

如下图,助手额外给出了向听倒退的建议。(根据进张的不同,可能会形成七对,也可能会形成平和等)

鸣牌判断

下图是一个鸣了红中之后,听坎 5s 的例子,宝牌为 6m。

上家打出 6m 宝牌之后考虑是否鸣牌:

这里就可以考虑用 57m 吃,打出 9m,提升打点的同时又能维持听牌。此外,若巡目尚早可以拆掉 46s 追求混一色。

手摸切与安牌显示

下图展示了某局中三家的手摸切情况(宝牌为红中和 6s,自家手牌此时为 345678m 569p 45667s):

危险度颜色:

补充说明:

牌谱与观战

目前助手支持解析雀魂的牌谱(含分享)和观战下的手牌,切换视角也可以解析其他玩家的手牌。

其他功能说明

命令行工具

除了上述功能之外,助手还是一款命令行工具,可以在分析何切题时对一副手牌进行分析,通过输入如下命令(mahjong-helper 指的是程序名称,可以修改成自定义的名称):

如何获取 WebSocket 收发的消息

  1. 打开开发者工具,找到相关 JS 文件,保存到本地。

  2. 搜索 WebSocket, socket,找到 message, onmessage, send 等函数。

  3. 修改代码,使用 XMLHttpRequest 将收发的消息发送到(在 localhost 开启的)mahjong-helper 服务器,服务器收到消息后会自动进行相关分析。(这一步也可以用油猴脚本来完成)

  4. 上传 JS 代码到一个可以公网访问的地方,最简单的方法是传至 GitHub Pages,即个人的 github.io 项目。拿到该 JS 文件地址。

  5. 安装浏览器扩展 Header Editor,重定向原 JS 文件地址到上一步中拿到的地址。

  6. 允许本地证书通过浏览器,在浏览器(仅限 Chrome 内核)中输入

    chrome://flags/#allow-insecure-localhost
    

    然后把高亮那一项的 Disabled 改成 Enabled(不同浏览器/版本的描述可能不一样,如果是中文的话点击「启用」按钮)。

  7. 重启浏览器。

下面说明天凤和雀魂的代码注入点。

天凤 (tenhou)

  1. 搜索 WebSocket,找到下方 message 对应的函数,该函数中的 a.data 就是 WebSocket 收到的 JSON 数据。

  2. 在该函数开头(或末尾)添加如下代码:

    var req = new XMLHttpRequest();
    req.open("POST", "http://localhost:12121/");
    req.send(a.data);
    

雀魂 (majsoul)

雀魂收发的消息是 protobuf,接收的消息一部分为含有类型的通知消息,另一部分为不含有类型的请求响应消息, 对于后者需要获取雀魂发送的消息以获得响应消息类型。

也就是说需要将雀魂发送和接收的消息都发给助手。

类似天凤,搜索 WebSocket 找到下方的 _socket.onmessage_socket.send,添加代码。

服务器收到消息后,可以基于 liqi.json 文件解析雀魂的 protobuf 数据。

record.go 展示了使用 WebSocket 登录和下载牌谱的例子。

考虑到还有观看牌谱这种获取前端 UI 事件的情况,还需修改额外的代码。在网页控制台输入 GameMgr.inRelease = 0,开启调试模式,通过雀魂已有的日志可以看到相关代码在哪。具体修改了哪些内容可以对比雀魂的 code.js 和我修改后的 code-zh.js

参与讨论

吐槽本项目、日麻技术、麻将算法交流,欢迎加入 QQ 群 375865038

License

This project is licensed under the MIT License - see the LICENSE file for details.