BRDTS_KeyboardScript

BR大逃杀全键盘操作脚本

  1. // ==UserScript==
  2. // @name BRDTS_KeyboardScript
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.77
  5. // @description BR大逃杀全键盘操作脚本
  6. // @author StingX
  7. // @match http://123.57.37.3/game.php
  8. // @match http://www.dtsgame.com/game.php
  9. // @match http://br.265g.com/game.php
  10. // @require http://code.jquery.com/jquery-1.11.0.min.js
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. var needReload = false;
  15. var actived = false;
  16.  
  17. // UseItemByKeyWord('子弹');
  18. //发请求
  19. function postCommand(mode,command){
  20. var sBody="";
  21. if(arguments.length){
  22. $('#submit').attr("disabled",true);
  23. var oXmlHttp = zXmlHttp.createRequest();
  24. sBody = 'mode='+mode+'&command='+command+'&=%E6%8F%90%E4%BA%A4';
  25. oXmlHttp.open("post", "command.php", false);
  26. oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  27. oXmlHttp.onreadystatechange = function () {
  28. if (oXmlHttp.readyState == 4) {
  29. if (oXmlHttp.status == 200) {
  30. showGamedata(oXmlHttp.responseText);
  31. $('#submit').attr("disabled",false);
  32. } else {
  33. showNotice(oXmlHttp.statusText);
  34. }
  35. }
  36. };
  37. oXmlHttp.send(sBody);
  38. }
  39. else{
  40. //提交按钮变灰
  41. $('#submit').attr("disabled",true);
  42. //初始化请求类
  43. var oXmlHttp = zXmlHttp.createRequest();
  44. //复制表单内容
  45. sBody = getRequestBody(document.forms['cmd']);
  46. //设置请求类型为post,页面为command.php
  47. oXmlHttp.open("post", "command.php", false);
  48. //设置请求头
  49. oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  50. //设置响应
  51. oXmlHttp.onreadystatechange = function () {
  52. if (oXmlHttp.readyState == 4) {
  53. if (oXmlHttp.status == 200) {
  54. showGamedata(oXmlHttp.responseText);
  55. $('#submit').attr("disabled",false);
  56. } else {
  57. showNotice(oXmlHttp.statusText);
  58. }
  59. }
  60. };
  61. //发请求
  62. oXmlHttp.send(sBody);
  63. }
  64. //返回可以输入操作的状态
  65. if (sBody.indexOf('command=back')>-1){
  66. if(needReload){
  67. UseItemByKeyWord('子弹');
  68. needReload = false;
  69. }
  70. }
  71. }
  72.  
  73. //显示界面
  74. function showGamedata(sGamedata){
  75. gamedata = sGamedata.parseJSON();
  76. if(gamedata['url']) {
  77. window.location.href = gamedata['url'];
  78. } else if(!gamedata['main']) {
  79. window.location.href = 'index.php';
  80. }
  81. if(gamedata['team']) {
  82. $('#team').val(gamedata['team']);
  83. gamedata['team'] = '';
  84. }
  85.  
  86. for(var id in gamedata) {
  87. if((id == 'toJSONString')||(!gamedata[id])) {continue;}
  88. $('#'+id).html(gamedata[id]);
  89. console.log('显示界面');
  90. if ($('#'+id).text().indexOf('不合并')>-1)
  91. autoSelectMerge();
  92. if ($('#'+id).text().indexOf('子弹用光了')>-1)
  93. {
  94. console.log('没子弹了');
  95. needReload = true;
  96. }
  97.  
  98. }
  99.  
  100. }
  101.  
  102.  
  103. //展开select
  104. function open(elem) {
  105. if (document.createEvent) {
  106. var e = document.createEvent("MouseEvents");
  107. e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  108. elem[0].dispatchEvent(e);
  109. } else if (element.fireEvent) {
  110. elem[0].fireEvent("onmousedown");
  111. }
  112. }
  113.  
  114. //键盘-操作映射组
  115. var scroll = {
  116. '!' : function() {
  117. $("select[name='sp_cmd']").val('sp_pose');
  118. sl('special');
  119. postCommand();
  120. postCommand('special','pose0');
  121. },
  122. 's' : AutoCMMB
  123. ,
  124. '@' : function() {
  125. $("select[name='sp_cmd']").val('sp_pose');
  126. sl('special');
  127. postCommand();
  128. postCommand('special','pose1');
  129. },
  130. '#' : function() {
  131. $("select[name='sp_cmd']").val('sp_pose');
  132. sl('special');
  133. postCommand();
  134. postCommand('special','pose2');
  135. },
  136. '$' : function() {
  137. $("select[name='sp_cmd']").val('sp_pose');
  138. sl('special');
  139. postCommand();
  140. postCommand('special','pose3');
  141. },
  142. '%' : function() {
  143. $("select[name='sp_cmd']").val('sp_pose');
  144. sl('special');
  145. postCommand();
  146. postCommand('special','pose4');
  147. },
  148. '^' : function() {
  149. $("select[name='sp_cmd']").val('sp_pose');
  150. sl('special');
  151. postCommand();
  152. postCommand('special','pose5');
  153. },
  154. 'Q' : function() {
  155. $("select[name='sp_cmd']").val('sp_tac');
  156. sl('special');
  157. postCommand();
  158. postCommand('special','tac0');
  159. },
  160. 'W' : function() {
  161. $("select[name='sp_cmd']").val('sp_tac');
  162. sl('special');
  163. postCommand();
  164. postCommand('special','tac2');
  165. },
  166. 'E' : function() {
  167. $("select[name='sp_cmd']").val('sp_tac');
  168. sl('special');
  169. postCommand();
  170. postCommand('special','tac3');
  171. },
  172. 'R' : function() {
  173. $("select[name='sp_cmd']").val('sp_tac');
  174. sl('special');
  175. postCommand();
  176. postCommand('special','tac4');
  177. },
  178. '`' : function() {
  179. $("select[name='moveto']").val(0);
  180. sl('move');
  181. postCommand();
  182. },
  183. '1' : function() {
  184. $("select[name='moveto']").val(1);
  185. sl('move');
  186. postCommand();
  187. },
  188. '2' : function() {
  189. $("select[name='moveto']").val(2);
  190. sl('move');
  191. postCommand();
  192. },
  193. '3' : function() {
  194. $("select[name='moveto']").val(3);
  195. sl('move');
  196. postCommand();
  197. },
  198. '4' : function() {
  199. $("select[name='moveto']").val(4);
  200. sl('move');
  201. postCommand();
  202. },
  203. '5' : function() {
  204. $("select[name='moveto']").val(5);
  205. sl('move');
  206. postCommand();
  207. },
  208. '6' : function() {
  209. $("select[name='moveto']").val(6);
  210. sl('move');
  211. postCommand();
  212. },
  213. '7' : function() {
  214. $("select[name='moveto']").val(7);
  215. sl('move');
  216. postCommand();
  217. },
  218. '8' : function() {
  219. $("select[name='moveto']").val(8);
  220. sl('move');
  221. postCommand();
  222. },
  223. '9' : function() {
  224. $("select[name='moveto']").val(9);
  225. sl('move');
  226. postCommand();
  227. },
  228. '0' : function() {
  229. $("select[name='moveto']").val(10);
  230. sl('move');
  231. postCommand();
  232. },
  233. '-' : function() {
  234. $("select[name='moveto']").val(11);
  235. sl('move');
  236. postCommand();
  237. },
  238. 'q' : function() {
  239. $("select[name='moveto']").val(12);
  240. sl('move');
  241. postCommand();
  242. },
  243. 'w' : function() {
  244. $("select[name='moveto']").val(13);
  245. sl('move');
  246. postCommand();
  247. },
  248. 'e' : function() {
  249. $("select[name='moveto']").val(14);
  250. sl('move');
  251. postCommand();
  252. },
  253. 'r' : function() {
  254. $("select[name='moveto']").val(15);
  255. sl('move');
  256. postCommand();
  257. },
  258. 't' : function() {
  259. $("select[name='moveto']").val(16);
  260. sl('move');
  261. postCommand();
  262. },
  263. 'y' : function() {
  264. $("select[name='moveto']").val(17);
  265. sl('move');
  266. postCommand();
  267. },
  268. 'u' : function() {
  269. $("select[name='moveto']").val(18);
  270. sl('move');
  271. postCommand();
  272. },
  273. 'i' : function() {
  274. $("select[name='moveto']").val(19);
  275. sl('move');
  276. postCommand();
  277. },
  278. 'o' : function() {
  279. $("select[name='moveto']").val(20);
  280. sl('move');
  281. postCommand();
  282. },
  283. 'p' : function() {
  284. $("select[name='moveto']").val(21);
  285. sl('move');
  286. postCommand();
  287. },
  288. ' ':function() {
  289. postCommand();
  290. },
  291. 'a':function() {
  292. sl($('[id^=search]').attr('id'));
  293. postCommand();
  294. },
  295. //left
  296. '37':function() {
  297. var radios = $("input[type='radio']");
  298. var checkedIndex;
  299. radios.each(function(i,e){
  300. if(e.checked){
  301. checkedIndex = i;
  302. return false;
  303. }
  304. });
  305. radios.get(checkedIndex+1).click();
  306. },
  307. //up
  308. '38':function() {
  309. var radios = $("input[type='radio']");
  310. var checkedIndex;
  311. radios.each(function(i,e){
  312. if(e.checked){
  313. checkedIndex = i;
  314. return false;
  315. }
  316. });
  317. if(checkedIndex>0)
  318. radios.get(checkedIndex-1).checked = true;
  319. else
  320. radios.get(radios.length-1).checked = true;
  321.  
  322. },
  323. //right
  324. '39':function() {
  325. var radios = $("input[type='radio']");
  326. var checkedIndex;
  327. radios.each(function(i,e){
  328. if(e.checked){
  329. checkedIndex = i;
  330. return false;
  331. }
  332. });
  333. open(radios.eq(checkedIndex).next().children().first());
  334. },
  335. //down
  336. '40':function() {
  337. var radios = $("input[type='radio']");
  338. var checkedIndex;
  339. radios.each(function(i,e){
  340. if(e.checked){
  341. checkedIndex = i;
  342. return false;
  343. }
  344. });
  345. if(checkedIndex<radios.length-1)
  346. radios.get(checkedIndex+1).checked = true;
  347. else
  348. radios.get(0).checked = true;
  349. },
  350. };
  351.  
  352.  
  353.  
  354. //主程序入口
  355. var run =function () {
  356. test();
  357. AppendScript();
  358. create_right();
  359. PostACommandEvery5Mins();
  360. //更改聊天栏信息刷新间隔为1秒
  361. chat('ref',1000);
  362. //绑定按键事件
  363. window.addEventListener('keydown',
  364. function(e) {
  365. if (document.activeElement.type=='text'||document.activeElement.type=='password'||e.metaKey || e.ctrlKey || e.target.isContentEditable || document.designMode ==="on") {
  366. console.log('block key2');
  367. return; }
  368. if (e.keyCode<37||e.keyCode>40)
  369. return;
  370. if (scroll[e.keyCode]) {
  371. //触发映射
  372. scroll[e.keyCode]();
  373. //无效化按键原来的效果
  374. e.preventDefault();
  375. e.stopPropagation();
  376. }
  377. }, false);
  378. //组合键映射
  379. window.addEventListener('keypress',
  380. function(e) {
  381. actived = true;
  382. if (document.activeElement.type=='text'||document.activeElement.type=='password'||e.metaKey || e.ctrlKey || e.target.isContentEditable || document.designMode ==="on") {
  383. console.log('block key1');
  384. return; }
  385. var key = String.fromCharCode(e.charCode);
  386. if (scroll[key]) {
  387. scroll[key]();
  388. e.preventDefault();
  389. e.stopPropagation();
  390. }
  391. }, false);
  392.  
  393. }
  394.  
  395. function PostACommandEvery5Mins()
  396. {
  397. if(!actived)
  398. {
  399. console.log('自动动了下,防止被系统吞')
  400. postCommand();
  401. }
  402. actived = false;
  403. setTimeout(PostACommandEvery5Mins,60000);
  404. }
  405.  
  406.  
  407. function AppendNGender(){
  408. console.log('AppendNGender');
  409. $('input[value=f]').next().before("<input type=\"radio\" id=\"gender\" name=\"gender\" onchange=\"iconMover()\" value=\"n\" checked=\"\">???");
  410.  
  411. }
  412.  
  413.  
  414. function AppendScript(){
  415.  
  416. $('body').append("<script>function sl(id) {\
  417. $('#'+id).click();\
  418. }\
  419. </script>")
  420. }
  421.  
  422.  
  423. function AutoCMMB()
  424. {
  425. var ydlm = getItemByKeyWord('意大利面');
  426. var dr = getItemByKeyWord('炖肉');
  427. if(ydlm&&dr){
  428. console.log('有意大利面和炖肉,自动合成');
  429. itemMix(ydlm.substr(3,1),dr.substr(3,1));
  430. }
  431.  
  432.  
  433. var cm = getItemByKeyWord('炒面');
  434. var mb = getItemByKeyWord('面包');
  435. if(cm&&mb){
  436. console.log('有炒面和面包,自动合成');
  437. itemMix(cm.substr(3,1),mb.substr(3,1));
  438. }
  439.  
  440. }
  441.  
  442. function itemMix(id1,id2)
  443. {
  444. console.log('合成物品'+id1+','+id2);
  445. sl('itemmain');
  446. $("select[name='itemcmd']").val('itemmix');
  447. postCommand();
  448. sl('itemmix');
  449. $("select[name='mix1']").val(id1)
  450. $("select[name='mix2']").val(id2)
  451. postCommand();
  452.  
  453. }
  454.  
  455. function getItemByKeyWord(keyWord)
  456. {
  457. var checkk = /^(.+?)\//;
  458. var ret;
  459. console.log('查找物品'+keyWord);
  460. $("[id^='itm']").each(function(){
  461. if($(this).next().text().match(checkk)&&($(this).next().text().match(checkk)[1]==keyWord)){
  462. console.log('找到物品'+$(this).attr('id'));
  463. ret= $(this).attr('id');
  464. }
  465. });
  466. return ret
  467. }
  468.  
  469.  
  470.  
  471.  
  472. function UseItemByKeyWord(keyWord)
  473. {
  474. var checkk = /^(.+?)\//;
  475. console.log('查找物品'+keyWord);
  476. $("[id$='_']").each(function(){
  477. if($(this).next().text().match(checkk)&&$(this).next().text().match(checkk)[1]==keyWord){
  478. UseItem($(this).attr('id'));
  479. if(keyWord=='子弹')
  480. needReload=false;
  481. return;
  482. }
  483.  
  484. });
  485. }
  486.  
  487. function UseItem(id)
  488. {
  489. console.log('使用物品'+id);
  490. sl(id);
  491. postCommand();
  492. }
  493.  
  494.  
  495. function autoSelectMerge(){
  496. console.log('自动选择合并');
  497. if ($('#itmn').length) {
  498. $('#itmn').next().next().next().next().click();
  499. console.log('auto merge.');
  500. }
  501. else
  502. console.log('no merge.');
  503. }
  504. //插在屏幕右端
  505.  
  506. function create_right(){
  507. if($("td[rowspan='2']").length>0){
  508. $("td[rowspan='2']").parent().append("\
  509. <td rowspan=\"2\"> <table border=\"1\" width=\"250\" height=\"550\" cellspacing=\"0\" cellpadding=\"0\"> \
  510. <tbody> <tr><td valign=\"top\" class=\"b3\" style=\"text-align: left\"> <div id=\"log\"> <span class=\"yellow b\" style=\"letter-spacing: 2px;\">\
  511. 基础快捷键:<br/>\
  512. 选择--方向键↑→↓,Esc<br/>\
  513. 提交,确定--空格<br/>\
  514. 探索--a<br/>\
  515. 合炒面和炒面面包--s<br/>\
  516. <br/>\
  517. 移动:<br/>\
  518. 北海岸--1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;北村住宅区--2<br/>\
  519. 北村公所--3&nbsp;&nbsp;&nbsp;邮电局--4<br/>\
  520. 消防署--5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;观音堂--6<br/>\
  521. 清水池--7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;西村神社--8<br/>\
  522. 墓地--9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;山丘地带--0<br/>\
  523. 隧道---&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;西村住宅区--q<br/>\
  524. 寺庙--w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;废校--e<br/>\
  525. 南村神社--r&nbsp;&nbsp;&nbsp;森林地带--t<br/>\
  526. 源二郎池--y&nbsp;&nbsp;&nbsp;南村住宅区--u<br/>\
  527. 诊所--i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;灯塔--o<br/>\
  528. 南海岸--p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分校--`<br/>\
  529. <br/>\
  530. 基础姿态:<br/>\
  531. 通常--shift+1<br/>\
  532. 攻击姿态--shift+2<br/>\
  533. 防守姿态--shift+3 <br/>\
  534. 探索姿态--shift+4<br/>\
  535. 隐藏姿态--shift+5 <br/>\
  536. 治疗姿态--shift+6 <br/>\
  537. <br/>\
  538. 应战策略:<br/>\
  539. 通常--shift+q<br/>\
  540. 重视防御 --shift+w<br/>\
  541. 重视反击 --shift+e<br/>\
  542. 重视躲避 --shift+r<br/>\
  543. </span><br> </div> </td> </tr> </tbody></table> </td>");
  544. }
  545. }
  546.  
  547.  
  548.  
  549.  
  550.  
  551. run();
  552.  
  553. function test()
  554. {
  555. //AutoCMMB();
  556.  
  557. }
  558.