Starve.io AIMBOT

try to take over the world!

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         Starve.io AIMBOT
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       Hunter Mikesell
// @match        https://starve.io/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const injectInline = (data) => {
        let s = document.createElement('script');
        s.type = 'text/javascript';
        s.innerText = data;
        document.getElementsByTagName('head')[0].appendChild(s);
    }



    const request = url => fetch(url).then(res => res.text());

    const hack = `
(function(){
const canvas = document.getElementById('game_canvas');
      const ctx = canvas.getContext('2d');
      console.log('WHAT THE FUCK', CanvasRenderingContext2D.prototype.fillRect);
      const old = CanvasRenderingContext2D.prototype.fillRect;
        window.CanvasRenderingContext2D.prototype.fillRect = function(){
            old.apply(this,arguments);
    	    if(arguments.callee.caller.toString().length===19295 && window.Utils.hacks.ESP.enabled){
                if(r && r.oOol.length > 0){
                    const myPlayer = r.oOol[p.olo0];
                    const myPosition = {x: p.LOL.x + myPlayer.x, y: p.LOL.y + myPlayer.y};
                    r.oOol.forEach(entity => {
                        if(entity){
                            if(entity.type === 0){
                                if(entity!=myPlayer){
                                    console.log(entity);
                                    const theirPosition = {x:entity.x-myPlayer.x,y:entity.y-myPlayer.y};
                                    ctx.font = "15px Arial";
                                    ctx.strokeText(entity.oooo.loOO, myPosition.x+theirPosition.x-20, myPosition.y+theirPosition.y-50);
                                    ctx.beginPath();
                                    ctx.moveTo(myPosition.x, myPosition.y);
                                    ctx.strokeStyle = '#ff08c5';
                                    ctx.lineTo(myPosition.x+theirPosition.x, myPosition.y+theirPosition.y);
                                    ctx.stroke();
                                };
                            };
                        };
                    });
                };
                return;
    	    };
        };
const dist2d=(p1, p2)=>{
return Math.sqrt((p1.x-p2.x)**2 + (p1.y-p2.y)**2);
};
const calcAngle = (p1, p2) => {
var dy = p2.y - p1.y;
var dx = p2.x - p1.x;
var theta = Math.atan2(dy, dx);
return theta;
};
const getNearest=(us, them)=>{
const nearestEntity = {player: null, dist:null};
them.forEach(player=>{
const dist = dist2d(us, player);
if(!nearestEntity.dist || dist < nearestEntity.dist){
nearestEntity.dist = dist;
nearestEntity.player = player;
};
});
if(nearestEntity.player){
return nearestEntity.player;
};
return null;
};
let lastRefresh = performance.now();
const oldAnimFrame = window.requestAnimationFrame;
window.requestAnimationFrame = function(){
const now = performance.now();
if(now-lastRefresh > 1000/60 && p){
lastRefresh = now;
if(r && r.oOol.length > 0){
let entities = [];
const myPlayer = r.oOol[p.olo0];
r.oOol.forEach(entity => {
if(entity){
if(entity.type === 0){
if(entity!=myPlayer){
entities.push(entity);
};
};
};
});
if(myPlayer){
const nearest = getNearest(myPlayer, entities);
if(nearest){
const angle = calcAngle(myPlayer, nearest);
if(angle){
myPlayer.angle = angle;
window.overrideC= true;
window.newC = angle;
}else{
window.overrideC= false;
window.newC = null;
};
}else{
window.overrideC= false;
window.newC = null;
};
}else{
window.overrideC= false;
window.newC = null;
};
};
};
return oldAnimFrame.apply(this,arguments);
};
})();
`
    const theme_ = {
        name: "Custom By Cryo",
        colors: {
            menuBarBackground: 'rgb(35, 35, 35)',
            menuBarText: 'rgb(197, 41, 156)',
            panelBackground: 'rgb(28, 28, 27)',

            componentBackground: 'rgb(45, 41, 38)',
            componentBackgroundHover: 'rgb(233, 75, 60)',
            componentForeground: 'rgb(45, 168, 216)',
            componentActive: 'rgb(233, 75, 60)',

            textPrimary: 'rgb(206, 74, 126)',
            textSecondary: 'rgb(252, 246, 245)',
            textHover: 'rgb(235, 235, 235)',
            textActive: 'rgb(233, 75, 60)',
        },
    }

    window.Utils = {
        initUI: ()=>{
            let container = document.body;
            let gui = new guify({
                title: '🌜Cryogenic Client v0.1🌜',
                theme: theme_,
                align: 'right', // left, right
                width: 300,
                barMode: 'none',
                panelMode: 'none',
                opacity: 0.95,
                root: window.container,
                open: Utils.hacks.MENU.enabled
            });

            gui.Register({
                type: 'folder',
                label: 'Hacks',
                open: true
            });

            // Add to the folder example
            gui.Register([

                {
                    type: 'title',
                    label: 'ESP'
                },
                {
                    type: 'checkbox',
                    label: 'ESP',
                    object: Utils.hacks.ESP,
                    property: 'enabled',
                    onChange: (data) => {
                        Utils.hacks.ESP.enabled = data;
                    }
                },

                {
                    type: 'title',
                    label: 'AIMBOT'
                },

                {
                    type: 'checkbox',
                    label: 'Aimbot',
                    object: Utils.hacks.AIMBOT,
                    property: 'enabled',
                    onChange: (data) => {
                        Utils.hacks.AIMBOT.enabled = data;
                    }
                },

                {
                    type: 'checkbox',
                    label: 'Toggle on Press',
                    object: Utils.hacks.AIMBOT,
                    property: 'toggle',
                    onChange: (data) => {
                        Utils.hacks.AIMBOT.toggle = data;
                    }
                },


                {
                    type: 'title',
                    label: 'Key Binds'
                },

                { type: 'button', label: 'Set Aimbot Key',  action: (data) => {
                    Utils.controls.setKeyBind('AIMBOT');
                }},

                { type: 'button', label: 'Set ESP Key',  action: (data) => {
                    Utils.controls.setKeyBind('ESP');
                }},

                { type: 'text', label: 'Aimbot', object: Utils.hacks.AIMBOT, property: "key",
                 onChange: (data) => {
                     Utils.hacks.AIMBOT.key = data;
                 } },

                { type: 'text', label: 'ESP', object: Utils.hacks.ESP, property: "key",
                 onChange: (data) => {
                     Utils.hacks.ESP.key = data;
                 } },

                {
                    type: 'title',
                    label: 'Credits / Help'
                },

                {
                    type: 'button',
                    label: 'My Discord',
                    action: () => {
                    }
                },

            ], {
                folder: 'Hacks'
            });
        },


        controls: null,

        controller: class{

            constructor(){

                document.addEventListener('keydown', (e)=>{
                    const objectKeys = Object.keys(Utils.hacks);
                    objectKeys.forEach(hackKEY=>{
                        const hack = Utils.hacks[hackKEY];
                        if(hack.key === e.code && hack.toggle == true){
                            hack.enabled = !hack.enabled;
                        }
                        if(hack.key === e.code && hack.toggle != true){
                            hack.enabled = true;
                        }
                    })
                });

                document.addEventListener('keyup', (e)=>{
                    const objectKeys = Object.keys(Utils.hacks);
                    objectKeys.forEach(hackKEY=>{
                        const hack = Utils.hacks[hackKEY];
                        if(hack.key === e.code && hack.toggle != true){
                            hack.enabled = false;
                        }
                    })
                });
            }

            setKeyBind(callback){
                Utils.hacks[callback].key = "Press any key";
                let click = 0;
                document.addEventListener('keydown', function abc(event) {
                    click++;
                    if (click >= 1) {
                        Utils.hacks[callback].key = event.code;
                        document.removeEventListener('keydown', abc);
                        Utils.saveSettings();
                    }
                });
            }
        },


        saveSettings: ()=>{
            localStorage.setItem('keybinds', JSON.stringify(Utils.hacks));
        },

        loadSettings: ()=>{
            const SAVEDDATA = localStorage.getItem('keybinds');
            if(SAVEDDATA){
                if(Object.keys(JSON.parse(SAVEDDATA)).length != Object.keys(Utils.hacks).length){return}
                Utils.hacks = JSON.parse(SAVEDDATA);
                return JSON.parse(SAVEDDATA);
            }else{
            }

        },

        hacks: {
            'ESP': {key: 'KeyF', enabled: true, toggle: true},
            'AIMBOT': {key: 'KeyG', enabled: true, toggle: false},
            'MENU': {key: 'KeyP', enabled: false, toggle: false},
        },

        LoadHack: ()=>{
            Utils.loadSettings();
            Utils.controls = new Utils.controller();
            document.addEventListener("DOMContentLoaded", function(){
                let script = document.createElement('script');
                script.onload = function () {
                    Utils.initUI();
                    document.getElementsByClassName('guify-panel-container_1PomWg')[0].style.borderRadius = "3px";
                    document.getElementsByClassName('guify-panel-toggle-button_1PomWg')[0].style.opacity = '0';

                };
                script.src = "https://unpkg.com/[email protected]/lib/guify.min.js";

                document.body.appendChild(script);
            });


        }
    }

    Utils.LoadHack();
    const hack2 = `if(window.overrideC && Utils.hacks.AIMBOT.enabled){
          c = window.newC;
      };`

    const attemptPatch = (source) => {
        const patches = new Map()

        .set("HACKLOGIC", [/document\[\w+\[\d+\]\]\("[\\a-zA-Z0-9]*"\)\[\w+\[\d+\]\]="[\\a-zA-Z0-9]*"\);\};/, hack, true])
        .set("HACKSETTER", [/\w+=!1;this\.[a-zA-Z0-9]+\+=\w+;/, hack2, true])

        let variables = {};

        for (const [name, item] of patches) {
            let match = source.match(item[0]);

            const patched = source.replace(item[0], match[0]+item[1]);
            if (source === patched) {
                alert(`Failed to replace ${name}`);
                continue;
            } else console.log("Successfully patched ", name);
            source = patched;
        }

        return source;
    }

    (async function() {
        let script = await request(`https://starve.io/js/c6.js`);
        injectInline(attemptPatch(script))
    })();

    let observer = new MutationObserver(mutations => {
        for (const mutation of mutations) {
            for (let node of mutation.addedNodes) {
                if(node.src && node.src.match('https://starve.io/js/c6.js')){
                    node.outerHTML = ``
                    node.innerHTML = ``;
                    node.src='';
                }

            }
        }
    });

    observer.observe(document, {
        childList: true,
        subtree: true
    })
})();