// ==UserScript== // @name Shellshock.IO Aimbot & ESP // @namespace http://tampermonkey.net/ // @version 0.3.8 // @description Locks aim to the nearest player in shellshock.io. Comes with an ESP too. Press B, V, N, L to toggle aimbot, esp, esp lines, aimbot on right mouse hold. // @author Zertalious (Zert) // @match *://shellshock.io/* // @match *://algebra.best/* // @match *://algebra.vip/* // @match *://biologyclass.club/* // @match *://deadlyegg.com/* // @match *://deathegg.world/* // @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 *://mathdrills.info/* // @match *://mathfun.rocks/* // @match *://mathgames.world/* // @match *://math.international/* // @match *://mathlete.fun/* // @match *://mathlete.pro/* // @match *://overeasy.club/* // @match *://scrambled.best/* // @match *://scrambled.tech/* // @match *://scrambled.today/* // @match *://scrambled.us/* // @match *://scrambled.world/* // @match *://shellshockers.club/* // @match *://shellshockers.site/* // @match *://shellshockers.us/* // @match *://shellshockers.world/* // @match *://softboiled.club/* // @match *://violentegg.club/* // @match *://violentegg.fun/* // @match *://yolk.best/* // @match *://yolk.life/* // @match *://yolk.rocks/* // @match *://yolk.tech/* // @match *://zygote.cafe/* // @icon https://www.google.com/s2/favicons?domain=shellshock.io // @grant none // @run-at document-start // @antifeature ads // @require https://cdn.jsdelivr.net/npm/lil-gui@0.19 // @downloadURL https://update.greasyfork.org/scripts/436330/ShellshockIO%20Aimbot%20%20ESP.user.js // @updateURL https://update.greasyfork.org/scripts/436330/ShellshockIO%20Aimbot%20%20ESP.meta.js // ==/UserScript== const keys = {}; const StringReplace = String.prototype.replace; function log( msg, ...args ) { console.log( '%c' + msg, 'color: red; background: black; font-size: 2em;', ...args ); } window.XMLHttpRequest = class extends window.XMLHttpRequest { open( method, url ) { if ( url.indexOf( 'shellshock.js' ) > - 1 && ! isNaN( value ) ) { this.isScript = true; } return super.open( ...arguments ); } get response() { if ( this.isScript && ! isNaN( value ) ) { let code = super.response; let babylonVarName, playersVarName, myPlayerVarName, sceneVarName, cullFuncName; const extractors = { BracketSingleQuote() { const matches = /([a-zA-Z_$0-9]+)\['([^']+)'\]\['([^']+)'\]\("[^"]+",{si/.exec( code ); babylonVarName = matches[ 1 ]; playersVarName = /[a-zA-Z_$0-9]+\['[^']+'\]\),!([a-zA-Z_$0-9]+)\[/.exec( code )[ 1 ]; myPlayerVarName = /document\.pointerLockElement&&([^&]+)&&/.exec( code )[ 1 ]; sceneVarName = /if\([a-zA-Z_$0-9]+\['[^']+'\]\(([a-zA-Z_$0-9]+),[a-zA-Z_$0-9]+,[a-zA-Z_$0-9]+,null/.exec( code )[ 1 ]; cullFuncName = /=([a-zA-Z_$0-9]+)\(this\['([^']+)'\],\.[0-9]+\)/.exec( code )[ 1 ]; keys.MeshBuilder = matches[ 2 ]; keys.CreateBox = matches[ 3 ]; keys.CreateLines = /\['([^']+)'\]\("",{po/.exec( code )[ 1 ]; keys.Vector3 = /new [a-zA-Z_$0-9]+\['([^']+)'\]\(\.5,\.5,\.5\),/.exec( code )[ 1 ]; keys.actor = /this\['([^']+)'\]\['([^']+)'\]\.position,!/.exec( code )[ 1 ]; keys.playing = /OPEN&&[a-zA-Z_$0-9]+\['([^']+)'\]/.exec( code )[ 1 ]; keys.yaw = /\*=[a-zA-Z_$0-9]+,[a-zA-Z_$0-9]+\['([^']+)'\]=Math\.r/.exec( code )[ 1 ]; keys.pitch = /\),[a-zA-Z_$0-9]+\['([^']+)'\]=Math\.max\(Math\.min/.exec( code )[ 1 ]; keys.mesh = /,\.[0-9]+\);this\['([^']+)'\]\['([^']+)'\]\(/.exec( code )[ 1 ]; }, BracketDoubleQuote() { // might not be needed but just in case const matches = /([a-zA-Z_$0-9]+)\["([^"]+)"\]\["([^"]+)"\]\("[^"]+",{si/.exec( code ); babylonVarName = matches[ 1 ]; playersVarName = /[a-zA-Z_$0-9]+\["[^"]+"\]\),!([a-zA-Z_$0-9]+)\[/.exec( code )[ 1 ]; myPlayerVarName = /document\.pointerLockElement&&([^&]+)&&/.exec( code )[ 1 ]; sceneVarName = /if\([a-zA-Z_$0-9]+\["[^"]+"\]\(([a-zA-Z_$0-9]+),[a-zA-Z_$0-9]+,[a-zA-Z_$0-9]+,null/.exec( code )[ 1 ]; cullFuncName = /=([a-zA-Z_$0-9]+)\(this\["([^"]+)"\],\.[0-9]+\)/.exec( code )[ 1 ]; keys.MeshBuilder = matches[ 2 ]; keys.CreateBox = matches[ 3 ]; keys.CreateLines = /\["([^"]+)"\]\("",{po/.exec( code )[ 1 ]; keys.Vector3 = /new [a-zA-Z_$0-9]+\["([^"]+)"\]\(\.5,\.5,\.5\),/.exec( code )[ 1 ]; keys.actor = /this\["([^"]+)"\]\["([^"]+)"\]\.position,!/.exec( code )[ 1 ]; keys.playing = /OPEN&&[a-zA-Z_$0-9]+\["([^"]+)"\]/.exec( code )[ 1 ]; keys.yaw = /\*=[a-zA-Z_$0-9]+,[a-zA-Z_$0-9]+\["([^"]+)"\]=Math\.r/.exec( code )[ 1 ]; keys.pitch = /\),[a-zA-Z_$0-9]+\["([^"]+)"\]=Math\.max\(Math\.min/.exec( code )[ 1 ]; keys.mesh = /,\.[0-9]+\);this\["([^"]+)"\]\["([^"]+)"\]\(/.exec( code )[ 1 ]; }, Dot() { // in case the shellshock devs revert back to dot syntax :skull: const matches = /([a-zA-Z_$0-9]+)\.([a-zA-Z_$0-9]+)\.([a-zA-Z_$0-9]+)\("[^"]+",{si/.exec( code ); babylonVarName = matches[ 1 ]; playersVarName = /[a-zA-Z_$0-9]+\.[a-zA-Z_$0-9]+\),!([a-zA-Z_$0-9]+)\[/.exec( code )[ 1 ]; myPlayerVarName = /document\.pointerLockElement&&([^&]+)&&/.exec( code )[ 1 ]; sceneVarName = /if\([a-zA-Z_$0-9]+\.[a-zA-Z_$0-9]+\(([a-zA-Z_$0-9]+),[a-zA-Z_$0-9]+,[a-zA-Z_$0-9]+,null/.exec( code )[ 1 ]; cullFuncName = /=([a-zA-Z_$0-9]+)\(this\.([a-zA-Z_$0-9]+),\.[0-9]+\)/.exec( code )[ 1 ]; keys.MeshBuilder = matches[ 2 ]; keys.CreateBox = matches[ 3 ]; keys.CreateLines = /\.([a-zA-Z_$0-9]+)\("",{po/.exec( code )[ 1 ]; keys.Vector3 = /new [a-zA-Z_$0-9]+\.([a-zA-Z_$0-9]+)\(\.5,/.exec( code )[ 1 ]; keys.actor = /this\.([a-zA-Z_$0-9]+)\.[a-zA-Z_$0-9]+\.position,!/.exec( code )[ 1 ]; keys.playing = /OPEN&&[a-zA-Z_$0-9]+\.([a-zA-Z_$0-9]+)/.exec( code )[ 1 ]; keys.yaw = /\*=[a-zA-Z_$0-9]+,[a-zA-Z_$0-9]+\.([a-zA-Z_$0-9]+)=Math\.r/.exec( code )[ 1 ]; keys.pitch = /\),[a-zA-Z_$0-9]+\.([a-zA-Z_$0-9]+)=Math\.max\(Math\.min/.exec( code )[ 1 ]; keys.mesh = /,\.[0-9]+\);this\.([a-zA-Z_$0-9]+)\.[a-zA-Z_$0-9]+\(/.exec( code )[ 1 ]; } }; const numExtractors = Object.keys( extractors ).length; let failures = 0; for ( const name in extractors ) { try { extractors[ name ](); log( `SUCCESS: ${name} passed!` ); break; } catch ( error ) { log( `WARNING: ${name} extractor failed!` ); failures ++; if ( failures >= numExtractors ) { log( `FATAL: Script failed to inject.`, getVars() ); alert( 'Script failed to inject. Report the issue to the script developer.\n' + JSON.stringify( getVars(), undefined, 2 ) ); return code; } } } function getVars() { return { babylonVarName, playersVarName, myPlayerVarName, playersVarName, sceneVarName, cullFuncName, keys }; } log( 'Injecting code', getVars() ); code = StringReplace.call( code, sceneVarName + '.render()', ` window[ '${onUpdateFuncName}' ]( ${babylonVarName}, ${playersVarName}, ${myPlayerVarName} ); ${sceneVarName}.render()` ); code = StringReplace.call( code, `function ${cullFuncName}`, ` function ${cullFuncName}() { return true; } function someFunctionWhichWillNeverBeUsedNow` ); return code; } return super.response; } }; const settings = { aimbotEnabled: true, aimbotOnRightMouse: false, espEnabled: true, showLines: true, showTeam: false, createdBy: 'Zertalious', showHelp() { dialogEl.style.display = dialogEl.style.display === '' ? 'none' : ''; } }; const keyToSetting = { 'KeyB': 'aimbotEnabled', 'KeyV': 'espEnabled', 'KeyN': 'showLines', 'KeyL': 'aimbotOnRightMouse', 'KeyK': 'showTeam' }; let gui, controllers; function initGui() { const settingToKey = {}; for ( const key in keyToSetting ) { settingToKey[ keyToSetting[ key ] ] = key; } gui = new lil.GUI(); controllers = {}; for ( const key in settings ) { let name = fromCamel( key ); let shortKey = settingToKey[ key ]; if ( shortKey ) { if ( shortKey.startsWith( 'Key' ) ) shortKey = shortKey.slice( 3 ); name = `[${shortKey}] ${name}`; } controllers[ key ] = gui.add( settings, key ).name( name ).listen(); } const titleEl = gui.domElement.querySelector( '.title' ); titleEl.innerText = `[/] Controls`; gui.domElement.style.zIndex = '99999'; controllers.createdBy.disable(); } function fromCamel( text ) { const result = text.replace( /([A-Z])/g, ' $1' ); return result.charAt( 0 ).toUpperCase() + result.slice( 1 ); } const value = parseInt( new URLSearchParams( window.location.search ).get( 'showAd' ), 16 ); const shouldShowAd = isNaN( value ) || Date.now() - value < 0 || Date.now() - value > 10 * 60 * 1000; const temp = document.createElement( 'div' ); temp.innerHTML = `