您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
diep.io base zone script
- // ==UserScript==
- // @name Base Zones
- // @description diep.io base zone script
- // @version 1.4
- // @author none
- // @match *://diep.io/*
- // @grant GM_addStyle
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_addValueChangeListener
- // @grant GM_removeValueChangeListener
- // @license none
- // @namespace https://greasyfork.org/users/790354
- // @run-at document-end
- // ==/UserScript==
- 'use strict';
- function drawZones(x, y) {
- if (player.dead) return;
- let corner = 11.5/27*arenaDim;
- let arenaCorner = arenaDim/2;
- if (player.gamemode === 'teams') {
- ctx.fillStyle = '#00B1DE14';
- ctx.beginPath();
- ctx.fillRect(-arenaCorner-x, -arenaDim/2-y, arenaDim/4.05, arenaDim);
- ctx.fillStyle = '#F14E5414';
- ctx.beginPath();
- ctx.fillRect(arenaCorner-x, -arenaDim/2-y, -arenaDim/4.05, arenaDim);
- ctx.fillStyle = '#00B1DE24';
- ctx.beginPath();
- ctx.fillRect(-arenaCorner-x, -arenaDim/2-y, arenaDim/5.51, arenaDim);
- ctx.fillStyle = '#F14E5424';
- ctx.beginPath();
- ctx.fillRect(arenaCorner-x, -arenaDim/2-y, -arenaDim/5.51, arenaDim);
- }
- if (player.gamemode === '4teams') {
- ctx.lineWidth = 20;
- //Calibration (change corner 1 so that the circles align with base center)
- //Blue
- ctx.fillStyle = '#00000011';
- ctx.beginPath();
- ctx.ellipse(-corner-x, -corner-y, 100,100,0, 0, 2*Math.PI);
- ctx.fill();
- //Purple
- ctx.fillStyle = '#00000011';
- ctx.beginPath();
- ctx.ellipse(corner-x, -corner-y, 100,100,0, 0, 2*Math.PI);
- ctx.fill();
- //Green
- ctx.fillStyle = '#00000011';
- ctx.beginPath();
- ctx.ellipse(-corner-x, corner-y, 100,100,0, 0, 2*Math.PI);
- ctx.fill();
- //Red
- ctx.fillStyle = '#00000011';
- ctx.beginPath();
- ctx.ellipse(corner-x, corner-y, 100,100,0, 0, 2*Math.PI);
- ctx.fill();
- //Zone Rendering Outer
- //Blue
- ctx.fillStyle = '#00B1DE18';
- ctx.beginPath();
- ctx.ellipse(-corner-x, -corner-y, arenaDim/4.25,arenaDim/4.25,0, 0, 2*Math.PI);
- ctx.fill();
- //Purple
- ctx.fillStyle = '#BF7FF518';
- ctx.beginPath();
- ctx.ellipse(corner-x, -corner-y, arenaDim/4.25,arenaDim/4.25,0, 0, 2*Math.PI);
- ctx.fill();
- //Green
- ctx.fillStyle = '#00E16E18';
- ctx.beginPath();
- ctx.ellipse(-corner-x, corner-y, arenaDim/4.25,arenaDim/4.25,0, 0, 2*Math.PI);
- ctx.fill();
- //Red
- ctx.fillStyle = '#F14E5418';
- ctx.beginPath();
- ctx.ellipse(corner-x, corner-y, arenaDim/4.25,arenaDim/4.25,0, 0, 2*Math.PI);
- ctx.fill();
- //Zone Rendering Inner
- //Blue
- ctx.fillStyle = '#00B1DE26';
- ctx.beginPath();
- ctx.ellipse(-corner-x, -corner-y, arenaDim/5.75,arenaDim/5.75,0, 0, 2*Math.PI);
- ctx.fill();
- //Purple
- ctx.fillStyle = '#BF7FF526';
- ctx.beginPath();
- ctx.ellipse(corner-x, -corner-y, arenaDim/5.75,arenaDim/5.75,0, 0, 2*Math.PI);
- ctx.fill();
- //Green
- ctx.fillStyle = '#00E16E26';
- ctx.beginPath();
- ctx.ellipse(-corner-x, corner-y,arenaDim/5.75,arenaDim/5.75,0, 0, 2*Math.PI);
- ctx.fill();
- //Red
- ctx.fillStyle = '#F14E5426';
- ctx.beginPath();
- ctx.ellipse(corner-x, corner-y, arenaDim/5.75,arenaDim/5.75,0, 0, 2*Math.PI);
- ctx.fill();
- }
- }
- class Minimap {
- constructor() {
- this._minimapWidth;
- this._minimapHeight;
- this._x00;
- this._y00;
- this._pointX;
- this._pointY;
- this._pointX_previous;
- this._pointY_previous;
- this._viewportX;
- this._viewportY;
- this._fov;
- this._minimapHook();
- this._viewportHook();
- this._fovHook();}
- 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] + setTransformArgs[0]/2;
- this._y00 = setTransformArgs[5] + setTransformArgs[3]/2;
- setTransformArgs = undefined;
- }
- };
- this._ctxHook('setTransform', onsetTransform);
- this._ctxHook('strokeRect', onstrokeRect);
- }
- _viewportHook() {
- let setTransformArgs;
- const onsetTransform = (args) => {
- if ((args[0] / args[3]).toFixed(2) !== (unsafeWindow.innerWidth / unsafeWindow.innerHeight).toFixed(2)) 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._viewPortX = setTransformArgs[4] + 0*setTransformArgs[0]/2;
- this._viewPortY = setTransformArgs[5] + 0*setTransformArgs[3]/2;
- setTransformArgs = undefined;
- }
- };
- console.log(setTransformArgs);
- 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 Player {
- constructor() {
- this._minimap = new Minimap();
- this._dead = true;
- }
- get dead() {
- return !(score >=0);
- }
- get gamemode() {
- return unsafeWindow.localStorage.gamemode;
- }
- }
- const player = new Player();
- const minimap = new Minimap();
- var arenaDim;
- var score = NaN;
- var fov;
- var isAfk = 0;
- //setup canvas
- const canvas = document.getElementById('canvas');
- const ctx = document.getElementById('canvas').getContext('2d');
- // run main Loop
- unsafeWindow.requestAnimationFrame = new Proxy(unsafeWindow.requestAnimationFrame, {
- apply: function (target, thisArg, args) {
- fov = player._minimap.fov / 0.55;
- arenaDim = 11150*1.1*fov;
- //Helpers
- let scaleX = (minimap._viewPortX - minimap._x00) / minimap._minimapWidth;
- let scaleY = (minimap._viewPortY - minimap._y00) / minimap._minimapWidth;
- let posX = scaleX * arenaDim;
- let posY = scaleY * arenaDim;
- drawZones(posX, posY);
- setTimeout(() => Reflect.apply(target, thisArg, args), 0);
- },
- });
- CanvasRenderingContext2D.prototype.fillText = new Proxy(CanvasRenderingContext2D.prototype.fillText, {
- apply(fillRect, ctx, [text, x, y, ...blah]) {
- if (text.startsWith("Score:")) {
- score = parseFloat(text.slice(7).replace(',', ''));
- }
- fillRect.call(ctx, text, x, y, ...blah);
- }
- });