您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
credits to cazka for basically 99% of this script, no this is not a multiboxing script
当前为
// ==UserScript== // @name Base Zones REAL // @description credits to cazka for basically 99% of this script, no this is not a multiboxing script // @version 1.0.8 // @author none // @match *://diep.io/* // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_addValueChangeListener // @grant GM_removeValueChangeListener // @namespace https://greasyfork.org/users/790354 // ==/UserScript== 'use strict'; (function() { var isActive = true; function f(e){ if (!isActive) return; var a = new KeyboardEvent("keydown", { bubbles: true, cancelable: true, shiftKey: false }); delete a.keyCode; Object.defineProperty(a, "keyCode", { "value": 76 }); dispatchEvent(a); } function a(e) { addEventListener(e, f); } for (var i of ["focus", "blur", "keyup"]) { a(i); } addEventListener("keydown", function(e) { if (e.keyCode == 76 && e.isTrusted) { isActive ^= true; } }); }()); function fillBlue2(flag) { if (flag == 1) { if (player.dead) return; ctx.save(); ctx.globalAlpha = 0.12; if (player.gamemode === 'teams') { ctx.fillStyle = '#006480'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } ctx.restore(); } } function fillRed2(flag) { if (flag == 1) { if (player.dead) return; ctx.save(); ctx.globalAlpha = 0.12; if (player.gamemode === 'teams') { ctx.fillStyle = '#963033'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } ctx.restore(); } } function fillBlue(flag) { if (flag == 1) { if (player.dead) return; ctx.save(); ctx.globalAlpha = 0.12; if (player.gamemode === '4teams') { ctx.fillStyle = '#006480'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } if (player.gamemode === 'teams') { ctx.fillStyle = '#006480'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } ctx.restore(); } } function fillRed(flag) { if (flag == 1) { if (player.dead) return; ctx.save(); ctx.globalAlpha = 0.12; if (player.gamemode === '4teams') { ctx.fillStyle = '#963033'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } if (player.gamemode === 'teams') { ctx.fillStyle = '#963033'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } ctx.restore(); } } function fillGreen(flag) { if (flag == 1) { if (player.dead) return; ctx.save(); ctx.globalAlpha = 0.12; if (player.gamemode === '4teams') { ctx.fillStyle = '#00803e'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } ctx.restore(); } } function fillPurple(flag) { if (flag == 1) { if (player.dead) return; ctx.save(); ctx.globalAlpha = 0.12; if (player.gamemode === '4teams') { ctx.fillStyle = '#644280'; ctx.beginPath(); ctx.fillRect(0,0,1920,1080); } ctx.restore(); } } function drawZones(scale, notFullScreen) { if (player.dead) return; ctx.save(); ctx.globalAlpha = 0.12; let radius = 52; let width = 169; let compensation = notFullScreen * (width-2); if (player.gamemode === '4teams') { //blue ctx.fillStyle = '#006480'; ctx.beginPath(); ctx.arc(1920-(1920-1728)*scale, 1080-(1080-888)*scale-compensation, radius*scale, 0 * Math.PI, 1/2 * Math.PI); ctx.fill(); ctx.beginPath(); ctx.moveTo(1920-(1920-1728)*scale, 1080-(1080-888)*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale+radius*scale, 1080-(1080-888)*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale, 1080-(1080-888)*scale+radius*scale-compensation); ctx.fill(); //purple ctx.fillStyle = '#644280'; ctx.beginPath(); ctx.arc(1920-(1920-1728)*scale+width*scale, 1080-(1080-888)*scale-compensation, radius*scale, 1/2 * Math.PI, Math.PI); ctx.fill(); ctx.beginPath(); ctx.moveTo(1920-(1920-1728)*scale+width*scale, 1080-(1080-888)*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale+radius*scale+width*scale-2*radius*scale, 1080-(1080-888)*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale+width*scale, 1080-(1080-888)*scale+radius*scale-compensation); ctx.fill(); //green ctx.fillStyle = '#00803e'; ctx.beginPath(); ctx.arc(1920-(1920-1728)*scale, 1080-(1080-888)*scale+width*scale-compensation, radius*scale, 3/2 * Math.PI, 2 * Math.PI); ctx.fill() ctx.beginPath(); ctx.moveTo(1920-(1920-1728)*scale, 1080-(1080-888)*scale+width*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale+radius*scale, 1080-(1080-888)*scale+width*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale, 1080-(1080-888)*scale+radius*scale+width*scale-2*radius*scale-compensation); ctx.fill(); //red ctx.fillStyle = '#963033'; ctx.beginPath(); ctx.arc(1920-(1920-1728)*scale+width*scale, 1080-(1080-888)*scale+width*scale-compensation, radius*scale, Math.PI, 3/2 * Math.PI); ctx.fill(); ctx.beginPath(); ctx.moveTo(1920-(1920-1728)*scale+width*scale, 1080-(1080-888)*scale+width*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale+radius*scale+width*scale-2*radius*scale, 1080-(1080-888)*scale+width*scale-compensation); ctx.lineTo(1920-(1920-1728)*scale+width*scale, 1080-(1080-888)*scale+radius*scale+width*scale-2*radius*scale-compensation); ctx.fill(); } else if (player.gamemode === 'teams') { let radius2 = 40; //blue ctx.fillStyle = '#006480'; ctx.fillRect(1920-(1920-1728)*scale, 1080-(1080-890)*scale-compensation, radius2*scale, 170*scale); //red ctx.fillStyle = '#963033'; ctx.fillRect(1920-(1920-1728)*scale+124*scale, 1080-(1080-890)*scale-compensation, radius2*scale, 170*scale); } ctx.restore(); } class Gui { constructor(title) { this._buttons = []; } } class Minimap { constructor() { this._minimapWidth; this._minimapHeight; this._x00; this._y00; this._pointX; this._pointY; this._pointX_previous; this._pointY_previous; this._viewportWidth; this._viewportHeight; this._fov; this._minimapHook(); this._arrowHook(); this._viewportHook(); this._fovHook();} get x() { return this._pointX ? (this._pointX - this._x00) / this._minimapWidth : 0; } get y() { return this._pointY ? (this._pointY - this._y00) / this._minimapHeight : 0; } get x_previous() { return this._pointX_previous ? (this._pointX_previous - this._x00) / this._minimapWidth : 0; } get y_previous() { return this._pointY_previous ? (this._pointY_previous - this._y00) / this._minimapHeight : 0; } get scale() { return { x: this._viewportWidth / this._minimapWidth, y: this._viewportHeight / this._minimapHeight, }; } get fov() { return this._fov; } _minimapHook() { let setTransformArgs; const onsetTransform = (args) => { if (args[0] === args[3]) setTransformArgs = args; }; const onstrokeRect = () => { if (setTransformArgs) { this._minimapWidth = setTransformArgs[0]; this._minimapHeight = setTransformArgs[3]; this._x00 = setTransformArgs[4]; this._y00 = setTransformArgs[5]; setTransformArgs = undefined; } }; this._ctxHook('setTransform', onsetTransform); this._ctxHook('strokeRect', onstrokeRect); } _arrowHook() { let index = 0; const stack = Array(4); let pointA; let pointB; let pointC; const calculatePos = () => { const side1 = Math.floor( Math.sqrt(Math.pow(pointA[0] - pointB[0], 2) + Math.pow(pointA[1] - pointB[1], 2)) ); const side2 = Math.floor( Math.sqrt(Math.pow(pointA[0] - pointC[0], 2) + Math.pow(pointA[1] - pointC[1], 2)) ); const side3 = Math.floor( Math.sqrt(Math.pow(pointB[0] - pointC[0], 2) + Math.pow(pointB[1] - pointC[1], 2)) ); if (side1 == side2 && side2 == side3) return; this._pointX_previous = this._pointX; this._pointY_previous = this._pointY; this._pointX = (pointA[0] + pointB[0] + pointC[0]) / 3; this._pointY = (pointA[1] + pointB[1] + pointC[1]) / 3; }; const onbeginPath = () => { index = 0; stack[index++] = 0; }; const onmoveTo = (args) => { if (index === 1 && stack[index - 1] === 0) { stack[index++] = 1; pointA = args; return; } index = 0; }; const onlineTo = (args) => { if (index === 2 && stack[index - 1] === 1) { stack[index++] = 2; pointB = args; return; } if (index === 3 && stack[index - 1] === 2) { stack[index++] = 2; pointC = args; return; } index = 0; }; const onfill = () => { if (index === 4 && stack[index - 1] === 2) { calculatePos(); return; } index = 0; }; this._ctxHook('beginPath', onbeginPath); this._ctxHook('moveTo', onmoveTo); this._ctxHook('lineTo', onlineTo); this._ctxHook('fill', onfill); } _viewportHook() { let setTransformArgs; const onsetTransform = (args) => { if ((args[0] / args[3]).toFixed(4) !== (unsafeWindow.innerWidth / unsafeWindow.innerHeight).toFixed(4)) return; if (args[0] >= unsafeWindow.innerWidth && args[3] >= unsafeWindow.innerHeight) return; setTransformArgs = args; }; const onfillRect = () => { if (setTransformArgs) { unsafeWindow.input.set_convar('ren_minimap_viewport', true); this._viewportWidth = setTransformArgs[0]; this._viewportHeight = setTransformArgs[3]; setTransformArgs = undefined; } }; this._ctxHook('setTransform', onsetTransform); this._ctxHook('fillRect', onfillRect); setInterval(() => { unsafeWindow.input.set_convar('ren_minimap_viewport', true); }, 1000); } _fovHook() { let solid_background = false; setTimeout(() => { solid_background = unsafeWindow.input.get_convar('ren_solid_background') === 'true' ? true : false; }, 1000); const calculateFov = (fov) => { this._fov = fov * 10; }; function onstroke() { if (this.fillStyle === '#cdcdcd') { if (solid_background) unsafeWindow.input.set_convar('ren_solid_background', true); calculateFov(this.globalAlpha); } } this._ctxHook('stroke', onstroke); setInterval(() => { if (solid_background) unsafeWindow.input.set_convar('ren_solid_background', false); }, 10000); } _ctxHook(method, hook) { const target = window.CanvasRenderingContext2D.prototype; target[method] = new Proxy(target[method], { apply(target, thisArg, args) { args = hook.call(thisArg, args) || args; return target.apply(thisArg, args); }, }); } } class Vector {} class Arena { static get BLOCKSIZE() { return 50; } } class Player { constructor() { this._minimap = new Minimap(); this._dead = true; //Dead Listener new MutationObserver((args) => { this._dead = args[0].target.style.display === 'block'; if (this.ondead && this._dead) this.ondead(); }).observe(document.getElementById('a'), { attributes: true }); } get dead() { return this._dead; } get gamemode() { return unsafeWindow.localStorage.gamemode; } } class Chat { constructor(player) { this._player = player; this._inputBox = document.body.appendChild(document.createElement('div')); this._hookonkeydown(); this._hookAnimationFrame(); } _hookonkeydown() { const _this = this; unsafeWindow.onkeydown = new Proxy(unsafeWindow.onkeydown, { }); } _hookAnimationFrame() { const _this = this; unsafeWindow.requestAnimationFrame = new Proxy(unsafeWindow.requestAnimationFrame, { }); } } const player = new Player(); const arena = new Arena(); const chat = new Chat(player); const minimap = new Minimap(); const radius = 52; const width = 169; var a,fj,fk,fl,fm,tj,tk = 0; var scale = d/175 var x = minimap._pointX; var y = minimap._pointY; var d = minimap._minimapWidth; var compensation = a * (width-2); //setup canvas const ctx = document.getElementById('canvas').getContext('2d'); // run main Loop unsafeWindow.requestAnimationFrame = new Proxy(unsafeWindow.requestAnimationFrame, { apply: function (target, thisArg, args) { //4 teams //Blue setInterval(() => { x = minimap._pointX; scale = d / 175 y = minimap._pointY; compensation = a * (width-2); if(Math.pow(1920-(1920-1728)*scale-x,2) + Math.pow(1080-(1080-888)*scale-compensation-y,2)<Math.pow(radius*scale, 2)) { fj = 1;} else {fj = 0;} }, 2000); //Purple setInterval(() => { x = minimap._pointX; scale = d / 175 y = minimap._pointY; compensation = a * (width-2); if(Math.pow(1920-(1920-1728)*scale+width*scale-x,2) + Math.pow(1080-(1080-888)*scale-compensation-y,2)<Math.pow(radius*scale, 2)) { fk = 1;} else {fk = 0;} }, 2000); //Green setInterval(() => { x = minimap._pointX; scale = d / 175 y = minimap._pointY; compensation = a * (width-2); if(Math.pow(1920-(1920-1728)*scale-x,2) + Math.pow(1080-(1080-888)*scale+width*scale-compensation-y,2)<Math.pow(radius*scale, 2)) { fl = 1;} else {fl = 0;} }, 2000); //Red setInterval(() => { x = minimap._pointX; scale = d / 175 y = minimap._pointY; compensation = a * (width-2); if(Math.pow(1920-(1920-1728)*scale+width*scale-x,2) + Math.pow(1080-(1080-888)*scale+width*scale-compensation-y,2)<Math.pow(radius*scale, 2)) { fm = 1;} else {fm = 0;} }, 2000); //2 teams //Blue setInterval(() => { x = minimap._pointX; scale = d / 175 y = minimap._pointY; compensation = a * (width-2); if(1920-(1920-1728)*scale+d*scale<x) { tj = 1;} else {tj = 0;} }, 2000); //Red setInterval(() => { x = minimap._pointX; scale = d / 175 y = minimap._pointY; compensation = a * (width-2); if(1920-(1920-1728)*scale+radius*scale>x) { tk = 1;} else {tk = 0;} }, 2000); //Old setInterval(() => { if(window.innerHeight == screen.height) { a = 0;} else {a = 1;}}, 2000); setInterval(() => {d = minimap._minimapWidth}, 2000); // drawZones(d / 175, a); fillBlue(fj); fillPurple(fk); fillGreen(fl); fillRed(fm); fillBlue2(tj); fillBlue2(tk); setTimeout(() => Reflect.apply(target, thisArg, args), 0); }, });