您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
当前为
// ==UserScript== // @name Starve.io autoAtack and autoCraftItems // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author You // @match https://starve.io/ // @grant none // ==/UserScript== (function() { //polyfills 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 options={ gameFuncName:"wi", fillRectFuncName:"fh" }; let ws; let circleTime; 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 //hooks /* //If there is an update, bring the new function name. oldfunc['String.indexOf']=String.prototype.indexOf; String.prototype.indexOf=newfunc['String.indexOf']=new Proxy(String.prototype.indexOf,{ apply:function(target, thisArg, argArray){ if(argArray[0]=="http://starve.io/beta"){ console.log(arguments.callee.caller.name) String.prototype.indexOf=oldfunc['String.indexOf']; } return target.apply(thisArg, argArray); }}); */ oldfunc.webSocket=window.WebSocket; window.WebSocket=newfunc.webSocket=new Proxy(window.WebSocket,{ construct:function(target,args){ ws = new target(...args); const messageHandler = (e) => { if ("string" == typeof e.data){ }else{ var d = new Uint8Array(e.data); switch (d[0]) { case 16: circleTime=Date.now(); break; } } }; const closeHandler = (event) => { console.log('Close', event); ws.removeEventListener('message', messageHandler); ws.removeEventListener('close', closeHandler); }; 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, thisArg, args) { if(typeof args[0]==='string' ){ let arr=JSON.parse(args[0]); if(arr[0]===7){ commands.lastCraftCommand.wsSend=args[0]; }else if(arr[0]===3){ if(commands.autoClick.active){ arr[0]=4; args[0]=JSON.stringify(arr); }else{ commands.autoClick.wsSend=arr[1]; } } } target.apply(thisArg, args); } }); return ws; } }); 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.name===options.fillRectFuncName && _this.fillStyle==="#669bb1"){ _this.fillStyle = "red"; _this.font = "30px Arial"; _this.fillText(`${circleTime? (5-(Date.now()-circleTime)/1000).toFixed(1):'5'}`,_arguments[0]+180,_arguments[1]+20); _this.fillStyle="#669bb1" } return Function.prototype.apply.apply(target, [_this, _arguments]);; } }); //hooks //handler /* window.addEventListener('beforescriptexecute',e => { if (e.script.src.includes('c9')) { e.preventDefault(); fetch('https://starve.io/js/c9.js').then(response=>response.text()).then((dataStr) => { let sc=document.createElement('script'); sc.textContent=dataStr.replace(new RegExp('function '+options.gameFuncName+'\\(\\)\\{',"gi"),"function "+options.gameFuncName+"(){'object' === typeof this && window!==this && ((obj)=>{window.GAME=obj})(this);"); e.target.append(sc); }) } });*/ document.addEventListener('keydown', (event)=>{ if(event.code==="KeyQ"){ commands.autoClick.active && ws.send("[14]"); commands.autoClick.active=!commands.autoClick.active; commands.autoClick.active && ws.send(`[4,${commands.autoClick.wsSend}]`); }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.1)"})(); //style }); //handler })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址