您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
当前为
// ==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 }) })();