wsmud_funny

适用于 PC 端,利用了界面的无用区域,可以方便查看信息,然而目前并没有什么实用价值。

目前为 2019-03-22 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name wsmud_funny
  3. // @namespace suqing
  4. // @version 0.1.0
  5. // @author suqing
  6. // @match http://game.wsmud.com/*
  7. // @homepage https://gf.qytechs.cn/zh-CN/scripts/------
  8. // @description 适用于 PC 端,利用了界面的无用区域,可以方便查看信息,然而目前并没有什么实用价值。
  9. // @run-at document-start
  10. // @require http://code.jquery.com/jquery-3.3.1.slim.min.js
  11. // @grant unsafeWindow
  12. // @grant GM_addStyle
  13. // @grant GM_setValue
  14. // @grant GM_deleteValue
  15. // @grant GM_getValue
  16. // @grant GM_setClipboard
  17. // ==/UserScript==
  18.  
  19. (function() {
  20. 'use strict';
  21. if (!WebSocket) {
  22. console.log("(Error) 无法获取 window.WebSocket!");
  23. }
  24.  
  25. var suqing = {
  26. name: GM_info.script.name,
  27. version: GM_info.script.version,
  28. webSocket: null,
  29. role: {},
  30. onmessage_fn: null,
  31. getData: function() {
  32. async function action() { // 模拟点击 获取数据
  33. $("[command=showtool]").click(); // 点击菜单
  34. $("[command=score]").click(); // 点击属性
  35. await sleep(200);
  36. $("[for=1]").click(); // 点击属性第二页
  37. await sleep(200);
  38. $("[command=skills]").click(); // 点击技能
  39. $(".dialog-close").click(); // 关闭
  40. await sleep(200);
  41. $("[command=showcombat]").click(); // 点击动作
  42. };
  43. action();
  44. function sleep(ms) {
  45. return new Promise(resolve => setTimeout(resolve, ms));
  46. };
  47. },
  48. onmessage: function(message) {
  49. suqing.onmessage_fn.apply(this, arguments);
  50. var data = message.data;
  51. if (data.includes("你的最大内力增加了") && data.includes("点。")) {
  52. var n = parseInt(data.toString().replace(/[^0-9]/ig,""));
  53. var max = parseInt(suqing.role.max_mp);
  54. var limit = parseInt(suqing.role.limit_mp);
  55.  
  56. var time = (limit - max) / (n * 6); // 分钟
  57. $(".role_dazuo_time").html(timeText(time));
  58. suqing.getData();
  59.  
  60. // *分钟 ->转化为-> *天*小时*分钟
  61. function timeText(t) {
  62. if (t < 60) {
  63. var text = "";
  64. text = text + parseInt(t) + "分钟";
  65. return text;
  66. } else {
  67. var text = "";
  68. var d = "";
  69. var h = parseInt(t / 60);
  70. var m = parseInt(t % 60);
  71. if (h > 24) {
  72. var d = parseInt(h / 24);
  73. h = h % 24;
  74. text = text + d + "天";
  75. }
  76. text = text + h + "小时" + m + "分钟";
  77. return text;
  78. }
  79. }
  80. } else if ((data.includes("{") && data.includes("}")) || (data.includes("[") && data.includes("]"))) {
  81. data = new Function("return " + data + ";")();
  82. } else if (data.includes("重新连线。")) {
  83. // 登录(不可用)
  84. suqing.getData();
  85. }
  86.  
  87. if (data.type === "state") { // 【状态】
  88. console.log("STATE");
  89. } else if (data.type === "dialog") { // 【会话】
  90. console.log("DIALOG");
  91. if (data.dialog === "score") { // 1. 角色数值
  92. var role = suqing.role;
  93. for (const key in data) {
  94. if (data.hasOwnProperty(key)) role[key] = data[key];
  95. }
  96. for (const key in role) {
  97. if (role.hasOwnProperty(key)) {
  98. const value = role[key];
  99. $(`.role_${key}`).html(value);
  100. }
  101. }
  102. } else if (data.dialog === "skills") { // 2. 技能列表
  103. if (data.items) {
  104. var skills = data.items; // array
  105. skills.sort(function(a, b) {
  106. return a.level <= b.level;
  107. });
  108. $(".skill tbody").html("");
  109. for (var skill of skills) {
  110. $(".skill tbody").append(`<tr>
  111. <td>${skill.name}</td>
  112. <td>${skill.id}</td>
  113. <td>${skill.level}</td>
  114. </tr>`);
  115. }
  116. $(".skill tbody").append(`<tr><td colspan="3">当前技能上限为<hic>${data.limit}</hic>级</td></tr>`);
  117. }
  118. } else if (data.dialog === "pack") { // 3. 获得物品
  119.  
  120. }
  121. } else if (data.type === "msg") {
  122. return;
  123. }
  124. console.log(data);
  125. },
  126. sendmessage: function(message) {
  127. console.log("Sending Message: ", message);
  128. if ($("#sendmessage").attr("cmd")) {
  129. $("#sendmessage").attr("cmd", message);
  130. } else {
  131. $(".container").append($(`<span id="sendmessage" cmd="${message}"><span>`));
  132. }
  133. $("#sendmessage").click();
  134. },
  135. };
  136.  
  137. unsafeWindow.WebSocket = function(url) {
  138. suqing.webSocket = new WebSocket(url);
  139. }
  140. unsafeWindow.WebSocket.prototype = {
  141. get url() {
  142. return suqing.webSocket.url;
  143. },
  144. get protocol() {
  145. return suqing.webSocket.protocol;
  146. },
  147. get readyState() {
  148. return suqing.webSocket.readyState;
  149. },
  150. get bufferedAmount() {
  151. return suqing.webSocket.bufferedAmount;
  152. },
  153. get extensions() {
  154. return suqing.webSocket.extensions;
  155. },
  156. get binaryType() {
  157. return suqing.webSocket.binaryType;
  158. },
  159. set binaryType(type) {
  160. suqing.webSocket.binaryType = type;
  161. },
  162. get onopen() {
  163. return suqing.webSocket.onopen;
  164. },
  165. set onopen(fn) {
  166. suqing.webSocket.onopen = fn;
  167. },
  168. get onclose() {
  169. return suqing.webSocket.onclose;
  170. },
  171. set onclose(fn) {
  172. suqing.webSocket.onclose = fn;
  173. },
  174. get onerror() {
  175. return suqing.webSocket.onerror;
  176. },
  177. set onerror(fn) {
  178. suqing.webSocket.onerror = fn;
  179. },
  180. close: function () {
  181. suqing.webSocket.close();
  182. },
  183. get onmessage() {
  184. return suqing.webSocket.onmessage;
  185. },
  186. set onmessage(fn) { // 截获接收到的数据
  187. suqing.onmessage_fn = fn;
  188. suqing.webSocket.onmessage = suqing.onmessage;
  189. },
  190. send: function (message) { // 截获发送出的数据
  191. suqing.webSocket.send(message);
  192. $(".console").append($(`<div><hig>&nbsp;>>&nbsp;${message}</hig></div>`));
  193. fn(); // 滚动效果
  194. function fn() {
  195. var a = $(".console")[0].scrollTop;
  196. var b = $(".console")[0].scrollHeight;
  197. console.log(a, b);
  198. if (a < b - 269) {
  199. $(".console")[0].scrollTop = a + 1;
  200. setTimeout(fn, 1000/60);
  201. } else {
  202. // $(".console")[0].scrollTop = b;
  203. // 440 - 171 = 340-70-1 = 300-30-1 = 270 - 1=269
  204. }
  205. };
  206. },
  207. };
  208.  
  209.  
  210.  
  211. $(document).ready(function() {
  212. addDiv();
  213. addStyle();
  214. });
  215.  
  216. function addDiv() {
  217. $("body").append($(`<div class="left"></div>`));
  218. $("body").append($(`<div class="right"></div>`));
  219. $("body").append($(`<div class="extra"></div>`));
  220.  
  221. $(".left").append(`
  222. <table class="role">
  223. <tr><td colspan="4">角色信息</td></tr>
  224. <tr><td colspan="4" class="role_name">ROLE NAME</td></tr>
  225. <tr><td>ID</td><td colspan="3" class="role_id"></td></tr>
  226. <tr><td>性别</td><td class="role_gender"></td><td>境界</td><td class="role_level"></td></tr>
  227. <tr><td>年龄</td><td colspan="3" class="role_age"></td></tr>
  228. <tr><td>经验</td><td colspan="3"><hig class="role_exp"></hig></td></tr>
  229. <tr><td>潜能</td><td colspan="3"><hig class="role_pot"></hig></td></tr>
  230. <tr><td>气血</td><td colspan="3"><span class="role_hp"></span>/<span class="role_max_hp"></span></td></tr>
  231. <tr><td>内力</td><td colspan="3"><span class="role_mp"></span>/<span class="role_max_mp"></span></td></tr>
  232. <tr><td>内力上限</td><td colspan="3"><hic class="role_limit_mp"></hic></td></tr>
  233. <tr><td>打坐计算</td><td colspan="3"><hir class="role_dazuo_time"></hir></td></tr>
  234. <tr><td>臂力</td><td><hiy class="role_str"></hiy>+<span class="role_str_add"></span></td><td>根骨</td><td><hiy class="role_con"></hiy>+<span class="role_con_add"></span></td></tr>
  235. <tr><td>身法</td><td><hiy class="role_dex"></hiy>+<span class="role_dex_add"></span></td><td>悟性</td><td><hiy class="role_int"></hiy>+<span class="role_int_add"></span></td></tr>
  236. <tr><td>攻击</td><td class="role_gj"></td><td>终伤</td><td class="role_add_sh"></td></tr>
  237. <tr><td>防御</td><td class="role_fy"></td><td>命中</td><td class="role_mz"></td></tr>
  238. <tr><td>招架</td><td class="role_zj"></td><td>躲闪</td><td class="role_ds"></td></tr>
  239. <tr><td>暴击</td><td class="role_bj"></td><td>攻速</td><td class="role_gjsd"></td></tr>
  240. <tr><td>门派</td><td class="role_family"></td><td>功绩</td><td><hig class="role_gongji"></hig></td></tr>
  241. <tr><td>忽视防御</td><td class="role_diff_fy"></td><td>伤害减免</td><td class="role_diff_sh"></td></tr>
  242. <tr><td>暴击伤害</td><td class="role_add_bj"></td><td>暴击抵抗</td><td class="role_diff_bj"></td></tr>
  243. <tr><td>增加忙乱</td><td class="role_busy"></td><td>忽视忙乱</td><td class="role_diff_busy"></td></tr>
  244. <tr><td>释放速度</td><td class="role_releasetime"></td><td>冷却速度</td><td class="role_distime"></td></tr>
  245. <tr><td>打坐效率</td><td class="role_dazuo_per"></td><td>内力减耗</td><td class="role_expend_mp"></td></tr>
  246. <tr><td>练习效率</td><td class="role_lianxi_per"></td><td>学习效率</td><td class="role_study_per"></td></tr>
  247. </table>
  248. <div class="msg_title"><hiy>指令记录</hiy></div>
  249. <div class="console"></div>
  250. <div class="send"><input type="text" autocomplete="off" id="send_value"><button type="button" id="send_btn">发送</button></div>
  251. `);
  252. $("#send_btn").click(function() { // 发送按钮
  253. var value = $("#send_value").val();
  254. suqing.sendmessage(value);
  255. $("#send_value").val("");
  256. });
  257. $("#send_value").keypress(function(key) { // 监控回车
  258. if (key.which == 13) $("#send_btn").click();
  259. });
  260.  
  261. $(".right").append(`
  262. <table class="skill_title">
  263. <tr><td colspan="3">技能列表</td></tr>
  264. <tr>
  265. <td>技能</td>
  266. <td>代码</td>
  267. <td>等级</td>
  268. <tr>
  269. </table>
  270. <div class="skill_box"><table class="skill">
  271. <tbody></tbody>
  272. </table></div>
  273. `);
  274.  
  275. }
  276. function addStyle() {
  277. GM_addStyle(`
  278. body {
  279. display: flex;
  280. flex-flow: row no-wrap;
  281. width: 100vw;
  282. }
  283. .signinfo {
  284. display: none;
  285. }
  286. .login-content, .container {
  287. flex: 0 0 28rem;
  288. border: 0.05em solid #008000;
  289. }
  290. .container {
  291. width: 28rem;
  292. -webkit-user-select: none;
  293. -moz-user-select: none;
  294. -ms-user-select": none;
  295. }
  296.  
  297. .left {
  298. order: -1;
  299. flex: 0 0 20rem;
  300. display: flex;
  301. flex-direction: column;
  302. }
  303. .right {
  304. order: 1;
  305. flex: 0 0 20rem;
  306. display: flex;
  307. flex-direction: column;
  308. }
  309. .extra {
  310. order: 100;
  311. flex: 0 1 100rem;
  312. }
  313.  
  314. .left table {
  315. border-collapse: collapse;
  316. table-layout: fixed;
  317. width: 20.05rem;
  318. }
  319. .left td {
  320. border: #008000 solid 0.05rem;
  321. text-align: center;
  322. overflow: hidden;
  323. white-space: nowrap;
  324. }
  325. /* ROLE */
  326. .role {
  327. flex: 0 0 auto;
  328. }
  329. .role tr td:first-child, .role tr td:first-child+td+td {
  330. width: 3.95rem;
  331. }
  332. .role tr td:first-child+td, .role tr td:first-child+td+td+td {
  333. width: 5.95rem;
  334. }
  335. /* MESSAGE */
  336. .msg_title {
  337. flex: 0 0 auto;
  338. text-align: center;
  339. border: #008000 solid 0.05rem;
  340. }
  341. .console {
  342. flex: 0 1 100rem;
  343. width: 20rem;
  344. overflow: scroll;
  345. white-space: nowrap;
  346. border-left: #008000 solid 0.05rem;
  347. }
  348. .send {
  349. flex: 0 0 auto;
  350. display: flex;
  351. height: 2rem;
  352. }
  353. .send input {
  354. flex: 1 0 auto;
  355. }
  356. .send button {
  357. height: auto;
  358. }
  359.  
  360. /* SKILL */
  361. .right .skill_title {
  362. flex: 0 0 auto;
  363. }
  364. .right .skill_box {
  365. flex: 1 1 auto;
  366. overflow: scroll;
  367. }
  368. .right table {
  369. border-collapse: collapse;
  370. table-layout: fixed;
  371. width: 20rem;
  372. }
  373. .right td {
  374. border: #008000 solid 0.05rem;
  375. text-align: center;
  376. overflow: hidden;
  377. white-space: nowrap;
  378. }
  379. .skill td:first-child, .skill_title td:first-child {
  380. width: 6rem;
  381. }
  382. .skill td:first-child+td, skill_title td:first-child+td {
  383. width: 8rem;
  384. }
  385. .skill td:first-child+td+td, skill_title td:first-child+td+td {
  386. width: 4rem;
  387. }
  388.  
  389. `);
  390. }
  391.  
  392. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址