Hide FPS and uncap it (FAKE)
// ==UserScript== // @name Shell Shockers Hide FPS // @license GPL-3.0 // @version 1.3.1 // @author wish? // @grant none // @run-at document-start // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/tweakpane.min.js // @require https://cdn.jsdelivr.net/npm/@tweakpane/[email protected]/dist/tweakpane-plugin-essentials.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js // @description Hide FPS and uncap it (FAKE) // // // @match *://eggshooter.best/* // @match *://*.shellshock.io/* // @match *://*.algebra.best/* // @match *://*.algebra.vip/* // @match *://*.biologyclass.club/* // @match *://*.deadlyegg.com/* // @match *://*.deathegg.world/* // @match *://*.eggboy.club/* // @match *://*.eggboy.xyz/* // @match *://*.eggcombat.com/* // @match *://*.egg.dance/* // @match *://*.eggfacts.fun/* // @match *://*.egghead.institute/* // @match *://*.eggisthenewblack.com/* // @match *://*.eggsarecool.com/* // @match *://*.geometry.best/* // @match *://*.geometry.monster/* // @match *://*.geometry.pw/* // @match *://*.geometry.report/* // @match *://*.hardboiled.life/* // @match *://*.hardshell.life/* // @match *://*.humanorganising.org/* // @match *://*.mathactivity.xyz/* // @match *://*.mathactivity.club/* // @match *://*.mathdrills.info/* // @match *://*.mathdrills.life/* // @match *://*.mathfun.rocks/* // @match *://*.mathgames.world/* // @match *://*.math.international/* // @match *://*.mathlete.fun/* // @match *://*.mathlete.pro/* // @match *://*.overeasy.club/* // @match *://*.risenegg.com/* // @match *://*.scrambled.tech/* // @match *://*.scrambled.today/* // @match *://*.scrambled.us/* // @match *://*.scrambled.world/* // @match *://*.shellshockers.club/* // @match *://*.shellshockers.life/* // @match *://*.shellshockers.site/* // @match *://*.shellshockers.us/* // @match *://*.shellshockers.world/* // @match *://*.shellshockers.xyz/* // @match *://*.shellsocks.com/* // @match *://*.softboiled.club/* // @match *://*.urbanegger.com/* // @match *://*.violentegg.club/* // @match *://*.violentegg.fun/* // @match *://*.yolk.best/* // @match *://*.yolk.life/* // @match *://*.yolk.rocks/* // @match *://*.yolk.tech/* // @match *://*.yolk.quest/* // @match *://*.yolk.today/* // @match *://*.zygote.cafe/* // @match *://*.shellshockers.best/* // @match *://*.eggboy.me/* // @namespace https://greasyfork.org/users/1361048 // ==/UserScript== (function () { let originalReplace = String.prototype.replace; String.prototype.originalReplace = function () { return originalReplace.apply(this, arguments); }; const originalXHROpen = XMLHttpRequest.prototype.open; const originalXHRGetResponse = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, "response"); let shellshockjs; XMLHttpRequest.prototype.open = function (...args) { const url = args[1]; if (url && url.includes("js/shellshock.js")) { shellshockjs = this; } originalXHROpen.apply(this, args); }; Object.defineProperty(XMLHttpRequest.prototype, "response", { get: function () { if (this === shellshockjs) { return applyLibertyMutual(originalXHRGetResponse.get.call(this)); } return originalXHRGetResponse.get.call(this); }, }); //VAR STUFF let F = []; let H = {}; let functionNames = []; let tp = { hideFPS: { hide: JSON.parse(localStorage.getItem('tp-hideFPS')) || false, min: JSON.parse(localStorage.getItem('tp-minFPS')) || 20, max: JSON.parse(localStorage.getItem('tp-maxFPS')) || 200, random: JSON.parse(localStorage.getItem('tp-randomFPS')) || false, } }; function createFolders(NFolder) { let test = pane.addFolder({ title: NFolder, expanded: false, }); return test }; function hideFPS(value) { let fpsCounter = document.querySelector('#FPS'); if (value) { if (fpsCounter) { fpsCounter.style.display = 'none'; } } else { fpsCounter.style.display = 'block'; } }; function randomise(min, max, active) { if (active) { const randomFPS = Math.floor(Math.random() * (max - min + 1)) + min; let fpsCounter = document.querySelector('#FPS'); if (fpsCounter) { fpsCounter.textContent = randomFPS; } } }; const makeDraggable = function (element, notMenu) { if (element) { let offsetX, offsetY; element.addEventListener("mousedown", function (e) { const dragElement = function (e) { const x = ((e.clientX - offsetX) / unsafeWindow.innerWidth) * 100; const y = ((e.clientY - offsetY) / unsafeWindow.innerHeight) * 100; const maxX = 100 - (element.offsetWidth / unsafeWindow.innerWidth) * 100; const maxY = 100 - (element.offsetHeight / unsafeWindow.innerHeight) * 100; element.style.left = `${Math.max(0, Math.min(x, maxX))}%`; element.style.top = `${Math.max(0, Math.min(y, maxY))}%`; }; if (notMenu || e.target.classList.contains("tp-rotv_t")) { offsetX = e.clientX - element.getBoundingClientRect().left; offsetY = e.clientY - element.getBoundingClientRect().top; document.addEventListener("mousemove", dragElement); document.addEventListener("mouseup", function () { document.removeEventListener("mousemove", dragElement); }); e.preventDefault(); // Prevent text selection during drag } }); } }; //scrambled... geddit???? const getScrambled = function () { return Array.from({ length: 10 }, () => String.fromCharCode(97 + Math.floor(Math.random() * 26))).join(""); }; const createAnonFunction = function (name, func) { const funcName = getScrambled(); window[funcName] = func; F[name] = window[funcName]; functionNames[name] = funcName; }; const findKeyWithProperty = function (obj, propertyToFind) { for (const key in obj) { if (obj.hasOwnProperty(key)) { if (key === propertyToFind) { return [key]; } else if (typeof obj[key] === "object" && obj[key] !== null && obj[key].hasOwnProperty(propertyToFind)) { return key; } } } // Property not found return null; }; const fetchTextContent = function (url) { var xhr = new XMLHttpRequest(); xhr.open("GET", url, false); // Make the request synchronous xhr.send(); if (xhr.status === 200) { return xhr.responseText; } else { console.error("Error fetching text content. Status:", xhr.status); return null; } }; const applyLibertyMutual = function (js) { let hash = CryptoJS.SHA256(js).toString(CryptoJS.enc.Hex); let clientKeys; onlineClientKeys = fetchTextContent("https://raw.githubusercontent.com/StateFarmNetwork/client-keys/main/statefarm_" + hash + ".json"); //credit: me :D clientKeys = JSON.parse(onlineClientKeys); H = clientKeys.vars; let injectionString = ""; const modifyJS = function (find, replace) { let oldJS = js; js = js.originalReplace(find, replace); if (oldJS !== js) { console.log( "%cReplacement successful! Injected code: " + replace, "color: green; font-weight: bold; font-size: 0.6em; text-decoration: italic;" ); } else { console.log( "%cReplacement failed! Attempted to replace " + find + " with: " + replace, "color: red; font-weight: bold; font-size: 0.6em; text-decoration: italic;" ); } }; console.log("%cATTEMPTING TO START ????", "color: magenta; font-weight: bold; font-size: 1.5em; text-decoration: underline;"); const variableNameRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/; for (let name in H) { deobf = H[name]; if (variableNameRegex.test(deobf)) { injectionString = `${injectionString}${name}: (() => { let variable = "value_undefined"; try { eval("variable = ${deobf};"); } catch (error) { return "value_undefined"; }; return variable; })(),`; } else { } } const f = function (varName) { return varName.replace("$", "\\$"); }; const FUNCTIONPARAM = new RegExp("function " + f(H._connectFail) + "\\(([a-zA-Z$_]+)\\)").exec(js)[1]; console.log(injectionString); console.log( "%cSOUNDS INJECTION: INJECT VAR RETRIEVAL FUNCTION AND MAIN LOOP", "color: yellow; font-weight: bold; font-size: 1.2em; text-decoration: underline;" ); modifyJS(H.SCENE + ".render", `window["${functionNames.retrieveFunctions}"]({${injectionString}},true)||${H.SCENE}.render`); console.log(H); return js; }; createAnonFunction("retrieveFunctions", function (vars) { ss = vars; window.globalSS = ss; F.HIDEFPS(); }); createAnonFunction("HIDEFPS", function () { ss.PLAYERS.forEach((PLAYER) => { if (PLAYER.hasOwnProperty("ws")) { ss.MYPLAYER = PLAYER; }; hideFPS(tp.hideFPS.hide); randomise(tp.hideFPS.min, tp.hideFPS.max, tp.hideFPS.random) }); H.actor = findKeyWithProperty(ss.MYPLAYER, H.mesh); }); const Tweakpane = window.Tweakpane; const pane = new Tweakpane.Pane({ title: "Hide FPS", expanded: true, }); const paneEl = document.querySelector("div.tp-dfwv"); paneEl.style.zIndex = 1000; paneEl.style.width = "300px"; function createInput(obj, property, options, callback) { pane.addInput(obj, property, options).on('change', callback) }; makeDraggable(document.querySelector(".tp-dfwv")); createInput(tp.hideFPS, 'hide', {label: 'Hide FPS'}, (value) => { localStorage.setItem('tp-hideFPS', JSON.stringify(value.value)); }); createInput(tp.hideFPS, 'random', {label: 'Randomise FPS'}, (value) => { localStorage.setItem('tp-randomFPS', JSON.stringify(value.value)) }) createInput(tp.hideFPS, 'min', {label: 'Min FPS', view:'slider', min: 1, max: 999, step:1}, (value) => { localStorage.setItem('tp-minFPS', JSON.stringify(value.value)) }); createInput(tp.hideFPS, 'max', {label: 'Max FPS', view:'slider', min: 1, max: 999, step:1}, (value) => { localStorage.setItem('tp-maxFPS', JSON.stringify(value.value)) }); document.addEventListener('keydown', (e) => { if (e.key === 'h') { const element = document.querySelector('.tp-dfwv'); element.style.display = element.style.display === 'none' ? 'block' : 'none'; } }) })();