ShellShockers Aimbot and ESP

yes

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

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