Git Product home page Git Product logo

majsoulpaipuanalyzer's Introduction

MajsoulPaipuAnalyzer

自制雀魂牌谱分析工具。支持国服、日服、国际服。提供Windows,Linux,macOS版本。 受设备所限,目前Linux版本和macOS版本无法测试,仅由Actions自动构建不保证可用性。

目前仅支持四人麻将牌谱分析,分析项目参考天鳳の牌譜解析プログラム的项目实现。目前实现了除被鸣牌和门清听牌大类外,剩余大类中的大部分数据。

在结果展示网页中带有分析天凤凤凰桌牌谱得到的数据,可以用于和自己的数据进行比较。

更新内容说明文件

免责声明

该工具为个人制作,未对雀魂代码逻辑进行改动,但是为了获取牌谱数据使用了极少量前端代码的API,包括获取用户牌谱列表获取指定牌谱内容。所有相关操作代码均在browseinject.js中,工具不会代替用户执行任何其他交互性操作。请自行判断使用该工具的风险。如果使用该工具或(不存在的)该工具的衍生物产生的一切后果作者均不会承担任何责任。

下载

使用Github Actions持续集成,在网盘和releases提供下载。

releases中可下载已经编译好的文件。

百度网盘 提取码:k34a

界面

工具分为两部分,MajsoulPaipuCrawler和PaipuAnalyzer。

MajsoulPaipuCrawler使用Electron编写,用于从雀魂收集牌谱并转换成自用牌谱格式。

MajsoulPaipuCrawler

PaipuAnalyzer使用C++编写,分析收集到的牌谱数据并在命令行窗口中展示数据。

PaipuAnalyzer

同时PaipuAnalyzer会生成用于查看和比较数据的网页PaipuAnalyzeResult.html。

PaipuAnalyzeResult.html

安装

编译/测试环境

Windows: Windows 10, nodejs v10.13.0, MinGW-w64 8.1.0

Linux: Ubuntu 18.04 x64, nodejs v8.1.0, g++ 7.4.0

macOS: 10.14 (VMware Workstation 15), nodejs v12.4.0, g++ 4.2.1(映射到clang-1001.0.46.4)

AppVeyor环境请参考其网站

Github Actions环境请参考workflow配置

依赖

需要npm, g++, cmake, make/mingw32-make

安装脚本

三平台安装脚本参考这里

使用

这里提供了简易使用说明。

牌谱获取及转换

首先运行Electron应用MajsoulPaipuCrawler。程序会显示雀魂窗口和SimpleMahjong窗口。由于技术原因,第三方账户登陆可能出现问题,请使用网页-登陆专用窗口登陆后刷新雀魂窗口。默认为国服,如果要切换到其他服请在网页菜单中选择。

在成功登陆后,可以选择牌谱-查看已有牌谱情报。如果加载未完成会弹出错误对话框,否则会开始自动收集账户的牌谱基本信息,并展示收集到的牌谱类型。

在确认所有牌谱已井在牌谱情报中展示后,点击牌谱-下载&转换牌谱来对获取到的牌谱进行下载和格式转换。转换会跳过三麻和比赛牌谱。转换进度显示在SimpleMahjong窗口的左上角。

雀魂包含十分繁杂的对局规则,规则间差异很大。由于将不同规则牌谱同时分析意义不大(例如包含了宝牌狂热的牌谱,和牌番数、宝牌数量以及攻守判断都会和段位规则牌谱差很多),同时部分规则和四麻段位规则并不兼容(三麻,换三张,古役,血战等),可能引起工具出现不可预料的问题,因此相关牌谱只会下载,而不会分析,列于未识别牌谱中。实际下载的牌谱数量会多于分析的牌谱数量。

每个账户会有自己的独立ID,这个ID和加好友时候的那个ID是不一样的,游戏里大概不能直接看到?如果登陆多个账户,会将每个账户的资料按照ID分别存储,不会混在一起。牌谱下载及转换内容存储于data文件夹,避免重复下载和转换,每次进行下载仅会尝试下载转换未下载的牌谱。存储方式不再赘述,感兴趣的人翻一翻大概就能明白了。

点击转换天凤牌谱选项可以将该账户的所有能转换的牌谱尝试转换成天凤牌谱格式,相关转换代码来自Equim-chanakochan-reviewer。成功转换的牌谱存储在data/majsoul/%ID%/tenhou中。目前较早牌谱的转换结果可能不可靠,仅供参考。

牌谱分析

完成牌谱收集后即可关闭Electron应用。然后使用PaipuAnalyzer进行牌谱分析。

