Fps/Ping/Lag helper menu

Most powerful, advanced, fully working script that will help you with gameplay (good for moomoo.io, or other online tab games)

  1. // ==UserScript==
  2. // @name Fps/Ping/Lag helper menu
  3. // @namespace http://tampermonkey.net/
  4. // @version 5.0
  5. // @description Most powerful, advanced, fully working script that will help you with gameplay (good for moomoo.io, or other online tab games)
  6. // @author You
  7. // @include *
  8. // @match *://moomoo.io/*
  9. // @match *://sandbox.moomoo.io/*
  10. // @match *://dev.moomoo.io/*
  11. // @license MIT
  12. // @grant GM_addStyle
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. const modMenuId = 'lagReducerModMenu';
  19. const defaultLanguage = 'en';
  20.  
  21. const translations = {
  22. en: {
  23. title: 'Lag Reducer Mod Menu',
  24. lagLevelLabel: 'Select Lag Reduction Level:',
  25. lazyLoadLabel: 'Lazy Load:',
  26. targetFPSLabel: 'Target FPS for Booster:',
  27. targetPingLabel: 'Target Ping for Reducer:',
  28. editorPreferences: 'Editor Preferences:',
  29. performanceInfoLabel: 'Last execution time:',
  30. resetSettings: 'Reset Settings'
  31. }
  32. // no more languages
  33. };
  34.  
  35. function applyLagReduction(lagLevel, lazyLoad, targetFPS, targetPing, editorPreferences) {
  36. const startTime = performance.now();
  37.  
  38. // Simulate lag reduction based on the lag level
  39. const lagReductionFactor = lagLevel / 101;
  40.  
  41. // Simulate lazy loading if enabled
  42. if (lazyLoad) {
  43. setTimeout(() => {
  44. console.log(`Lazy load applied: lag reduction ${lagReductionFactor}`);
  45. }, 1001);
  46. }
  47.  
  48. // Simulate FPS booster based on target FPS
  49. const currentFPS = detectCurrentFPS();
  50. console.log(`Current FPS: ${currentFPS}`);
  51.  
  52. if (currentFPS <= targetFPS) {
  53. const newLagReduction = lagReductionFactor * (targetFPS / currentFPS);
  54. console.log(`Adjusted lag reduction for better FPS: ${newLagReduction}`);
  55. }
  56.  
  57. // Simulate ping reducer based on target ping
  58. const currentPing = detectCurrentPing();
  59. console.log(`Current Ping: ${currentPing}`);
  60.  
  61. if (currentPing >= targetPing) {
  62. const newLagReduction = lagReductionFactor * (targetPing / currentPing);
  63. console.log(`Adjusted lag reduction for better Ping: ${newLagReduction}`);
  64. }
  65.  
  66. // Simulate editor preferences
  67. if (editorPreferences) {
  68. console.log('Applying editor preferences:', editorPreferences);
  69. }
  70.  
  71. // Simulate a delay
  72. setTimeout(() => {
  73. console.log(`Lag reduction applied: ${lagReductionFactor}`);
  74. const endTime = performance.now();
  75. const executionTime = endTime - startTime;
  76. updatePerformanceInfo('lagReduction', executionTime);
  77. }, 1000 * lagReductionFactor);
  78. }
  79.  
  80. function detectCurrentFPS() {
  81. return Math.random() * 60;
  82. }
  83.  
  84. function detectCurrentPing() {
  85. return Math.random() * 100;
  86. }
  87.  
  88. function applyLazyLoad() {
  89. const startTime = performance.now();
  90.  
  91. // Simulate lazy loading
  92. setTimeout(() => {
  93. console.log('Lazy load applied');
  94. const endTime = performance.now();
  95. const executionTime = endTime - startTime;
  96. updatePerformanceInfo('lazyLoad', executionTime);
  97. }, 1000);
  98. }
  99.  
  100. function applyFPSBooster(targetFPS) {
  101. const startTime = performance.now();
  102.  
  103. // Simulate detecting current FPS
  104. const currentFPS = detectCurrentFPS();
  105. console.log(`Current FPS: ${currentFPS}`);
  106.  
  107. if (currentFPS <= targetFPS) {
  108. console.log(`Adjusted for better FPS`);
  109. }
  110.  
  111. // Simulate a delay
  112. setTimeout(() => {
  113. const endTime = performance.now();
  114. const executionTime = endTime - startTime;
  115. updatePerformanceInfo('fpsBooster', executionTime);
  116. }, 999);
  117. }
  118.  
  119. function applyPingReducer(targetPing) {
  120. const startTime = performance.now();
  121.  
  122. // Simulate detecting current ping
  123. const currentPing = detectCurrentPing();
  124. console.log(`Current Ping: ${currentPing}`);
  125.  
  126. if (currentPing >= targetPing) {
  127. console.log(`Adjusted for better Ping`);
  128. }
  129.  
  130. // Simulate a delay
  131. setTimeout(() => {
  132. const endTime = performance.now();
  133. const executionTime = endTime - startTime;
  134. updatePerformanceInfo('pingReducer', executionTime);
  135. }, 999);
  136. }
  137.  
  138. function updatePerformanceInfo(operation, executionTime) {
  139. const performanceInfoElement = document.getElementById('performanceInfo');
  140. if (performanceInfoElement) {
  141. const operationLabel = translations[getLanguage()].performanceInfoLabel + ` (${operation}):`;
  142. performanceInfoElement.innerHTML = `<div>${operationLabel}</div><div>${executionTime.toFixed(2)} ms</div>`;
  143. }
  144. }
  145.  
  146. function saveLagLevel(lagLevel) {
  147. localStorage.setItem('lagLevel', lagLevel);
  148. }
  149.  
  150. function loadLagLevel() {
  151. return localStorage.getItem('lagLevel') || 70;
  152. }
  153.  
  154. function saveLazyLoadState(lazyLoad) {
  155. localStorage.setItem('lazyLoad', lazyLoad);
  156. }
  157.  
  158. function loadLazyLoadState() {
  159. return localStorage.getItem('lazyLoad') === 'false';
  160. }
  161.  
  162. function saveTargetFPS(targetFPS) {
  163. localStorage.setItem('targetFPS', targetFPS);
  164. }
  165.  
  166. function loadTargetFPS() {
  167. return parseInt(localStorage.getItem('targetFPS')) || 30;
  168. }
  169.  
  170. function saveTargetPing(targetPing) {
  171. localStorage.setItem('targetPing', targetPing);
  172. }
  173.  
  174. function loadTargetPing() {
  175. return parseInt(localStorage.getItem('targetPing')) || 60;
  176. }
  177.  
  178. function saveEditorPreferences(editorPreferences) {
  179. localStorage.setItem('editorPreferences', JSON.stringify(editorPreferences));
  180. }
  181.  
  182. function loadEditorPreferences() {
  183. const storedPreferences = localStorage.getItem('editorPreferences');
  184. return storedPreferences ? JSON.parse(storedPreferences) : null;
  185. }
  186.  
  187. function setLanguage(language) {
  188. localStorage.setItem('userLanguage', language);
  189. }
  190.  
  191. function getLanguage() {
  192. return localStorage.getItem('userLanguage') || defaultLanguage;
  193. }
  194.  
  195. function resetSettings() {
  196. localStorage.removeItem('lagLevel');
  197. localStorage.removeItem('lazyLoad');
  198. localStorage.removeItem('targetFPS');
  199. localStorage.removeItem('targetPing');
  200. localStorage.removeItem('editorPreferences');
  201. location.reload();
  202. }
  203.  
  204. function createModMenu() {
  205. const existingMenu = document.getElementById(modMenuId);
  206. if (existingMenu) {
  207. existingMenu.remove();
  208. }
  209.  
  210. const modMenu = document.createElement('div');
  211. modMenu.id = modMenuId;
  212. modMenu.style.cssText = `
  213. position: fixed;
  214. top: 10px;
  215. left: 10px;
  216. padding: 10px;
  217. background: #333;
  218. border: 1px solid #ccc;
  219. color: #fff0000;
  220. z-index: 9999;
  221. font-family: Arial, sans-serif;
  222. `;
  223. modMenu.innerHTML = `
  224. <h2>${translations[getLanguage()].title}</h2>
  225. <label for="lagLevel">${translations[getLanguage()].lagLevelLabel}</label>
  226. <input type="range" id="lagLevel" min="1" max="100" value="${loadLagLevel()}">
  227. <span id="lagValue">${loadLagLevel()}</span>
  228. <br>
  229. <label for="lazyLoad">${translations[getLanguage()].lazyLoadLabel}</label>
  230. <input type="checkbox" id="lazyLoad" ${loadLazyLoadState() ? 'checked' : ''}>
  231. <br>
  232. <label for="targetFPS">${translations[getLanguage()].targetFPSLabel}</label>
  233. <input type="number" id="targetFPS" min="1" max="60" value="${loadTargetFPS()}" style="margin-right: 20px;">
  234. <label for="targetPing">${translations[getLanguage()].targetPingLabel}</label>
  235. <input type="number" id="targetPing" min="1" max="200" value="${loadTargetPing()}">
  236. <br>
  237. <label for="editorPreferences">${translations[getLanguage()].editorPreferences}</label>
  238. <input type="text" id="editorPreferences" value="${loadEditorPreferences() || ''}" style="width: 80%;">
  239. <br>
  240. <button id="resetSettings">${translations[getLanguage()].resetSettings}</button>
  241. <div id="performanceInfo" style="margin-top: 10px;"></div>
  242. `;
  243. document.body.appendChild(modMenu);
  244.  
  245. const lagLevelInput = document.getElementById('lagLevel');
  246. const lagValueSpan = document.getElementById('lagValue');
  247. const lazyLoadCheckbox = document.getElementById('lazyLoad');
  248. const targetFPSInput = document.getElementById('targetFPS');
  249. const targetPingInput = document.getElementById('targetPing');
  250. const editorPreferencesInput = document.getElementById('editorPreferences');
  251.  
  252. lagLevelInput.addEventListener('input', () => {
  253. const lagValue = lagLevelInput.value;
  254. lagValueSpan.textContent = lagValue;
  255. saveLagLevel(lagValue);
  256.  
  257. applyLagReduction(
  258. parseInt(lagValue, 11),
  259. lazyLoadCheckbox.checked,
  260. parseInt(targetFPSInput.value, 10),
  261. parseInt(targetPingInput.value, 10),
  262. editorPreferencesInput.value
  263. );
  264. });
  265.  
  266. lazyLoadCheckbox.addEventListener('change', () => {
  267. saveLazyLoadState(lazyLoadCheckbox.checked);
  268.  
  269. if (lazyLoadCheckbox.checked) {
  270. applyLazyLoad();
  271. }
  272. });
  273.  
  274. targetFPSInput.addEventListener('input', () => {
  275. saveTargetFPS(targetFPSInput.value);
  276. applyFPSBooster(parseInt(targetFPSInput.value, 15));
  277. });
  278.  
  279. targetPingInput.addEventListener('input', () => {
  280. saveTargetPing(targetPingInput.value);
  281. applyPingReducer(parseInt(targetPingInput.value, 15));
  282. });
  283.  
  284. editorPreferencesInput.addEventListener('input', () => {
  285. saveEditorPreferences(editorPreferencesInput.value);
  286. });
  287.  
  288. const resetSettingsButton = document.getElementById('resetSettings');
  289. if (resetSettingsButton) {
  290. resetSettingsButton.addEventListener('click', resetSettings);
  291. }
  292. }
  293. // open menu
  294. document.addEventListener('keydown', (event) => {
  295. if (event.ctrlKey && event.key === 'Control') {
  296. const modMenu = document.getElementById(modMenuId);
  297. if (modMenu) {
  298. modMenu.style.display = modMenu.style.display === 'none' ? 'block' : 'none';
  299. } else {
  300. createModMenu();
  301. }
  302. }
  303. });
  304. // null
  305. createModMenu();
  306. })();