cursors.io hack

cursorsio hack - vnx and new hack in description

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         cursors.io hack 
// @namespace    VNXS
// @version      1.4.1
// @description  cursorsio hack - vnx and new hack in description
// @author       VNXS
// @match        http://cursors.io/
// @grant        none
// @run-at       document-idle
// ==/UserScript==
 
var cps=100,
    spamClicking = !1;
function init(view, value, attr) {
    function Class() {
        attr.x = view.getUint16(value, true);
        value += 2;
        attr.y = view.getUint16(value, true);
        value += 2;
        attr.width = view.getUint16(value, true);
        value += 2;
        attr.height = view.getUint16(value, true);
        value += 2;
    }
 
    function done() {
        var color = view.getUint32(value, true).toString(16);
        for (; 6 > color.length;) {
            color = "0" + color;
        }
        value += 4;
        attr.color = "#" + color;
    }
    var name = view.getUint8(value);
    value += 1;
    attr.type = name;
    switch (name) {
        case 255:
            break;
        case 0:
            attr.x = view.getUint16(value, true);
            value += 2;
            attr.y = view.getUint16(value, true);
            value += 2;
            attr.size = view.getUint8(value);
            value += 1;
            attr.isCentered = !!view.getUint8(value);
            value += 1;
            name = read(view, value);
            attr.text = name[0];
            value = name[1];
            break;
        case 1:
            Class();
            var py = !attr.color;
            done();
            break;
            name = attr.x | 0;
            var y = attr.y | 0;
            var version = attr.width | 0;
            var h = attr.height | 0;
            if (py) {
                py = y;
                for (; py < y + h; ++py) {
                    var info = name;
                    for (; info < name + version; ++info) {
                        ++tmp[info + 400 * py];
                    }
                }
            }
            break;
        case 2:
            Class();
            attr.isBad = !!view.getUint8(value);
            value += 1;
            break;
        case 3:
            Class();
            attr.count = view.getUint16(value, true);
            value += 2;
            done();
            break;
        case 4:
            Class();
            attr.count = view.getUint16(value, true);
            value += 2;
            done();
            break;
        default:
            throw Error("Unknown object type " + name);;
    }
    return value;
}
 
function read(view, offset) {
    var optsData = "";
    var lo = 0;
    var chunk = 0;
    for (; 0 != (chunk = view.getUint8(offset)); ++offset) {
        lo <<= 8;
        lo |= chunk;
        if (!(chunk & 128)) {
            optsData += String.fromCharCode(lo);
            lo = 0;
        }
    }
    if (0 != lo) {
        optsData += String.fromCharCode(lo);
    }
    return [optsData, offset + 1];
}
 
function proc(data) {
    var view = new DataView(data.buffer),
        v, index, parts, x;
    if (view.getUint8(0) == 1) {
        var push = function(view, element) {
            return element + 2 + 4 * view.getUint16(element, true)
        };
        index = view.getUint16(1, true);
        index = push(view, 3 + 8 * index);
        v = view.getUint16(index, true);
        index += 2;
        parts = 0;
        for (; parts < v; parts++) {
            x = view.getUint32(index, true);
            item = 0;
            a: for (; item < items.length; item++) {
                if (items[item].id == x) {
                    items.splice(item, 1);
                    break a;
                }
            }
            index += 4;
        }
        v = view.getUint16(index, true);
        index += 2;
        parts = 0;
        for (; parts < v; parts++) {
            a: {
                item = view.getUint32(index, true);x = 0;
                for (; x < items.length; x++) {
                    if (items[x].id == item) {
                        item = items[x];
                        break a;
                    }
                }
                item = {
                    id: item
                };items.push(item);
            }
            index += 4;index = init(view, index, item);
        }
        return;
    }
    items = [];
    head = [view.getUint16(1, true), view.getUint16(3, true)];
    v = view.getUint16(5, true);
    index = 7;
    parts = 0;
    for (; parts < v; parts++) {
        item = {};
        item.id = view.getUint32(index, true);
        index += 4;
        index = init(view, index, item);
        if (item.x > 0) item.x--, item.width++;
        if (item.y > 0) item.y--, item.height++;
        if (item.x + item.width < 400) item.width++;
        if (item.y + item.height < 300) item.height++;
        items.push(item);
    }
}
 
