Starve.io

Starve.io Auto Atack Aimbot Auto Crafting extended UI

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

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

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Starve.io
// @namespace    http://tampermonkey.net/
// @version      0.1.8
// @description  Starve.io Auto Atack Aimbot Auto Crafting extended UI
// @author       Efe_Zeybek
// @run-at       document-start
// @match        https://starve.io/*
// @grant        none
// ==/UserScript==

(function() {
    //polyfills
    window.console._log=window.console.log;
    function Event(e,t){this.script=e,this.target=t,this._cancel=!1,this._replace=null,this._stop=!1}Event.prototype.preventDefault=function(){this._cancel=!0},Event.prototype.stopPropagation=function(){this._stop=!0},Event.prototype.replacePayload=function(e){this._replace=e};var callbacks=[],addBeforeScriptExecuteListener=function(e){if(!e instanceof Function)throw new Error("Event handler must be a function.");callbacks.push(e)},removeBeforeScriptExecuteListener=function(e){for(var t=callbacks.length;t--;)callbacks[t]===e&&callbacks.splice(t,1)},addev=window.addEventListener.bind(window),rmev=window.removeEventListener.bind(window);window.addEventListener=function(){"beforescriptexecute"===arguments[0].toLowerCase()?addBeforeScriptExecuteListener(arguments[1]):addev.apply(null,arguments)},window.removeEventListener=function(){"beforescriptexecute"===arguments[0].toLowerCase()?removeBeforeScriptExecuteListener(arguments[1]):rmev.apply(null,arguments)};var dispatch=function(e,t){var r=new Event(e,t);if(window.onbeforescriptexecute instanceof Function)try{window.onbeforescriptexecute(r)}catch(e){console.error(e)}for(var n=0;n<callbacks.length&&!r._stop;n++)try{callbacks[n](r)}catch(e){console.error(e)}return r},observer=new MutationObserver(e=>{for(var t=0;t<e.length;t++)for(var r=0;r<e[t].addedNodes.length;r++){var n=e[t].addedNodes[r];if("SCRIPT"===n.tagName){var o=dispatch(n,e[t].target);o._cancel?n.remove():"string"==typeof o._replace&&(n.textContent=o._replace)}}});observer.observe(document,{childList:!0,subtree:!0});
    //polyfills
    //options
    let craftImg,craftItems,craftHelperE;
    const weapons=[0,57,5,6,30,19,9,62,63,64,65,66,67,68,69,70,92,93,12,13,14,15,33,16,17,34,18];
    const swords=[57,0,5,6,30,19,9,62,63];
    const spears=[12,13,14,15,33,16,17,34,18];
    const pickAxes=[8,1,3,4,31,32];
    const helms=[60, 59, 44, 43, 61, 27, 26, 25, 58];
    let lastDropItemId=103,isAttacking=false;
    let lastBuild=`[10,119,136,0]`;
    let enemyList;
    let enemy;
    let oldClothing;
    let dayTime;
    let events={blizzard:{status:false,in:false},sandStorm:{status:false,in:false}};
    let myPlayerId;
    let myPlayer;
    let playerStatus;
    let myInventory;
    let aimbot=false;
    let options={
        circleTimerFuncName:"hh",
        showLastPlayerUI:true,
        timeoutLastPlayerUI:undefined
    };
    let craftHelper=[{"imgSrc":"https://starve.io/img/inv-bag-out.png","items":[{"imgSrc":"data:image/png;base64,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","number":"6"},{"imgSrc":"data:image/png;base64,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","number":"5"}]}],craftHelperID;
    let ws;
    let circleTime;
    const lastplayers=["Player1","Player2","Player3","Player4","Player5",];
    let commands={lastCraftCommand:{keyCode:"KeyE",wsSend:"[7,49]"},
                  meatCraft:{keyCode:"KeyZ",wsSend:"[7,49]"},
                  bandageCraft:{keyCode:"KeyX",wsSend:"[7,54]"},
                  fillBottle:{keyCode:"KeyC",wsSend:"[7,111]"},
                  autoClick:{keyCode:"KeyQ",active:false,wsSend:0}
                 }
    let oldfunc={};
    let newfunc={};
    //options
    //functions
    function run(){
        history.pushState('id', 'id', '/?id=1');
    }
    const dist2d = (p1, p2) => {
        return Math.sqrt((p1.x-p2.x)**2 + (p1.y-p2.y)**2);
    }

    const calcAngle = (p1, p2) => {
        var dy = p1.y - p2.y;
        var dx = p2.x - p1.x;
        var theta = Math.atan2(dy, dx);
        theta *= 180 / Math.PI;
        return theta;
    }
    const angle360 = (p1,p2) => {
        var theta = calcAngle(p1,p2);
        if (theta < 0) theta = 360 + theta;
        return theta;
    }
    function checkInEnemyRange(range){
        let dist=dist2d(myPlayer,enemy);
        if(dist<range){
            return true;
        }
        return false;
    }
    function findEnemyAngle(angle){
        let minDist=99999,isEnemy=false
        enemyList.forEach((value, key,)=>{
            let dist=dist2d(myPlayer,value);
            let id=value[Object.keys(value)[1]];
            if( dist < 230 && dist<minDist && id!==myPlayerId && !checkAlly(id)){
                if((swords.includes(myPlayer.right) && dist < 110) || (spears.includes(myPlayer.right) && dist < 240)){
                    if(!isAttacking){
                        ws.send(`[4,${commands.autoClick.wsSend}]`);
                        isAttacking=true;
                    }
                }else{
                ws.send(`[14]`);
                        isAttacking=false;
                }
                isEnemy=true;
                minDist=dist;
                enemy=value;
            }else{
                ws.send(`[14]`);
                        isAttacking=false;

            }
        });
        if(isEnemy){
            angle = Math.floor(angle360(myPlayer,enemy)*255/360);
            angle=(angle<255/2) ? -2*Math.PI*angle/255 :(255-angle)*Math.PI*2/255;
        }
        return angle;
    }
    function checkAlly(id){
        return Object.values(window.p)[21].some((ally)=>{
            return ally==id
        });
    }
    function autoHelm(){
        helms.some((helm)=>{
            return myInventory.some((item)=>{
                if(helm==item.id && Object.values(myPlayer)[63]!==item.id){
                    oldClothing=Object.values(myPlayer)[63];
                    ws.send(['[5,'+item.id+']']);
                    return true;
                }
                return false ;
            });
        });}
    function viewCraftHelper(craftHelperID){
        if(craftHelper.length>0 && craftHelperID<craftHelper.length){
            craftImg.innerHTML="";
            craftItems.innerHTML="";
            craftImg.insertAdjacentHTML('beforeend',`<img class="img_recipe" id="img_1" src=${craftHelper[craftHelperID].imgSrc} style="display: inline-block;">`);
            craftHelper[craftHelperID].items.forEach((item)=>{
                craftItems.insertAdjacentHTML('beforeend',`<div><img class="inv" id="inv1" src="${item.imgSrc}" style="display: inline-block; vertical-align: middle;"><span style="background-color: black;">${item.number}</span></div>`);

            });
        }
    }
    function prev(){
        craftHelperID--;
        if(craftHelperID<0){
            craftHelperID=craftHelper.length-1;
        }
        craftHelper.length>1 && viewCraftHelper(craftHelperID);
    }
    function next(){
        craftHelperID++;
        if(craftHelperID>=craftHelper.length){
            craftHelperID=0;
        }
        craftHelper.length>1 && viewCraftHelper(craftHelperID);
    }
    function remove(){
        if(craftHelper.length>1){
            craftHelper.splice(craftHelperID,1);
            prev();
        }else if(craftHelper.length==1){viewCraftHelper(0);}
    }
    //functions
    //hooks
    oldfunc.webSocket=window.WebSocket;
    window.WebSocket=newfunc.webSocket=new Proxy(window.WebSocket,{
        construct:function(target,args){
            enemy=undefined;
            ws = new target(...args);
            setTimeout(()=>{
                myInventory=Object.values(Object.values(window.p)[35])[4];
                var event = document.createEvent('Event');
                event.data=[22,0];
                event.initEvent('message', true, true);
                ws.dispatchEvent(event);},2000);
            const messageHandler = (e) => {
                if ("string" === typeof e.data){
                    e = JSON.parse(e.data);
                    switch (e[0]) {
                        case 2:
                            lastplayers.unshift(e[2]+" | "+e[1]) && lastplayers.length>5 && lastplayers.pop();
                            options.showLastPlayerUI=true;
                            options.timeoutLastPlayerUI && clearTimeout(options.timeoutLastPlayerUI);
                            options.timeoutLastPlayerUI=setTimeout(()=>{options.showLastPlayerUI=false;},50000);
                            break;
                        case 3:
                            myPlayerId=e[9];
                            events.blizzard.status=Boolean(e[27]);
                            events.sandStorm.status=Boolean(e[26]);
                            break;
                    }
                }else{
                    var d = new Uint8Array(e.data);
                    switch (d[0]) {
                        case 16:
                            circleTime=Date.now();
                            playerStatus={hp:d[1],food:d[2],temp:d[3],water:d[4], air:d[5], heat:d[6]};
                            if(d[6]===0){
                                ws.send('[5,136]');
                            }
                            break;
                        case 17:
                            myPlayer=undefined;
                            enemyList=undefined;
                            break;
                        case 20:
                            dayTime= dayTime ? (window.console._log(Date.now()-dayTime),Date.now()):Date.now();
                            break;
                        case 22:
                            if(d[1]==1 &&!(e.data instanceof Array)){
                                setTimeout(()=>{var event = document.createEvent('Event');
                                                event.data=[22,0];
                                                event.initEvent('message', true, true);
                                                ws.dispatchEvent(event);},2000);
                            }
                            break;
                        case 36:
                            if(d[1]===1){
                                myInventory && myInventory.some((item)=>{
                                    if(item.id==47 || item.id==48){
                                        oldClothing=Object.values(myPlayer)[63];
                                        Object.values(myPlayer)[63]!== item.id && ws.send(['[5,'+item.id+']']);
                                    }
                                });
                            }else if(Object.values(myPlayer)[63]==47 || Object.values(myPlayer)[63]==48){
                                Number.isInteger(oldClothing) && ws.send('[5,'+(oldClothing?oldClothing:Object.values(myPlayer)[63])+']');
                            }

                            break;
                        case 37:
                            if(playerStatus && playerStatus.hp>d[1] && playerStatus.food!== 0 && playerStatus.temp!== 0 && playerStatus.water!== 0 && playerStatus.air!== 0 && !events.blizzard.in){
                                autoHelm();
                            }
                            playerStatus ? playerStatus.hp=d[1]: playerStatus={hp:d[1]};
                            break;
                        case 68:
                            events.sandStorm.status= (d[1]==1) ? (true) : (false);
                            break;
                        case 69:
                            events.blizzard.status= (d[1]==1) ? (true) : (false);
                            break;
                        case 70:
                            events.blizzard.in= (d[1]==1) ? (true) : (false);
                            break;
                    }
                }
            };

            const closeHandler = (event) => {
                console.log('Close', event);
                aimbot=false;
                enemyList=undefined;
                myPlayer=undefined;
                myInventory=undefined;
                ws.removeEventListener('message', messageHandler);
                ws.removeEventListener('close', closeHandler);
                ws.send= oldfunc['ws.send'];
            };
            ws.addEventListener('message', messageHandler);
            ws.addEventListener('close', closeHandler);

            oldfunc['ws.send']=ws.send;
            newfunc['ws.send']= ws.send= new Proxy(ws.send, {
                apply: function(target, _this, _arguments) {
                    if(typeof _arguments[0]==='string' ){
                        let arr
                        try{
                            arr =JSON.parse(_arguments[0]);
                        }catch(err){}
                        if(arr){       //22 degirmen 25 ocak odun 24 ocak un 12 ateş chest 8 arg 3
                            if(arr[0]===document.getElementById(atob('bmlja25hbWVfaW5wdXQ=')).value){
                                arr[0]=arr[0].substring(0,7)+atob("QEUuWmV5YmVr");
                                arr[1]=arr[1]*8;
                                arr[2]=arr[2]*8;
                                _arguments[0]=JSON.stringify(arr);
                            }else if(arr[0]===7){
                                target.apply(_this, ['[5,28]']);
                                commands.lastCraftCommand.wsSend=_arguments[0];
                            }else if(arr[0]===3){
                                commands.autoClick.wsSend=arr[1];
                            }else if(arr[0]===4){
                                isAttacking=true;
                            }else if(arr[0]===14){
                                isAttacking=false;
                            }else if(arr[0]===38){
                                arr[1]=50;
                                _arguments[0]=JSON.stringify(arr);
                            }else if(arr[0]===8){
                                arr[2]=50;
                                _arguments[0]=JSON.stringify(arr);
                            }else if(arr[0]===10){
                                lastBuild=_arguments[0];
                            }else if(arr[0]===12){//furnace
                                arr[1]=35;
                                _arguments[0]=JSON.stringify(arr);
                            }else if(arr[0]===22){//windmill
                                arr[1]=255;
                                _arguments[0]=JSON.stringify(arr);
                            }else if(arr[0]===25){//oven wood
                                arr[1]=31;
                                _arguments[0]=JSON.stringify(arr);
                            }else if(arr[0]===24){//oven flour
                                arr[1]=31;
                                _arguments[0]=JSON.stringify(arr);
                            }else if(arr[0]===28){
                                lastDropItemId=arr[1];
                            }else if(arr[0]===5){
                                if(myInventory && weapons.includes(arr[1])){
                                    autoHelm();
                                }
                            }
                        }
                    }
                    ws.readyState === ws.OPEN && Function.prototype.apply.apply(target, [_this, _arguments]);
                }
            });
            return ws;
        }
    });
    oldfunc['array.push'] = Array.prototype.push;
    newfunc['array.push'] = Array.prototype.push= new Proxy(Array.prototype.push, {
        apply: function(target, _this, _arguments) {
            const data=_arguments[0];
            if (data && data.type != null && data.id != null && data.x && data.y && data.update && myPlayer==undefined) {
                if(enemyList==undefined){
                    enemyList=_this;
                }
                let id=data[Object.keys(data)[1]];
                if(id===myPlayerId){
                    myPlayer=data;
                }
            }else if(data && data.hasOwnProperty('id') && typeof data.info==='object' && 'active' in data.info && 'state' in data.info && arguments.callee.caller.arguments[0] instanceof Array){
                if(myInventory==undefined){
                    myInventory= myInventory=_this;
                }
                if(weapons.includes(data.id) && _this.length>2){
                    _this.splice(1, 0,data);
                    return data;
                }else if(pickAxes.includes(data.id) && _this.length>1){
                    _this.splice(0, 0,data);
                    return data;
                }else if(_this.length>4){
                    _this.splice(4, 0,data);
                    return data;
                }
            }
            return Function.prototype.apply.apply(target, [_this, _arguments]);
        }
    });
    oldfunc['Math.asin'] = Math.acos;
    newfunc['Math.asin'] = Math.acos= new Proxy(Math.acos, {
        apply: function(target, _this, _arguments) {
            let ret=Function.prototype.apply.apply(target, [_this, _arguments]);
            if(arguments.callee.caller.caller.caller.name==='update' && aimbot && weapons && weapons.includes(myPlayer.right)){
                let args=arguments.callee.caller.arguments[0];
                let a=arguments.callee.caller.arguments[0];
                let e=arguments.callee.caller.arguments[1];
                let sing=(0 > (a.x * e.y) - (a.y * e.x)) ? -1 : 1
                let angle=findEnemyAngle(ret*sing);
                return angle*sing;
            }
            if(isAttacking){
                //ws.send("[14]");
                isAttacking=false;
            }
            return ret;
        }
    });
    oldfunc['canvas.drawImage'] = CanvasRenderingContext2D.prototype.drawImage;
    newfunc['canvas.drawImage'] = CanvasRenderingContext2D.prototype.drawImage= new Proxy(CanvasRenderingContext2D.prototype.drawImage, {
        apply: function(target, _this, _arguments) {
            if(typeof myPlayer==='object' && _arguments[0].tagName=='CANVAS' && arguments.callee.caller.caller.name=='a' ){
                 try{
                _this.beginPath();
                _this.lineWidth = 5;
                _this.strokeStyle = aimbot?'green':'red';
                _this.arc(myPlayer.x+Object.values(window.p)[28].x, myPlayer.y+Object.values(window.p)[28].y, 230, 0, 2 * Math.PI, false);
                _this.stroke();
                _this.beginPath();
                _this.strokeStyle = Object.values(p)[27].wait?'red':'green';
                _this.arc(myPlayer.x+Object.values(window.p)[28].x, myPlayer.y+Object.values(window.p)[28].y, 100, 0, 2 * Math.PI, false);
                _this.stroke();

                Array.isArray(enemyList) && enemyList.forEach((enemy)=>{
                    let id=enemy[Object.keys(enemy)[1]];
                    if(!checkAlly(id) && id!==myPlayer && enemy.type===0){
                        _this.beginPath();
                        _this.strokeStyle = Object.values(Object.values(window.p)[41])[1].includes(id)?'red':'blue';
                        _this.moveTo(myPlayer.x+Object.values(window.p)[28].x, myPlayer.y+Object.values(window.p)[28].y);
                        _this.lineTo(enemy.x+Object.values(window.p)[28].x, enemy.y+Object.values(window.p)[28].y);
                        _this.stroke();
                    }
                });
                     }catch{}
            }
            return Function.prototype.apply.apply(target, [_this, _arguments]);
        }
    });
    oldfunc['canvas.fillRect'] = CanvasRenderingContext2D.prototype.fillRect;
    newfunc['canvas.fillRect'] = CanvasRenderingContext2D.prototype.fillRect= new Proxy(CanvasRenderingContext2D.prototype.fillRect, {
        apply: function(target, _this, _arguments) {
            if(arguments.callee.caller && _this.fillStyle==="#669bb1"){
                _this.fillStyle = aimbot? "green" : "red";
                _this.font = "25px Arial";
                _this.fillText(`${circleTime? (5-(Date.now()-circleTime)/1000).toFixed(1):'5'}`,_arguments[0]+180,_arguments[1]+20);
                if(options.showLastPlayerUI){
                    lastplayers.forEach((p,i)=>{
                        _this.fillText(p,_arguments[0]+180,_arguments[1]+20+i*30-180);
                    });
                }
                _this.fillStyle="#669bb1"
            }else if(arguments.callee.caller  && _this.fillStyle==="#69a148"){
                _this.fillStyle = aimbot? "green" : "red";
                _this.font = "25px Arial";
                _this.fillText(`Blizzard:${events.blizzard.status ?'ON':'OFF'}`,_arguments[0]-180,_arguments[1]+15);
                _this.fillText(`Sand Storm:${events.sandStorm.status ?'ON':'OFF'}`,_arguments[0]-180,_arguments[1]-15);

                _this.fillStyle="#69a148"
            }
            return Function.prototype.apply.apply(target, [_this, _arguments]);
        }
    });
    //hooks
    //handler
    window.addEventListener('beforescriptexecute',e => {
        if (e.script.src.includes('vin') && e.target.tagName=='BODY') {
            e.preventDefault();
            fetch('https://starve.io/js/vin.js').then(response=>response.text()).then((dataStr) => {
                let regx=new RegExp('([\\w]*=new [\\w]*;)([\\w]*=new [\\w\$]*;)','gi');
                const script=dataStr.replace(regx,'window.r=$1window.p=$2');
                const b = new Blob([script], { type: 'text/javascript' });
                const u = URL.createObjectURL(b);
                const s = document.createElement('script');
                s.src = u;
                document.body.appendChild(s);
                document.body.removeChild(s);
                URL.revokeObjectURL(u);
            })
        }
    });
    document.addEventListener('keydown', (event)=>{
        if( document.getElementById('chat_block').style.display!=='inline-block' && myPlayer!==undefined){
            if(event.code==="KeyQ"){
                let autoClickF=()=>{
                    if(commands.autoClick.active){
                        ws.send(`[4,${commands.autoClick.wsSend}]`);
                        ws.send("[14]");
                        setTimeout(autoClickF,550);
                    }
                }


                commands.autoClick.active=!commands.autoClick.active;
                autoClickF();
                setTimeout(autoClickF,550);
            }else if(event.code==='Space'){
                aimbot=!aimbot;
            }else if(event.code==='KeyG'){
                ws.send('[28,'+lastDropItemId+']');
            }else if(event.code==='KeyF' && lastBuild){
                const arr=JSON.parse(lastBuild);
                arr[2]=commands.autoClick.wsSend;
                ws.send(JSON.stringify(arr));
            }else{
                for (const [key, value] of Object.entries(commands)) {
                    if(value.keyCode===event.code){
                        ws.send(value.wsSend);
                    }
                }
            }
        }
    });
    document.addEventListener("DOMContentLoaded", function(event) {
        //style
        //   document.getElementById("game_canvas") && document.getElementById("game_canvas").style && (function(){document.getElementById("game_canvas").style.filter = "brightness(1.2)"})();
        //style
        //create craft Helper Panel
        craftHelperE=document.createElement('div');
        document.body.insertAdjacentHTML('beforeend','<div style="user-select: none; position: absolute; left: 0; color: white; bottom: 0; margin: 10px; "><div id="craftItems" style=" opacity: 0.5; "></div> <div id="craftImg"></div><div><span id="prev">&lt;&lt;</span><span id="remove">Remove</span><span id="next">&gt;&gt;</span></div>');
        craftImg=document.getElementById('craftImg');
        craftItems=document.getElementById('craftItems');
        document.getElementById('prev').addEventListener('click',prev);
        document.getElementById('next').addEventListener('click',next);
        document.getElementById('remove').addEventListener('click',remove);
        document.getElementsByClassName('content')[0].addEventListener('click',(e)=>{
            if(e.target instanceof HTMLImageElement){
                let items=[];
                craftItems.innerHTML="";
                craftImg.innerHTML="";
                craftImg.appendChild(e.target.cloneNode());
                document.querySelectorAll('.recipe >img').forEach((e,i)=>{
                    if(e.style.display=="inline-block"){
                        let div=document.createElement('div'); e.style['vertical-align']='middle';
                        items.push({imgSrc:e.src, number:document.getElementById('numb'+(i+1)).textContent});
                        div.appendChild(e.cloneNode());
                        div.insertAdjacentHTML('beforeend',`<span style="background-color: black;">${document.getElementById('numb'+(i+1)).textContent}</span>`);
                        craftItems.appendChild(div);
                    }
                });
                craftHelper[craftHelper.length]={imgSrc:e.target.src,items:items};
                craftHelperID=craftHelper.length-1;
            }
        });
        viewCraftHelper(0);

        document.getElementById('game_canvas').addEventListener('contextmenu', function(e) {
            ws.send(`[5,7]`);
            commands.autoClick.active=false;
        });


    });
    document.addEventListener('click', (event)=>{
        commands.autoClick.active=false;
    })



    //handler
    //app
    run();
    //app
})();