// ==UserScript==
// @name ShellShockers Aimbot and ESP
// @namespace http://tampermonkey.net/
// @version 0.1
// @description yes
// @author PacyTense
// @match *://shellshock.io/*
// @run-at document-start
// @grant none
// @noframes
// ==/UserScript==
window.settings = {
blueTeam: "#4254f5",
redTeam: "#eb3326",
orangeTeam: "#fca503",
aimbotKey: "ShiftLeft",
angleOrDistance: true,
aimbotSmoothness: 2,
maxAngle: 3,
fov: 1.25,
}
window.aimbotToggled = false;
window.addEventListener('keydown', function(e){
if(e.code == window.settings.aimbotKey){
window.aimbotToggled = true;
}
})
window.addEventListener('keyup', function(e){
if(e.code == window.settings.aimbotKey){
window.aimbotToggled = false;
}
})
window.dist3d = (player1, player2)=>{return Math.sqrt((player1.x-player2.x)**2 + (player1.y-player2.y)**2 + (player1.z-player2.z)**2)};
window.angleDistance =(player1, player2)=>{
let angle = window.getAngle(player1, player2);
const angleDist = Math.sqrt((player1.yaw - angle.yaw)**2 + (player1.pitch - angle.pitch)**2);
return angleDist*window.dist3d(player1, player2);
}
window.getNearestPlayer = function(us, enemies){
let nearestPlayer = {distance: null, player: null} //we leave it empty to start
enemies.forEach(them=>{
if(them){ //sometimes a glitched player slips thorugh, so lets make sure they are valid before we do anything
if(them.id != us.id){ //our own player is in here, so lets make sure to filter it out
if(them.hp > 0 && them.playing && (!us.team || (us.team != them.team)) && window.visiblePlayers[them.id]){
//firstly lets make sure they arent dead hp > 0, then make sure they are playing and not spectating
//then lets check if our team is equal to their team
//one thing to note, in FFA both our teams are 0, so it would never run cause it would think we are on their team
//so what we do is if(us.team) will return false for team = 0 and true for team != 0
// so it is effectivly if our team is 0 (FFA) or our team isnt equal to their team```
let distance = 999;
if(window.settings.angleOrDistance){
distance = window.angleDistance(us,them) || 0;
}else{
distance = window.dist3d(us,them) || 0;
}
if( !nearestPlayer.distance || distance < nearestPlayer.distance ){
nearestPlayer.distance = distance;
nearestPlayer.player = them;
}
}
}
}
})
if(nearestPlayer.player){
return nearestPlayer;
}
return null;
}
window.calcAngle = function(us, them, dist){
let delta = {x: them.x - us.x + 2*(them.dx * dist / us.weapon.subClass.velocity),
y: them.y-us.y - 0.072,
z: them.z - us.z + 2*(them.dz * dist / us.weapon.subClass.velocity)
};
delta = new BABYLON.Vector3(delta.x, delta.y, delta.z).normalize();
const newYaw = Math.radRange(-Math.atan2(delta.z, delta.x) + Math.PI / 2)
const newPitch = Math.clamp(-Math.asin(delta.y), -1.5, 1.5);
us.pitch += ((newPitch || 0)-us.pitch)/window.settings.aimbotSmoothness;
us.yaw += ((newYaw || 0)-us.yaw)/window.settings.aimbotSmoothness;
return 0;
}
window.getAngle = function(us, them){
let delta = {x: them.x - us.x ,
y: them.y-us.y - 0.072,
z: them.z - us.z,
};
delta = new BABYLON.Vector3(delta.x, delta.y, delta.z).normalize();
const newYaw = Math.radRange(-Math.atan2(delta.z, delta.x) + Math.PI / 2)
const newPitch = Math.clamp(-Math.asin(delta.y), -1.5, 1.5);
return {pitch: newPitch || 0, yaw: newYaw || 0};
}
//aimbot function
window.otherPlayer;
window.myPlayer;
window.espColourSettings = function(that){
if(that.player.team==1){
that.bodyMesh.overlayColor = hexToRgb(window.settings.blueTeam);
}else if(that.player.team==2){
that.bodyMesh.overlayColor = hexToRgb(window.settings.redTeam);
}else{
that.bodyMesh.overlayColor = hexToRgb(window.settings.orangeTeam);
}
that.bodyMesh.setRenderingGroupId(1);
}
window.doAimbot = (ourPlayer,otherPlayers)=>{
if(!window.aimbotToggled){return};
if(!window.myPlayer){
otherPlayers.forEach(player=>{
if(player){
if(player.ws){
window.myPlayer = player;
}}
})
};
//loop through other palyers
let nearest = window.getNearestPlayer(ourPlayer, otherPlayers);
if(nearest){
//console.log(nearest.name);
calcAngle(window.myPlayer, nearest.player, nearest.distance)
}
};
window.visiblePlayers = {};
//The game Does hack check, where if a hack is detected, it sets ur uuid to 255 which stiops u from doing damage
//what we do here is redefine the varaible to always return 0 so they can never flag us hehehe
Object.defineProperty(window, "uuid", {get: ()=>{return 0}});
//stuff from here on is code used to extract code from the games code, trippy right?
const request = url => fetch(url).then(res => res.text());
const injectInline = (data) => {
let s = document.createElement('script');
s.type = 'text/javascript';
s.innerText = data;
document.getElementsByTagName('head')[0].appendChild(s);
}
window.hexToRgb =(hex)=>{
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16)/255,
g: parseInt(result[2], 16)/255,
b: parseInt(result[3], 16)/255,
a: 1,
} : null;
}
const attemptPatch = (source) => {
const patches = new Map()
//we get a copy of theg games code, and search for specific location. We found our player stuff and then call our external function where we can run our aimbot logic!
.set("RENDERHOOK", [/var (\w+)=([a-zA-Z$]+)\(this\.mesh,\.(\d+)\);/, "rep = `var ${match[1]} = ${match[2]}(this.mesh,.31);window.visiblePlayers[this.player.id]=${match[1]};${match[1]}=true;this.bodyMesh.renderOverlay = !0;window.espColourSettings(this);`", true])
.set("PLAYERHOOK", [/if\([^(\/.,)]+\)([^(\/.,)]+)\.actor\.update\([^(\/.,)]+\);/, false])
.set("ENEMYHOOK", [/var [^(\/.,=]+\=([^(\/.,\[\]]+)\[[^(\/.,\[\]]\];[^(\/.,=&]+\&\&\([^(\/.,=]+\.chatLineCap/, false])
.set("AIMBOTHOOK", [/[^(\/.,]+\([^(\/.,]+,[^(\/.,]+\/\d+\),[^(\/.,]+\.runRenderLoop\(\(function\(\)\{/, "rep = `${match[0]}window.doAimbot(${variables.PLAYERHOOK[1]}, ${variables.ENEMYHOOK[1]});`", true])
variables = {};
for (const [name, item] of patches) {
let match = source.match(item[0]);
if(!item[1]){
if(match){
variables[name] = match;
}else{
alert(`Failed to variable ${name}`);
continue;
}
}else{
let rep;
try{
eval(item[1]);
}catch(e){
alert(`Failed to patch ${name}`);
continue;
}
console.log(rep);
const patched = source.replace(item[0], rep);
if (source === patched) {
alert(`Failed to patch ${name}`);
continue;
} else console.log("Successfully patched ", name);
source = patched;
}
}
return source;
}
(async function() {
let script = await request(`https://shellshock.io/src/shellshock.min.js`);
console.log(script);
injectInline(attemptPatch(script)) //modify the games code and then apply it :))
})();
//using a mutation observer oooohhh fancy ik! we can detect scripts before they run and patch them.
let observer = new MutationObserver(mutations => {
for (const mutation of mutations) {
for (let node of mutation.addedNodes) {
if (node.tagName == 'HEAD') {
} else if (node.tagName == 'SCRIPT' && node.src.includes("shellshock.min.js")) {
node.outerHTML = ``
//or we can make it point towards our own custom JS file...
//node.src = "https://ourFileLocation/code.js"
}
}
}
});
observer.observe(document, {
childList: true,
subtree: true
})