var avoidGreenArea = false
function dos(head) { // Pathfinder
    var gridX = 400,
        gridY = 300;
    var grid = [];
    visit = [];
    for (var i = 0; i < gridY; i++) {
        grid[i] = [];
        visit[i] = [];
        for (var j = 0; j < gridX; j++) grid[i][j] = 0, visit[i][j] = 0;
    }
    items.forEach(function(d) {
        if ((d.type == 1) || (d.type == 2 && (d.isBad || avoidGreenArea)))
            for (var j = 0; j < d.height; j++) {
                if (d.y+j<=299) for (var i = 0; i < d.width; i++) {
                    if (d.x+i<=399) grid[d.y + j][d.x + i] = 3
                }
            }
    });
    var bfs = [head],
        bfs2 = [];
    while (bfs.length) {
        bfs.forEach(function(dat) {
            var x = dat[0],
                y = dat[1];
            if (grid[y][x] == 3) return;
            grid[y][x] = 3;
            for (var X = x + 1; X < gridX && !(grid[y][X] & 1); X++) {
                grid[y][X] |= 1;
                if (!visit[y][X]) {
                    visit[y][X] = [x, y], bfs2.push([X, y]);
                }
            }
            for (var X = x - 1; X >= 0 && !(grid[y][X] & 1); X--) {
                grid[y][X] |= 1;
                if (!visit[y][X]) {
                    visit[y][X] = [x, y], bfs2.push([X, y]);
                }
            }
            for (var Y = y + 1; Y < gridY && !(grid[Y][x] & 2); Y++) {
                grid[Y][x] |= 2;
                if (!visit[Y][x]) {
                    visit[Y][x] = [x, y], bfs2.push([x, Y]);
                }
            }
            for (var Y = y - 1; Y >= 0 && !(grid[Y][x] & 2); Y--) {
                grid[Y][x] |= 2;
                if (!visit[Y][x]) {
                    visit[Y][x] = [x, y], bfs2.push([x, Y]);
                }
            }
        });
        bfs = bfs2;
        bfs2 = [];
    }
}
var tmp = WebSocket.prototype.send;
WebSocket.prototype.send = function(x) {
    WebSocket.prototype.send = tmp;
    tmp = this;
    this.send = function() {};
    var t2 = this.onmessage;
    this.onmessage = function(x) {
        var msg = new Uint8Array(x.data);
        if (msg[0] == 1 || msg[0] == 4) {
            proc(msg);
        }
        return t2.call(this, x)
    }
}
var ff = navigator.userAgent.indexOf("Chrome") == -1;
var num_1 = prompt('1/2 WebSocket Location (where to connect. only change if you know what you\'re doing)', 'ws://104.248.73.48:2828'),
    num_2 = 0,
    num_3 = 1 * prompt('2/2 WebSocket Total (how many bots. only change if you know what you\'re doing.', 2);
console.log(num_1);
var pool = [],
    cursors = [];
if (!isNaN(parseInt(num_3))) {
    alert('Result: Valid WebSocket total. Connecting bots...');
} else alert('Result: Invalid WebSocket total.');
if (!isNaN(parseInt(num_3))) {
    for (var i = 0; i < num_3; i++) {
        pool.push(new WebSocket(`${num_1}`)); // websocket
    }
    pool[num_3-1].onopen = function(x){alert('Result: All bots have been successfully connected.')};
}
var position = [];
canvas.onclick = function(e) {
    var xy = [(e.layerX - (ff ? canvas.offsetLeft : 0)) / 2 | 0, (e.layerY - (ff ? canvas.offsetTop : 0)) / 2 | 0];
    position = [(e.layerX - (ff ? canvas.offsetLeft : 0)) / 2 | 0, (e.layerY - (ff ? canvas.offsetTop : 0)) / 2 | 0];
    var mov = [];
    if (e.altKey) {
        if (cursors.length < 1) return;
        for (ii=0;ii<cursors.length;ii++) {
            pool.push(cursors.shift());
        }
       return;
    }
    if (window["items"] && !(xy[0] == head[0] && xy[1] == head[1]) && !e.ctrlKey) {
        dos(head);
        var xy2 = xy.slice(0);
        while (visit[xy2[1]][xy2[0]]) {
            mov.push(xy2);
            xy2 = visit[xy2[1]][xy2[0]]
        }
        mov = mov.reverse();
    } else mov.push(xy);
    if (mov.length == 0) {
        return;
    }
    if (!e.shiftKey) {
        head = xy;
        pool.forEach(function(x) {
            move(x, mov)
        });
        move(tmp, mov);
        var buf = new ArrayBuffer(9),
            q = new DataView(buf);
        q.setUint8(0, 2, 1);
        q.setUint16(1, xy[0], 1);
        q.setUint16(3, xy[1], 1);
        q.setInt32(5, -1, 1);
        return;
    }
    var buf = new ArrayBuffer(9),
        q = new DataView(buf);
    q.setUint8(0, 2, 1);
    q.setUint16(1, xy[0], 1);
    q.setUint16(3, xy[1], 1);
    q.setInt32(5, -1, 1);
    cursors.push(pool.pop());
    cursors[cursors.length - 1].click = buf;
    move(cursors[cursors.length - 1], mov);
}
 
