ShellShockers Aimbot and ESP

yes

// ==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
})