Sploop.io Advanced Keystrokes.

customized keystrokes tailored to your preferences & use.

  1. // ==UserScript==
  2. // @name Sploop.io Advanced Keystrokes.
  3. // @version 2
  4. // @description customized keystrokes tailored to your preferences & use.
  5. // @author DETIX
  6. // @match *://sploop.io/*
  7. // @icon https://sploop.io/img/ui/favicon.png
  8. // @license MIT
  9. // @namespace https://greatest.deepsurf.us/users/1311498
  10. // ==/UserScript==
  11.  
  12. const DATA = {
  13. CPS: 0,
  14. MAXCPS: 0
  15. };
  16.  
  17. let SHOP, FOOD, SPIKE, TRAP;
  18.  
  19. const OBJECT = {
  20. KEYS: {
  21. // These are the default keys, which gonna be change depending on the keys you set in the game menu.
  22. PRIMARY: { KEY: "Digit1", KEY2: "Numpad1", PRESSED: false },
  23. SECONDARY: { KEY: "Digit2", KEY2: "Numpad2", PRESSED: false },
  24. FOOD: { KEY: "KeyQ", KEY2: "Digit3", PRESSED: false },
  25. SPIKE: { KEY: "KeyR", KEY2: "Digit5", PRESSED: false },
  26. TRAP: { KEY: "KeyF", KEY2: "Digit7", PRESSED: false },
  27. SPACE: { KEY: "Space", PRESSED: false },
  28. LOCK: { KEY: "KeyX", PRESSED: false },
  29. AUTOHIT: { KEY: "KeyE", PRESSED: false },
  30. SHOP: { KEY: "KeyN", PRESSED: false }
  31. },
  32. BUTTONS: {
  33. LEFT: { BUTTON: 0, PRESSED: false },
  34. MIDDLE: { BUTTON: 1, PRESSED: false },
  35. //These three buttons will not be shown in the menu, but using them will still increase the CPS in the menu.
  36. RIGHT: { BUTTON: 2, PRESSED: false },
  37. XBUTTON1: { BUTTON: 3, PRESSED: false },
  38. XBUTTON2: { BUTTON: 4, PRESSED: false }
  39. }
  40. };
  41.  
  42. const isInGame = () => {
  43. const homepage = document.getElementById("homepage");
  44. return homepage && homepage.style.display !== "flex";
  45. };
  46.  
  47. const isAVAILABLE = () => {
  48. if (!isInGame()) return false;
  49. const chatWrapper = document.getElementById("chat-wrapper");
  50. const clanMenu = document.getElementById("clan-menu");
  51. return chatWrapper && clanMenu && chatWrapper.style.display !== "block" && clanMenu.style.display !== "block";
  52. };
  53.  
  54. const UPDATE = {
  55. KEYS: {
  56. DOWN: function (e) {
  57. if (e.code === OBJECT.KEYS.PRIMARY.KEY || e.code === OBJECT.KEYS.PRIMARY.KEY2) {
  58. OBJECT.KEYS.PRIMARY.PRESSED = true;
  59. }
  60. if (e.code === OBJECT.KEYS.SECONDARY.KEY || e.code === OBJECT.KEYS.SECONDARY.KEY2) {
  61. OBJECT.KEYS.SECONDARY.PRESSED = true;
  62. }
  63. if (e.code === OBJECT.KEYS.FOOD.KEY || e.code === OBJECT.KEYS.FOOD.KEY2) {
  64. OBJECT.KEYS.FOOD.PRESSED = true;
  65. }
  66. if (e.code === OBJECT.KEYS.SPIKE.KEY || e.code === OBJECT.KEYS.SPIKE.KEY2) {
  67. OBJECT.KEYS.SPIKE.PRESSED = true;
  68. }
  69. if (e.code === OBJECT.KEYS.TRAP.KEY || e.code === OBJECT.KEYS.TRAP.KEY2) {
  70. OBJECT.KEYS.TRAP.PRESSED = true;
  71. }
  72. if (e.code === OBJECT.KEYS.SPACE.KEY) {
  73. if (event.repeat) return;
  74. OBJECT.KEYS.SPACE.PRESSED = true;
  75. UPDATE.CPS();
  76. }
  77. if (e.code === OBJECT.KEYS.SHOP.KEY && isAVAILABLE()) {
  78. OBJECT.KEYS.SHOP.PRESSED = true;
  79. }
  80.  
  81. // KeyE & KeyX
  82. if (e.code === OBJECT.KEYS.LOCK.KEY && isAVAILABLE()) {
  83. if (event.repeat) return;
  84. OBJECT.KEYS.LOCK.PRESSED = !OBJECT.KEYS.LOCK.PRESSED;
  85. }
  86. if (e.code === OBJECT.KEYS.AUTOHIT.KEY && isAVAILABLE()) {
  87. if (event.repeat) return;
  88. OBJECT.KEYS.AUTOHIT.PRESSED = !OBJECT.KEYS.AUTOHIT.PRESSED;
  89. }
  90. },
  91. UP: function (e) {
  92. if (e.code === OBJECT.KEYS.PRIMARY.KEY || e.code === OBJECT.KEYS.PRIMARY.KEY2) {
  93. OBJECT.KEYS.PRIMARY.PRESSED = false;
  94. }
  95. if (e.code === OBJECT.KEYS.SECONDARY.KEY || e.code === OBJECT.KEYS.SECONDARY.KEY2) {
  96. OBJECT.KEYS.SECONDARY.PRESSED = false;
  97. }
  98. if (e.code === OBJECT.KEYS.FOOD.KEY || e.code === OBJECT.KEYS.FOOD.KEY2) {
  99. OBJECT.KEYS.FOOD.PRESSED = false;
  100. }
  101. if (e.code === OBJECT.KEYS.SPIKE.KEY || e.code === OBJECT.KEYS.SPIKE.KEY2) {
  102. OBJECT.KEYS.SPIKE.PRESSED = false;
  103. }
  104. if (e.code === OBJECT.KEYS.TRAP.KEY || e.code === OBJECT.KEYS.TRAP.KEY2) {
  105. OBJECT.KEYS.TRAP.PRESSED = false;
  106. }
  107. if (e.code === OBJECT.KEYS.SPACE.KEY) {
  108. OBJECT.KEYS.SPACE.PRESSED = false;
  109. }
  110. if (e.code === OBJECT.KEYS.SHOP.KEY) {
  111. OBJECT.KEYS.SHOP.PRESSED = false;
  112. }
  113. }
  114. },
  115. BUTTONS: {
  116. DOWN: function (e) {
  117. if (e.button === OBJECT.BUTTONS.LEFT.BUTTON) {
  118. OBJECT.BUTTONS.LEFT.PRESSED = true;
  119. UPDATE.CPS();
  120. }
  121. if (e.button === OBJECT.BUTTONS.MIDDLE.BUTTON) {
  122. OBJECT.BUTTONS.MIDDLE.PRESSED = true;
  123. UPDATE.CPS();
  124. }
  125. if (e.button === OBJECT.BUTTONS.RIGHT.BUTTON) {
  126. OBJECT.BUTTONS.RIGHT.PRESSED = true;
  127. UPDATE.CPS();
  128. }
  129. if (e.button === OBJECT.BUTTONS.XBUTTON1.BUTTON) {
  130. OBJECT.BUTTONS.XBUTTON1.PRESSED = true;
  131. UPDATE.CPS();
  132. }
  133. if (e.button === OBJECT.BUTTONS.XBUTTON2.BUTTON) {
  134. OBJECT.BUTTONS.XBUTTON2.PRESSED = true;
  135. UPDATE.CPS();
  136. }
  137. },
  138. UP: function (e) {
  139. if (e.button === OBJECT.BUTTONS.LEFT.BUTTON) {
  140. OBJECT.BUTTONS.LEFT.PRESSED = false;
  141. }
  142. if (e.button === OBJECT.BUTTONS.MIDDLE.BUTTON) {
  143. OBJECT.BUTTONS.MIDDLE.PRESSED = false;
  144. }
  145. if (e.button === OBJECT.BUTTONS.RIGHT.BUTTON) {
  146. OBJECT.BUTTONS.RIGHT.PRESSED = false;
  147. }
  148. if (e.button === OBJECT.BUTTONS.XBUTTON1.BUTTON) {
  149. OBJECT.BUTTONS.XBUTTON1.PRESSED = false;
  150. }
  151. if (e.button === OBJECT.BUTTONS.XBUTTON2.BUTTON) {
  152. OBJECT.BUTTONS.XBUTTON2.PRESSED = false;
  153. }
  154. }
  155. },
  156. CPS: function () {
  157. DATA.CPS++;
  158. if (DATA.CPS > DATA.MAXCPS) {
  159. DATA.MAXCPS = DATA.CPS;
  160. }
  161. setTimeout(() => {
  162. DATA.CPS--;
  163. }, 1000);
  164. },
  165. VISUALS: function (COLOR) {
  166. COLOR = "#D0D0D0";
  167. // Primary Key
  168. document.getElementById("primary").style.backgroundColor = OBJECT.KEYS.PRIMARY.PRESSED ? COLOR : "";
  169.  
  170. // Secondary Key
  171. document.getElementById("secondary").style.backgroundColor = OBJECT.KEYS.SECONDARY.PRESSED ? COLOR : "";
  172.  
  173. // Food Key
  174. document.getElementById("food").style.backgroundColor = OBJECT.KEYS.FOOD.PRESSED ? COLOR : "";
  175.  
  176. // Spike Key
  177. document.getElementById("spike").style.backgroundColor = OBJECT.KEYS.SPIKE.PRESSED ? COLOR : "";
  178.  
  179. // Trap Key
  180. document.getElementById("trap").style.backgroundColor = OBJECT.KEYS.TRAP.PRESSED ? COLOR : "";
  181.  
  182. // Autohit Key
  183. document.getElementById("autohit").style.backgroundColor = OBJECT.KEYS.AUTOHIT.PRESSED ? COLOR : "";
  184.  
  185. // Lock Key
  186. document.getElementById("lockdir").style.backgroundColor = OBJECT.KEYS.LOCK.PRESSED ? COLOR : "";
  187.  
  188. // Shop Key
  189. document.getElementById("shop_").textContent = OBJECT.KEYS.SHOP.KEY;
  190. document.getElementById("shop_").style.backgroundColor = OBJECT.KEYS.SHOP.PRESSED ? COLOR : "";
  191.  
  192. // Space Key
  193. document.getElementById("spacebar").style.backgroundColor = OBJECT.KEYS.SPACE.PRESSED ? COLOR : "";
  194.  
  195. // Left Click
  196. document.getElementById("left-click").style.backgroundColor = OBJECT.BUTTONS.LEFT.PRESSED ? COLOR : "";
  197.  
  198. // Right Click
  199. document.getElementById("right-click").style.backgroundColor = OBJECT.BUTTONS.RIGHT.PRESSED ? COLOR : "";
  200.  
  201. document.getElementById("cps").textContent = `CPS: ${DATA.CPS}`;
  202. document.getElementById("maxcps").textContent = `MCPS: ${DATA.MAXCPS}`;
  203. requestAnimationFrame(UPDATE.VISUALS);
  204. },
  205. KEYBINDS: function () {
  206. SHOP = document.getElementById('for-shop').textContent;
  207. FOOD = document.getElementById('for-food').textContent;
  208. SPIKE = document.getElementById('for-spike').textContent;
  209. TRAP = document.getElementById('for-trap').textContent;
  210.  
  211. OBJECT.KEYS.SHOP.KEY = SHOP;
  212. OBJECT.KEYS.FOOD.KEY = FOOD;
  213. OBJECT.KEYS.SPIKE.KEY = SPIKE;
  214. OBJECT.KEYS.TRAP.KEY = TRAP;
  215. },
  216. SUBMIT: function () {
  217. UPDATE.KEYBINDS();
  218. setInterval(UPDATE.KEYBINDS, 100);
  219. }
  220. };
  221.  
  222. const MENU = () => {
  223. const menuHTML = `
  224. <div id="menu">
  225. <div class="menu-row">
  226. <div class="menu-item" id="primary">Primary</div>
  227. <div class="menu-item" id="secondary">Secondary</div>
  228. </div>
  229. <div class="menu-row">
  230. <div class="menu-item" id="food">Food</div>
  231. <div class="menu-item" id="spike">Spike</div>
  232. <div class="menu-item" id="trap">Trap</div>
  233. </div>
  234. <div class="menu-row">
  235. <div class="menu-item" id="autohit">KeyE</div>
  236. <div class="menu-item" id="shop_">${OBJECT.KEYS.SHOP.KEY}</div>
  237. <div class="menu-item" id="lockdir">KeyX</div>
  238. </div>
  239. <div class="menu-row">
  240. <div class="menu-item mouse-button" id="left-click">LEFT</div>
  241. <div class="menu-item mouse-button" id="right-click">RIGHT</div>
  242. </div>
  243. <div class="menu-row">
  244. <div class="menu-item spacebar" id="spacebar">Spacebar</div>
  245. </div>
  246. <div class="menu-row">
  247. <div class="menu-item cps" id="cps">CPS: 0</div>
  248. <div class="menu-item maxcps" id="maxcps">MCPS: 0</div>
  249. </div>
  250. </div>
  251. `;
  252.  
  253. const menuStyles = `
  254. #menu {
  255. position: fixed;
  256. top: 20px;
  257. left: 20px;
  258. color: #fff;
  259. padding: 10px;
  260. border-radius: 5px;
  261. z-index: 1000;
  262. font-family: Arial, sans-serif;
  263. font-size: 14px;
  264. pointer-events: none; /* this allows the user to click through the menu. */
  265. }
  266. .menu-row {
  267. display: flex;
  268. justify-content: space-between;
  269. margin-bottom: 8px;
  270. }
  271. .menu-item {
  272. flex: 1;
  273. text-align: center;
  274. padding: 8px;
  275. background-color: rgba(0, 0, 0, 0.2);
  276. border-radius: 5px;
  277. }
  278. .spacebar {
  279. width: 100%;
  280. background-color: rgba(0, 0, 0, 0.2);
  281. border-radius: 5px;
  282. text-align: center;
  283. padding: 8px;
  284. }
  285. .cps, .maxcps {
  286. width: 50%;
  287. }
  288. .mouse-button {
  289. width: 48%;
  290. }
  291. .menu-item:last-child {
  292. margin-bottom: 0;
  293. }
  294. `;
  295. document.body.insertAdjacentHTML('beforeend', menuHTML);
  296. const styleElement = document.createElement('style');
  297. styleElement.textContent = menuStyles;
  298. document.head.appendChild(styleElement);
  299. UPDATE.VISUALS();
  300. UPDATE.SUBMIT();
  301. };
  302.  
  303. document.addEventListener("keydown", UPDATE.KEYS.DOWN);
  304. document.addEventListener("keyup", UPDATE.KEYS.UP);
  305. document.addEventListener("mousedown", UPDATE.BUTTONS.DOWN);
  306. document.addEventListener("mouseup", UPDATE.BUTTONS.UP);
  307.  
  308. MENU();