您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Nothing interesting. Just helper for evades.io.
当前为
// ==UserScript== // @name Evades Helper // @namespace http://tampermonkey.net/ // @version 0.1.1 // @description Nothing interesting. Just helper for evades.io. // @author TimiT#3626 // @match https://evades.io/ // @run-at document-start // @grant none // ==/UserScript== /* Этот код сделал на коленке за пару вечеров чисто по фану :P */ const DEVS = ["TimiT"] const PREFIX = "=" const COMMANDS = [{ name: "help", description: "Показывает список команд" }, { name: "follow", description: "Включает следование за игроком. Укажите ник для включения, ничего не указывайте для отключения" }] const FUNCTIONS = [ "=== помимо команд ===", "Включение света на картах", "Переключение камеры на клон Виолы", "Клавиша Del завершает игру и перезагружает вкладку", "Защита от автокика при АФК" ] let counter = +new Date() let _obs = new MutationObserver((ev) => { let elem = Array.from(document.querySelectorAll('script')).filter(a=>a.type === "module" && a.src.match(/\/index\.[0-9a-f]{8}\.js/))[0]; if (!elem) return; let src = elem.src elem.remove() let req = new XMLHttpRequest() req.open("GET", src, false) req.send() let code = req.response code = code //.replace("b[p].render(this.context,this.camera)}", "b[p].render(this.context,this.camera)};window.customRender(this.context,this.camera);") .replace("if(t.area.lighting<1)", "if(t.area.lighting<1 && !window.ignoreLighting)") // .replace("t.canvasScale=1/8,", "t.canvasScale=1/8,window.setRenderOptions(t),") // .replace("this.setState({leaderboardProps:this.initialLeaderboardProps()})", "this.setState({leaderboardProps:this.initialLeaderboardProps()});window.updateLeaderboard()") .replace('e.beginPath(),e.arc(this.x+t.x,this.y+t.y,this.radius,0,2*Math.PI,!1)','this.color.length==7&&(this.color+="BD"),e.beginPath(),e.arc(this.x+t.x,this.y+t.y,this.radius,0,2*Math.PI,!1)') .replace('this.isDeparted||','this.isDeparted&&(h="#0008"),') .replace("case\"focus\":case\"blur\":", "case\"focus\":case\"blur\":break;") .replace(/([a-zA-Z0-9\$]+)\=[a-zA-Z0-9\$]+\.FramePayload.decode\([a-zA-Z0-9]+\)/, (a,b) => { // console.log("Replace: ", a) return a + ",_=window._client.onMessage("+b+")" }) .replace(/(ClientPayload\.encode\()([a-zA-Z0-9$]+)/, (a,b,c) => { return b + "window._client.input(" + c + ")" }) .replace("this.sequence=0,","this.sequence=0,window._client.user=this,") .replace(/this\.camera\.centerOn\(([a-z])\.self\.entity\)\,/, (a,b) => { return "window.setCameraObject(this.camera),this.camera.centerOn(window.setCameraPosition(" + b + "))," }) .replace(/.=(.)\.sender,.=.\.style,.=.\.text[;,][a-z\, ]+(.)=null,(.)=null,.=null;.+"private-message"\),/, (a,b,c,d) => { // console.log("Replace: ", a, b, c, d) return a + "[" + c + "," + d + "]=window._client.checkSender(" + b + ".sender);" }) .replace(/window\.tsmod&&\(window\.protobuf\=([a-zA-Z0-9$]+)\)/, (a,b) => { return "true&&(window.protobuf=" + b + ");window._client.decode = window.protobuf.FramePayload.decode;window._client.encode = window.protobuf.ClientPayload.encode;" }) .replace(/([a-zA-Z0-9$]+)=new WebSocket\([a-z]\)/, (a,b) => { return a + ",window._client.ws = " + b }) .replace(/this\.chatMessages\.pop\(\);/, (a) => { console.log("replace", a) return a + "window._client.follow && ( this.mouseDown = window._client.processFollow() );" }) .replace(/processServerMessage\(.\)\{/, (a) => { return a + "window._client.chat.add = this.updateChat;" }) document.body.appendChild(panel) document.body.appendChild(openPanel) /* document.addEventListener("mousemove", (ev) => { window.mousePosition.x = ev.pageX window.mousePosition.y = ev.pageY }) canvas = document.getElementById("canvas") canvas.addEventListener("wheel", (ev) => { window.scaleGame(ev.deltaY < 0) }) */ setInterval(() => { if (client.antiAFK && client.ws){ client.ws.send(client.encode({ sequence: ++client.user.sequence }).finish()) } }, 60000) let nScr = document.createElement("script") nScr.setAttribute("type", "module") nScr.innerHTML = code document.body.appendChild(nScr) console.log("Init") _obs.disconnect() }) _obs.observe(document, {childList: true, subtree: true}); const onMessage = (msg) => { window.sequence = msg.sequence // client.logMessages && console.log(msg) // LIGHT if (msg.area && client.ignoreLighting){ msg.area.lighting = Math.max(msg.area.lighting, 0.5) } // VIOLA CLONE violaClone(msg) // CHAT // FOLLOW // if (client.follow) follow(msg, client.follow) // console.log(client.follow) }; const processFollow = () => { let followTo = client.user.globalEntities[client.follow] let me = client.user.self.entity if (!followTo){ chatMessage({text: "Игрок не найден. Следование отключено."}) client.follow = null return } let x = followTo.x - me.x let y = followTo.y - me.y let length = Math.sqrt(x**2+y**2); let count = (v) => { if (length >50){ return v/length * 200 } return v * 3 } let mouseDown = { updated: true, x: Math.floor( count(x) ), y: Math.floor( count(y) ) } // console.log(mouseDown) return mouseDown // client.user.mouseDown = mouseDown // console.log(client.user.mouseDown) // console.log("follow", client.user.sequence, msg.sequence) } const violaClone = (msg) => { let abil = client.user.heroInfoCard.abilityTwo if (abil.abilityType === 52){ if (client.clone.id){ if (client.clone.frame){ client.clone.frame = false } else { if (abil.cooldown >= abil.totalCooldown - abil.totalCooldown / 14.5) client.clone.watch = !client.clone.watch } } } let e = msg.entities && client.user && client.user.self.entity && msg.entities.find(ee => { return ee.name === client.user.name && ee.id !== client.user.self.id }) client.clone.id = e && e.id if (msg.area){ client.clone.id = undefined client.clone.watch = false; client.clone.frame = true } } const input = (msg) => { // console.log(msg) // console.log("common", client.user.sequence, window.sequence) if (msg.message) localMessageHandler(msg); return msg } const localMessageHandler = (msg) => { let text = msg.message; if (!text.startsWith("=")) return; delete msg.message; text = text.slice(1) text = text.split(/ +/g) let command = text[0] let args = text.slice(1) if (command === "help") { chatMessage({text: [ ...(COMMANDS.map(c => PREFIX + c.name + " | " + c.description)), ...FUNCTIONS]}) } else if (command === "follow"){ let name = args.join(" ") if (!name){ chatMessage({text: "Следование отключено"}) return client.follow = null } let e = Object.values(client.user.globalEntities).find(ee => ee.name === name) client.follow = e ? e.id : null chatMessage({text: "Следование активировано за: " + name}) client.user.mouseDown = processFollow() } } const chatMessage = ({text, from, style}) => { Array.isArray(text) ? client.chat.add(client.user.globalEntities, {messages: text.map(t => {return{ id: ++counter, text: t, style: 8, sender: "" }})}) : client.chat.add(client.user.globalEntities, {messages: [{ id: ++counter, text, style: 8, sender: "" }]}) } window.chatMessage = (msg) => { } window.ignoreLighting = true window.freeCameraMove = false window.focusCameraOn = undefined window.mousePosition = {x: 0, y: 0} var canvas window.updateLighting = (th) => { window.ignoreLighting = th.checked } window.updateFreeCameraMove = (th) => { window.freeCameraMove = th.checked } window.updateFreeScale = (th) => { window.freeScale = th.checked } window.setRenderOptions = (o) => { window.renderOptions = o } window.setCameraObject = (cam) => { if (!window.camera){ window.camera = cam } } const checkSender = (sender, isConsole=false) => { if (DEVS.includes(sender)) return ["[E-H Dev]", "ehdev"]; if (sender === "") return ["[E-H CONSOLE]", "ehconsole"] return [null,null]; } window.setCameraPosition = (t) => { // console.log(t) let obj // if (window.focusCameraOn ?? window.focusCameraOn !== t.name){ // let ent = Object.values(t.entities).find(e => e.showOnMap && e.name === window.focusCameraOn) // if (ent) obj = {x: ent.x, y: ent.y} // } // if (!obj){ obj = {x: t.self.entity.x, y: t.self.entity.y} window.focusCameraOn = undefined // } if (client.clone.watch && client.clone.id){ let clone = t.entities[CLONE_ID] if (!clone){ client.clone.id = undefined client.clone.watch = false; client.clone.frame = true } else { obj = {x: clone.x, y: clone.y} } } if (window.freeCameraMove){ obj.x += (window.mousePosition.x - window.screen.width/2) * (window.startScale ? window.startScale[0] : 1) obj.y += (window.mousePosition.y - window.screen.height/2) * (window.startScale ? window.startScale[0] : 1) } return obj } addEventListener("keydown", (event) => { if (event.code === "End"){ client.ws.send(client.encode({ "sequence": ++client.user.sequence, "message": "/ff" }).finish()) location.reload() } }); const client = { user: null, ws: null, clone: { id: null, watch: false, frame: true }, chat: { add: null }, follow: null, antiAFK: true, processFollow, onMessage, checkSender, input, encode: null, decode: null, logMessages: false } window._client = client /* window.scaleGame = (wh) => { if (!window.freeScale) return; if (!window.startScale) { window.startScale = [ 1, window.camera.viewportSize.width, window.camera.viewportSize.height, canvas.width, canvas.height ] } let change = 0.05 wh ? window.startScale[0] -= change : window.startScale[0] += change let scale = window.startScale[0] window.camera.viewportSize.width = window.startScale[1] * scale window.camera.viewportSize.height = window.startScale[2] * scale canvas.width = window.startScale[3] * scale canvas.height = window.startScale[4] * scale window.dispatchEvent(new Event('resize')); document.getElementById("free_scale").innerHTML = "Free scale (x" + window.startScale[0].toFixed(2) + ")" }*/ /* window.updateLeaderboard = () => { for (let names of [...document.getElementsByClassName('leaderboard-name')]) { names.onclick = event => { // window.client.openUcard(getAttrInParents(event.target,"ariaLabel"), [20,event.y], window.client.userlog); window.focusCameraOn = event.target.innerHTML.split(" ")[0] }; names.style.cursor = "pointer"; } } */ let panel = document.createElement("div") panel.style.background = "rgba(200, 200, 200, 0.8)" panel.style.width = "400px" panel.align = "center" panel.style.position = "fixed" panel.style.top = "50px" panel.style.left = "calc(50% - 200px)" panel.style.borderRadius = "10px" panel.style.visibility = "hidden" panel.style.padding = "20px" panel.innerHTML = ` <h3> Evades helper v0.1 </h3> <table> <tbody> <tr> <td> <input type="checkbox" checked="` + window.ignoreLighting + `"onclick="window.updateLighting(this)"/> </td> <td>Enable light on all maps</td> </tr> <tr> <td> <input type="checkbox" onclick="window.updateFreeCameraMove(this)" /> </td> <td>Free camera move</td> </tr> </tbody> </table> <p>Developer [DISCORD]: <a id="developer" href="https://discordapp.com/users/998856554033987604">TimiT#3626</a></p> <p>Уважаемые игроки, у меня есть желание сделать удобный скрипт, но нет идей :(<\p> <p>Поэтому я буду рад получить от вас какие-либо предложения</p> <br/> <p>Переключение на клон виолы дает фокус камеры именно на клон<br/> Свет в темных комнатах автоматически повышен<br/> =help в чат для получения списка команд </p> <style> #developer:link { color: black; } #developer:visited { color: black; } #developer:hover { color: #333333; } #developer:active { color: black; } .chat-message .ehdev { color: #ff4f00 } .chat-message .ehconsole { color: #ff0800 } </style> ` let openPanel = document.createElement("div") openPanel.style.background = "rgba(100, 100, 100, 0.5)" openPanel.style.borderRadius = "10px" openPanel.style.bottom = "60px" openPanel.style.right = "10px" openPanel.style.position = "fixed" openPanel.style.width = "40px" openPanel.style.height = "40px" openPanel.onclick = () => { panel.style.visibility = panel.style.visibility === "visible" ? "hidden" : "visible" }