在进行分析前,请确认data/config.json文件。在该文件中存储了牌谱分析的各种配置。关于配置文件各项内容的含义请参照这里

确认配置无误后,运行PaipuAnalyzer即可得到结果。部分统计规则和雀魂官方有所出入(我不知道官方是怎么算的,反正结果和官方差了一点)。一些项目的计算方式和特殊说明请参照这里

公共牌谱池

在0.5.0版本新增公共牌谱池,相关选项在 公共牌谱列表 中。和账户牌谱获取相比,主要在收集牌谱列表上有不同,可以手动输入或是选择文件输入。收集牌谱列表后同样需要下载转换,公共牌谱池和所有账户分离存储,如果需要将某账户的牌谱导入公共牌谱池,可:

  1. 公共牌谱列表-下载指定牌谱-文件输入-选择data/majsoul/%ID%/gamedata.txt
  2. 如果牌谱数量很多,将data/majsoul/%ID%/raw|paipus中文件复制到data/majsoul/0/raw|paipus中,避免重复下载
  3. 公共牌谱列表-下载转换牌谱,等待下载转换完成

目前公共牌谱池支持指定玩家id为主视角,分析该玩家牌谱数据的功能。分析公共牌谱池中的牌谱步骤如下:

  1. 查询到玩家id。打开包含该玩家的牌谱,如data/majsoul/0/paipus/190205-4f533de1-ba3e-4876-b6ea-8cf1f18a5559,搜索玩家名称,可以在名称前看到玩家id。如Zyr17的id为50264
  2. 在PaipuAnalyzer的config中,id前加0作为id。接上例,id填写050264
  3. 其他配置和分析个人牌谱相同

已知问题

由于雀魂官方的牌谱查看只支持1000个牌谱,而MajsoulPaipuCrawler基于官方操作,如果超过了1000个牌谱目前没有办法获取。如果有好办法请至issue中指导作者。

Ubuntu高版本中可能会出现GUI将可执行文件当做动态链接库的情况。目前没有找到解决方法,请使用Terminal执行。

如果运行Electron时出现游戏界面黑屏、白屏、崩溃等问题,有可能是显卡对WebGL的支持问题,可以尝试将resources/app/main.js文件第24行附近的app.isableHardwareAcceleration双斜杠删去,关闭硬件加速运行。

对比赛场支持不完善,目前仅可对和段位场配置基本相同的比赛场进行分析,具体可参照main.js:isspecialrule

0.4.9版部分数据准确性存疑,正在尝试找到问题。

天凤牌谱转换对较早的牌谱不能成功转换。

联系

如果发现任何bug,可以通过github或是[email protected]说明。

致谢

该项目使用或曾经使用了这些项目的资源,感谢他们。

CJsonObject

mt19937ar-MersenneTwister-JS

js-sha512

牌面图像

wsHook

wssip

akochan-reviewer

majsoulpaipuanalyzer's People

Contributors

zyr17 avatar dependabot[bot] avatar suica avatar vizee avatar

Stargazers

笑肖姣 avatar Zihui Liu avatar Tohsaka-Rin avatar Lance Wang avatar  avatar  avatar Chuwd avatar  avatar  avatar  avatar  avatar Nanako avatar  avatar 菾凴 avatar  avatar  avatar  avatar Mochizuki Haruka avatar  avatar Nyano avatar ycx avatar 東雲 avatar  avatar  avatar YuuShimizu avatar  avatar Jianing Shi avatar 沈鸿飞 avatar Zhu Zizhen avatar 朱仙变 avatar  avatar geother avatar ADware avatar jerrywcy avatar Joie avatar xionglin avatar sltlala avatar 会飞 avatar TimZ avatar supei avatar  avatar ふわふわ avatar  avatar Hao-yu Liao avatar  avatar Jinjun Huang avatar Zhao Yue avatar colton avatar Jelly27 avatar Jianqi Pan avatar shinkuan avatar Cheung Zirpon avatar  avatar suzhao avatar  avatar Chuck LU avatar Will Sit avatar  avatar Fangzhou Hu avatar 拆家大主教 avatar Zhendong Wang avatar  avatar 木糖醇 avatar  avatar Frankx avatar  avatar  avatar  avatar AotoriChiaki avatar  avatar J.-C. Jiang avatar  avatar reito avatar Verenav avatar chris avatar Jia Chen avatar  avatar flyingsnow avatar Zywoo avatar Nonbeing avatar 青龍聖者@bdsqlsz avatar  avatar Ivan Chien avatar Xu Junyu! avatar Mahiru Kagura avatar ConanYu avatar Xiphity avatar XiaowenHu avatar  カラス avatar Starry avatar Dyzer avatar  avatar miaojiaxin avatar  avatar  avatar Lisita avatar  avatar 爱吃松子的糖 avatar  avatar  avatar

