wsmud_funny

如果你由于使用 wsmud_funny 插件而产生了任何不适,那么请即时关闭此插件即可。

目前为 2019-05-13 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name wsmud_funny
  3. // @namespace suqing.fun
  4. // @version 0.3.18
  5. // @author SuQing
  6. // @match http://*.wsmud.com/*
  7. // @homepage https://gf.qytechs.cn/zh-CN/scripts/380709
  8. // @description 如果你由于使用 wsmud_funny 插件而产生了任何不适,那么请即时关闭此插件即可。
  9. // @run-at document-start
  10. // @require https://code.jquery.com/jquery-3.3.1.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. /********************变量********************/
  22. let isMoblie = false;
  23. let websocket = null;
  24. let fn_onmessage = null;
  25. let onmessage = event => {
  26. let message = Str2Obj(event.data);
  27. console.log(message);
  28. if (message.type === "dialog") message.type = message.dialog;
  29. for (let i = 0; i < listeners.length; i++) {
  30. let fn = listeners[i];
  31. if (fn === null) continue;
  32. if (fn(event, message) === false) return;
  33. }
  34. fn_onmessage.apply(this, [event]);
  35. }
  36. let listeners = [];//监听
  37. let addListener = fn => {
  38. let id = listeners.length;
  39. listeners.push(fn);
  40. return id;
  41. };
  42. let removeListener = id => listeners[id] = null;
  43.  
  44. let title = new Proxy({name: "RoleName", state: "<STATE>"}, {
  45. set: function(title, key, value) {
  46. title[key] = value;
  47. $("head title").html(title.name + title.state);
  48. return true;
  49. },
  50. get: function(title, key) {
  51. return title[key];
  52. }
  53. });
  54. let roles = {};
  55. let id = "";
  56. let login = false;
  57. let showTimeStr = false;
  58. let role = new Proxy({}, {
  59. set: function(role, key, value) {
  60. if (!isMoblie) {
  61. if (key === "name" && role.name) return;//name不变
  62. $(".role_" + key).html(value);
  63. }
  64. role[key] = value;
  65. return true;
  66. },
  67. get: function(role, key) {
  68. return role[key];
  69. }
  70. });
  71. let skills = new Proxy({}, {
  72. set: function(skills, key, value) {
  73. skills[key] = value;
  74. return true;
  75. },
  76. get: function(skills, key) {
  77. return skills[key];
  78. }
  79. });
  80. let room = new Proxy({str: "a-b", name1: "a", name2: "b", path: "a/b/c", items: []}, {
  81. set: function(room, key, value) {
  82. room[key] = value;
  83. return true;
  84. },
  85. get: function(room, key) {
  86. return room[key];
  87. }
  88. });
  89. let exits = {};
  90.  
  91. let content = new Proxy({qn: 0, jy: 0, nl: 0, task: "任务", lwsb: "领悟石壁"}, {
  92. set: function(content, key, value) {
  93. if ($(".remove_" + key)[0]) {
  94. $(".remove_" + key).remove();
  95. }
  96. content[key] = value;
  97. return true;
  98. },
  99. get: function(content, key) {
  100. return content[key];
  101. }
  102. });
  103.  
  104. {//检查判断
  105. if (!/test/.test(GM_info.script.version)) {//根据是否测试决定是否屏蔽console.log
  106. console.log = target => {
  107. return;
  108. };
  109. }
  110. if (navigator.userAgent) {//判断设备是否为移动端
  111. let agent = navigator.userAgent.toLowerCase();
  112. if (/ipad|iphone|android|mobile/.test(agent)) {
  113. isMoblie = true;
  114. }
  115. console.log(agent);
  116. }
  117. if (WebSocket) {//检测WebSocket
  118. unsafeWindow.WebSocket = function(uri) {
  119. websocket = new WebSocket(uri);
  120. };
  121. unsafeWindow.WebSocket.prototype = {
  122. get url() {
  123. return websocket.url;
  124. },
  125. get protocol() {
  126. return websocket.protocol;
  127. },
  128. get readyState() {
  129. return websocket.readyState;
  130. },
  131. get bufferedAmount() {
  132. return websocket.bufferedAmount;
  133. },
  134. get extensions() {
  135. return websocket.extensions;
  136. },
  137. set binaryType(type) {
  138. websocket.binaryType = type;
  139. },
  140. get binaryType() {
  141. return websocket.binaryType;
  142. },
  143. set onerror(fn) {
  144. websocket.onerror = fn;
  145. },
  146. get onerror() {
  147. return websocket.onerror;
  148. },
  149. set onopen(fn) {
  150. websocket.onopen = fn;
  151. title.state = "<已连接>";
  152. },
  153. get onopen() {
  154. return websocket.onopen;
  155. },
  156. set onclose(fn) {
  157. websocket.onclose = fn;
  158. title.state = "<已离线>";
  159. //setTimeout(() => websocket.onopen(), 5000);//自动重连
  160. },
  161. get onclose() {
  162. return websocket.onclose;
  163. },
  164. set onmessage(fn) {
  165. fn_onmessage = fn;
  166. websocket.onmessage = onmessage;
  167. },
  168. get onmessage() {
  169. return websocket.onmessage;
  170. },
  171. send: command => SendCommand(command),
  172. close: () => websocket.close(),
  173. };
  174. } else return;//WebSocket不存在直接结束
  175. }//检查判断
  176.  
  177. /********************监控********************/
  178. addListener(function(event, message) {
  179. if (message.type === "roles") {
  180. message.roles.forEach(role => {
  181. let id = role.id;
  182. let name = role.name;
  183. roles[id] = name;
  184. });
  185. } else if (message.type === "login") {
  186. id = message.id;
  187. title.name = roles[id];
  188. title.state = "<已登录(不可用)>";
  189. role.name = roles[id];
  190. }
  191. return true;
  192. });//roles/login
  193. addListener(function(event, message) {
  194. if (message.type === "room") {
  195. room.str = message.name.replace("(副本区域)", "");
  196. let x = room.str.match(/(.*)-(.*)/);
  197. room.name1 = x[1];
  198. room.name2 = x[2];
  199. room.path = message.path;
  200.  
  201. room.desc = message.desc;
  202. if (room.desc.includes("cmd")) {
  203. room.desc = room.desc.replace("<hig>椅子</hig>", "椅子");//新手教程的椅子
  204. room.desc = room.desc.replace("<CMD cmd='look men'>门(men)<CMD>", "<cmd cmd='look men'>门</cmd>");//兵营副本的门
  205. room.desc = room.desc.replace(/span/g, "cmd");//古墓里的画和古琴是<span>标签
  206. room.desc = room.desc.replace(/\((.*)\)/g, "");//去除括号和里面的英文单词
  207. let cmds = room.desc.match(/<cmd cmd='([^']+)'>([^<]+)<\/cmd>/g);
  208. cmds.forEach(cmd => {
  209. let x = cmd.match(/<cmd cmd='(.*)'>(.*)<\/cmd>/);
  210. message.commands.unshift({cmd: x[1], name: x[2]});
  211. });
  212. room.desc = room.desc.replace(/<([^<]+)>/g, "");
  213. }
  214.  
  215. let event0 = DeepCopy(event);
  216. message.desc = room.desc.substr(0, 20) + "……";
  217. event0.data = JSON.stringify(message);
  218. fn_onmessage.apply(this, [event0]);
  219. return false;
  220. } else if (message.type === "exits") {
  221. for (const key in exits) delete exits[key];//先清空
  222. for (const key in message.items) {
  223. exits[key] = message.items[key];
  224. exits[message.items[key]] = "go " + key;
  225. }
  226. }
  227. return true;
  228. });//room/exits
  229. addListener(function(event, message) {
  230. if (message.type === "items") {
  231. room.items = [];
  232. message.items.forEach(item => {
  233. if (item === 0) {
  234. } else if (item.id && item.name && Object.entries(item).length === 2) {//只有id和name的是物品或者尸体
  235. if (!item.name.includes("尸体")) {
  236. SendCommand(`get ${item.id}`);//自动拾取不是尸体的物品
  237. }
  238. } else if (item.p !== 1) {//不是玩家的NPC保存起来
  239. room.items.push(item);
  240. }
  241. });
  242. }
  243. if (message.type === "itemadd" && message.p !== 1) {
  244. room.items.push(message);
  245. }
  246. if (message.type === "itemremove") {
  247. let index = room.items.findIndex(item => {
  248. return item.id === message.id;
  249. });
  250. if (index !== -1) room.items.splice(index, 1);//删除
  251. }
  252. return true;
  253. });//items/itemadd/itemremove
  254. addListener(function(event, message) {
  255. if (message.type === "state") {
  256. if (message.state) {
  257. title.state = `<${message.state.replace("你正在", "")}>`;
  258. } else title.state = `<闲逛中>`;
  259.  
  260. if (message.desc instanceof Array && message.desc.length > 0) {//状态文本如果有的话就删去
  261. message.desc = [];
  262. let event0 = DeepCopy(event);
  263. event0.data = JSON.stringify(message);
  264. fn_onmessage.apply(this, [event0]);
  265. return false;
  266. }
  267. } else if (message.type === "combat") {
  268. if (message.start === 1) {
  269. title.state = "<战斗中>";
  270. } else if (message.end === 1) {
  271. title.state = "<闲逛中>";
  272. }
  273. }
  274. return true;
  275. });//state/combat
  276. addListener(function(event, message) {
  277. if (message.type === "text") {
  278. if (/重新连线|欢迎登陆/.test(message.text)) {
  279. message.text += `\n${GM_info.script.name} ${GM_info.script.version}`;
  280. if (GM_info.script.version.includes("test")) {
  281. message.text += `\n<hiw>当前测试版,如有问题可回退版本。\n</hiw>`;
  282. }
  283. if (login === false) {
  284. login = true;
  285. SendCommand(["greet master", "pack", "score2", "score"]);//自动请安师傅
  286. setTimeout(() => $("[command=skills]").click(), 200);
  287. setTimeout(() => $("[command=tasks]").click(), 400);
  288. if (!unsafeWindow.WG) {
  289. setTimeout(() => $("[command=showtool]").click(), 600);
  290. setTimeout(() => $("[command=showcombat]").click(), 800);
  291. }
  292. setTimeout(() => $(".dialog-close").click(), 1000);
  293. }
  294. AddContent(message.text);
  295. return false;
  296. } else if (/你获得了(.*)点经验,(.*)点潜能/.test(message.text)) {
  297. let x = message.text.match(/获得了(.*)点经验,(.*)点潜能/);
  298. content.jy += parseInt(x[1]);
  299. content.qn += parseInt(x[2]);
  300. message.text += `<span class="remove_jy">\n共计获得了${content.jy}点经验和${content.qn}点潜能。</span>\n`;
  301. return AddContent(message.text);
  302. } else if (/看起来(.*)想杀死你/.test(message.text)) {
  303. let x = message.text.match(/看起来(.*)想杀死你/);
  304. message.text = `<hir>${x[1]}开始攻击你!<hir>\n`;
  305. return AddContent(message.text);
  306. } else if (/你对著(.*)喝道/.test(message.text)) {
  307. let x = message.text.match(/你对著(.*)喝道/);
  308. message.text = `<hir>你开始攻击${x[1]}!<hir>\n`;
  309. return AddContent(message.text);
  310. } else if (/你扑向(.*)/.test(message.text)) {
  311. let x = message.text.match(/你扑向(.*)!/);
  312. message.text = `<hir>你开始攻击${x[1]}!<hir>\n`;
  313. return AddContent(message.text);
  314. } else if (/造成(.*)点/.test(message.text)) {
  315. let x = message.text.split(/.*造成<wht>|.*造成<hir>|<\/wht>点|<\/hir>点/);
  316. if (x[2]) {
  317. let y = x[2].split(/伤害|\(|</);
  318. if (y[0] === "暴击") {
  319. message.text = `${y[2]}受到<hir>${x[1]}</hir>点<hir>暴击伤害</hir>!\n`;
  320. } else {
  321. message.text = `${y[2]}受到<hiw>${x[1]}</hiw>点伤害!\n`;
  322. }
  323. return AddContent(message.text);
  324. }
  325. } else if (/只留下一堆玄色石头/.test(message.text) && message.text.includes("你")) {
  326. let x = message.text.match(/只见(.*)发出一阵白光/);
  327. message.text = `你分解了${x[1]}!\n`;
  328. return AddContent(message.text);
  329. } else if (/爆出一阵炽热的光芒,周身似乎有雷光环绕,连绵不绝!/.test(message.text) && message.text.includes("你")) {
  330. let x = message.text.match(/你的(.*)爆出一阵炽热的光芒/);
  331. message.text = `你精练了${x[1]}!\n`;
  332. return AddContent(message.text);
  333. } else if (/发出一阵耀眼的光芒,看上去似乎变强了!/.test(message.text) && message.text.includes("你")) {
  334. let x = message.text.match(/你的(.*)发出一阵耀眼的光芒/);
  335. message.text = `你精练了${x[1]}!\n`;
  336. return AddContent(message.text);
  337. } else if (/你从武道秘籍中领悟到了/.test(message.text)) {
  338. Beep();//武道书读完的提示音
  339. } else if (/你身上没有挖矿工具。/.test(message.text)) {
  340. // SendCommand([]);//小号没有铁镐的情况
  341. }
  342. }
  343. return true;
  344. });//text
  345.  
  346. addListener(function(event, message) {
  347. if (message.type === "text") {
  348. if (/你轻声吟道/.test(message.text)
  349. || /你用内力把玄晶炼化,小心翼翼的试图引入/.test(message.text)
  350. || /你的(.*)等级提升了!/.test(message.text)
  351. ) return false;
  352.  
  353. if (/你身上东西太多了/.test(message.text)) {
  354. AddContent(`<hir>友情提示:请检查是否背包已满!</hir>`);
  355. Beep();
  356. }
  357. }
  358. return true;
  359. });//text
  360.  
  361. addListener(function(event, message) {
  362. if (message.type === "skills") {
  363. if (message.items) {//所有技能数据
  364. role.skill_limit = message.limit;
  365. role.pot = message.pot;
  366. role.skill_count = message.items.length;
  367. role.skills = message.items;
  368. message.items.forEach(skill => {
  369. let color = ["/", "wht", "hig", "hic", "hiy", "hiz", "hio", "hir"];
  370. for (let i = 1; i < color.length; i++) {
  371. if (skill.name.includes(color[i])) {
  372. skill.color = i;
  373. break;
  374. }
  375. }
  376. skills[skill.id] = skill;
  377. });
  378. } else if (message.item) {//学会新技能
  379. let color = ["/", "wht", "hig", "hic", "hiy", "hiz", "hio", "hir"];
  380. for (let i = 1; i < color.length; i++) {
  381. if (message.item.name.includes(color[i])) {
  382. message.item.color = i;//新学的技能也要添加上颜色
  383. break;
  384. }
  385. }
  386. skills[message.item.id] = message.item;
  387. } else if (message.enable) {//装备上一个技能
  388. skills[message.id].enable_skill = message.enable;
  389. } else if (message.exp) {//单个技能经验变动
  390. let skill = skills[message.id];
  391. if (!skill) return true;//防错
  392. if (message.level) {
  393. skill.level = message.level;
  394. AddContent(`<hig>你的技能${skill.name}提升到<hiw>${skill.level}</hiw>级!</hig>\n`);
  395. }
  396.  
  397. let limit = role.skill_limit;
  398. let study_per = parseInt(role.study_per);
  399. let lianxi_per = parseInt(role.lianxi_per);
  400. let int = parseInt(role.int);//悟性
  401. let int_add = parseInt(role.int_add);
  402. let level = parseInt(skill.level);
  403. let k = skill.color * 2.5;//系数白2.5/../橙15/红17.5
  404. let qn = (limit * limit - level * level) * k;
  405.  
  406. if (title.state.includes("练习技能")) {
  407. let time = qn / (int + int_add) / (1 + lianxi_per / 100 - int / 100) / (60 / 5);
  408. let timeStr = time < 60 ? `${parseInt(time)}分钟` : `${parseInt(time / 60)}小时${parseInt(time % 60)}分钟`;
  409. //练习每一跳的消耗公式=(先天悟性+后天悟性)×(1+练习效率%-先天悟性%)
  410. let cost = parseInt(qn / time / 12);
  411. role.lianxi_cost = cost;
  412. AddContent(`练习${skill.name}消耗了${cost}点潜能。\n`);
  413.  
  414. $(".remove_lianxi").remove();
  415. AddContent(
  416. $(`<span class="remove_lianxi"></span>`).append(
  417. $(`<hig>悟性: ${int}+${int_add} 效率: ${lianxi_per}% </hig>`),
  418. $(`<span class="span-btn"></span>`).append("刷新").click(() => SendCommand(["score2", "score"])),
  419. $(`<span>\n<span>`)
  420. )
  421. );
  422. let LEVEL = [300, 500, 800, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, limit];
  423. for (let i = 0; i < LEVEL.length; i++) {
  424. let l = LEVEL[i];
  425. if (skill.level < l && l <= limit) {
  426. let qn = (l * l - level * level) * k;
  427. let time = qn / (int + int_add) / (1 + lianxi_per / 100 - int / 100) / (60 / 5);
  428. let timeStr = time < 60 ? `${parseInt(time)}分钟` : `${parseInt(time / 60)}小时${parseInt(time % 60)}分钟`;
  429. AddContent(`<span class="remove_lianxi">练习到${l}级需要${timeStr},消耗${qn}潜能。\n</span>`);
  430. if (l === limit) break;
  431. }
  432. }
  433. // AddContent(`<hic class="remove_lianxi">练习到${limit}级需要${timeStr}并消耗${qn}潜能。\n</hic>`);
  434. // $(".remove_lxsj").remove();
  435. // AddContent(`<span class="remove_lxsj">角色\n练习效率: ${lianxi_per}%\n等级上限: ${limit}级\n需要潜能: ${qn}\n需要时间: ${timeStr}\n</span>`);
  436. } else if (title.state.includes("学习")) {
  437. //学习每一跳的消耗公式=(先天悟性+后天悟性)×(1+学习效率%-先天悟性%)×3
  438. let cost = parseInt((int + int_add) * (1 + study_per / 100 - int / 100) * 3);
  439. role.study_cost = cost;
  440. AddContent(`学习${skill.name}消耗了${cost}点潜能。\n`);
  441. }
  442. }
  443. }
  444. return true;
  445. });//skills
  446.  
  447.  
  448. /*****内力计算*****/
  449. addListener(function(event, message) {
  450. if (message.type === "text" && /你的最大内力增加了/.test(message.text)) {
  451. let x = message.text.match(/你的最大内力增加了(.*)点。/);
  452. content.nl = parseInt(x[1]);
  453. let max = role.max_mp;
  454. let limit = role.limit_mp;
  455. let t = (limit - max) / (content.nl * 6);//时间/分钟
  456. let tStr = t < 60 ? `${parseInt(t)}分钟` : `${parseInt(t / 60)}小时${parseInt(t % 60)}分钟`;
  457. message.text += `\n<hic class="remove_nl">你的最大内力从${max}到${limit}还需${tStr}。\n</hic>`;
  458. return AddContent(message.text);
  459. } else if (message.type === "sc" && message.id === id) {
  460. role.hp = message.hp;
  461. role.mp = message.mp;
  462. role.max_hp = message.max_hp;
  463. role.max_mp = message.max_mp;
  464. }
  465. return true;
  466. });
  467. /*****侠客岛领悟石壁辅助*****/
  468. addListener(function(event, message) {
  469. if (message.type === "text" && message.text.includes("石破天对你说到:你知道银鞍照白马是什么意思吗?")) {
  470. let xkx = [//侠客行诗句
  471. ["赵客缦胡缨", "吴钩霜雪明", "银鞍照白马", "飒沓如流星"],
  472. ["十步杀一人", "千里不留行", "事了拂衣去", "深藏身与名"],
  473. ["闲过信陵饮", "脱剑膝前横", "将炙啖朱亥", "持觞劝侯嬴"],
  474. ["三杯吐然诺", "五岳倒为轻", "眼花耳热后", "意气素霓生"],
  475. ["救赵挥金锤", "邯郸先震惊", "千秋二壮士", "煊赫大梁城"],
  476. ["纵死侠骨香", "不惭世上英", "谁能书阁下", "白首太玄经"],
  477. ];
  478. let go = ["go east", "go south", "go west", "go north"];
  479. let x = message.text.match(/石破天对你说到:你知道(.*)是什么意思吗?/);
  480. for (let i = 0; i < xkx.length; i++) {
  481. for (let j = 0; j < xkx[i].length; j++) {
  482. if (xkx[i][j] === x[1]) {
  483. AddContent(`<hig>检测到诗句<hiw>${x[1]}</hiw>,苏轻将帮你寻找石室。\n</hig>`);
  484. SendCommand(["stopstate", "go enter", go[j], "lingwu bi"]);
  485. break;
  486. }
  487. }
  488. }
  489. }
  490. if (message.type === "skills" && title.state === "<领悟石壁>") {
  491. let skill = skills[message.id];
  492. if (!skill) return;
  493. let x = skill.name.match(/<wht>基本(.*)<\/wht>/);
  494. content.lwsb = "是" + x[1];
  495. if (message.level) {
  496. AddContent(`<hig>领悟石壁完成,苏轻将帮你寻找石破天。\n</hig>`);
  497. let go = exits["山洞"];
  498. let say = `say ${content.lwsb}`;
  499. SendCommand(["stopstate", go, "go out", say, "cr"]);
  500. setTimeout(() => Beep(), 1000);//提示音
  501. }
  502. AddContent(`由于领悟石壁,你的技能${skill.name}提升到了<hig>${message.exp}%</hig>!\n`);
  503. if (message.exp < 90) {
  504. $(".remove_exp_90").remove();
  505. AddContent(`<hir class="remove_exp_90">建议将技能熟练度练习到90%以上再继续领悟石壁!\n</hir>`);
  506. }
  507. }
  508.  
  509. return true;
  510. });
  511.  
  512.  
  513.  
  514.  
  515. // AddListener("items", function(event, message) {
  516. // wsmud.items.forEach(item => {
  517. // if (item.name === "当铺老板 唐楠") {
  518. // SendCommand("sell all");
  519. // SendCommand("list " + item.id);
  520. // } else if (/店小二|杂货铺老板 杨永福|铁匠铺老板 铁匠|药铺老板 平一指/.test(item.name)) {
  521. // SendCommand("list " + item.id);
  522. // } else if (item.name === wsmud.settings.auto_sm_npc && wsmud.settings.auto_sm) {
  523. // wsmud.auto_sm_cmd = "task sm " + item.id;
  524. // SendCommand(wsmud.auto_sm_cmd);
  525. // }
  526. // });
  527. // return true;
  528. // });
  529. // AddListener("list", function(event, message) {
  530. // if (message.seller && message.selllist) {
  531. // message.selllist.forEach(item => {
  532. // if (item.name === wsmud.settings.auto_sm_item) {
  533. // SendCommand("buy 1 " + item.id + " from " + message.seller);
  534. // setTimeout(() => SendCommand(AutoSM), 3000);
  535. // }
  536. // });
  537. // }
  538. // return true;
  539. // });
  540.  
  541. // AddListener("die", function(event, message) {
  542. // if (!message.relive) {
  543. // AddContent(`<hiw>若不点击原地复活,则 10 秒后自动武庙复活。</hiw>\n`);
  544. // let timer = setTimeout(() => SendCommand("relive"), 10000);
  545. // AddContent(
  546. // $(`<div class="item-commands" timer="${timer}"><span cmd="relive locale">原地复活</span></div>`)
  547. // .click(function() {
  548. // let timer = $(this).attr("timer");
  549. // clearTimeout(timer);
  550. // })
  551. // );
  552. // }
  553. // return true;
  554. // });
  555.  
  556. // AddListener("text", function(event, message) {
  557. // if (/最近师门物资紧缺|为师最近练功到了瓶颈|最近师门扩招了|你去帮我找/.test(message.text)) {
  558. // SendCommand(wsmud.auto_sm_cmd);
  559. // } else if (/你要是找不到/.test(message.text)) {
  560. // let x = message.text.match(/我要的是(.*),你要是找不到就换别的吧。/);
  561. // wsmud.settings.auto_sm_item = x[1];
  562. // console.log(x[1]);
  563. // } else if (/不错,孺子可教!/.test(message.text)) {
  564. // wsmud.settings.auto_sm_item = "师门完成";
  565. // setTimeout(() => SendCommand(AutoSM), 2000);
  566. // } else if (/辛苦了, 你先去休息一下吧/.test(message.text)) {
  567. // wsmud.settings.auto_sm = false;
  568. // SendCommand("tasks");
  569. // }
  570. // return true;
  571. // });
  572. // {type: "cmds",
  573. // items: [{cmd: "cr cd/wudu/damen", name: "进入副本"},
  574. // {cmd: "cr cd/wudu/damen 0 1", name: "扫荡一次"},
  575. // {cmd: "cr cd/wudu/damen 0 10", name: "扫荡十次"}]}
  576. // AddListener("cmds", function(event, message) {
  577. // if (message.items) {
  578. // message.items.forEach(item => {
  579. // if (item.name.includes(wsmud.settings.auto_sm_item)) {
  580. // SendCommand(item.cmd);
  581. // return true;
  582. // }
  583. // });
  584. // let cmd = AutoBuy(wsmud.settings.auto_sm_item);
  585. // SendCommand(cmd);
  586. // }
  587. // return true;
  588. // });
  589. // AddListener("text", function(event, message) {
  590. // } else else if (/无数花瓣夹杂着寒气/.test(text)) {
  591. // let x = text.match(/无数花瓣夹杂着寒气将(.*)围起/);
  592. // AddContent(`<him>太上忘情 => ${x[1]}</him>\n`);
  593. // });
  594.  
  595.  
  596. addListener(function(event, message) {//type=msg
  597. if (message.type === "msg" && !isMoblie) {//判断是否移动端
  598. let uid = message.uid;
  599. let txt = message.content;
  600. let name = message.name ? message.name + ":" : "";
  601.  
  602. let time = `<hik class="timeStr" ${showTimeStr ? "" : 'style="display:none"'}> ${Time2Str()}</hik>`;
  603. let look3 = function() {
  604. SendCommand(`look3 ${$(this).attr("uid")}`);
  605. };
  606. if (message.ch === "chat") {
  607. let levels = ["<hic>闲聊</hic>", "<hic>闲聊</hic>", "<hic>闲聊</hic>", "<hiy>宗师</hiy>", "<hiz>武圣</hiz>", "<hio>武帝</hio>", "<hir>武神</hir>"];
  608. $(".chat").append($(`<hic uid="${uid}">【${levels[message.lv]}】${name}${txt}${time}<br></hic>`).click(look3));
  609. } else if (message.ch === "fam") {
  610. $(".fam").append($(`<hiy uid="${uid}">【${message.fam}】${name}${txt}${time}<br></hiy>`).click(look3));
  611. } else if (message.ch === "pty") {
  612. $(".pty").append($(`<hiz uid="${uid}">【帮派】${name}${txt}${time}<br></hiz>`).click(look3));
  613. } else if (message.ch === "tm") {
  614. $(".tm").append(`<hig>【队伍】${name}${txt}${time}<br></hig>`);
  615. } else if (message.ch === "es") {
  616. $(".es").append(`<hio>【${message.server}】${name}${txt}${time}<br></hio>`);
  617. } else if (message.ch === "rumor") {//谣言
  618. if (/闭关修炼/.test(txt)) {
  619. let x = txt.match(/武帝(.*)闭关修炼似有所悟,你随之受益获得了(.*)经验,(.*)潜能/);
  620. $(".rumor").append(`<him>【谣言】武帝<hio>${x[1]}</hio>出关奖励<hio>${x[2]}</hio>点。</him><br>`);
  621. } else if (/战胜了/.test(txt)) {
  622. let x = txt.match(/听说(.*)战胜了(.*)获得了(.*)称号!/);
  623. $(".rumor").append("<him>【谣言】" + x[1] + "获得了" + x[3] + "称号!</him><br>");
  624. } else if (/郭大侠收到线报/.test(txt)) {
  625. $(".rumor").append("<him>【谣言】蒙古大军将会进攻襄阳!" + time + "</him><br>");
  626. } else if (/出现在/.test(txt)) {
  627. let x = txt.match(/听说(.*)出现在(.*)-(.*)一带。/);
  628. $(".rumor").append(`<him>【谣言】<hio>${x[1]}</hio>出现在${x[2]}${x[3]}!${time}</him><br>`);
  629. } else {
  630. $(".rumor").append(`<him>【谣言】${txt}</him><br>`);
  631. }
  632. } else if (message.ch === "sys") {//系统
  633. if (/欢迎登录(不可用)|非法收益/.test(txt)) return true;
  634. else if (/挖矿技巧/.test(txt)) txt = txt.match(/(.*)捡到一本挖矿指南/)[1] + "使用了挖矿指南!";
  635. else if (/,望各路英雄鼎力相助/.test(txt)) txt = txt.replace(",望各路英雄鼎力相助", "");
  636. else if (/蒙古大军挥军南下/.test(txt)) txt = txt.replace("蒙古大军挥军南下,", "");
  637. else if (/蒙古大汗蒙哥出现在战场中央/.test(txt)) txt = "蒙古大汗蒙哥出现在战场中央!";
  638. else if (/蒙古可汗蒙哥被击杀于襄阳城下/.test(txt)) txt = txt.replace("蒙古可汗蒙哥被击杀于襄阳城下,", "");
  639. $(".sys").append(`<hir>【系统】${txt}${time}</hir><br>`);
  640. AutoScroll(".sys");
  641. }
  642. AutoScroll("." + message.ch);
  643. $(".channel pre").html("");
  644. }
  645. return true;
  646. });
  647. addListener(function(event, message) {//type=tasks
  648. if (message.type === "tasks" && message.items) {
  649. let fb, qa, wd1, wd2, wd3, sm1, sm2, ym1, ym2, yb1, yb2;
  650. message.items.forEach(task => {
  651. if (task.state === 2) SendCommand(`taskover ${task.id}`);//自动完成
  652. if (task.id === "signin") {
  653. let a = task.desc.match(/师门任务:(.*),副本:<(.*)>(.*)\/20<(.*)>/);
  654. let b = task.desc.match(/(.*)武道塔(.*),进度(.*)\/(.*)<(.*)>,<(.*)>(.*)首席请安。<(.*)>/);
  655. (parseInt(a[3]) < 20) ? fb = `<hig>${a[3]}</hig>` : fb = a[3];
  656. (parseInt(b[3]) < parseInt(b[4])) ? wd1 = `<hig>${b[3]}</hig>` : wd1 = b[3];
  657. wd2 = b[4];
  658. /可以重置/.test(b[2]) ? wd3 = "<hig>可以重置</hig>" : wd3 = "已经重置";
  659. /已经/.test(b[7]) ? qa = "已经请安" : qa = "<hig>尚未请安</hig>";
  660. } else if (task.id === "sm") {
  661. let a = task.desc.match(/目前完成(.*)\/20个,共连续完成(.*)个。/);
  662. (parseInt(a[1]) < 20) ? sm1 = `<hig>${a[1]}</hig>` : sm1 = a[1];
  663. sm2 = a[2];
  664. } else if (task.id === "yamen") {
  665. let a = task.desc.match(/目前完成(.*)\/20个,共连续完成(.*)个。/);
  666. (parseInt(a[1]) < 20) ? ym1 = `<hig>${a[1]}</hig>` : ym1 = a[1];
  667. ym2 = a[2];
  668. } else if (task.id === "yunbiao") {
  669. let a = task.desc.match(/本周完成(.*)\/20个,共连续完成(.*)个。/);
  670. (parseInt(a[1]) < 20) ? yb1 = `<hig>${a[1]}</hig>` : yb1 = a[1];
  671. yb2 = a[2];
  672. }
  673. });
  674. let html = `门派请安 => ${qa}\n武道之塔 => ${wd1}/${wd2} ${wd3}\n`;
  675. html += `日常副本 => ${fb}/20\n师门任务 => ${sm1}/20 ${sm2}连\n`;
  676. html += `衙门追捕 => ${ym1}/20 ${ym2}连\n每周运镖 => ${yb1}/20 ${yb2}连\n`;
  677. content.task = `<span class="remove_task">${html}<span>`;
  678. AddContent(content.task);
  679. }
  680. return true;
  681. });
  682.  
  683. addListener(function(event, message) {//type=score
  684. if (message.type === "score") {
  685. for (const key in message) role[key] = message[key];
  686. }
  687. return true;
  688. });
  689.  
  690.  
  691.  
  692.  
  693.  
  694. let pack = new Proxy({items: [], eqs: [], max: 0, moneyStr: "", }, {
  695. set: function(pack, key, value) {
  696. if (key === "moneyStr") $(".role_money").html(value);
  697. pack[key] = value;
  698. return true;
  699. },
  700. get: function(pack, key) {
  701. return pack[key];
  702. }
  703. });
  704.  
  705. let ITEMS = [
  706. "师门补给包", "背包扩充石", "小箱子",
  707. "神魂碎片", "武道</hio>", "武道残页", "元晶", "帝魄碎片", "ord", "hir",
  708. "玄晶", "养精丹</hig>", "养精丹", "培元丹", "玫瑰花",
  709. "扫荡符", "天师符", "叛师符", "洗髓丹",
  710. "师门令牌</hig>", "师门令牌</hic>", "师门令牌</hiy>", "师门令牌</HIZ>", "师门令牌</hio>",//师门令牌排序
  711. "碎裂的红宝石", "碎裂的绿宝石", "碎裂的蓝宝石", "碎裂的黄宝石",//宝石排序
  712. "红宝石</hic>", "绿宝石</hic>", "蓝宝石</hic>", "黄宝石</hic>",
  713. "精致的红宝石", "精致的绿宝石", "精致的蓝宝石", "精致的黄宝石",
  714. "完美的红宝石", "完美的绿宝石", "完美的蓝宝石", "完美的黄宝石",
  715. "聚气丹</hig>", "聚气丹</hic>", "聚气丹</hiy>", "聚气丹</HIZ>", "聚气丹</hio>",//聚气丹排序
  716. "突破丹</hig>", "突破丹</hic>", "突破丹</hiy>", "突破丹</hiz>", "突破丹</hio>",//突破丹排序
  717. "残页</hio>", "残页</HIZ>", "残页</hiy>", "残页</hic>", "残页</hig>",//残页排序
  718. "鲤鱼", "草鱼", "鲢鱼", "鲮鱼", "鳊鱼", "鲂鱼", "黄金鳉", "黄颡鱼", "太湖银鱼", "虹鳟", "孔雀鱼", "反天刀",//鱼排序
  719. "银龙鱼", "黑龙鱼", "罗汉鱼", "巨骨舌鱼", "七星刀鱼", "帝王老虎魟",
  720. "当归", "芦荟", "山楂叶", "柴胡", "金银花", "石楠叶", "茯苓", "沉香", "熟地黄", "九香虫", "络石藤", "冬虫夏草",//药材排序
  721. "人参", "何首乌", "凌霄花", "灵芝", "天仙藤", "盘龙参",
  722. "秘籍</wht>", "秘籍",
  723. ];
  724.  
  725. addListener(function(event, message) {
  726. function autoUse(item) {
  727. if (/养精丹|朱果|潜灵果|背包扩充石/.test(item.name)) {
  728. let cmd = ["stopstate"];
  729. let count = item.count;
  730. let zl = "use";
  731. if (/<hig>养精丹<\/hig>/.test(item.name)) count = count > 10 ? 10 : count;
  732. if (/小箱子|师门补给包/.test(item.name)) zl = "open";
  733. for (let i = 0; i < count; i++) {
  734. cmd.push(zl + " " + item.id);
  735. cmd.push(200);
  736. }
  737. AddContent(
  738. $(`<span class="span-btn">使用 ${item.name} ${count}次</span>`).click(() => SendCommand(cmd)),
  739. );
  740. AddContent(`\n`);
  741. }
  742. }
  743. if (message.type === "pack") {
  744. if (message.money) pack.moneyStr = Money2Str(message.money);
  745. if (message.max_item_count) pack.max = message.max_item_count;
  746. if (message.eqs) pack.eqs = message.eqs;
  747. if (message.remove) {//失去物品
  748. let id = message.id;
  749. let item = pack.items.find(item => {
  750. return item.id === id;
  751. });
  752. if (item) item.count -= message.remove;
  753. }
  754. if (message.name) {//获得物品
  755. let id = message.id;
  756. let add = 0;
  757. let count = message.count;
  758. let item = pack.items.find(item => {
  759. return item.id === id;
  760. });
  761. if (item) {
  762. if (pack[id]) {
  763. add = count - item.count + pack[id];
  764. item.count = count;
  765. pack[id] = add;
  766. } else add = count - item.count;
  767. } else {
  768. add = count;
  769. pack[id] = add;
  770. pack.items.push(message);
  771. }
  772. let str = `共有${count}${message.unit}`;
  773. if (message.can_eq === 1) str = "";
  774. $(`.remove_${message.id}`).remove();
  775. $(".content-pickup").append(
  776. $(`<div class="remove_${message.id} pickup-row"></div>`).append(
  777. $(`<span class="pickup-add"></span>`).append(`获得${add}${message.unit}${message.name}`),
  778. $(`<span class="pickup-count"></span>`).append(str),
  779. )
  780. );
  781. AutoScroll(".content-pickup");
  782. autoUse(message);
  783. }
  784. if (message.items) {
  785. pack.items = [];
  786. ITEMS.forEach(name => {
  787. for (let i = 0; i < message.items.length; i++) {
  788. let item = message.items[i];
  789. if (item !== 0 && item.name.includes(name)) {
  790. pack.items.push(message.items[i]);
  791. message.items[i] = 0;
  792. }
  793. }
  794. });
  795. message.items.forEach(item => {
  796. if (item !== 0) pack.items.push(item);
  797. });
  798. pack.items.forEach(item => autoUse(item));
  799. message.items = pack.items;
  800. message.type = "dialog";
  801. let event0 = DeepCopy(event);
  802. event0.data = JSON.stringify(message);
  803. fn_onmessage.apply(this, [event0]);
  804. return false;
  805. }
  806. }
  807. return true;
  808. });//pack
  809.  
  810.  
  811.  
  812.  
  813.  
  814. //苏轻自用监控
  815. addListener(function(event, message) {
  816. if (message.type === "text" && /zibao/.test(message.text)) {
  817. AddContent(`<hir>开启自爆监控!</hir>`);
  818. let zibao = 0;
  819. zibao = addListener(function(event, message) {
  820. if (message.type === "die" && !message.relive) {
  821. SendCommand(["relive", 2000, "jh fam 3 start", "go westup", "go north", "go north", "say zbkill"]);
  822. }
  823. if (message.type === "text" && /zbkill/.test(message.text)) {
  824. room.items.forEach(item => {
  825. SendCommand("kill " + item.id);
  826. });
  827. }
  828. if (message.type === "text" && /stop/.test(message.text)) {
  829. removeListener(zibao);
  830. AddContent(`<hir>关闭自爆监控!</hir>`);
  831. }
  832. });
  833. }
  834. return true;
  835. });
  836.  
  837. // AddListener("pack", function(event, message) {
  838. // if (!funny.isMoblie) {
  839. // if (message.name) {
  840. // let name = message.name;
  841. // if (name.includes("wht")) return true;
  842.  
  843. // let pick = wsmud.pack.pick;
  844. // let count = message.count;
  845. // if (pick[name]) {
  846. // if (pick[name].count < count) {
  847. // pick[name].add += (count - pick[name].count);
  848. // pick[name].count = count;
  849. // } else {
  850. // pick[name].count += count;
  851. // pick[name].add += count;
  852. // }
  853. // } else {
  854. // let array = wsmud.pack.items;
  855. // let sum = 0;
  856. // for (let i = 0; i < array.length; i++) {
  857. // let item = array[i];
  858. // if (item.name === name) {
  859. // sum += item.count;
  860. // }
  861. // }
  862. // if (sum < count) {
  863. // pick[name] = {count: count, add: count - sum};
  864. // } else {
  865. // pick[name] = {count: sum + count, add: count};
  866. // }
  867. // }
  868.  
  869. // let nameStr = message.name.replace(/<|>|\//g, "");
  870. // let remove = "remove_pick_" + nameStr;
  871. // let html = `${message.name} => 累计获得${pick[name].add}${message.unit} => 共有${pick[name].count}${message.unit}`;
  872. // $("." + remove).remove();
  873. // $(".channel-pick").append(`<span class="${remove}">${html}<br></span>`);
  874. // AutoScroll(".channel-pick");
  875. // }
  876. // }
  877. // return true;
  878. // });
  879. // AddListener("pack", function(event, message) {
  880. // if (typeof message.eq === "number") {
  881. // let index = message.eq;
  882. // let itemIndex = wsmud.pack.items.findIndex(item => {
  883. // return item.id === message.id;
  884. // });
  885. // let eq = DeepCopy(wsmud.pack.items[itemIndex]);
  886. // wsmud.pack.eqs[index] = eq;
  887. // wsmud.pack.items.splice(itemIndex, 1);
  888. // }
  889. // if (typeof message.uneq === "number") {
  890. // let index = message.uneq;
  891. // let item = DeepCopy(wsmud.pack.eqs[index]);
  892. // item.count = 1;
  893. // wsmud.pack.items.push(item);
  894. // wsmud.pack.eqs[index] = null;
  895. // }
  896. // RefreshPack();
  897. // RefreshEq();
  898. // return true;
  899. // });
  900.  
  901. // {type: "dialog", dialog: "pack", id: "c7mj3f552d3", eq: 3}
  902.  
  903. let WD = {
  904. "道童": ["jh fam 1 start"],
  905. "谷虚道长": ["jh fam 1 start", "go north"],
  906. "宋远桥": ["jh fam 1 start", "go north"],
  907. "张三丰": ["jh fam 1 start", "go west", "go northup", "go north", "go west", "go northup", "go northup", "go northup", "go north", "go north", "go north", "go north", "go north", "go north"],
  908. "首席": ["jh fam 1 start", "go west", "go northup"],
  909. "门派后勤管理员": ["jh fam 1 start", "go west"]
  910. };
  911. let SL = {
  912. "清乐比丘": ["jh fam 2 start"],
  913. "道觉禅师": ["jh fam 2 start", "go north", "go north"],
  914. "慧合尊者": ["jh fam 2 start", "go north", "go north", "go northeast", "go northwest", "go north", "go west"],
  915. "澄净": ["jh fam 2 start", "go north", "go north", "go northeast", "go northwest", "go north", "go east"],
  916. "玄难": ["jh fam 2 start", "go north", "go north", "go northeast", "go northwest", "go north", "go north"],
  917. "首席": ["jh fam 2 start", "go north", "go north", "go northeast", "go northwest", "go north"],
  918. "门派后勤管理员": ["jh fam 2 start", "go north"]
  919. };
  920. let HS = {
  921. "高根明": ["jh fam 3 start"],
  922. "岳不群": ["jh fam 3 start", "go westup", "go north", "go north"],
  923. "封不平": ["jh fam 3 start", "go eastup", "go southup", "jumpdown", "go southup", "go south", "go east"],
  924. "风清扬": ["jh fam 3 start", "go westup", "go south", "go southup", "go southup", "break bi", "go enter", "go westup", "go westup"],
  925. "首席": ["jh fam 3 start", "go westup", "go north"],
  926. "门派后勤管理员": ["jh fam 3 start", "go westup", "go north"]
  927. };
  928. let EM = {
  929. "苏梦清": ["jh fam 4 start", "go west"],
  930. "静心": ["jh fam 4 start", "go west", "go south", "go south"],
  931. "周芷若": ["jh fam 4 start", "go west", "go south", "go west", "go north", "go north"],
  932. "灭绝": ["jh fam 4 start", "go west", "go south", "go west", "go south", "go south"],
  933. "首席": ["jh fam 4 start", "go west", "go south"],
  934. "门派后勤管理员": ["jh fam 4 start", "go west", "go south", "go west"]
  935. };
  936. let XY = {
  937. "薛慕华": ["jh fam 5 start", "go north", "go north"],
  938. "苏星河": ["jh fam 5 start"],
  939. "逍遥子": ["jh fam 5 start", "go down", "go down"],
  940. "首席": ["jh fam 5 start", "go west"],
  941. "门派后勤管理员": ["jh fam 5 start", "go east"]
  942. };
  943. let GB = {
  944. "左全": ["jh fam 6 start", "go down"],
  945. "门派后勤管理员": ["jh fam 6 start", "go down", "go east", "go east"],
  946. "首席": ["jh fam 6 start", "go down", "go east", "go east", "go east"],
  947. "简长老": ["jh fam 6 start", "go down", "go east", "go east", "go east", "go up"],
  948. "鲁有脚": ["jh fam 6 start", "go down", "go east", "go east", "go east", "go east", "go east"],
  949. "洪七公": ["jh fam 6 start", "go down", "go east", "go east", "go east", "go east", "go east", "go up"],
  950. };
  951. let SS = {
  952. "何小二": ["jh fam 7 start", "go north"],
  953. "门派后勤管理员": ["jh fam 7 start", "go north", "go up", "go up", "go east"],
  954. "李四": ["jh fam 7 start", "go north", "go up", "go up", "go up", "go up"],
  955. "首席": ["jh fam 7 start", "go north", "go up", "go up", "go up", "go up", "go east"],
  956. "雾中楼": ["jh fam 7 start", "go north", "go up", "go up", "go up", "go up", "go up", "go up", "go west"],
  957. };
  958.  
  959. let YZC = {
  960. "修炼": ["stopstate", "jh fam 0 start", "go west", "go west", "go north", "go enter", "go west", "xiulian"],
  961. "打坐": ["stopstate", "jh fam 0 start", "go west", "go west", "go north", "go enter", "go west", "dazuo"],
  962. "疗伤": ["stopstate", "jh fam 0 start", "go north", "go north", "go west", "liaoshang", 2000, "liaoshang"],
  963. "当铺": ["jh fam 0 start", "go south", "go east"],
  964.  
  965. };
  966. let XYC = {
  967. "襄阳城": ["jh fam 8 start"],
  968. "东城门": ["jh fam 8 start", "go east", "go east", "go east", "go east"],
  969. "南城门": ["jh fam 8 start", "go south", "go south", "go south", "go south"],
  970. "西城门": ["jh fam 8 start", "go west", "go west", "go west", "go west"],
  971. "北城门": ["jh fam 8 start", "go north", "go north", "go north", "go north"]
  972. };
  973.  
  974.  
  975.  
  976. /********************READY********************/
  977. $(document).ready(function() {
  978. GM_addStyle(`.content-bottom {
  979. -webkit-user-select: none;
  980. -moz-user-select: none;
  981. -ms-user-select: none;
  982. }`);
  983. if (isMoblie) return;
  984. $(".signinfo").addClass("hide");
  985. $(".room_items")[0].style.maxHeight = "240px";
  986. $(".state-bar")[0].style.overflow = "hidden";
  987. $(".combat-commands")[0].style.overflow = "hidden";
  988. $(".dialog-content")[0].style.overflowX = "hidden";
  989. GM_addStyle(".channel{ display: none; }");
  990. GM_addStyle(".room-item > .item-name { margin-left: 14px; }");
  991.  
  992. // GM_addStyle(`
  993. // .left-nav { flex: 0 0 auto; text-align: center; }
  994.  
  995. // .left-role { flex: 0 0 auto; }
  996.  
  997. // .left-skill { flex: 1 0 auto; height: auto; display: flex; flex-flow: column nowrap; }
  998. // .left-skill-list { height: 480px; flex: 1 1 auto; line-height: 24px; padding: 10px 5px 0 5px; overflow: auto; border: gray solid 1px; }
  999. // .skill-line { display: flex; padding: 2px 0 2px 0; border-top: #343434 solid 1px; }
  1000. // .skill-line-name { flex: 1 0 auto; }
  1001. // .skill-line-level { flex: 0 0 auto; }
  1002. // .left-eq { height: 245px; flex: 0 0 auto; display: flex; flex-flow: row nowrap; margin: 10px 0 10px 0; }
  1003. // .left-eq-list { width: 250px; flex: 0 0 auto; border: gray solid 1px; }
  1004. // .left-eq-change { width: 100px; flex: 1 1 auto; border: gray solid 1px; display: flex; flex-flow: column nowrap; margin-left: 10px; }
  1005. // .left-eq-change div { flex: 1 1 auto; text-align: center; padding-left: 5px; }
  1006. // .left-pack { flex: 1 0 auto; height: 500px; overflow: auto; }
  1007. // .left-skill-list { height: 480px; flex: 1 1 auto; line-height: 24px; padding: 10px 5px 0 5px; overflow: auto; }
  1008. // .pack-line { display: flex; padding: 2px 0 2px 0; border-top: #343434 solid 1px; }
  1009. // .pack-line-name { flex: 1 0 auto; }
  1010. // .pack-line-count { flex: 0 0 auto; }
  1011.  
  1012. // .left-hotkey { flex: 1 0 auto; height: 500px; display: flex; flex-flow: column nowrap; }
  1013. // .list-commands { flex: 0 1 auto; height: 1000px; border: gray solid 1px; padding-left: 5px; }
  1014.  
  1015. // .left-send { flex: 0 0 auto; height: auto; display: flex; }
  1016.  
  1017.  
  1018. // .left-setting { }
  1019.  
  1020. // .left table { table-layout: fixed; border-collapse: collapse; margin: 0; }
  1021. // .left td { width: 88px; text-align: center; white-space: nowrap; border: #343434 solid 1px; }
  1022.  
  1023.  
  1024. // `);
  1025.  
  1026.  
  1027. /********************FN********************/
  1028. let changeLeftRight = function() {
  1029. let layout_left = true;
  1030. return function() {
  1031. $(".left")[0].style.order = layout_left ? "1" : "-1";
  1032. $(".right")[0].style.order = layout_left ? "-1" : "1";
  1033. layout_left = !layout_left;
  1034. }
  1035. }();
  1036. let hideLeftRight = function() {
  1037. AddContent($("<div></div>").append(
  1038. $(`<span class="span-btn"></span>`).append("隐藏功能边栏").click(() => $(".left").hide()),
  1039. $(`<span class="span-btn"></span>`).append("显示功能边栏").click(() => $(".left").show()),
  1040. $(`<br>`),
  1041. $(`<span class="span-btn"></span>`).append("隐藏聊天边栏").click(() => $(".right").hide()),
  1042. $(`<span class="span-btn"></span>`).append("显示聊天边栏").click(() => $(".right").show()),
  1043. ));
  1044. };
  1045. let clearRightMsg = function() {
  1046. AddContent($("<div></div>").append(
  1047. $(`<span class="span-btn"></span>`).append("世界清屏").click(() => $(".chat").html("")),
  1048. $(`<span class="span-btn"></span>`).append("队伍清屏").click(() => $(".tm").html("")),
  1049. $(`<span class="span-btn"></span>`).append("门派清屏").click(() => $(".fam").html("")),
  1050. $(`<br>`),
  1051. $(`<span class="span-btn"></span>`).append("全区清屏").click(() => $(".es").html("")),
  1052. $(`<span class="span-btn"></span>`).append("帮派清屏").click(() => $(".pty").html("")),
  1053. $(`<span class="span-btn"></span>`).append("系统清屏").click(() => $(".sys").html("")),
  1054. $(`<br>`),
  1055. $(`<span class="span-btn"></span>`).append("统计清屏").click(() => $(".content-pickup").html("")),
  1056. $(`<span class="span-btn"></span>`).append("游戏清屏").click(() => $(".content-message pre").html("")),
  1057. $(`<span class="span-btn"></span>`).append("<hik>显示时间戳</hik>").click(() => {
  1058. showTimeStr = !showTimeStr;
  1059. $(".timeStr").toggle();
  1060. }),
  1061. ));
  1062. };
  1063. let toSchoolWD = function() {
  1064. AddContent($("<div></div>").append(
  1065. $(`<span class="span-btn"></span>`).append("张三丰").click(() => SendCommand(WD["张三丰"])),
  1066. $(`<span class="span-btn"></span>`).append("宋远桥").click(() => SendCommand(WD["宋远桥"])),
  1067. $(`<span class="span-btn"></span>`).append("谷虚道长").click(() => SendCommand(WD["谷虚道长"])),
  1068. $(`<span class="span-btn"></span>`).append("道童").click(() => SendCommand(WD["道童"])),
  1069. $(`<br>`),
  1070. $(`<span class="span-btn"></span>`).append("首席").click(() => SendCommand(WD["首席"])),
  1071. $(`<span class="span-btn"></span>`).append("门派后勤管理员").click(() => SendCommand(WD["门派后勤管理员"]))
  1072. ));
  1073. };
  1074. let toSchoolSL = function() {
  1075. AddContent($("<div></div>").append(
  1076. $(`<span class="span-btn"></span>`).append("玄难").click(() => SendCommand(SL["玄难"])),
  1077. $(`<span class="span-btn"></span>`).append("澄净").click(() => SendCommand(SL["澄净"])),
  1078. $(`<span class="span-btn"></span>`).append("慧合尊者").click(() => SendCommand(SL["慧合尊者"])),
  1079. $(`<span class="span-btn"></span>`).append("道觉禅师").click(() => SendCommand(SL["道觉禅师"])),
  1080. $(`<span class="span-btn"></span>`).append("清乐比丘").click(() => SendCommand(SL["清乐比丘"])),
  1081. $(`<br>`),
  1082. $(`<span class="span-btn"></span>`).append("首席").click(() => SendCommand(SL["首席"])),
  1083. $(`<span class="span-btn"></span>`).append("门派后勤管理员").click(() => SendCommand(SL["门派后勤管理员"]))
  1084. ));
  1085. };
  1086. let toSchoolHS = function() {
  1087. AddContent($("<div></div>").append(
  1088. $(`<span class="span-btn"></span>`).append("岳不群").click(() => SendCommand(HS["岳不群"])),
  1089. $(`<span class="span-btn"></span>`).append("封不平").click(() => SendCommand(HS["封不平"])),
  1090. $(`<span class="span-btn"></span>`).append("风清扬").click(() => SendCommand(HS["风清扬"])),
  1091. $(`<span class="span-btn"></span>`).append("高根明").click(() => SendCommand(HS["高根明"])),
  1092. $(`<br>`),
  1093. $(`<span class="span-btn"></span>`).append("首席").click(() => SendCommand(HS["首席"])),
  1094. $(`<span class="span-btn"></span>`).append("门派后勤管理员").click(() => SendCommand(HS["门派后勤管理员"]))
  1095. ));
  1096. };
  1097. let toSchoolEM = function() {
  1098. AddContent($("<div></div>").append(
  1099. $(`<span class="span-btn"></span>`).append("灭绝").click(() => SendCommand(EM["灭绝"])),
  1100. $(`<span class="span-btn"></span>`).append("周芷若").click(() => SendCommand(EM["周芷若"])),
  1101. $(`<span class="span-btn"></span>`).append("静心").click(() => SendCommand(EM["静心"])),
  1102. $(`<span class="span-btn"></span>`).append("苏梦清").click(() => SendCommand(EM["苏梦清"])),
  1103. $(`<br>`),
  1104. $(`<span class="span-btn"></span>`).append("首席").click(() => SendCommand(EM["首席"])),
  1105. $(`<span class="span-btn"></span>`).append("门派后勤管理员").click(() => SendCommand(EM["门派后勤管理员"]))
  1106. ));
  1107. };
  1108. let toSchoolXY = function() {
  1109. AddContent($("<div></div>").append(
  1110. $(`<span class="span-btn"></span>`).append("逍遥子").click(() => SendCommand(XY["逍遥子"])),
  1111. $(`<span class="span-btn"></span>`).append("苏星河").click(() => SendCommand(XY["苏星河"])),
  1112. $(`<span class="span-btn"></span>`).append("薛慕华").click(() => SendCommand(XY["薛慕华"])),
  1113. $(`<br>`),
  1114. $(`<span class="span-btn"></span>`).append("首席").click(() => SendCommand(XY["首席"])),
  1115. $(`<span class="span-btn"></span>`).append("门派后勤管理员").click(() => SendCommand(XY["门派后勤管理员"]))
  1116. ));
  1117. };
  1118. let toSchoolGB = function() {
  1119. AddContent($("<div></div>").append(
  1120. $(`<span class="span-btn"></span>`).append("洪七公").click(() => SendCommand(GB["洪七公"])),
  1121. $(`<span class="span-btn"></span>`).append("鲁有脚").click(() => SendCommand(GB["鲁有脚"])),
  1122. $(`<span class="span-btn"></span>`).append("简长老").click(() => SendCommand(GB["简长老"])),
  1123. $(`<span class="span-btn"></span>`).append("左全").click(() => SendCommand(GB["左全"])),
  1124. $(`<br>`),
  1125. $(`<span class="span-btn"></span>`).append("首席").click(() => SendCommand(GB["首席"])),
  1126. $(`<span class="span-btn"></span>`).append("门派后勤管理员").click(() => SendCommand(GB["门派后勤管理员"]))
  1127. ));
  1128. };
  1129. let toSchoolSS = function() {
  1130. AddContent($("<div></div>").append(
  1131. $(`<span class="span-btn"></span>`).append("雾中楼").click(() => SendCommand(SS["雾中楼"])),
  1132. $(`<span class="span-btn"></span>`).append("李四").click(() => SendCommand(SS["李四"])),
  1133. $(`<span class="span-btn"></span>`).append("何小二").click(() => SendCommand(SS["何小二"])),
  1134. $(`<br>`),
  1135. $(`<span class="span-btn"></span>`).append("首席").click(() => SendCommand(SS["首席"])),
  1136. $(`<span class="span-btn"></span>`).append("门派后勤管理员").click(() => SendCommand(SS["门派后勤管理员"]))
  1137. ));
  1138. };
  1139. let toXiangYang = function() {
  1140. AddContent($("<div></div>").append(
  1141. $(`<span class="span-btn"></span>`).append("襄阳城").click(() => SendCommand(XYC["襄阳城"])),
  1142. $(`<br>`),
  1143. $(`<span class="span-btn"></span>`).append("东城门").click(() => SendCommand(XYC["东城门"])),
  1144. $(`<span class="span-btn"></span>`).append("南城门").click(() => SendCommand(XYC["南城门"])),
  1145. $(`<span class="span-btn"></span>`).append("西城门").click(() => SendCommand(XYC["西城门"])),
  1146. $(`<span class="span-btn"></span>`).append("北城门").click(() => SendCommand(XYC["北城门"])),
  1147. ));
  1148. };
  1149.  
  1150.  
  1151.  
  1152.  
  1153. /********************BODY********************/
  1154. GM_addStyle(`
  1155. body { width: 100%; display: flex; flex-flow: row nowrap; }
  1156. .container, .login-content { width: 370px; flex: 1 0 auto; margin: 0; }
  1157. .left, .right { width:370px; height:100%; flex: 0 0 auto; margin: 0 10px; }
  1158. .span-btn { border: gray solid 1px; border-radius: 3px; display: inline-block; padding: 5px; font-size: 14px; margin: 0 5px 5px 0; }
  1159. .span-btn { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; cursor: pointer; }
  1160. .span-btn:hover { color: #00ff00; }
  1161. .span-btn:active { transform: translateY(1px); }
  1162. `);
  1163. $("body").append(
  1164. $(`<div class="left"></div>`),
  1165. $(`<div class="right"></div>`),
  1166. $(`<audio id="beep" preload="auto"></audio>`).append(`<source src="http://www.wsmud.site/wav/complete.wav">`)
  1167. );
  1168. /********************RIGHT********************/
  1169. {GM_addStyle(`
  1170. .right{ order: 1; display: flex; flex-direction: column; flex-wrap: nowrap; }
  1171. .msg { height: auto; overflow: auto; flex: 0 0 auto; font-size: 14px; line-height: 16px; max-height: 160px; }
  1172. .chat { flex: 1 1 auto; max-height: 100%; }
  1173. `);
  1174. $(".right").append(
  1175. $(`<div class="msg chat"></div>`),
  1176. $(`<div class="msg tm"></div>`),
  1177. $(`<div class="msg fam"></div>`),
  1178. $(`<div class="msg pty"></div>`),
  1179. $(`<div class="msg es"></div>`),
  1180. $(`<div class="msg sys rumor"></div>`),
  1181. $(`<div class="msg pickup"></div>`),
  1182. $(`<div class="msg tool"></div>`)
  1183. );}
  1184. /********************LEFT********************/
  1185. GM_addStyle(`
  1186. .left { order: -1; display: flex; flex-direction: column; flex-wrap: nowrap; }
  1187. .left-content { width: 100%; height: auto; flex: 1 1 auto; }
  1188.  
  1189. .left-hotkeys { width: 100%; height: calc(4 * 37px); flex: 0 0 auto; padding-left: 5px; }
  1190. .left-console { width: 100%; min-height: 150px; flex: 0 0 auto; }
  1191. `);
  1192. $(".left").append(
  1193. $(`<div class="left-content"></div>`),
  1194. $(`<div class="left-hotkeys"></div>`),
  1195. $(`<div class="left-console"></div>`),
  1196. );
  1197. {$(".left-hotkeys").append(
  1198. $("<div></div>").append(
  1199. $(`<span class="span-btn"></span>`).append("信息").click(clickInfo),
  1200. $(`<span class="span-btn"></span>`).append("技能").click(clickSkill),
  1201. $(`<span class="span-btn"></span>`).append("背包").click(clickPack),
  1202. $(`<span class="span-btn"></span>`).append("  ").click(),
  1203. $(`<span class="span-btn"></span>`).append("预配").click(saveEq),
  1204. $(`<span class="span-btn" eq="1"></span>`).append("<hik>换壹</hik>").click(loadEq),
  1205. $(`<span class="span-btn" eq="2"></span>`).append("<hik>换贰</hik>").click(loadEq),
  1206. $(`<span class="span-btn" eq="3"></span>`).append("<hik>换叁</hik>").click(loadEq)
  1207. ),
  1208. $("<div></div>").append(
  1209. $(`<span class="span-btn"></span>`).append("交换").click(changeLeftRight),
  1210. $(`<span class="span-btn"></span>`).append("隐藏").click(hideLeftRight),
  1211. $(`<span class="span-btn"></span>`).append("清屏").click(clearRightMsg),
  1212. $(`<span class="span-btn"></span>`).append("  "),
  1213. $(`<span class="span-btn"></span>`).append("  "),
  1214. $(`<span class="span-btn"></span>`).append("  "),
  1215. $(`<span class="span-btn"></span>`).append("  "),
  1216. $(`<span class="span-btn"></span>`).append("提示").click(() => Beep())
  1217. ),
  1218. $("<div></div>").append(
  1219. $(`<span class="span-btn"></span>`).append("修炼").click(() => SendCommand(YZC["修炼"])),
  1220. $(`<span class="span-btn"></span>`).append("打坐").click(() => SendCommand(YZC["打坐"])),
  1221. $(`<span class="span-btn"></span>`).append("疗伤").click(() => SendCommand(YZC["疗伤"])),
  1222. $(`<span class="span-btn"></span>`).append("挖矿").click(() => SendCommand("wakuang")),
  1223. $(`<span class="span-btn"></span>`).append("当铺").click(() => SendCommand(YZC["当铺"])),
  1224. $(`<span class="span-btn"></span>`).append("  ").click(() => SendCommand()),
  1225. $(`<span class="span-btn"></span>`).append("  ").click(() => SendCommand()),
  1226. $(`<span class="span-btn"></span>`).append("送花").click(() => SendCommand("greet 99")),
  1227. ),
  1228. $("<div></div>").append(
  1229. $(`<span class="span-btn"></span>`).append("武当").click(toSchoolWD),
  1230. $(`<span class="span-btn"></span>`).append("少林").click(toSchoolSL),
  1231. $(`<span class="span-btn"></span>`).append("华山").click(toSchoolHS),
  1232. $(`<span class="span-btn"></span>`).append("峨眉").click(toSchoolEM),
  1233. $(`<span class="span-btn"></span>`).append("逍遥").click(toSchoolXY),
  1234. $(`<span class="span-btn"></span>`).append("丐帮").click(toSchoolGB),
  1235. $(`<span class="span-btn"></span>`).append("杀手").click(toSchoolSS),
  1236. $(`<span class="span-btn"></span>`).append("襄阳").click(toXiangYang),
  1237. ),
  1238. );}
  1239. {$(".left-console").append(
  1240. $(`<div class="left-console-show"></div>`),
  1241. $(`<div class="left-console-send"></div>`).append(
  1242. $(`<input type="text" readonly onfocus="this.removeAttribute('readonly');" id="send-input">`),
  1243. $(`<div class="item-commands"></div>`).append(`<span id="send-btn">发送</span>`))
  1244. );GM_addStyle(`
  1245. .left-console { display: flex; flex-direction: column; flex-wrap: nowrap; }
  1246. .left-console-show { height:150px; flex: 0 0 auto; overflow: auto; border: gray solid 1px; border-radius: 3px; }
  1247. .left-console-send { height: 40px; flex: 0 0 auto; }
  1248. .left-console-send { display: flex; flex-direction: row; flex-wrap: nowrap; }
  1249. #send-input { flex: 1 0 auto; background-color: gray; color: white; font-size: 14px; height: 20px; margin: 7px 0; }
  1250. #send-btn { flex: 0 0 auto; font-size: 12px; margin: 8px 0 0 7px; }
  1251. `);}//指令区域
  1252. $("#send-input").keypress(function(key) {
  1253. if (key.which == 13) $("#send-btn").click();
  1254. });//指令输入框
  1255. $("#send-btn").click(function() {
  1256. let cmd = $("#send-input").val();
  1257. if (!cmd) return;
  1258. $(".left-console-show").append(
  1259. $("<div></div>").append(
  1260. $(`<hiy></hiy>`).append(">> "),
  1261. $(`<span class="span-btn"><hiy>${cmd}</hiy></span>`).click(() => SendCommand(cmd))));
  1262. websocket.send(cmd);
  1263. AutoScroll(".left-console-show");
  1264. $("#send-input").val("");
  1265. });//指令发送键
  1266. /********************LEFT-CONTENT********************/
  1267. {GM_addStyle(`
  1268. .left-content { margin: 5px 0; font-size: 16px; overflow: auto; }
  1269. .left-content { display: flex; flex-direction: column; flex-wrap: nowrap; }
  1270. .content-title { flex: 0 0 auto; border: gray solid 1px; border-radius: 3px; display: flex; }
  1271. .title-tag { dispaly: inline-block; text-align: right; flex: 1 0 auto; }
  1272.  
  1273. .content-box { flex: 0 1 auto; border: gray solid 1px; border-radius: 3px; margin-top: 5px; overflow: auto; }
  1274. .content-pickup { min-height: 50px; flex: 1 1 auto; }
  1275. .pickup-row { display: flex; }
  1276. .pickup-add { flex: 0 0 auto; }
  1277. .pickup-count { flex: 0 1 999px; dispaly: inline-block; text-align: right; }
  1278. .info-row { display: flex; }
  1279. .info-item { flex: 0 1 999px; dispaly: inline-block; text-align: center; }
  1280. .info-title { flex: 0 0 65px; dispaly: inline-block; text-align: center; }
  1281. .skill-row { display: flex; }
  1282. .skill-name { cursor: pointer; }
  1283. .skill-eq {}
  1284. .skill-level { dispaly: inline-block; text-align: right; flex: 1 0 auto; }
  1285.  
  1286. .item-row { display: flex; border-bottom: gray dotted 0.5px; }
  1287. .item-name { cursor: pointer; }
  1288. .item-count { dispaly: inline-block; text-align: right; flex: 1 0 auto; }
  1289. `);
  1290. $(".left-content").append(
  1291. $(`<div class="content-title"></div>`),
  1292. $(`<div class="content-box content-info"></div>`),
  1293. $(`<div class="content-box content-pickup"></div>`),
  1294. $(`<div class="content-box content-pack"></div>`),
  1295. $(`<div class="content-box content-skill"></div>`),
  1296. $(`<div class="content-box content-setting"></div>`),
  1297. );
  1298. $(".content-box").hide();
  1299. $(".content-info").show();
  1300. $(".content-pickup").show();
  1301. $(".content-title").append(
  1302. $(`<span> </span>`), $(`<span class="role_level">LEVEL</span>`), $(`<span> </span>`),
  1303. $(`<span class="role_name">NAME</span>`), $(`<span> </span>`),
  1304. $(`<ord class="role_id">ID</ord>`),
  1305. $(`<hiy class="title-tag">wsmud_funny</hiy>`)
  1306. );}
  1307. {$(".content-info").append(
  1308. $(`<div class="info-row"></div>`).append(
  1309. $(`<span class="info-title">性别<span>`),
  1310. $(`<span class="info-item role_gender">?<span>`),
  1311. $(`<span class="info-title">年龄<span>`),
  1312. $(`<span class="info-item role_age">九十九岁<span>`),
  1313. ),
  1314. $(`<div class="info-row"></div>`).append(
  1315. $(`<span class="info-title">门派<span>`),
  1316. $(`<span class="info-item role_family">无门无派<span>`),
  1317. $(`<span class="info-title">功绩<span>`),
  1318. $(`<span class="info-item role_gongji">999999<span>`),
  1319. ),
  1320. $(`<div class="info-row"></div>`).append(
  1321. $(`<span class="info-title">经验<span>`),
  1322. $(`<span class="info-item role_exp">999999<span>`),
  1323. $(`<span class="info-title">潜能<span>`),
  1324. $(`<span class="info-item role_pot">999999<span>`),
  1325. ),
  1326. $(`<div class="info-row"></div>`).append(
  1327. $(`<span class="info-title">气血<span>`),
  1328. $(`<span class="info-item"><span class="role_hp">0</span>/<hig class="role_max_hp">999999</hig><span>`),
  1329. ),
  1330. $(`<div class="info-row"></div>`).append(
  1331. $(`<span class="info-title">内力<span>`),
  1332. $(`<span class="info-item"><span class="role_mp">0</span>/<hig class="role_max_mp">999999</hig>/<hic class="role_limit_mp">999999<hic><span>`),
  1333. ),
  1334. $(`<div class="info-row"></div>`).append(
  1335. $(`<span class="info-title">臂力<span>`),
  1336. $(`<span class="info-item"><hiy class="role_str">15</hiy>+<span class="role_str_add">999</span><span>`),
  1337. $(`<span class="info-title">根骨<span>`),
  1338. $(`<span class="info-item"><hiy class="role_con">15</hiy>+<span class="role_con_add">999</span><span>`),
  1339. ),
  1340. $(`<div class="info-row"></div>`).append(
  1341. $(`<span class="info-title">身法<span>`),
  1342. $(`<span class="info-item"><hiy class="role_dex">15</hiy>+<span class="role_dex_add">999</span><span>`),
  1343. $(`<span class="info-title">悟性<span>`),
  1344. $(`<span class="info-item"><hiy class="role_int">15</hiy>+<span class="role_int_add">999</span><span>`),
  1345. ),
  1346. $(`<div class="info-row"></div>`).append(
  1347. $(`<span class="info-title">攻击<span>`),
  1348. $(`<hig class="info-item role_gj">99999<hig>`),
  1349. $(`<span class="info-title">防御<span>`),
  1350. $(`<hig class="info-item role_fy">99999<hig>`),
  1351. ),
  1352. $(`<div class="info-row"></div>`).append(
  1353. $(`<span class="info-title">命中<span>`),
  1354. $(`<hig class="info-item role_mz">99999<hig>`),
  1355. $(`<span class="info-title">招架<span>`),
  1356. $(`<hig class="info-item role_zj">99999<hig>`),
  1357. ),
  1358. $(`<div class="info-row"></div>`).append(
  1359. $(`<span class="info-title">暴击<span>`),
  1360. $(`<hig class="info-item role_bj">100%<hig>`),
  1361. $(`<span class="info-title">躲闪<span>`),
  1362. $(`<hig class="info-item role_ds">99999<hig>`),
  1363. ),
  1364. $(`<div class="info-row"></div>`).append(
  1365. $(`<span class="info-title">终伤<span>`),
  1366. $(`<hig class="info-item role_add_sh">100%<hig>`),
  1367. $(`<span class="info-title">攻速<span>`),
  1368. $(`<hig class="info-item role_gjsd">99999<hig>`),
  1369. ),
  1370. $(`<div class="info-row"></div>`).append(
  1371. $(`<span class="info-title">忽视防御<span>`),
  1372. $(`<span class="info-item role_diff_fy">99%<span>`),
  1373. $(`<span class="info-title">伤害减免<span>`),
  1374. $(`<span class="info-item role_diff_sh">99%<span>`),
  1375. ),
  1376. $(`<div class="info-row"></div>`).append(
  1377. $(`<span class="info-title">暴击伤害<span>`),
  1378. $(`<span class="info-item role_add_bj">99%<span>`),
  1379. $(`<span class="info-title">暴击抵抗<span>`),
  1380. $(`<span class="info-item role_diff_bj">99%<span>`),
  1381. ),
  1382. $(`<div class="info-row"></div>`).append(
  1383. $(`<span class="info-title">增加忙乱<span>`),
  1384. $(`<span class="info-item role_busy">0秒+0%<span>`),
  1385. $(`<span class="info-title">忽视忙乱<span>`),
  1386. $(`<span class="info-item role_diff_busy">0秒+0%<span>`),
  1387. ),
  1388. $(`<div class="info-row"></div>`).append(
  1389. $(`<span class="info-title">释放速度<span>`),
  1390. $(`<span class="info-item role_releasetime">0秒+0%<span>`),
  1391. $(`<span class="info-title">冷却速度<span>`),
  1392. $(`<span class="info-item role_distime">0秒+0%<span>`),
  1393. ),
  1394. $(`<div class="info-row"></div>`).append(
  1395. $(`<span class="info-title">打坐效率<span>`),
  1396. $(`<span class="info-item role_dazuo_per">99%<span>`),
  1397. $(`<span class="info-title">内力减耗<span>`),
  1398. $(`<span class="info-item role_expend_mp">0秒+0%<span>`),
  1399. ),
  1400. $(`<div class="info-row"></div>`).append(
  1401. $(`<span class="info-title">练习效率<span>`),
  1402. $(`<span class="info-item role_lianxi_per">99%<span>`),
  1403. $(`<span class="info-title">学习效率<span>`),
  1404. $(`<span class="info-item role_study_per">99%<span>`),
  1405. ),
  1406. $(`<div class="info-row"></div>`).append(
  1407. $(`<span class="info-title">财产<span>`),
  1408. $(`<span class="info-item role_money">999999两<hiy>黄金</hiy><span>`),
  1409. ),
  1410. );}//info
  1411. // ;
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417. function saveEq() {
  1418. AddContent(
  1419. $(`<div></div>`).append(
  1420. $(`<hic>建议刷新技能和背包之后再保存!\n</hic>`),
  1421. $(`<span class="span-btn" eq="1">保存到配置壹</span>`).click(save),
  1422. $(`<span class="span-btn" eq="2">保存到配置贰</span>`).click(save),
  1423. $(`<span class="span-btn" eq="3">保存到配置叁</span>`).click(save)
  1424. )
  1425. );
  1426. function save() {
  1427. let index = $(this).attr("eq");
  1428. let key = `${id}.eq.${index}`;
  1429. let cmd = [];
  1430. let name = ["0", "配置壹", "配置贰", "配置叁"];
  1431. let str = `<hir>以下配置被保存到<hiw>${name[index]}</hiw>!</hio>\n`;
  1432.  
  1433. let base = ["unarmed", "force", "parry", "dodge", "sword", "blade", "club", "staff", "whip", "throwing"];
  1434. base.forEach(skid => {
  1435. if (skills[skid] && skills[skid].enable_skill) {
  1436. cmd.push(`enable ${skid} ${skills[skid].enable_skill}`);
  1437. str += skills[skills[skid].enable_skill].name + "\n";
  1438. }
  1439. });
  1440. cmd.push(1000);
  1441. pack.eqs.forEach(eq => {
  1442. if (eq && eq.id) {
  1443. cmd.unshift("eq " + eq.id);
  1444. str += eq.name + "\n";
  1445. }
  1446. });
  1447. AddContent(str);
  1448. let value = JSON.stringify(cmd);
  1449. localStorage.setItem(key, value);
  1450. }
  1451. }
  1452. function loadEq() {
  1453. let index = $(this).attr("eq");
  1454. let name = ["0", "配置壹", "配置贰", "配置叁"];
  1455. AddContent(`<hir>正在加载<hiw>${name[index]}</hiw>!</hir>\n`);
  1456. let key = `${id}.eq.${index}`;
  1457. let value = localStorage.getItem(key);
  1458. let cmd = JSON.parse(value);
  1459. SendCommand(cmd);
  1460. }
  1461.  
  1462.  
  1463. /****************************************/
  1464.  
  1465.  
  1466. // $(".load_eq").click(function() {
  1467. // let i = $(this).attr("i");
  1468. // let key = id + ".eq." + i;
  1469. // let value = localStorage.getItem(key);
  1470. // let cmd = JSON.parse(value);
  1471. // AddContent("");
  1472. // SendCommand(cmd);
  1473. // });
  1474.  
  1475. // $(".left-pack").append(`<div class="left-pack-list"></div>`);//背包
  1476.  
  1477.  
  1478. // $(`<div class="msg "></div>`).append(
  1479. // $(`<small>扬州城</small>`), $(`<br>`),
  1480. // $(``).click(() => SendCommand(commands["修炼"])),
  1481. // )
  1482. // $(".left-hotkey").append(`
  1483. // <div class="list-commands"></div>
  1484. // <div class="left-console console"></div>
  1485. // <div class="left-send item-commands"></div>
  1486. // `);//指令
  1487.  
  1488.  
  1489. // for (const name in commands) {
  1490. // $(".list-commands").append(`<div class="item-commands ${name}"><small>${name}</small><br></div>`);
  1491. // for (const key in commands[name]) {
  1492. // $(`.${name}`).append(
  1493. // $(`<span>${key}</span>`).click(() => SendCommand(commands[name][key]))
  1494. // );
  1495. // }
  1496. // }
  1497. function clickInfo() {
  1498. $(".content-box").hide();
  1499. $(".content-info").show();
  1500. $(".content-pickup").show();
  1501. SendCommand(["score2", "score"]);
  1502. setTimeout(() => $(".dialog-close").click(), 500);
  1503. }
  1504. function clickSkill() {
  1505. $(".content-box").hide();
  1506. $(".content-skill").show();
  1507. SendCommand("cha");
  1508. setTimeout(() => {
  1509. $(".content-skill").html("");//clear
  1510. let base = ["unarmed", "force", "parry", "dodge", "sword", "blade", "club", "staff", "whip", "throwing",
  1511. "literate", "lianyao", "bite"];
  1512. base.forEach(id => {
  1513. if (skills[id]) {
  1514. let name = skills[id].name;
  1515. let level = skills[id].level;
  1516. let exp = skills[id].exp < 10 ? `0${skills[id].exp}%` : `${skills[id].exp}%`;
  1517. let enable = skills[id].enable_skill ? "已装备:" +skills[skills[id].enable_skill].name : "";
  1518. $(".content-skill").append(
  1519. $(`<div class="skill-row"><div>`).append(
  1520. $(`<span class="skill-name">${name} </span>`),
  1521. $(`<span class="skill-eq">${enable}</span>`),
  1522. $(`<span class="skill-level">${id} ${level}级${exp}</span>`),
  1523. )
  1524. );
  1525. }
  1526. });
  1527.  
  1528. let skillArray = [];
  1529. for (const id in skills) if (!base.includes(id)) skillArray.push(skills[id]);
  1530. skillArray.sort((a, b) => {
  1531. if (b.level === a.level) return b.color - a.color;
  1532. else return b.level - a.level;
  1533. });
  1534.  
  1535. skillArray.forEach(skill => {
  1536. let enables = skill.can_enables;
  1537. let str = "enable";
  1538. enables.forEach(enable => str = str + "," + enable);
  1539.  
  1540. $(".content-skill").append(
  1541. $(`<div class="skill-row" enable="${str}"><div>`).append(
  1542. $(`<span class="skill-name">${skill.name}</span>`),
  1543. $(`<span class="skill-level">${skill.id} ${skill.level}级</span>`)
  1544. ).click(function() {
  1545. let enables = $(this).attr("enable");
  1546. let x = enables.split(",");
  1547. x.splice(0, 1);
  1548. AddContent($(`<span>${skill.name}\n</span>`));
  1549. x.forEach(enable => {
  1550. AddContent($(`<span class="span-btn">装备${skills[enable].name}</span>`)
  1551. .click(() => SendCommand(`enable ${enable} ${skill.id}`)));
  1552. });
  1553. AddContent($(`<span class="span-btn">练习</span>`).click(() => SendCommand(`lianxi ${skill.id}`)));
  1554. AddContent(`\n`);
  1555. })
  1556. );
  1557. });
  1558. AddContent(`<hic>技能数据已刷新!\n</hic>`);
  1559. }, 1000);
  1560. };
  1561. function clickPack() {
  1562. $(".content-box").hide();
  1563. $(".content-pack").show();
  1564. SendCommand("pack");
  1565. setTimeout(() => {
  1566. $(".content-pack").html("");
  1567. pack.items.forEach(item => {
  1568. let value = Money2Str(item.value);
  1569. value = (value === 0) ? "" : `每${item.unit}${value}`;
  1570. value = `<span style="font-size:0.8em">${value} </span>`;
  1571. $(".content-pack").append(
  1572. $(`<div class="item-row"></div>`).append(
  1573. $(`<span class="item-name"></span>`).append(item.name),
  1574. $(`<span class="item-count"></span>`).append(`${value}共${item.count}${item.unit}`)
  1575. )
  1576. );
  1577. });
  1578. AddContent(`<hic>背包数据已刷新!\n</hic>`);
  1579. }, 1000);
  1580.  
  1581. };
  1582. });
  1583.  
  1584. // function RefreshRole() {
  1585. // for (const key in funny.role) {
  1586. // $(".role_" + key).html(wsmud.role[key]);
  1587. // }
  1588. // }
  1589. // function RefreshSkill() {
  1590. // $(".left-skill-list").html(""); //Clear
  1591. //
  1592. // let skills = wsmud.skills;
  1593. // base.forEach(id => {
  1594. // if (skills[id]) {
  1595. //
  1596. // }
  1597. // });
  1598.  
  1599. //
  1600.  
  1601.  
  1602. // RefreshEq();
  1603. // }
  1604. // function RefreshPack() {
  1605. // // $(".left-pack-list");
  1606. // let itemArray = wsmud.pack.items;
  1607. // $(".left-pack-list").html("");
  1608. // itemArray.forEach(item => {
  1609. // let id = item.id;
  1610. // let name = item.name;
  1611. // let unit = item.unit;
  1612. // let count = item.count;
  1613. // let value = Money2Str(item.value);
  1614. // if (value === 0) value = "<small>不可出售</small>";
  1615. // else value = `<small>每${unit}价值${value}</small>`;
  1616.  
  1617. // $(".left-pack-list").append(
  1618. // $(`<div class="pack-line">
  1619. // <span class="pack-line-name">${name}</span>
  1620. // <span class="pack-line-count">${value} 共${count}${unit}</span>
  1621. // </div>`)
  1622. // );
  1623. // });
  1624. // }
  1625. // function RefreshEq() {
  1626. // let eqArray = wsmud.pack.eqs;
  1627. // let nameArray = ["武器", "衣服", "鞋子", "头饰", "披风", "戒指", "项链", "饰品", "护腕", "腰带", "暗器"];
  1628. // $(".left-eq-list").html("");
  1629. // for (let i = 0; i < nameArray.length; i++) {
  1630. // let html = nameArray[i] + ":";
  1631. // if (eqArray[i] && eqArray[i].name) {
  1632. // html += eqArray[i].name;
  1633. // }
  1634. // $(".left-eq-list").append(
  1635. // $(`<div class="eq-line">${html}</div>`)
  1636. // );
  1637. // }
  1638. // }
  1639. // function SendCommand(command) {
  1640. // if (typeof command === "string") {
  1641. // wsmud.send(command);
  1642. // } else if (command instanceof Array) {
  1643. // let sum = 0, ms = 250;
  1644. // let wait = () => {return sum += ms};
  1645. // command.forEach(cmd => setTimeout(function() {
  1646. // wsmud.send(cmd);
  1647. // }, wait()));
  1648. // } else if (command instanceof Function) {
  1649. // SendCommand(command());
  1650. // }
  1651. // }
  1652.  
  1653. // let wsmud = {
  1654. // name: 0,
  1655. // isMoblie: false,
  1656. // state: {},
  1657.  
  1658. // id: null,
  1659. // title: {name: "武神传说", state: " Mud"},
  1660. // roles: {},
  1661. // room: {name: "a-b(c)", map: "a", room: "n", path: ""},
  1662. // items: [], //房间的玩家/NPC/尸体/物品
  1663. // skills: {},
  1664.  
  1665. // role: {},
  1666. // pack: {"items": [], "pick": {}, "eqs": [], "money": "", max: 0},
  1667.  
  1668. // settings: {
  1669. // layout_left_right: true,
  1670. // needTimeStr: false,
  1671. // auto_sm: false,
  1672. // auto_sm_cmd: "Command",
  1673. // auto_sm_npc: "NPC_Name",
  1674. // auto_sm_item: "Item_Name",
  1675. // },
  1676.  
  1677. // onmessage: function(event) {
  1678. // let message = Str2Obj(event.data);
  1679. // let type = message.type || "";
  1680. // if (type === "dialog") {
  1681. // type = message.dialog || "";
  1682. // }
  1683. // if (type !== "msg" && type !== "time") console.log(message);
  1684.  
  1685.  
  1686. // let listeners = wsmud.listener[type];
  1687. // if (listeners instanceof Array && listeners.length > 0) {
  1688. // for (let i = 0; i < listeners.length; i++) {
  1689. // let fn = listeners[i];
  1690. // if (fn(event, message)) {
  1691. // if (i < listeners.length - 1) continue;
  1692. // wsmud.fn_onmessage.apply(this, arguments);
  1693. // } else {
  1694. // break;
  1695. // }
  1696. // }
  1697. // // listeners.forEach(fn => { // });
  1698. // } else {
  1699. // wsmud.fn_onmessage.apply(this, arguments);
  1700. // }
  1701. // },
  1702. // listener: {"": [], "send": []}
  1703. // };
  1704.  
  1705. // let AutoSM = function() {
  1706. // let schoolName = wsmud.role.family;
  1707. // let schoolNames = ["无门无派", "武当派", "少林派", "华山派", "峨眉派", "逍遥派", "丐帮", "杀手楼"];
  1708. // let schoolPath = [
  1709. // ["jh fam 0 start", "go south", "go south", "go west"],
  1710. // ["jh fam 1 start", "go north"],
  1711. // ["jh fam 2 start"],
  1712. // ["jh fam 3 start"],
  1713. // ["jh fam 4 start", "go west"],
  1714. // ["jh fam 5 start"],
  1715. // ["jh fam 6 start", "go down"],
  1716. // ["jh fam 7 start", "go north"]
  1717. // ];
  1718. // let schoolNPC = ["武馆教习", "武当派第二代弟子 武当首侠 宋远桥", "少林寺第四十代弟子 清乐比丘",
  1719. // "市井豪杰 高根明", "峨眉派第五代弟子 苏梦清", "聪辩老人 苏星河", "丐帮七袋弟子 左全", "杀手教习 何小二"];
  1720. // let index = schoolNames.indexOf(schoolName);
  1721. // wsmud.settings.auto_sm = true;
  1722. // wsmud.settings.auto_sm_npc = schoolNPC[index];
  1723. // console.log(schoolPath[index]);
  1724. // return schoolPath[index];
  1725. // };
  1726. // let AutoBuy = function(itemName) {
  1727. // let list = [
  1728. // ["米饭", "包子", "鸡腿", "面条", "扬州炒饭", "米酒", "花雕酒", "女儿红", "醉仙酿", "神仙醉"],
  1729. // ["布衣", "钢刀", "木棍", "英雄巾", "布鞋", "铁戒指", "簪子", "长鞭", "钓鱼竿", "鱼饵"],
  1730. // ["铁剑", "钢刀", "铁棍", "铁杖", "铁镐", "飞镖"],
  1731. // ["<hig>金创药</hig>", "<hig>引气丹</hig>", "<hig>养精丹</hig>"]
  1732. // ];
  1733. // let shop = [
  1734. // ["店小二", ["jh fam 0 start", "go north", "go north", "go east"]],
  1735. // ["杂货铺老板 杨永福", ["jh fam 0 start", "go east", "go south"]],
  1736. // ["铁匠铺老板 铁匠", ["jh fam 0 start", "go east", "go east", "go south"]],
  1737. // ["药铺老板 平一指", ["jh fam 0 start", "go east", "go east", "go north"]]
  1738. // ];
  1739. // for (let i = 0; i < list.length; i++) {
  1740. // for (let j = 0; j < list[i].length; j++) {
  1741. // if (itemName.includes(list[i][j])) {
  1742. // console.log(shop[i][1]);
  1743. // return shop[i][1];
  1744. // }
  1745. // }
  1746. // }
  1747. // return 0;
  1748. // };
  1749.  
  1750. // let commands = {
  1751. // "快捷": {
  1752. // "修炼": ["stopstate", "jh fam 0 start", "go west", "go west", "go north", "go enter", "go west", "xiulian"],
  1753. // "打坐": ["stopstate", "jh fam 0 start", "go west", "go west", "go north", "go enter", "go west", "dazuo"],
  1754. // "疗伤": ["stopstate", "jh fam 0 start", "go north", "go north", "go west", "liaoshang"],
  1755. // "挖矿": ["stopstate", "wakuang"],
  1756. // "当铺": ["stopstate", "jh fam 0 start", "go south", "go east", "sell"],
  1757. // },
  1758. // "小号": {
  1759. // "配偶送花": ["greet 99"],
  1760. // "师傅请安": ["greet master"],
  1761. // },
  1762. // "其他": {
  1763. // "退出副本": ["cr over"],
  1764. // "退出组队": ["team out"],
  1765. // "重置武道": ["lingwu reset"],
  1766. // },
  1767. // "实验性指令": {
  1768. // "自动师门": AutoSM,
  1769. // "小树林秒退 20 次": function() {
  1770. // let xiaoshuling20 = ["tasks"];
  1771. // for (let i = 0; i < 20; i++) { xiaoshuling20.push("cr yz/lw/shangu"); xiaoshuling20.push("cr over"); }
  1772. // xiaoshuling20.push("tasks");
  1773. // return xiaoshuling20;
  1774. // }(),
  1775. // }
  1776. // };
  1777.  
  1778. // function AddListener(type, fn) {
  1779. // wsmud.listener[type] = wsmud.listener[type] || [];
  1780. // wsmud.listener[type].push(fn);
  1781. // }
  1782.  
  1783.  
  1784.  
  1785. /********************全局可用的方法********************/
  1786. function Str2Obj(str) {
  1787. if (str[0] === "{") {
  1788. return (new Function("return " + str))();
  1789. } else {
  1790. return {"type": "text", "text": str};
  1791. }
  1792. }
  1793. function Time2Str() {
  1794. let date = new Date();
  1795. let str = date.toString().substr(16, 5);
  1796. return str;
  1797. }
  1798. function Money2Str(number) {
  1799. if (number == 0 || isNaN(number)) return 0;
  1800. let str = "" + number;
  1801. let c = str.substring(str.length - 2, str.length);
  1802. if (c && c!== "00") {
  1803. c = c + "个<yel>铜板</yel>";
  1804. } else c = "";
  1805. let b = str.substring(str.length - 4, str.length - 2);
  1806. if (b && b !== "00") {
  1807. b = b + "两<wht>白银</wht>";
  1808. } else b = "";
  1809. let a = str.substring(0, str.length - 4);
  1810. if (a) a = a + "两<hiy>黄金</hiy>";
  1811. return a + b + c;
  1812. }
  1813. function AutoScroll(name) {
  1814. if (name) {
  1815. let scrollTop = $(name)[0].scrollTop;
  1816. let scrollHeight = $(name)[0].scrollHeight;
  1817. let height = Math.ceil($(name).height());
  1818. if (scrollTop < scrollHeight - height) {
  1819. let add = (scrollHeight - height < 120) ? 1 : Math.ceil((scrollHeight - height) / 120);
  1820. $(name)[0].scrollTop = scrollTop + add;
  1821. setTimeout(function() {
  1822. AutoScroll(name);
  1823. }, 1000/120);
  1824. }
  1825. }
  1826. }//滚动
  1827. function DeepCopy(object) {
  1828. let result = {};
  1829. for (const key in object) {
  1830. result[key] = (typeof object[key] === "object") ? DeepCopy(object[key]) : object[key];
  1831. }
  1832. return result;
  1833. }//拷贝
  1834. function SendCommand(command) {
  1835. if (command instanceof Array) {
  1836. if (command.length === 0) return;
  1837. let cmd1 = command[0];
  1838. let cmd2 = command.slice(1);
  1839. if (typeof cmd1 === "number") {
  1840. setTimeout(() => SendCommand(cmd2), cmd1);
  1841. } else if (cmd1) {
  1842. SendCommand(cmd1);
  1843. SendCommand(cmd2);
  1844. }
  1845. } else if (typeof command === "string") {
  1846. websocket.send(command);
  1847. if (!isMoblie) {
  1848. $(".left-console-show").append(`<div> >> ${command}</div>`);
  1849. AutoScroll(".left-console-show");
  1850. }
  1851. }
  1852. }//发送
  1853. function AddContent(element) {
  1854. $(".content-message pre").append(element);
  1855. AutoScroll(".content-message");
  1856. return false;
  1857. }
  1858. function Beep() {//提示音
  1859. document.getElementById("beep").play();
  1860. AddContent(
  1861. $(`<span></span>`).append(
  1862. $(`<span class="span-btn"><提示音><span>`).click(function() {
  1863. AddContent(
  1864. $(`<span></span>`).append(
  1865. $(`<hiy>如无声音,请检查音源地址是否可以正常访问。\n</hiy>`),
  1866. $(`<hiy>http://wsmud.site/wav/complete.wav\n</hiy>`),
  1867. $(`<hic>反正有VPN的肯定会响,如遇特殊情况,请自行调低音量。\n</hic>`),
  1868. $(`<span>Safari浏览器需要修改此网站设置为允许自动播放媒体。\n</span>`)
  1869. )
  1870. );
  1871. }),
  1872. $(`<span>\n</span>`)
  1873. )
  1874. );
  1875. }
  1876.  
  1877. /********************暴露********************/
  1878. unsafeWindow.funny = {
  1879. role: role,
  1880. skills: skills,
  1881. pack: pack,
  1882. title: title,
  1883. room: room,
  1884. exits: exits,
  1885.  
  1886. SendCommand: SendCommand,
  1887. Beep: Beep,
  1888. };
  1889. })();

QingJ © 2025

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