// ==UserScript==
// @name Shellshock.IO Aimbot & ESP
// @namespace http://tampermonkey.net/
// @version 0.0.5
// @description Locks aim to the nearest player in shellshock.io. Comes with an ESP too. Press B, V, N to toggle aimbot, esp, esp lines.
// @author Zertalious (Zert)
// @match *://shellshock.io/*
// @icon https://www.google.com/s2/favicons?domain=shellshock.io
// @grant none
// ==/UserScript==
window.espEnabled = true;
window.aimbotEnabled = true;
window.showLines = true;
window.addEventListener( 'keyup', function ( event ) {
switch ( String.fromCharCode( event.keyCode ) ) {
case 'B' :
window.aimbotEnabled = ! window.aimbotEnabled;
break;
case 'V' :
window.espEnabled = ! window.espEnabled;
break;
case 'N' :
window.showLines = ! window.showLines;
break;
}
} );
Node.prototype.appendChild = new Proxy( Node.prototype.appendChild, {
apply( target, thisArgs, [ script ] ) {
if ( script.tagName === 'SCRIPT' ) {
const code = script.innerHTML;
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/.exec( code )[ 1 ];
console.log( '%cInjecting code...', 'color: red; background: black; font-size: 2em;', {
babylonVarName,
playersVarName,
myPlayerVarName,
playersVarName,
sceneVarName,
cullFuncName
} );
script.innerHTML = code.replace( sceneVarName + '.render()', `( function () {
const players = ${playersVarName};
const myPlayer = ${myPlayerVarName};
const BABYLON = ${babylonVarName};
if ( ! myPlayer ) {
return;
}
if ( ! window.lineOrigin ) {
window.lineOrigin = new BABYLON.Vector3();
}
window.lineOrigin.copyFrom( myPlayer.actor.mesh.position );
const yaw = myPlayer.actor.mesh.rotation.y;
window.lineOrigin.x += Math.sin( yaw );
window.lineOrigin.z += Math.cos( yaw );
window.lineOrigin.y += Math.sin( - myPlayer.pitch );
for ( let i = 0; i < players.length; i ++ ) {
const player = players[ i ];
if ( ! player || player === myPlayer ) {
continue;
}
if ( player.sphere === undefined ) {
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: [ window.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;
}
player.lines = BABYLON.MeshBuilder.CreateLines( 'lines', player.lineOptions );
player.sphere.renderingGroupId = window.espEnabled ? 1 : 0;
player.sphere.visibility = ( window.aimbotEnabled || window.espEnabled ) && myPlayer !== player && ( myPlayer.team === 0 || myPlayer.team !== player.team );
player.lines.visibility = player.playing && player.sphere.visibility && window.showLines;
}
if ( window.aimbotEnabled && 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.mod( Math.atan2( x, z ), Math.PI2 );
myPlayer.pitch = - Math.atan2( y, Math.hypot( x, z ) ) % 1.5;
}
}
} )(); ${sceneVarName}.render()` )
.replace( `function ${cullFuncName}`, `
function ${cullFuncName}() {
return true;
}
function someFunctionWhichWillNeverBeUsedNow` )
.replace( 'remove=function(){this.mesh.dispose()', `remove=function(){
console.log( '%cDisposing player...', 'color: green; background: black');
if ( this.lines ) {
this.lines.dispose();
}
this.mesh.dispose()` );
}
return Reflect.apply( ...arguments );
}
} );
const temp = document.createElement( 'div' );
temp.innerHTML = `<div class="popup_window popup_lg centered roundme_lg">
<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;">
[B] to toggle aimbot
<br>
[V] to toggle ESP
<br>
[N] to toggle ESP lines
<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>`;
document.body.appendChild( temp.children[ 0 ] );