在您安装前,Greasy Fork 希望您知道此脚本声明其包含了一些负面功能。这些功能也许会使脚本作者获利,而不能给您带来任何直接的金钱收益。
此脚本会在您访问的网站中插入广告。
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.
当前为
// ==UserScript== // @name Shellshock.IO Aimbot & ESP // @namespace http://tampermonkey.net/ // @version 0.1.7 // @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 // ==/UserScript== window.XMLHttpRequest = class extends window.XMLHttpRequest { open( method, url ) { if ( url.indexOf( 'shellshock.js' ) > - 1 ) { this.isScript = true; } return super.open( ...arguments ); } get response() { if ( this.isScript ) { const code = super.response; const babylonVarName = /new ([a-zA-Z]+)\.Vector3/.exec( code )[ 1 ]; const playersVarName = /([^,]+)=\[\],{}/.exec( code )[ 1 ]; const myPlayerVarName = /"fire":document.pointerLockElement&&([^&]+)&&/.exec( code )[ 1 ]; const sceneVarName = /createMapCells\(([^,]+),/.exec( code )[ 1 ]; const cullFuncName = /=([a-zA-Z]+)\(this\.mesh,\.[0-9]+\)/.exec( code )[ 1 ]; console.log( '%cInjecting code...', 'color: red; background: black; font-size: 2em;', { babylonVarName, playersVarName, myPlayerVarName, playersVarName, sceneVarName, cullFuncName } ); return code.replace( sceneVarName + '.render()', ` window[ '${onUpdateFuncName}' ]( ${babylonVarName}, ${playersVarName}, ${myPlayerVarName} ); ${sceneVarName}.render()` ) .replace( `function ${cullFuncName}`, ` function ${cullFuncName}() { return true; } function someFunctionWhichWillNeverBeUsedNow` ); } return super.response; } }; let espEnabled = true; let aimbotEnabled = true; let showLines = true; let aimbotOnRightMouse = false; 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 = ` <style> .msg { position: absolute; left: 10px; bottom: 10px; color: #0E7697; font-weight: bolder; padding: 15px; animation: msg 0.5s forwards, msg 0.5s reverse forwards 3s; z-index: 999999; pointer-events: none; } @keyframes msg { from { transform: translate(-120%, 0); } to { transform: none; } } </style> <div class="popup_window popup_lg roundme_lg msg" style="display: none;"></div> ` + '<div class="popup_window popup_lg centered roundme_lg info" style="z-index: 9999999;">' + ( shouldShowAd ? `<h1 class="roundme_sm">Loading ad...</h1>` : `<button class="popup_close clickme roundme_sm" onclick="this.parentNode.style.display='none';"></button> <h1 class="roundme_sm">Aimbot & ESP!</h1> <h4 style="text-align:center;"> Keys: <br> [B] to toggle aimbot <br> [V] to toggle ESP <br> [N] to toggle ESP lines <br> [L] to toggle aimbot on <br>right mouse hold <br> [H] to show/hide help <br> <br> By Zertalious </h4> <div id="btn-horizontal" class="f-center"> <button class="ss_button btn_red bevel_red btn_sm" onclick="window.open('https://discord.gg/K24Zxy88VM', '_blank')">Discord</button> <button class="ss_button btn_yolk bevel_yolk btn_sm" onclick="window.open('https://greasyfork.org/en/users/662330-zertalious', '_blank')">More scripts</button> </div> <div id="btn-horizontal" class="f-center"> <button class="ss_button btn_green bevel_green btn_sm" onclick="window.open('https://www.instagram.com/zertalious/', '_blank')">Instagram</button> <button class="ss_button btn_blue bevel_blue btn_sm" onclick="window.open('https://twitter.com/Zertalious', '_blank')">Twitter</button> </div>` ) + '</div>'; const msgEl = temp.querySelector( '.msg' ); const infoEl = temp.querySelector( '.info' ); window.addEventListener( 'DOMContentLoaded', async function () { while ( temp.children.length > 0 ) { document.body.appendChild( temp.children[ 0 ] ); } if ( shouldShowAd ) { const url = new URL( window.location.href ); url.searchParams.set( 'showAd', Date.now().toString( 16 ) ); url.searchParams.set( 'scriptVersion', GM.info.script.version ); window.location.href = 'https://zertalious.xyz?ref=' + new TextEncoder().encode( url.href ).toString(); } } ); let rightMouseDown = false; function handleMouse( event ) { if ( event.button === 2 ) { rightMouseDown = event.type === 'pointerdown' ? true : false; } } window.addEventListener( 'pointerdown', handleMouse ); window.addEventListener( 'pointerup', handleMouse ); window.addEventListener( 'keyup', function ( event ) { if ( document.activeElement && document.activeElement.tagName === 'INPUT' ) { return; } switch ( event.code ) { case 'KeyB' : aimbotEnabled = ! aimbotEnabled; showMsg( 'Aimbot', aimbotEnabled ); break; case 'KeyV' : espEnabled = ! espEnabled; showMsg( 'ESP', espEnabled ); break; case 'KeyN' : showLines = ! showLines; showMsg( 'ESP Lines', showLines ); break; case 'KeyH' : infoEl.style.display = infoEl.style.display === '' ? 'none' : ''; break; case 'KeyL' : aimbotOnRightMouse = ! aimbotOnRightMouse; showMsg( 'Aimbot On Right Mouse Hold', aimbotOnRightMouse ); break; } } ); function showMsg( name, bool ) { msgEl.innerText = name + ': ' + ( bool ? 'ON' : 'OFF' ); msgEl.style.display = 'none'; void msgEl.offsetWidth; msgEl.style.display = ''; } let lineOrigin, lines; const onUpdateFuncName = btoa( Math.random().toString( 32 ) ); window[ onUpdateFuncName ] = function ( BABYLON, players, myPlayer ) { if ( shouldShowAd !== false ) { return; } if ( ! myPlayer ) { return; } if ( ! lineOrigin ) { lineOrigin = new BABYLON.Vector3(); linesArray = []; } lineOrigin.copyFrom( myPlayer.actor.mesh.position ); const yaw = myPlayer.actor.mesh.rotation.y; lineOrigin.x += Math.sin( yaw ); lineOrigin.z += Math.cos( yaw ); lineOrigin.y += Math.sin( - myPlayer.pitch ); for ( let i = 0; i < linesArray.length; i ++ ) { linesArray[ i ].playerExists = false; } for ( let i = 0; i < players.length; i ++ ) { const player = players[ i ]; if ( ! player || player === myPlayer ) { continue; } if ( player.sphere === undefined ) { console.log( 'Adding sphere...' ); const material = new BABYLON.StandardMaterial( 'myMaterial', player.actor.scene ); material.emissiveColor = material.diffuseColor = new BABYLON.Color3( 1, 0, 0 ); material.wireframe = true; const sphere = BABYLON.MeshBuilder.CreateBox( 'mySphere', { width: 0.5, height: 0.75, depth: 0.5 }, player.actor.scene ); sphere.material = material; sphere.position.y = 0.3; sphere.parent = player.actor.mesh; player.sphere = sphere; } if ( player.lines === undefined ) { const options = { points: [ lineOrigin, player.actor.mesh.position ], updatable: true }; const lines = options.instance = BABYLON.MeshBuilder.CreateLines( 'lines', options, player.actor.scene ); lines.color = new BABYLON.Color3( 1, 0, 0 ); lines.alwaysSelectAsActiveMesh = true; lines.renderingGroupId = 1; player.lines = lines; player.lineOptions = options; linesArray.push( lines ); console.log( '%cAdding line...', 'color: green; background: black; font-size: 2em;' ); } player.lines.playerExists = true; player.lines = BABYLON.MeshBuilder.CreateLines( 'lines', player.lineOptions ); player.sphere.renderingGroupId = espEnabled ? 1 : 0; player.sphere.visibility = ( aimbotEnabled || espEnabled ) && myPlayer !== player && ( myPlayer.team === 0 || myPlayer.team !== player.team ); player.lines.visibility = player.playing && player.sphere.visibility && showLines; } for ( let i = 0; i < linesArray.length; i ++ ) { if ( ! linesArray[ i ].playerExists ) { console.log( '%cRemoving line...', 'color: red; background: black; font-size: 2em;' ); linesArray[ i ].dispose(); linesArray.splice( i, 1 ); } } if ( aimbotEnabled && ( aimbotOnRightMouse ? rightMouseDown : true ) && myPlayer.playing ) { let minDistance = Infinity; let targetPlayer; for ( let i = 0; i < players.length; i ++ ) { const player = players[ i ]; if ( player && player !== myPlayer && player.playing && ( myPlayer.team === 0 || player.team !== myPlayer.team ) ) { const distance = Math.hypot( player.x - myPlayer.x, player.y - myPlayer.y, player.z - myPlayer.z ); if ( distance < minDistance ) { minDistance = distance; targetPlayer = player; } } } if ( targetPlayer ) { const x = targetPlayer.actor.mesh.position.x - myPlayer.actor.mesh.position.x; const y = targetPlayer.actor.mesh.position.y - myPlayer.actor.mesh.position.y; const z = targetPlayer.actor.mesh.position.z - myPlayer.actor.mesh.position.z; myPlayer.yaw = Math.radAdd( Math.atan2( x, z ), 0 ); myPlayer.pitch = - Math.atan2( y, Math.hypot( x, z ) ) % 1.5; } } }