MooMoo.io Show Keys & Mouse

Display your keyboard keys, mouse, and CPS

目前为 2023-05-29 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name MooMoo.io Show Keys & Mouse
  3. // @description Display your keyboard keys, mouse, and CPS
  4. // @author KOOKY WARRIOR
  5. // @match *://*.moomoo.io/*
  6. // @icon https://moomoo.io/img/favicon.png?v=1
  7. // @run-at document-start
  8. // @grant unsafeWindow
  9. // @license MIT
  10. // @version 0.2
  11. // @namespace https://greasyfork.org/users/999838
  12. // ==/UserScript==
  13.  
  14. // This script was originally made by GG Gamer Br
  15. // https://greasyfork.org/en/scripts/424547-moomoo-io-keys
  16.  
  17. ;(() => {
  18. unsafeWindow.showKeys = true
  19. unsafeWindow.addEventListener("DOMContentLoaded", () => {
  20. const DIV = `
  21. <style>
  22. .keys {
  23. margin: 5px;
  24. padding: 2px;
  25. border: 2px solid white;
  26. color: white;
  27. height: 45px;
  28. min-width: 60px;
  29. max-width: 200px;
  30. text-align: center;
  31. font-size: 25px;
  32. top: 50%;
  33. line-height: 45px;
  34. }
  35. .keys.active {
  36. color: black;
  37. background: white;
  38. }
  39. #keys {
  40. display: flex;
  41. flex-wrap: wrap;
  42. align-content: start;
  43. width: 250px;
  44. position: absolute;
  45. left: 15px;
  46. bottom: 210px;
  47. z-index: 15;
  48. }
  49. #fast {
  50. display: flex;
  51. position: absolute;
  52. left: 20px;
  53. bottom: 390px;
  54. }
  55. #mouse {
  56. display: flex;
  57. width: 70px;
  58. justify-content: space-between;
  59. flex-wrap: wrap;
  60. }
  61. #mouse_0 {
  62. flex-basis: 35%;
  63. height: 50px;
  64. border-radius: 100px 10px 10px 10px;
  65. border: 2px solid white;
  66. }
  67. #mouse_1 {
  68. flex-basis: 5%;
  69. height: 50px;
  70. border-radius: 10px;
  71. border: 2px solid white;
  72. }
  73. #mouse_2 {
  74. flex-basis: 35%;
  75. height: 50px;
  76. border-radius: 10px 100px 10px 10px;
  77. border: 2px solid white;
  78. }
  79. #mouse_bottom {
  80. margin-top: 5px;
  81. flex-basis: 100%;
  82. height: 35px;
  83. border-radius: 10px 10px 100px 100px;
  84. border: 2px solid white;
  85. }
  86. .active2 {
  87. background: white;
  88. }
  89. #maxCpsDisplay {
  90. right: inherit;
  91. padding-right: 10px;
  92. left: 20px;
  93. bottom: 280px;
  94. }
  95. #cpsDisplay {
  96. right: inherit;
  97. padding-right: 10px;
  98. left: 20px;
  99. bottom: 335px;
  100. }
  101. </style>
  102. <div id="show_key_container">
  103. <div id="keys">
  104. <div class="keys" id="key_KeyQ">Q</div>
  105. <div class="keys" id="key_Key${unsafeWindow.keyRebinder ? "F" : "7"}">${unsafeWindow.keyRebinder ? "F" : "7"}</div>
  106. <div class="keys" id="key_Key${unsafeWindow.keyRebinder ? "V" : "5"}">${unsafeWindow.keyRebinder ? "V" : "5"}</div>
  107. </div>
  108.  
  109. <div id="fast">
  110. <div id="mouse">
  111. <div id="mouse_0"></div>
  112. <div id="mouse_1"></div>
  113. <div id="mouse_2"></div>
  114. <div id="mouse_bottom"></div>
  115. </div>
  116. <div class="keys" id="key_Space" style="margin: 10px; width: 135px;">_______</div>
  117. </div>
  118.  
  119. <div id="cpsDisplay" class="resourceDisplay">CPS: 0</div>
  120. <div id="maxCpsDisplay" class="resourceDisplay">MAX CPS: 0</div>
  121. </div>
  122. `
  123. const container = document.createElement("div")
  124. container.innerHTML = DIV
  125. document.getElementById("gameUI").appendChild(container)
  126.  
  127. var currentCps = 0
  128. var maxCps = 0
  129. var spaceDown = false
  130.  
  131. function addCPS() {
  132. currentCps++
  133. document.getElementById("cpsDisplay").innerText = `CPS: ${currentCps}`
  134. if (currentCps > maxCps) {
  135. maxCps = currentCps
  136. document.getElementById("maxCpsDisplay").innerText = `MAX CPS: ${maxCps}`
  137. }
  138. setTimeout(() => {
  139. currentCps--
  140. document.getElementById("cpsDisplay").innerText = `CPS: ${currentCps}`
  141. }, 1000)
  142. }
  143.  
  144. function keysActive() {
  145. let returnValue
  146. returnValue =
  147. document.getElementById("allianceMenu").style.display != "block" &&
  148. document.getElementById("chatHolder").style.display != "block"
  149. return returnValue
  150. }
  151.  
  152. unsafeWindow.addEventListener("keydown", (event) => {
  153. if (event.which == 111) {
  154. document.getElementById("show_key_container").style.display =
  155. document.getElementById("show_key_container").style.display == "block"
  156. ? "none"
  157. : "block"
  158. } else {
  159. if (keysActive()) {
  160. if (event.code == "Space") {
  161. if (!spaceDown) {
  162. spaceDown = true
  163. addCPS()
  164. }
  165. }
  166. let keyDiv = document.getElementById(`key_${event.code}`)
  167. if (keyDiv && !keyDiv.classList.contains("active")) {
  168. keyDiv.classList.add("active")
  169. }
  170. }
  171. }
  172. })
  173.  
  174. unsafeWindow.addEventListener("keyup", (event) => {
  175. if (event.code == "Space") {
  176. spaceDown = false
  177. }
  178. let keyDiv = document.getElementById(`key_${event.code}`)
  179. if (keyDiv && keyDiv.classList.contains("active")) {
  180. keyDiv.classList.remove("active")
  181. }
  182. })
  183.  
  184. document.getElementById("gameCanvas").addEventListener("mousedown", (event) => {
  185. if ([0, 1, 2].includes(event.button)) {
  186. addCPS()
  187. }
  188. let mouseDiv = document.getElementById(`mouse_${event.button}`)
  189. if (mouseDiv && !mouseDiv.classList.contains("active2")) {
  190. mouseDiv.classList.add("active2")
  191. }
  192. })
  193.  
  194. document.getElementById("gameCanvas").addEventListener("mouseup", (event) => {
  195. let mouseDiv = document.getElementById(`mouse_${event.button}`)
  196. if (mouseDiv && mouseDiv.classList.contains("active2")) {
  197. mouseDiv.classList.remove("active2")
  198. }
  199. })
  200. })
  201. })()