- // ==UserScript==
- // @name Afk script
- // @description made with much love
- // @version 0.1.5
- // @author Cazka#1820
- // @match *://diep.io/*
- // @grant GM_addStyle
- // @namespace https://gf.qytechs.cn/users/541070
- // ==/UserScript==
- /*
- * C L A S S E S
- */
- class Gui {
- constructor(title) {
- this._colors = ['#E8B18A', '#E666EA', '#9566EA', '#6690EA', '#E7D063', '#EA6666', '#92EA66', '#66EAE6'];
- this._buttons = [];
-
- this._title = title;
- this._gui;
- this._guiHead;
- this._guiBody;
-
- this._init();
-
- this._enableShortcuts();
- }
-
- _init() {
- const nonce = `a${(Math.random() * 1e5) | 0}`;
- GM_addStyle(
- `.${nonce} button{display:block;font-family:Ubuntu;color:#fff;text-shadow:-.1em -.1em 0 #000,0 -.1em 0 #000,.1em -.1em 0 #000,.1em 0 0 #000,.1em .1em 0 #000,0 .1em 0 #000,-.1em .1em 0 #000,-.1em 0 0 #000;opacity:.8;border:0;padding:.3em .5em;width:100%;transition:all .15s}.${nonce}{top:0;left:0;position:absolute}.${nonce} button:active:not([disabled]){filter:brightness(.9)}.${nonce} button:hover:not([disabled]):not(:active){filter:brightness(1.1)}`
- );
-
- this._gui = document.createElement('div');
- this._guiHead = document.createElement('div');
- this._guiBody = document.createElement('div');
-
- this._gui.className = `${nonce}`;
- this._guiBody.style.display = 'block';
-
- document.body.appendChild(this._gui);
- this._gui.appendChild(this._guiHead);
- this._gui.appendChild(this._guiBody);
-
- this._addButton(this._guiHead, this._title, () => {
- if (this._guiBody.style.display === 'block') {
- this._guiBody.style.display = 'none';
- } else {
- this._guiBody.style.display = 'block';
- }
- });
- }
- addButton(text, onclick, keyCode) {
- return this._addButton(this._guiBody, text, onclick, keyCode);
- }
- removeButton(button) {
- button.remove();
- button.active = false;
- }
- reset() {
- const head = this._buttons[0];
- this._buttons.forEach((x, i) => {
- if (i === 0) return;
- this.removeButton(x);
- });
- this._buttons = [head];
- }
- _addButton(parent, text, onclick, keyCode) {
- const button = document.createElement('button');
- button.innerHTML = text;
- button.keyCode = keyCode;
- button.onclick = onclick;
- button.style['background-color'] = this._colors[this._buttons.length % this._colors.length];
- button.addEventListener('contextmenu', (e) => e.preventDefault());
-
- parent.appendChild(button);
- this._buttons.push(button);
- return button;
- }
- _enableShortcuts() {
- document.addEventListener('keydown', (event) => {
- if (document.getElementById('textInputContainer').style.display === 'block') return;
- this._buttons.forEach((button) => {
- if (button.keyCode === event.code) button.onclick();
- });
- });
- }
- }
- class Minimap {
- constructor() {
- this._minimapWidth;
- this._minimapHeight;
- this._x00;
- this._y00;
- this._pointX;
- this._pointY;
- this._viewportWidth;
- this._viewportHeight;
-
- this._minimapHook();
- this._arrowHook();
- }
- get x() {
- return (this._pointX - this._x00) / this._minimapWidth;
- }
- get y() {
- return (this._pointY - this._y00) / this._minimapHeight;
- }
- _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 = ((pointA[0] - pointB[0]) ** 2 + (pointA[1] - pointB[1]) ** 2) ** 0.5;
- const side2 = ((pointA[0] - pointC[0]) ** 2 + (pointA[1] - pointC[1]) ** 2) ** 0.5;
- const side3 = ((pointB[0] - pointC[0]) ** 2 + (pointB[1] - pointC[1]) ** 2) ** 0.5;
- if (~~side1 == ~~side2 && ~~side2 == ~~side3) return;
-
- 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);
- }
- _ctxHook(method, callback) {
- const target = window.CanvasRenderingContext2D.prototype;
- target[method] = new Proxy(target[method], {
- apply(target, thisArg, args) {
- callback(args);
- return target.apply(thisArg, args);
- },
- });
- }
- }
- class Player {
- constructor() {
- this._minimap = new Minimap();
- this._mouse = { x: NaN, y: NaN };
- }
- get x() {
- return this._minimap.x;
- }
- get y() {
- return this._minimap.y;
- }
- goto(x, y) {
- const dX = x - this.x;
- const dY = y - this.y;
- const len = Math.sqrt(dX ** 2 + dY ** 2);
- if (dX > 0) {
- unsafeWindow.input.keyDown('68');
- unsafeWindow.input.keyUp('65');
- } else {
- unsafeWindow.input.keyDown('65');
- unsafeWindow.input.keyUp('68');
- }
- if (dY > 0) {
- unsafeWindow.input.keyDown('83');
- unsafeWindow.input.keyUp('87');
- } else {
- unsafeWindow.input.keyDown('87');
- unsafeWindow.input.keyUp('83');
- }
- }
- }
- /*
- * H E L P E R F U N C T I O N S
- */
- function onbtnAfk() {
- this.active = !this.active;
- if (this.active) {
- this.x = player.x;
- this.y = player.y;
- this.innerHTML = 'AFK: ON';
- } else {
- unsafeWindow.input.keyUp('65');
- unsafeWindow.input.keyUp('68');
- unsafeWindow.input.keyUp('87');
- unsafeWindow.input.keyUp('83');
- this.innerHTML = 'AFK: OFF';
- }
- }
- function onbtnFreezeMouse() {
- this.active = !this.active;
- if (this.active) {
- this.innerHTML = 'Freeze Mouse: ON';
- } else {
- this.innerHTML = 'Freeze Mouse: OFF';
- }
- }
- function onbtnRepelNecro() {
- this.active = !this.active;
- if (this.active) {
- let repelTime = 25 * 1000;
- unsafeWindow.input.keyDown('16');
- this.repelInterval = setInterval(() => {
- unsafeWindow.input.keyDown('16');
- setTimeout(() => unsafeWindow.input.keyUp('16'), repelTime);
- }, 2 * repelTime + 1300);
- this.innerHTML = 'Repel Necro: ON';
- } else {
- clearInterval(this.repelInterval);
- unsafeWindow.input.keyUp('16');
- this.innerHTML = 'Repel Necro: OFF';
- }
- }
- function onbtnRepelOverlord() {
- this.active = !this.active;
- if (this.active) {
- let repelTime = 60 * 1000;
- unsafeWindow.input.keyDown('16');
- this.repelInterval = setInterval(() => {
- unsafeWindow.input.keyUp('16');
- setTimeout(() => unsafeWindow.input.keyDown('16'), 3000);
- }, repelTime);
- this.innerHTML = 'Repel Overlord: ON';
- } else {
- clearInterval(this.repelInterval);
- unsafeWindow.input.keyUp('16');
- this.innerHTML = 'Repel Overlord: OFF';
- }
- }
- function onbtnUpAndDown() {
- this.active = !this.active;
- if (this.active) {
- this.down = true;
- this.x = player.x;
- this.innerHTML = 'Up and Down: ON';
- } else {
- unsafeWindow.input.keyUp('65');
- unsafeWindow.input.keyUp('68');
- unsafeWindow.input.keyUp('87');
- unsafeWindow.input.keyUp('83');
- this.innerHTML = 'Up and Down: OFF';
- }
- }
- function onbtnDiscord() {
- window.open('https://discord.gg/5q2E3Sx');
- }
- /*
- * M A I N
- */
- const gui = new Gui('AFK by Cazka');
- const player = new Player();
-
- let btnAfk = gui.addButton('AFK: OFF', onbtnAfk, 'KeyQ');
- let btnFreezeMouse = gui.addButton('Freeze Mouse: OFF', onbtnFreezeMouse, 'KeyG');
- let btnRepelNecro = gui.addButton('Repel Necro: OFF', onbtnRepelNecro, 'KeyR');
- let btnRepelOverlord = gui.addButton('Repel Overlord: OFF', onbtnRepelOverlord, 'KeyT');
- let btnUpAndDown = gui.addButton('Up and Down: OFF', onbtnUpAndDown);
- let btnDiscord = gui.addButton('Discord', onbtnDiscord);
-
- unsafeWindow.requestAnimationFrame = new Proxy(unsafeWindow.requestAnimationFrame, {
- apply: function (target, thisArg, args) {
- if (btnAfk.active) player.goto(btnAfk.x, btnAfk.y);
- else if (btnUpAndDown.active) {
- if (btnUpAndDown.down) {
- player.goto(btnUpAndDown.x, 1);
- if (player.y >= 0.95) btnUpAndDown.down = false;
- } else {
- player.goto(btnUpAndDown.x, 0);
- if (player.y <= 1 - 0.95) btnUpAndDown.down = true;
- }
- }
- return target.apply(thisArg, args);
- },
- });
-
- (function freezeMouse() {
- const canvas = document.getElementById('canvas');
- canvas.onmousemove = new Proxy(canvas.onmousemove, {
- apply(target, thisArg, args) {
- if (btnFreezeMouse?.active) return;
- target.apply(thisArg, args);
- },
- });
- })();