var fontSize = 2;
var letterOffset = 0;
var alphabet = new Array(200);
var mainCursorWriting = true;
var botWriting = true;
var fontType = 'basic';
alphabet[58]=[[0,0,0,1],[2,0,2,1]],alphabet[40]=[[0,2,1,0],[2,2,1,0]],alphabet[41]=[[0,0,1,2],[2,0,1,2]],alphabet[63]=[[1,0,0,0],[0,0,0,2],[0,2,1,2],[1,2,1,1],[1,1,2,1]],alphabet[97]=[[2,0,0,0],[0,0,0,2],[0,2,2,2],[1,0,1,2]],alphabet[98]=[[2,0,0,0],[0,0,0,2],[0,2,2,2],[2,2,2,0],[1,0,1,2]],alphabet[99]=[[2,2,2,0],[2,0,0,0],[0,0,0,2]],alphabet[100]=[[2,0,0,0],[0,0,0,1],[0,1,1,2],[1,2,2,1],[2,1,2,0]],alphabet[101]=[[2,2,2,0],[2,0,0,0],[0,0,0,2],[1,0,1,2]],alphabet[102]=[[2,0,0,0],[0,0,0,2],[1,0,1,2]],alphabet[103]=[[1,1,1,2],[1,2,2,2],[2,2,2,0],[2,0,0,0],[0,0,0,2]],alphabet[104]=[[0,0,2,0],[0,2,2,2],[1,0,1,2]],alphabet[105]=[[0,0,0,2],[0,1,2,1],[2,0,2,2]],alphabet[106]=[[0,0,0,2],[0,1,2,1],[2,0,2,1]],alphabet[107]=[[0,0,2,0],[1,0,0,2],[1,0,2,2]],alphabet[108]=[[0,0,2,0],[2,0,2,2]],alphabet[109]=[[0,0,2,0],[0,0,2,1],[2,1,0,2],[0,2,2,2]],alphabet[110]=[[0,0,2,0],[0,0,2,2],[0,2,2,2]],alphabet[111]=[[2,0,0,0],[0,0,0,2],[0,2,2,2],[2,2,2,0]],alphabet[112]=[[2,0,0,0],[0,0,0,2],[0,2,1,2],[1,2,1,0]],alphabet[113]=[[2,0,0,0],[0,0,0,2],[0,2,2,2],[2,2,2,0],[1,1,2,2]],alphabet[114]=[[2,0,0,0],[0,0,0,2],[0,2,1,2],[1,2,1,0],[1,1,2,2]],alphabet[115]=[[0,0,0,2],[1,0,1,2],[2,0,2,2],[0,0,1,0],[1,2,2,2]],alphabet[116]=[[0,0,0,2],[0,1,2,1]],alphabet[117]=[[0,0,2,0],[0,2,2,2],[2,0,2,2]],alphabet[118]=[[0,0,2,1],[0,2,2,1]],alphabet[119]=[[0,0,2,0],[0,2,2,2],[2,0,1,1],[2,2,1,1]],alphabet[120]=[[0,0,2,2],[2,0,0,2]],alphabet[121]=[[0,0,1,1],[0,2,1,1],[1,1,2,1]],alphabet[122]=[[0,0,0,2],[0,2,2,0],[2,0,2,2]],alphabet[48]=[[0,0,2,0],[2,0,2,2],[2,2,0,2],[0,2,0,0]],alphabet[49]=[[0,0,0,1],[0,1,2,1],[2,0,2,2]],alphabet[50]=[[0,0,0,2],[0,2,1,2],[1,2,1,0],[1,0,2,0],[2,0,2,2]],alphabet[51]=[[0,0,0,2],[0,2,2,2],[2,2,2,0],[1,0,1,2]],alphabet[52]=[[0,0,1,0],[1,0,1,2],[0,2,2,2]],alphabet[53]=[[0,2,0,0],[0,0,1,0],[1,0,1,2],[1,2,2,2],[2,2,2,0]],alphabet[54]=[[0,2,0,0],[0,0,2,0],[2,0,2,2],[2,2,1,2],[1,2,1,0]],alphabet[55]=[[0,0,0,2],[0,2,2,2],[1,1,1,2]],alphabet[56]=[[0,0,2,0],[2,0,2,2],[2,2,0,2],[0,2,0,0],[1,0,1,2]],alphabet[57]=[[2,0,2,2],[2,2,0,2],[0,2,0,0],[0,0,1,0],[1,0,1,2]];
var message = '';
var moveMethod = 1;
function hkd(z) {
    console.log(z);
    switch(z.keyCode) {
        case 8:
        if (message.length <= 0) return;
            z.preventDefault();
            message = message.substring(0, message.length - 1);
            break;
    }
 
    // numpad keys
    switch (z.code) {
        case 'Numpad0':
            spamClicking=!spamClicking
            break;
        case 'Numpad1':
            moveMethod=1;
            break;
        case 'Numpad2':
            moveMethod=2;
            break;
        case 'Numpad3':
            moveMethod=3;
            break;
    }
 
}
 