Watchers

Risheng Xu avatar  avatar  avatar  avatar

majsoulpaipuanalyzer's Issues

新牌谱无法分析

由于修罗模式包含换牌,导致所有牌谱分析出错,并留下尸体牌谱

顺便检查修罗牌谱。目前只能识别后除外

存在会卡住分析的牌谱,目前未复现

安定段位置题信区间计算

安定段位置题信区间计算问题
t-分布用于“用于根据小样本来估计呈正态分布且方差未知的总体的均值” 见 百度百科:t分布
pt 在计算顺位后,我认为不是正态分布的(我猜测,因为排名有四个名次,而会有四个峰)
因此置信区间不能准确反映安定段位的准确程度。

能解释下安定段位吗?

eg.
安定段位结果(置信水平0.95):东风局银之间,南风局金之间
东风局安定段位: 2.0000
南风局安定段位: 4.1542

根据描述里的“安定段位即安定星数。”,这个数据东风安定段位是雀士2星,南风安定段位是雀杰4.15星?

4.15星是什么意思?

网页界面改进

在数字后增加上下箭头(或者其他方式?)来表示实际数值大小,增加可读性

MacOS PaipuAnalyzer报错Segmentation Fault

下载牌谱可以正常完成,但是使用PaipuAnalyzer进行分析的时候会自动退出,使用 #9 中提到的debug版程序同样segmentation fault,debug.log文件为空。echo $? 得到退出码139

游戏换了新的域名

game.maj-soul.com今天崩了,官方说修复了但我这还是连不上,启用了新的域名game.maj-soul.net

检查雀魂随机性的建议

虽然雀魂为牌山公开了MD5,但并未公开其算法,而MD5和麻将排列又有很高的简并性,故不能证明其牌山为随机生成。
同时,有相当一部分人质疑雀魂运营不到一年,就出现了天凤数年闻所未闻的神仙牌谱,存在暗改配牌的可能。
可以从以下角度验证雀魂的随机性:

  1. 起手向听数
  2. 立直后一发自摸率
  3. 中里宝数量/宝牌指示牌数量

1和3是验证随机性的重要证据。目前雀魂的一发率和里宝数量明显比天凤数据高,其原因可能是雀魂玩家水平较差/头更铁、雀魂玩家开杠更频繁。
在雀魂官方给出解释前,希望这些数据能消除部分玩家的顾虑。

Active code page:65001

一闪而过,之后窗口自动没了,html里也没有分析结果,请问是什么原因?

關於繁中設定會顯示亂碼的問題

您好,在您提供的繁中設定檔(zh-TW.json)中第一行的"CHCP": "chcp 936"會導致程式使用時顯示亂碼
後發現將其值改成950後便可正常運作

macos无法运行

可以正确获取、转换牌谱,但是无法使用PaipuAnalyzer进行分析。
macOS Mojave 10.14.5 MacBook Pro(15-inch,2016)

Last login: Mon Jul 8 18:09:04 on ttys001
xxxMacBook-Pro:~ xxx$ /Users/xxx/Downloads/MajsoulPaipuAnalyzer-macos-x64/PaipuAnalyzer ; exit;
Segmentation fault: 11
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[进程已完成]

WechatIMG66

一些小建议

  • 放铳役种里面的自摸可以“删掉”;
  • 是“三色同顺”不是“三色通顺”;

关于增加一个期望得点的建议

有一个以前玩天凤的牌手,提到在天凤上有一个“安定段”的概念,就是说能够让你知道你按目前的胜率,最终会到达什么段位。
其算法为:先得到四个名次的比例,以及四个名次的平均得点,就能得到当前段位的每局的期望得点。比如说我是雀圣一段,期望得点是+10;
然后假设我已经是雀圣二段了,那么我的第四名就要多扣分,结合第四名的概率,就会得到一个新的期望得点,比如说是-10;
那么我的安定段就是雀圣1.5段。

总的来说,获得平均得点就能做一些事情。

可否提供下载任意牌谱的功能?

我在尝试编写一个分析选手牌效率的程序,但js基础为0,在获取牌谱时遇到了问题。注意到您的程序可以下载并转换用户本人的牌谱,那么理论上也可以下载用户所能查看到的所有牌谱。能否增加一个下载用户提供地址的牌谱的功能?谢谢!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.