-
Notifications
You must be signed in to change notification settings - Fork 4
/
paulzzh_plugin_zjdc.user.js
211 lines (187 loc) · 11.2 KB
/
paulzzh_plugin_zjdc.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
// ==UserScript==
// @name 【雀魂】最近大铳
// @namespace https://paulzzh.tech/
// @supportURL https://github.com/paulzzh/Majsoul-Chong
// @version 2.2.0
// @description 最近大铳插件,让最近大和区域显示最近大铳
// @author Paulzzh
// @license MIT
// @match *://majsoul.com/1/
// @match *://www.majsoul.com/1/
// @match *://game.maj-soul.com/1/
// @match *://game.mahjongsoul.com/*
// @match *://mahjongsoul.game.yo-star.com/
// @grant none
// @icon https://img.paulzzh.com/other/majsoul/zjdc.png
// ==/UserScript==
(function() {
'use strict';
window.paulzzh_plugin_zjdc = {};
paulzzh_plugin_zjdc.enable = true; //插件效果总开关
//==================================
//
// 最近大铳 插件配置
//
//大铳大和切换延迟(毫秒)
paulzzh_plugin_zjdc.display_showtime = 3000;
//插件注入成功后是否展示提示框
paulzzh_plugin_zjdc.show_welcome = true;
//是否展示最近大铳最近大和
paulzzh_plugin_zjdc.show_zjdc = true;
//是否上报对局牌谱
paulzzh_plugin_zjdc.push_record = true;
//以下内容请不要修改
paulzzh_plugin_zjdc.version = "2.2.0";
paulzzh_plugin_zjdc.readme = "【最近大铳】插件 权限申请\n版本:"+paulzzh_plugin_zjdc.version+"\n\n本插件会收集您和他人的account_id,昵称,对局日期,和(铳)牌信息等信息。\n会储存您和他人的account_id,和(铳)牌信息等信息。\n为了实现插件的基础功能,这些数据是必须的。\n他们会被上传到第三方服务器 "+paulzzh_plugin_zjdc.server+"\n本插件与雀魂官方无任何联系,放铳数据均来自安装此插件的用户主动上传。\n\n温馨提示:第一次使用没有放铳数据是无法显示的,建议您先铳个大的再在个人信息页查看~\n演示视频:av65372237(b站)\n开源地址:https://github.com/paulzzh/Majsoul-Chong\n\n此提示只会显示一次,确定后将不再提示。\n\n\n2.0.0更新:全新2.0.0版本发布,兼容国服日服美服,兼容铜/银/金/玉/王座/友人/比赛/休闲普通/宝牌狂热/明牌配牌/龙之目玉等三麻/四麻/活动场,其中除金玉王比赛之外的房间依靠用户上报/好友推送"
//最近大铳 数据交换服务器 一般情况下不需要修改。
//为了确认用户身份,会收集您和他人的account_id,昵称,对局日期,和(铳)牌信息等信息;会储存您和他人的account_id,和(铳)牌信息等信息。
paulzzh_plugin_zjdc.server = "https://majsoul.paulzzh.com/api/v2/zjdc?version="+paulzzh_plugin_zjdc.version;
//==================================
//切换大铳大和
paulzzh_plugin_zjdc.display = function() {
var vui=paulzzh_plugin_zjdc.display_vui;
var datas = paulzzh_plugin_zjdc.display_data;
var data=datas[paulzzh_plugin_zjdc.display_which%datas.length];
vui.me.getChildAt(0).getChildAt(0).text = data.text;
vui.me.getChildAt(0).getChildAt(0).color = data.color;
vui.me.getChildAt(0).getChildAt(0).font = data.font;
vui._showDaHe(data.data.hands, data.data.ming, data.data.hupai);
vui._setTitle(data.data.title_id);
paulzzh_plugin_zjdc.display_which +=1;
};
paulzzh_plugin_zjdc.display_inv = [];
paulzzh_plugin_zjdc.display_clear = function(vui){
vui.me.getChildAt(0).getChildAt(0).text = "最近大和";
vui.me.getChildAt(0).getChildAt(0).color = "#e8af71";
vui.me.getChildAt(0).getChildAt(0).font = "fengyu";
var l=paulzzh_plugin_zjdc.display_inv.length;
for(var i=0; i<l ; i++){
clearInterval(paulzzh_plugin_zjdc.display_inv.shift());
}
paulzzh_plugin_zjdc.display_which = 0;
}
//网络请求,铳牌获取
paulzzh_plugin_zjdc.query = function(vui,account_id,which,t) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200 && account_id==paulzzh_plugin_zjdc.account_id && which==paulzzh_plugin_zjdc.which) {
try {
paulzzh_plugin_zjdc.display_clear(vui);
var ret = JSON.parse(xhr.responseText);
if (ret.code == 200) {
var data = []
if (ret.data_c){
data.push({"text":"最近大铳","color":"#ff4e4e","font":"fengyu","data":ret.data_c});
};
if (ret.data_z){
//雀魂fengyu字体没有"炸"这个字。。没办法只能换字体
data.push({"text":"最近炸庄","color":"#c1c630","font":"SimHei","data":ret.data_z});
};
if (t.statistic_data){
for (var a = 0; a < t.statistic_data.length; a++) {
var r = t.statistic_data[a];
if (which==String(r.mahjong_category)+String(r.game_category)){
data.push({"text":"最近大和","color":"#e8af71","font":"fengyu","data":r.statistic.highest_hu});
break
}
}
};
paulzzh_plugin_zjdc.display_data=data;
paulzzh_plugin_zjdc.display_vui=vui;
paulzzh_plugin_zjdc.display_inv.push(setInterval(paulzzh_plugin_zjdc.display,paulzzh_plugin_zjdc.display_showtime));
}
} catch(error) {
console.log("[最近大铳]" + error.message)
}
}
};
xhr.open("post", paulzzh_plugin_zjdc.server, true);
xhr.setRequestHeader("Content-Type", "application/json");
var tosend={"action":"query","self_id":GameMgr.Inst.account_id,"target_id":account_id,"type":which};
console.log(tosend);
xhr.send(JSON.stringify(tosend));
};
//网络请求,对局记录
paulzzh_plugin_zjdc.push = function(uuid) {
if (paulzzh_plugin_zjdc.enable && GameMgr.Inst.ingame && uuid.length==43){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var ret = JSON.parse(xhr.responseText);
console.log(ret.message)
}
};
xhr.open("post", paulzzh_plugin_zjdc.server, true);
xhr.setRequestHeader("Content-Type", "application/json");
var tosend={"action":"push","self_id":GameMgr.Inst.account_id,"uuid":uuid,"area":GameMgr.client_language};
console.log(tosend);
xhr.send(JSON.stringify(tosend));
}
};
//对于雀魂的hack
paulzzh_plugin_zjdc.hook = function() {
try {
//需要注入的东西,要在游戏加载完后修改
if (uiscript.UI_PlayerInfo.Inst && uiscript.UI_OtherPlayerInfo.Inst && uiscript.UI_PlayerInfo.Inst.show && uiscript.UI_OtherPlayerInfo.Inst.show && uiscript.UI_PlayerInfo.Inst.detail_data.blocks[1].show && uiscript.UI_OtherPlayerInfo.Inst.detail_data.blocks[1].show && game.Scene_MJ.Inst.GameEnd) {
console.log("[最近大铳]游戏已登录");
try {
//自己详情页
paulzzh_plugin_zjdc.funcpds = uiscript.UI_PlayerInfo.Inst.detail_data.blocks[1].show;
uiscript.UI_PlayerInfo.Inst.detail_data.blocks[1].show = function(t, e, n, a) {
var w = String(e)+String(n);
var vui = uiscript.UI_PlayerInfo.Inst.detail_data.blocks[1];
var account_id = GameMgr.Inst.account_id;
paulzzh_plugin_zjdc.display_clear(vui);
//xhr异步问题,为了验证一下选项卡是否更改
paulzzh_plugin_zjdc.which=w;
paulzzh_plugin_zjdc.account_id=account_id;
if(paulzzh_plugin_zjdc.enable && paulzzh_plugin_zjdc.show_zjdc && a==1){
paulzzh_plugin_zjdc.query(vui,account_id,w,t);
}
paulzzh_plugin_zjdc.funcpds.apply(this, [t, e, n, a])
};
//别人详情页
paulzzh_plugin_zjdc.funcopds = uiscript.UI_OtherPlayerInfo.Inst.detail_data.blocks[1].show;
uiscript.UI_OtherPlayerInfo.Inst.detail_data.blocks[1].show = function(t, e, n, a) {
var w = String(e)+String(n);
var vui = uiscript.UI_OtherPlayerInfo.Inst.detail_data.blocks[1];
var account_id = uiscript.UI_OtherPlayerInfo.Inst.account_id;
paulzzh_plugin_zjdc.display_clear(vui);
//xhr异步问题,为了验证一下选项卡是否更改
paulzzh_plugin_zjdc.which=w;
paulzzh_plugin_zjdc.account_id=account_id;
if(paulzzh_plugin_zjdc.enable && paulzzh_plugin_zjdc.show_zjdc && a==1){
paulzzh_plugin_zjdc.query(vui,account_id,w,t);
}
paulzzh_plugin_zjdc.funcopds.apply(this, [t, e, n, a])
};
//对局结束了
paulzzh_plugin_zjdc.GameEnd = game.Scene_MJ.Inst.GameEnd;
game.Scene_MJ.Inst.GameEnd = function() {
if(paulzzh_plugin_zjdc.enable && paulzzh_plugin_zjdc.push_record){
paulzzh_plugin_zjdc.push(GameMgr.Inst.mj_game_uuid);
}
paulzzh_plugin_zjdc.GameEnd.apply(this)
};
clearInterval(paulzzh_plugin_zjdc.inv);
console.log("[最近大铳]插件已成功注入!");
if(paulzzh_plugin_zjdc.enable && paulzzh_plugin_zjdc.show_welcome){
uiscript.UI_LightTips.Inst.show("【最近大铳】插件 已成功注入!");
}
if(localStorage.getItem("paulzzh_plugin_zjdc_xieyi") != paulzzh_plugin_zjdc.version){
uiscript.UI_InfoLite.Inst.show(paulzzh_plugin_zjdc.readme);
localStorage.setItem("paulzzh_plugin_zjdc_xieyi",paulzzh_plugin_zjdc.version);
}
} catch(error) {
console.log("[最近大铳]插件注入失败" + error.message)
}
} else {
console.log("[最近大铳]游戏未加载完毕")
}
} catch(error) {
console.log("[最近大铳]插件注入失败" + error.message)
}
};
//检测雀魂加载状态
paulzzh_plugin_zjdc.inv = setInterval(paulzzh_plugin_zjdc.hook,3000)
})();