function hkp(e) {
    if ((e.keyCode >= 39 && e.keyCode <= 41) ||
         e.keyCode == 44 || e.keyCode == 46 ||
        (e.keyCode >= 48 && e.keyCode <= 59 && e.location == 0) ||
        (e.keyCode >= 65 && e.keyCode <= 90) ||
        (e.keyCode >= 97 && e.keyCode <= 122) ||
         e.keyCode == 32 || e.keyCode == 63) {
        message = message.concat(String.fromCharCode(e.keyCode));
        return;
    }
    switch(e.keyCode) {
        case 13:
            drawWord(message.toLowerCase(), head[0], head[1]);
            message = "";
            e.preventDefault();
            break;    
        default:
            return;
    }
}
 
var j=0;
function drawLetter(a, x, y) {
    var letter = alphabet[a];
 
    if (letter == null)
        return;
 
    var g = new ArrayBuffer(9),
        e = new DataView(g);
 
    for (var i = 0; i < letter.length; i++) {
        e.setUint8(0, 3);
        e.setUint16(1, x+alphabet[a][i][1]*fontSize, !0);
        e.setUint16(3, y+alphabet[a][i][0]*fontSize, !0);
        e.setUint16(5, x+alphabet[a][i][3]*fontSize, !0);
        e.setUint16(7, y+alphabet[a][i][2]*fontSize, !0);
        if (mainCursorWriting) {
            if (j==0) WebSocket.prototype.send.call(tmp, g);
            else if (botWriting) WebSocket.prototype.send.call(pool[j-1], g);
            else WebSocket.prototype.send.call(tmp, g);
        } else if (botWriting) {
            if (j!=0) WebSocket.prototype.send.call(pool[j-1], g);
            else if (mainCursorWriting) WebSocket.prototype.send.call(tmp, g);
            else WebSocket.prototype.send.call(pool[j-1], g);
        }
        j++;
        if (j>=(botWriting?pool.length:0)+(mainCursorWriting?1:0)) j=0;
    }
}
 
var timeout = 70,
    wordIndex = 0;
function drawWord(s, x, y) {
    setTimeout(function () {
        drawLetter(s.charCodeAt(0), x, y);
        wordIndex++;
        if (s.length > 0)
            drawWord(s.substring(1, s.length), x+fontSize*3, y);
        else {
            wordIndex = 0;
            letterOffset = 0;
        }
    }, timeout);
}
 
document.onkeydown = hkd;
document.onkeypress = hkp;
 
