// ==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);
},
});