CPS & Clicks Panel

LMAO

当前为 2021-05-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name CPS & Clicks Panel
  3. // @namespace -
  4. // @version no version
  5. // @description LMAO
  6. // @author Your mother
  7. // @match *://sandbox.moomoo.io/*
  8. // @match *://dev.moomoo.io/*
  9. // @match *://moomoo.io/*
  10. // @grant none
  11. // @require https://greasyfork.org/scripts/368273-msgpack/code/msgpack.js?version=598723
  12. // @require http://code.jquery.com/jquery-3.3.1.min.js
  13. // @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
  14. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.0/jquery-confirm.min.js
  15.  
  16. // ==/UserScript==
  17. var FPS;
  18. (function() {
  19. var UPDATE_DELAY = 700;
  20.  
  21. var lastUpdate = 0;
  22. var frames = 0;
  23.  
  24. function updateCounter() {
  25. var now = Date.now();
  26. var elapsed = now - lastUpdate;
  27. if (elapsed < UPDATE_DELAY) {
  28. ++frames;
  29. } else {
  30. FPS = Math.round(frames / (elapsed / 1000));
  31. frames = 0;
  32. lastUpdate = now;
  33. }
  34.  
  35. requestAnimationFrame(updateCounter);
  36. }
  37.  
  38. lastUpdate = Date.now();
  39. requestAnimationFrame(updateCounter);
  40. })();
  41. var Day,Month,Year
  42. setInterval(() => {
  43. var Date2=new Date()
  44. Month = Date2.getUTCMonth() + 1; //months from 1-12
  45. Day = Date2.getUTCDate();
  46. Year = Date2.getUTCFullYear();
  47. fpsdiv.innerHTML = "FPS:" + FPS + ""
  48. +"<br>Clock: "+KFC+":"+MLC+":"+RLC
  49. }, 0);
  50.  
  51. let fpsdiv = document.createElement("div");
  52. fpsdiv.id = "test"
  53. document.body.prepend(fpsdiv);
  54. document.getElementById('test').style.color='red'
  55. document.getElementById('test').style.fontSize='20px'
  56. document.getElementById('test').style.position='absolute'
  57. document.getElementById('test').style.textAlign='center'
  58. document.getElementById('test').style.width='auto'
  59. document.getElementById('test').style.height='auto'
  60. document.getElementById('test').style.backgroundColor='rgba(0, 0, 0, 0.4)'
  61. document.getElementById('test').style.padding='2px'
  62. setTimeout(() => {
  63. document.getElementById('ot-sdk-btn-floating').remove();
  64. document.getElementById('pre-content-container').remove()
  65. }, 5000)
  66.  
  67. var counter = 0;
  68. window.addKey = async function () {
  69. let key = document.getElementById('newKey').value;
  70. if (document.getElementById(key)) return;
  71. let html = `<div id="${counter}" style="display: flex; position:
  72. absolute;"><div id="${key.toLowerCase()}" class="keyDisplay"
  73. style="width 80px; pointer-events: all; top: 0; left:
  74. 0;">${key.toUpperCase()}</div></div>`
  75. await document.getElementById('controlPanel').insertAdjacentHTML('afterend',
  76. html)
  77. const thisDiv = document.getElementById(counter.toString());
  78. thisDiv.addEventListener('mousedown', function (e) {
  79.  
  80. var prevX = e.clientX;
  81. var prevY = e.clientY;
  82.  
  83. window.addEventListener('mousemove', mousemove);
  84. window.addEventListener('mouseup', mouseup);
  85. function mousemove(e) {
  86. let newX = prevX - e.clientX;
  87. let newY = prevY - e.clientY;
  88.  
  89.  
  90. const rect = thisDiv.getBoundingClientRect();
  91.  
  92. thisDiv.style.left = rect.left - newX + 'px';
  93. thisDiv.style.top = rect.top - newY + 'px';
  94.  
  95. prevX = e.clientX;
  96. prevY = e.clientY;
  97. }
  98. function mouseup() {
  99. window.removeEventListener('mousemove', mousemove);
  100. window.removeEventListener('mouseup', mouseup);
  101. }
  102. });
  103. counter++;
  104. }
  105. window.removeKey = function () {
  106. let key = document.getElementById('newKey').value;
  107. if (!document.getElementById(key)) return;
  108. document.getElementById(key).remove();
  109. }
  110.  
  111.  
  112. let DivHTML = `
  113. <div id="controlPanel">
  114. <span style="margin: 15px; font-size: 18px; padding: 5px;
  115. margin-top: 15px;">Toggle control pannel with...</span> <input
  116. id='toggleKey' type='text' value="\\" maxlength="1" style="width:
  117. 40px; height: 15px; background: none; border: 2px solid white;
  118. text-align: center; color: white;">
  119. </br>
  120. <input id="numsdisp" type="checkbox" name="nums" checked>
  121. <label for="nums">Display Numbers</label>
  122. </br>
  123. <input id="wasd" type="checkbox" name="wasd" checked>
  124. <label for="wasd">Display Movement Keys</label>
  125. </br>
  126. <input id="cpss" type="checkbox" name="cpss" checked>
  127. <label for="nums">Display CPS/Max CPS</label>
  128. </br>
  129. <input id="clickss" type="checkbox" name="clickss" checked>
  130. <label for="nums">Display Mouse Clicks</label>
  131. </br>
  132. <input id="newKey" maxlength="1" type="text" style="margin: 15px;
  133. color: white; background: none; border: 2px solid white; height: 20px;
  134. width: 40px; text-align: center;">
  135. &nbsp
  136. <button id="create" style="width: 100px; text-align: center; color:
  137. white; background: none; border: 2px solid white; height: 25px;"
  138. onclick="addKey()">Create New</button>
  139. &nbsp
  140. <button id="remove" style="width: 100px; text-align: center; color:
  141. white; background: none; border: 2px solid white; height: 25px;"
  142. onclick="removeKey()">Remove Key</button>
  143. </div>
  144. <div id="keys">
  145. <div class="keyDisplay" id="w">W</div>
  146. <div class="keyDisplay" id="a">A</div>
  147. <div class="keyDisplay" id="s">S</div>
  148. <div class="keyDisplay" id="d">D</div>
  149. </div>
  150. <div id="nums">
  151. <div class="keyDisplay" id="1">1</div>
  152. <div class="keyDisplay" id="2">2</div>
  153. <div class="keyDisplay" id="3">3</div>
  154. <div class="keyDisplay" id="4">4</div>
  155. <div class="keyDisplay" id="5">5</div>
  156. <div class="keyDisplay" id="6">6</div>
  157. <div class="keyDisplay" id="7">7</div>
  158. <div class="keyDisplay" id="8">8</div>
  159. <div class="keyDisplay" id="9">9</div>
  160. </div>
  161. <div id="cps">
  162. <div class="keyDisplay" id="Space" styles="margin-top: 40px;">________</div>
  163. &nbsp
  164. <div id="clicker">
  165. <div id="clickLeft"></div>
  166. <div id="clickRight"><div id="clickBottom"></div></div>
  167. </div>
  168. </div>
  169. <div id="cpsDisplay">
  170. <div id="cpsDivDisp" class="keyDisplay">CPS: 0</div>
  171. <div id="MaxCPS" class="keyDisplay">Max CPS: 0</div>
  172. </div>
  173. `
  174.  
  175. let styles = document.createTextNode(`
  176. #controlPanel {
  177. display: none;
  178. color: white;
  179. position: absolute;
  180. width: 400px;
  181. height: 275px;
  182. background-color: rgba(0, 0, 0, 0.25);
  183. top: 50%;
  184. left: 50%;
  185. transform: translate(-50%, -50%);
  186. border-radius: 3px;
  187. pointer-events: all;
  188. }
  189. #nums {
  190. display: flex;
  191. flex-wrap: wrap;
  192. align-content: start;
  193. width: 400px;
  194. position: absolute;
  195. z-index: 15;
  196. left: 237.391px;
  197. top: 7.58%;
  198. pointer-events: all;
  199. }
  200. #keys {
  201. display: flex;
  202. position: absolute;
  203. z-index: 15;
  204. pointer-events: all;
  205. }
  206. #cps {
  207. position: absolute;
  208. display: flex;
  209. z-index: 15;
  210. pointer-events: all;
  211. top: 8%;
  212. }
  213. #cpsDisplay {
  214. position: absolute;
  215. z-index: 15;
  216. pointer-events: all;
  217. top: 15%;
  218. }
  219. .keyDisplay {
  220. margin: 10px;
  221. padding: 2px;
  222. border: 2px solid white;
  223. color: white;
  224. height: 45px;
  225. min-width: 80px;
  226. max-width: 200px;
  227. text-align: center;
  228. font-size: 25px;
  229. top: 50%;
  230. line-height: 45px;
  231. }
  232. .keyDisplay.active {
  233. color: black;
  234. background: white;
  235. }
  236. #clicker {
  237. display: flex;
  238. }
  239. #clickLeft {
  240. width: 25px;
  241. height: 50px;
  242. border-top-left-radius: 100px;
  243. border-top-right-radius: 5px;
  244. border-bottom-left-radius: 5px;
  245. border-bottom-right-radius: 5px;
  246. border: 2px solid white;
  247. margin-right: 10px;
  248. }
  249. #clickRight {
  250. width: 25px;
  251. height: 50px;
  252. border-top-right-radius: 100px;
  253. border-top-left-radius: 5px;
  254. border-bottom-left-radius: 5px;
  255. border-bottom-right-radius: 5px;
  256. border: 2px solid white;
  257. }
  258. #clickBottom {
  259. margin-top: 60px;
  260. margin-left: -40px;
  261. width: 62px;
  262. height: 35px;
  263. border-top-radius: 5px;
  264. border-bottom-left-radius: 100px;
  265. border-bottom-right-radius: 100px;
  266. border: 2px solid white;
  267. }
  268. .active2 {
  269. background: white;
  270. }
  271. `);
  272. let css = document.createElement("style");
  273. css.type = "text/css";
  274. css.appendChild(styles);
  275. document.body.appendChild(css);
  276.  
  277. document.getElementById("storeMenu").insertAdjacentHTML("beforebegin", DivHTML);
  278.  
  279. const cps = document.getElementById('cps');
  280. const keys = document.getElementById('keys');
  281. const cpsDisp = document.getElementById('cpsDisplay');
  282. const nums = document.getElementById('nums');
  283. const cvs = document.getElementById('gameCanvas');
  284. const cpsDiv = document.getElementById('cpsDivDisp');
  285. const maxCpsDiv = document.getElementById('MaxCPS');
  286. const ctrlKey = document.getElementById('toggleKey');
  287. const pannel = document.getElementById("controlPanel");
  288. const numCheck = document.getElementById("numsdisp");
  289. const wasd = document.getElementById("wasd");
  290. const cpss = document.getElementById("cpss");
  291. const clicks = document.getElementById("clicks");
  292.  
  293. var theCps = 0;
  294. var maxCps = 0;
  295. var keyDownLeft = false;
  296. var keyDownRight = false;
  297. var keyDownSpace = false;
  298.  
  299. function toggelPannel() {
  300. if (pannel.style.display == "" || pannel.style.display == "none") {
  301. pannel.style.display = "block";
  302. } else if (pannel.style.display == "block") {
  303. pannel.style.display = "none";
  304. }
  305. }
  306.  
  307. document.addEventListener('keydown', function(e){
  308. let keyDiv;
  309. let key = ctrlKey.value.toLowerCase();
  310. if (ctrlKey.value == "") key = '//'
  311. if (e.key == key) toggelPannel();
  312. if (e.key == ' ') {
  313. keyDiv = document.getElementById("Space");
  314. if (!keyDownSpace) {
  315. theCps++
  316. setTimeout(function(){theCps--}, 1000);
  317. keyDownSpace = true;
  318. }
  319. } else {
  320. keyDiv = document.getElementById(e.key);
  321. }
  322. if (!keyDiv) return;
  323. keyDiv.classList.add('active');
  324. });
  325. document.addEventListener('keyup', function(e){
  326. let keyDiv;
  327. if (e.key == ' ') {
  328. keyDiv = document.getElementById("Space");
  329. keyDownSpace = false;
  330. } else {
  331. keyDiv = document.getElementById(e.key);
  332. }
  333. if (!keyDiv) return;
  334. keyDiv.classList.remove('active');
  335. });
  336.  
  337. document.addEventListener('mousedown', function(e){
  338. let rightClick = false;
  339. if (e.button == 2) rightClick = true;
  340. if (!rightClick) {
  341. let click = document.getElementById('clickLeft');/*left click*/
  342. click.classList.add('active2');
  343. if (!keyDownLeft) {
  344. theCps++
  345. setTimeout(function(){theCps--}, 1000);
  346. keyDownLeft = true;
  347. }
  348. } else {
  349. let click = document.getElementById('clickRight'); /*right click*/
  350. click.classList.add('active2');
  351. if (!keyDownRight) {
  352. theCps++
  353. setTimeout(function(){theCps--}, 1000);
  354. keyDownRight = true;
  355. }
  356. }
  357. })
  358. document.addEventListener('mouseup', function(e){
  359. let rightClick = false;
  360. if (e.button == 2) rightClick = true;
  361. if (!rightClick) {
  362. let click = document.getElementById('clickLeft');
  363. click.classList.remove('active2');
  364. keyDownLeft = false;
  365. } else {
  366. let click = document.getElementById('clickRight');
  367. click.classList.remove('active2');
  368. keyDownRight = false;
  369. }
  370. })
  371. keys.addEventListener('mousedown', function (e) {
  372.  
  373. let prevX = e.clientX;
  374. let prevY = e.clientY;
  375.  
  376. window.addEventListener('mousemove', mousemove);
  377. window.addEventListener('mouseup', mouseup);
  378. function mousemove(e) {
  379. let newX = prevX - e.clientX;
  380. let newY = prevY - e.clientY;
  381.  
  382.  
  383. const rect = keys.getBoundingClientRect();
  384.  
  385. keys.style.left = rect.left - newX + 'px';
  386. keys.style.top = rect.top - newY + 'px';
  387.  
  388. prevX = e.clientX;
  389. prevY = e.clientY;
  390. }
  391. function mouseup() {
  392. window.removeEventListener('mousemove', mousemove);
  393. window.removeEventListener('mouseup', mouseup);
  394. }
  395. });
  396. cps.addEventListener('mousedown', function (e) {
  397.  
  398. let prevX = e.clientX;
  399. let prevY = e.clientY;
  400.  
  401. window.addEventListener('mousemove', mousemove);
  402. window.addEventListener('mouseup', mouseup);
  403. function mousemove(e) {
  404. let newX = prevX - e.clientX;
  405. let newY = prevY - e.clientY;
  406.  
  407.  
  408. const rect = cps.getBoundingClientRect();
  409.  
  410. cps.style.left = rect.left - newX + 'px';
  411. cps.style.top = rect.top - newY + 'px';
  412.  
  413. prevX = e.clientX;
  414. prevY = e.clientY;
  415. }
  416. function mouseup() {
  417. window.removeEventListener('mousemove', mousemove);
  418. window.removeEventListener('mouseup', mouseup);
  419. }
  420. });
  421. cpsDisp.addEventListener('mousedown', function (e) {
  422.  
  423. let prevX = e.clientX;
  424. let prevY = e.clientY;
  425.  
  426. window.addEventListener('mousemove', mousemove);
  427. window.addEventListener('mouseup', mouseup);
  428. function mousemove(e) {
  429. let newX = prevX - e.clientX;
  430. let newY = prevY - e.clientY;
  431.  
  432.  
  433. const rect = cpsDisp.getBoundingClientRect();
  434.  
  435. cpsDisp.style.left = rect.left - newX + 'px';
  436. cpsDisp.style.top = rect.top - newY + 'px';
  437.  
  438. prevX = e.clientX;
  439. prevY = e.clientY;
  440. }
  441. function mouseup() {
  442. window.removeEventListener('mousemove', mousemove);
  443. window.removeEventListener('mouseup', mouseup);
  444. }
  445. });
  446. nums.addEventListener('mousedown', function (e) {
  447.  
  448. let prevX = e.clientX;
  449. let prevY = e.clientY;
  450.  
  451. window.addEventListener('mousemove', mousemove);
  452. window.addEventListener('mouseup', mouseup);
  453. function mousemove(e) {
  454. let newX = prevX - e.clientX;
  455. let newY = prevY - e.clientY;
  456.  
  457.  
  458. const rect = nums.getBoundingClientRect();
  459.  
  460. nums.style.left = rect.left - newX + 'px';
  461. nums.style.top = rect.top - newY + 'px';
  462.  
  463. prevX = e.clientX;
  464. prevY = e.clientY;
  465. }
  466. function mouseup() {
  467. window.removeEventListener('mousemove', mousemove);
  468. window.removeEventListener('mouseup', mouseup);
  469. }
  470. });
  471.  
  472. setInterval(() => {
  473. if (theCps > maxCps) maxCps = theCps;
  474. maxCpsDiv.innerText = `Max CPS: ${maxCps}`;
  475. cpsDiv.innerText = `CPS: ${theCps}`
  476. if (!numCheck.checked && nums.style.display == "flex") {
  477. nums.style.display = "none"
  478. } else if (numCheck.checked && nums.style.display != "flex") {
  479. nums.style.display = "flex"
  480. }
  481. if (!wasd.checked && keys.style.display == "flex") {
  482. keys.style.display = "none"
  483. } else if (wasd.checked && keys.style.display != "flex") {
  484. keys.style.display = "flex"
  485. }
  486. if (!cpss.checked && cpsDisp.style.display == "block") {
  487. cpsDisp.style.display = "none"
  488. } else if (cpss.checked && cpsDisp.style.display != "block") {
  489. cpsDisp.style.display = "block"
  490. }
  491. if (!clickss.checked && cps.style.display == "flex") {
  492. cps.style.display = "none"
  493. } else if (clickss.checked && cps.style.display != "flex") {
  494. cps.style.display = "flex"
  495. }
  496. }, 0)