var pathfinderDelay = 0;
function move(x, mov, type = moveMethod, i = 0) {
    if (x.readyState != 1) return;
    if (i == 0 && x) x.rdy = 0;
    var buf = new ArrayBuffer(type==3?13:9),
        q = new DataView(buf);
    q.setUint8(0, type, 1);
    if (type!==3 && i<mov.length) {
        q.setUint16(1, mov[i][0], 1);
        q.setUint16(3, mov[i][1], 1);
        q.setInt32(5, -1, 1);
    }
    WebSocket.prototype.send.call(x, buf);
    if (pathfinderDelay === 0) {
        if (type!==3)for (i=0; i<mov.length;) {
            if (x.readyState != 1) break;
            if (i == 0 && x) x.rdy = 0;
            q.setUint16(1, mov[i][0], 1);
            q.setUint16(3, mov[i][1], 1);
            WebSocket.prototype.send.call(x, buf);
            i++;
        }
        q.setUint8(0, 2, 1),
        q.setUint16(1, mov[mov.length-1][0], 1);
        q.setUint16(3, mov[mov.length-1][1], 1),
        q.setInt32(5, -1, 1);
        WebSocket.prototype.send.call(x, buf);
        if (x) x.rdy = 1;
    } else {
        setTimeout(function(){
            move(x, mov, type, i+1);
        }, pathfinderDelay)
    }
    x.rdy = 1;
}
 
function returnAllBots() {
    for (var i=0; i<cursors.length;) {
        pool.push(cursors.shift());
    }
}
 
var disconnected = 0,
    connected = 0,
    disconnecting = 0,
    connecting = 0;
 
function lop2() {
    setInterval(function() {
        disconnecting = 0, connecting = 0;
        for (var i=0;i<pool.length;) {
            if (pool[i].readyState == 1) {
                connecting++;
            } else if (pool[i].readyState == 2 || pool[i].readyState == 3) {
                disconnecting++;
            }; i++;
        }; for (var i=0; i<cursors.length;) {
            if (cursors[i].readyState == 1) {
                connecting++;
            } else if (cursors[i].readyState == 2 || cursors[i].readyState == 3) {
                disconnecting++;
            }; i++;
        }
    connected = connecting,
    disconnected = disconnecting;
    }, 200);
}; lop2();
var lop = setInterval(function() {
    cursors.forEach(function(x) { // when you deploy a minion.
        if (x) { // prevents error spam
            if (x.rdy) { // if the bot has connected
                x.send(x.click);
            }
        }
    });
}, 1000 / cps);
 
setInterval(function() { // spam clicking/moving :D (new wall hack i guess) // doesn't work so far sry
    pool.forEach(function(x) {
        if (x && x.rdy && !!spamClicking) {
            move(x, [head[0],head[1]], 2);
        }
    })
}, 1000 / cps);
 
var darkTheme = true;
document.body.style.cssText = "transition:1s;background-color:#000000;"
canvas.style.backgroundColor = "#ffffff";
noCursorLock.style.display = 'none';
noCursorLock.checked = true;
noDrawings.style.display = 'none';
noCursorLock.parentElement.style.display = 'none';
noDrawings.parentElement.style.display = 'none';
var elementdisplay = document.createElement("CANVAS");
document.body.appendChild(elementdisplay);
var moreScripts = document.getElementsByTagName('a')[0];
moreScripts.href = '';
moreScripts.style.display = 'none';
var advertisement = document.getElementsByTagName('div')[4];
advertisement.style.display = 'none';
var outline = document.getElementsByTagName('div')[1];
outline.style.border = '5px solid #000000';
outline.style.borderStyle = 'collapse';
outline.style.margin = '20px auto 0px';
var outline2 = document.getElementsByTagName('div')[3];
outline2.style.fontSize = '0px';
outline2.style.transition = '1s';
var display = document.getElementsByTagName('canvas')[1];
display.style.cssText = "background-color:#ffffff;width:800px;margin-left:calc(50% - 405px);margin-right:calc(50% - 405px);margin-top:0px;height:192px;border:5px solid #000000;border-style:collapse;";
var dpl = display.getContext('2d');
display.width = 800,
display.height = 192;
dpl.font = '12px NovaSquare';
dpl.lineWidth = 2.5;
display.onmousemove = function(e) { // for like buttons and stuff
    var xy = [(e.layerX - (ff ? canvas.offsetLeft : 0)) | 0, (e.layerY - (ff ? canvas.offsetTop : 0)) | 0];
    if ((xy[0] >= 249 && xy[0] <= 266) && (xy[1] >= 65 && xy[1] <= 80)) { // decrease pathfinder delay
        display.style.cursor = 'pointer';
    } else if ((xy[0] >= 302 && xy[0] <= 318) && (xy[1] >= 65 && xy[1] <= 80)) { // increase pathfinder delay
        display.style.cursor = 'pointer';
    } else if ((xy[0] >= 10 && xy[0] <= 133) && (xy[1] >= 122 && xy[1] <= 136)) { // return all bots
        display.style.cursor = 'pointer';
    } else if ((xy[0] >= 450 && xy[0] <= 468) && (xy[1] >= 95 && xy[1] <= 107)) { // decrease text delay
        display.style.cursor = 'pointer';
    } else if ((xy[0] >= 514 && xy[0] <= 532) && (xy[1] >= 95 && xy[1] <= 107)) { // increase text delay
        display.style.cursor = 'pointer';
    } else if ((xy[0] >= 609 && xy[0] <= 701) && (xy[1] >= 82 && xy[1] <= 97)) { // toggle dark theme
        display.style.cursor = 'pointer';
    } else if ((xy[0] >= 279 && xy[0] <= 326) && (xy[1] >= 82 && xy[1] <= 97)) { // toggle pathfinder mode
        display.style.cursor = 'pointer';
    } else if ((xy[0] >= 280 && xy[0] <= 316) && (xy[1] >= 97 && xy[1] <= 107)) { // toggle avoid exits
        display.style.cursor = 'pointer';
    } else display.style.cursor = 'auto';
}
 
display.onmousedown = function(e) { // for like buttons and stuff
    var xy = [(e.layerX - (ff ? canvas.offsetLeft : 0)) | 0, (e.layerY - (ff ? canvas.offsetTop : 0)) | 0];
    if ((xy[0] >= 249 && xy[0] <= 266) && (xy[1] >= 65 && xy[1] <= 80)) { // decrease pathfinder delay
        display.style.cursor = 'pointer';
        pathfinderDelay -= 5;
        if (pathfinderDelay < 0) pathfinderDelay = 0;
    } else if ((xy[0] >= 302 && xy[0] <= 318) && (xy[1] >= 65 && xy[1] <= 80)) { // increase pathfinder delay
        display.style.cursor = 'pointer';
        pathfinderDelay += 5;
        if (pathfinderDelay > 250) pathfinderDelay = 250;
    } else if ((xy[0] >= 10 && xy[0] <= 133) && (xy[1] >= 122 && xy[1] <= 136)) { // return all bots
        display.style.cursor = 'pointer';
        returnAllBots();
    } else if ((xy[0] >= 450 && xy[0] <= 468) && (xy[1] >= 95 && xy[1] <= 107)) { // decrease text delay
        display.style.cursor = 'pointer';
        timeout -= 10;
        if (timeout < 25) timeout = 25;
    } else if ((xy[0] >= 514 && xy[0] <= 532) && (xy[1] >= 95 && xy[1] <= 107)) { // increase text delay
        display.style.cursor = 'pointer';
        timeout += 10;
        if (timeout > 750) timeout = 750;
    } else if ((xy[0] >= 609 && xy[0] <= 701) && (xy[1] >= 82 && xy[1] <= 93)) { // toggle dark theme
        display.style.cursor = 'pointer';
        darkTheme=!darkTheme;
        if (darkTheme == false) {
            document.body.style.backgroundColor = '#ffffff';
        }
        else if (darkTheme == true) {
            document.body.style.backgroundColor = '#000000';
        }
    } else if ((xy[0] >= 279 && xy[0] <= 326) && (xy[1] >= 82 && xy[1] <= 93)) { // toggle pathfinder mode
        display.style.cursor = 'pointer';
        moveMethod==2?moveMethod=1:moveMethod=2;
    } else if ((xy[0] >= 280 && xy[0] <= 316) && (xy[1] >= 95 && xy[1] <= 107)) { // toggle avoid exits
        display.style.cursor = 'pointer';
        avoidGreenArea=!avoidGreenArea
    } else display.style.cursor = 'auto';
}
function updateDisplay() {
    dpl.save();
    dpl.clearRect(0,0,800,192);
 
    // message display
    dpl.lineWidth = 2.5;
    dpl.font = '18px NovaSquare';
    dpl.fillStyle = '#ffffff';
    dpl.globalAlpha = 0.5;
    dpl.strokeText('Message: '+message,10,28);
    dpl.strokeRect(5,38,790,2.5);
    dpl.globalAlpha = 1;
    dpl.fillText('Message: '+message,10,28);
    dpl.fillRect(5,38,790,2.5);
 
    // title display
    dpl.font = '16px NovaSquare';
    dpl.globalAlpha = 0.5;
    dpl.strokeText('Bots',10,58);
    dpl.strokeText('Pathfinder',210,58);
    dpl.strokeText('Text',410,58);
    dpl.strokeText('Miscellanious',610,58);
    dpl.globalAlpha = 1;
    dpl.fillText('Bots',10,58);
    dpl.fillText('Pathfinder',210,58);
    dpl.fillText('Text',410,58);
    dpl.fillText('Miscellanious',610,58);
 
    // bots display
    dpl.font = '12px NovaSquare';
    dpl.globalAlpha = 0.5;
    dpl.strokeText('Ready: '+pool.length,10,78);
    dpl.strokeText('Deployed: '+cursors.length,10,92);
    dpl.strokeText('Disconnected: '+disconnected,10,106);
    dpl.strokeText('Connected: '+connected,10,120);
    dpl.strokeText('[Return All Deployed]',10,134);
    dpl.globalAlpha = 1;
    dpl.fillText('Ready: '+pool.length,10,78);
    dpl.fillText('Deployed: '+cursors.length,10,92);
    dpl.fillText('Disconnected: '+disconnected,10,106);
    dpl.fillText('Connected: '+connected,10,120);
    dpl.fillText('[Return All Deployed]',10,134);
 
    // pathfinder display
    dpl.font = '12px NovaSquare';
    dpl.globalAlpha = 0.5;
    dpl.strokeText('Delay: [<] '+pathfinderDelay+'ms [>]',210,78);
    dpl.strokeText('Movement: '+(moveMethod==1?'[Normal]':moveMethod==2?'[Clicks]':'[?????]'),210,92);
    dpl.strokeText('Avoid exits: ['+avoidGreenArea+']',210,106);
    dpl.globalAlpha = 1;
    dpl.fillText('Delay: [<] '+pathfinderDelay+'ms [>]',210,78);
    dpl.fillText('Movement: '+(moveMethod==1?'[Normal]':moveMethod==2?'[Clicks]':'[?????]'),210,92);
    dpl.fillText('Avoid exits: ['+avoidGreenArea+']',210,106);
 
    // text display
    dpl.font = '12px NovaSquare';
    dpl.globalAlpha = 0.5;
    dpl.strokeText('Font: '+fontType,410,78);
    dpl.strokeText('Size: '+fontSize,410,92);
    dpl.strokeText('Delay: [<] '+timeout+'ms [>]',410,106);
    dpl.globalAlpha = 1;
    dpl.fillText('Font: '+fontType,410,78);
    dpl.fillText('Size: '+fontSize,410,92);
    dpl.fillText('Delay: [<] '+timeout+'ms [>]',410,106);
 
    // misc display
    dpl.font = '12px NovaSquare';
    dpl.globalAlpha = 0.5;
    dpl.strokeText('Spam Clicking Rate: '+cps+'cps',610,78);
    dpl.strokeText('[Change Theme]',610,92);
    dpl.globalAlpha = 1;
    dpl.fillText('Spam Clicking Rate: '+cps+'cps',610,78);
    dpl.fillText('[Change Theme]',610,92);
 
    // credit display
    dpl.font = '12px NovaSquare';
    dpl.globalAlpha = 0.5;
    dpl.strokeText('Created by vnx#6389',790 - dpl.measureText('Created by vnx#6389').width,168);
    dpl.strokeText('Special thanks to cledis',790 - dpl.measureText('Special thanks to cledis').width,182);
    dpl.globalAlpha = 1;
    dpl.fillText('Created by vnx#6389',790 - dpl.measureText('Created by vnx#6389').width,168);
    dpl.fillText('Special thanks to cledis',790 - dpl.measureText('Special thanks to cledis').width,182);
 
    dpl.restore();
    requestAnimationFrame(updateDisplay);
}
 
requestAnimationFrame(updateDisplay);