Greasy Fork is available in English.

The Ruiner of Alis.io (Speed_Hack,Faster_Split,Faster_Macro,Crazy_Settings)

This script is made up of Acydwarp's thoughts so give your kiddiot questions to him! The best perfomance for Instant and other game modes. Auto-Double,Fast Macro,Auto Respawn and other fun features. Have fun!

// ==UserScript==
// @name         The Ruiner of Alis.io (Speed_Hack,Faster_Split,Faster_Macro,Crazy_Settings)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  This script is made up of Acydwarp's thoughts so give your kiddiot questions to him! The best perfomance for Instant and other game modes. Auto-Double,Fast Macro,Auto Respawn and other fun features. Have fun!
// @author       PutinWarp aka Zian (zian.pp.ua)
// @match        http://alis.io/
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js
// @grant        1$
// ==/UserScript==

// Thanks Acydwarp for stealing my ideas :)

window.addEventListener('keydown', keydown);
window.addEventListener('keyup', keyup);
window.addEventListener('keydown', Hotkey);
window.addEventListener('mouseup', mouseup);


// INFORMATIONS

//alert something important
//if(localStorage.tm_alerted !== 'true'){}


//text in the middle
addLoadEvent(function () {
    if (localStorage.getItem('tm_adblock') === "true") {
        var middle_text = document.createElement("center");
        document.getElementById('ad_main').appendChild(middle_text);
        middle_text.style.color = '#bebebe';
        middle_text.style.fontSize = 'medium';
        var middle_text1 = document.createElement("a");
        middle_text.appendChild(middle_text1);
        middle_text1.id = "middle_text1";
        middle_text1.href = "https://greasyfork.org/en/forum/post/discussion?script=28987";
        middle_text1.target = "_blank";
        middle_text1.innerHTML = 'Feedback, Ideas, Bugs';
        middle_text.style.opacity = "0";
        fadeIn_middle_text();
    }

    function fadeIn_middle_text() {
        if (middle_text.style.opacity <= 1) {
            middle_text.style.opacity = JSON.parse(middle_text.style.opacity) + 0.1;
            setTimeout(fadeIn_middle_text, 30);
        }
    }
});



// ------------------------END OF INFORMATIONS------------------------


// CRAZY SETTINGS

// shortly faster rejoin
respawnDelay = 180;

document.getElementById('settingsoverlays').style.height = "565px";

var unlock_crazy_settings = document.createElement("div");
unlock_crazy_settings.className = "checkbox";
var unlock_crazy_settingsLabel = document.getElementsByClassName("checkbox")[0].children[0].cloneNode(true);
document.getElementsByClassName('drawdelay')[0].insertBefore(unlock_crazy_settings, document.getElementById('draw_delay1').nextSibling);
unlock_crazy_settings.appendChild(unlock_crazy_settingsLabel);
unlock_crazy_settingsLabel.childNodes[1].textContent = "Crazy Settings";
unlock_crazy_settingsLabel.firstChild.checked = false;

unlock_crazy_settingsLabel.onclick = function () {
    if (unlock_crazy_settingsLabel.firstChild.checked) {
        document.getElementById('max_draw_time').min = "0";
        document.getElementById('max_draw_time').max = "1000";

        document.getElementById('draw_delay1').min = "0";
        document.getElementById('draw_delay1').max = "1000";

        document.getElementById('opt_zoom_speed').min = "0.1";
        document.getElementById('opt_zoom_speed').max = "1.9";

        document.getElementById('opt_zoom_speed').onclick = function () {
            if (JSON.parse(document.getElementById('txt_zoom_speed').innerHTML) > 1) {
                document.getElementById('txt_zoom_speed').innerHTML += " INVERSED";
            }
        };
    } else {
        document.getElementById('max_draw_time').min = "25";
        document.getElementById('max_draw_time').max = "200";

        document.getElementById('draw_delay1').min = "120";
        document.getElementById('draw_delay1').max = "250";

        document.getElementById('opt_zoom_speed').min = "0.88";
        document.getElementById('opt_zoom_speed').max = "0.99";

        document.getElementById('opt_zoom_speed').removeAttribute("onclick");
    }
};
// ------------------------END OF CRAZY SETTINGS------------------------


// CHECKBOXES / HOTKEYINPUTS

var specialCases = {
    0: "",
    9: "TAB",
    13: "ENTER",
    16: "SHIFT",
    27: "ESCAPE"
};

//create Adblock checkbox
var AdblockContainer = document.createElement("div");
AdblockContainer.className = "checkbox";
var AdblockLabel = document.getElementsByClassName("checkbox")[0].children[0].cloneNode(true);
document.getElementsByClassName('settings3')[0].insertBefore(AdblockContainer, document.getElementsByClassName("checkbox")[22].nextSibling);
AdblockContainer.appendChild(AdblockLabel);
var Adblock = AdblockLabel.children[0];
AdblockLabel.childNodes[1].textContent = "Adblock";
AdblockLabel.title = "This will refresh the page!";
Adblock.checked = JSON.parse(localStorage.getItem('tm_adblock'));
if (Adblock.checked) {
    document.getElementById("ad_bottom").remove(); // remove bottom ad;
    document.getElementById('ad_right').remove();
    while (document.getElementById("ad_main").firstChild) //remove middle ad;
        document.getElementById("ad_main").firstChild.remove();
}


// create Switch Gamemode Hk
var SwitchHk = document.createElement("div");
SwitchHk.className = "row";
var SwitchHkLabel1 = document.createElement("div");
SwitchHkLabel1.className = "cell hotkey";
document.getElementById('hotkey_table').insertBefore(SwitchHk, document.getElementsByClassName("row")[0]);
SwitchHk.appendChild(SwitchHkLabel1);
var SwitchHkLabel2 = document.createElement("div");
SwitchHkLabel2.className = "cell";
SwitchHkLabel2.textContent = "Switch Gamemode";
SwitchHk.appendChild(SwitchHkLabel2);
SwitchHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_switch')] || localStorage.getItem('tm_hk_switch') ? String.fromCharCode(localStorage.getItem('tm_hk_switch')) : "";

// create Previous-Server Hk
var PrevHk = document.createElement("div");
PrevHk.className = "row";
var PrevHkLabel1 = document.createElement("div");
PrevHkLabel1.className = "cell hotkey";
document.getElementById('hotkey_table').insertBefore(PrevHk, document.getElementsByClassName("row")[0]);
PrevHk.appendChild(PrevHkLabel1);
var PrevHkLabel2 = document.createElement("div");
PrevHkLabel2.className = "cell";
PrevHkLabel2.textContent = "Previous Server";
PrevHk.appendChild(PrevHkLabel2);
PrevHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_prev')] || localStorage.getItem('tm_hk_prev') ? String.fromCharCode(localStorage.getItem('tm_hk_prev')) : "";

// create Next-Server Hk
var NextHk = document.createElement("div");
NextHk.className = "row";
var NextHkLabel1 = document.createElement("div");
NextHkLabel1.className = "cell hotkey";
document.getElementById('hotkey_table').insertBefore(NextHk, document.getElementsByClassName("row")[0]);
NextHk.appendChild(NextHkLabel1);
var NextHkLabel2 = document.createElement("div");
NextHkLabel2.className = "cell";
NextHkLabel2.textContent = "Next Server";
NextHk.appendChild(NextHkLabel2);
NextHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_next')] || localStorage.getItem('tm_hk_next') ? String.fromCharCode(localStorage.getItem('tm_hk_next')) : "";

// create Spectate Hk
var SpecHk = document.createElement("div");
SpecHk.className = "row";
var SpecHkLabel1 = document.createElement("div");
SpecHkLabel1.className = "cell hotkey";
document.getElementById('hotkey_table').insertBefore(SpecHk, document.getElementsByClassName("row")[0]);
SpecHk.appendChild(SpecHkLabel1);
var SpecHkLabel2 = document.createElement("div");
SpecHkLabel2.className = "cell";
SpecHkLabel2.textContent = "Spectate";
SpecHk.appendChild(SpecHkLabel2);
SpecHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_spec')] || localStorage.getItem('tm_hk_spec') ? String.fromCharCode(localStorage.getItem('tm_hk_spec')) : "";

// create Play Hk
var PlayHk = document.createElement("div");
PlayHk.className = "row";
var PlayHkLabel1 = document.createElement("div");
PlayHkLabel1.className = "cell hotkey";
document.getElementById('hotkey_table').insertBefore(PlayHk, document.getElementsByClassName("row")[0]);
PlayHk.appendChild(PlayHkLabel1);
var PlayHkLabel2 = document.createElement("div");
PlayHkLabel2.className = "cell";
PlayHkLabel2.textContent = "Play";
PlayHk.appendChild(PlayHkLabel2);
PlayHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_play')] || localStorage.getItem('tm_hk_play') ? String.fromCharCode(localStorage.getItem('tm_hk_play')) : "";

//save checkbox states
document.getElementsByClassName('close-overlay')[0].onclick = function () {
    if (JSON.parse(localStorage.getItem('tm_adblock')) !== Adblock.checked) {
        localStorage.setItem("tm_adblock", Adblock.checked);
        location.reload();
    }
};
// ------------------------END OF CHECKBOXES / HOTKEYINPUTS------------------------

// AUTO RESPAWN & SPECTATE AFTER DEATH

addLoadEvent(function () {
    setMode();

    function fadeIn_BtnCon() {
        BtnContainer.style.opacity = JSON.parse(BtnContainer.style.opacity) + 0.05;
        setTimeout(fadeIn_BtnCon, 50);
    }
    window.setTimeout(function () {
        fadeIn_playBtn = setInterval(function () {
            if (window.getComputedStyle(document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0], null).getPropertyValue('width') > "150px") {
                document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0].style.width = parseInt(window.getComputedStyle(document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0], null).getPropertyValue('width')) - 1 + "px";
                document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0].style.marginLeft = parseInt(window.getComputedStyle(document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0], null).getPropertyValue('margin-left')) + 1 + "px";
            } else {
                clearInterval(fadeIn_playBtn);

                document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0].style.marginLeft = "0px";
                document.getElementsByClassName('uk-card uk-card-body uk-card-default')[1].insertBefore(BtnContainer, document.getElementsByClassName("uk-button uk-button-default btn-play")[0]);

                fadeIn_BtnCon();
            }
        }, 30);
    }, 1000);
});

//create Auto Respawn / Spectate after Death Button
var BtnContainer = document.createElement("button");
BtnContainer.className = "uk-button uk-button-default btn-spectate";
BtnContainer.style.right = "4px";
BtnContainer.style.paddingTop = "11px";
BtnContainer.style.opacity = '0';

function setMode() {
    if (JSON.parse(localStorage.getItem('tm_join/spec')) === 1) {
        BtnContainer.style.borderColor = "#1660a0";
        BtnContainer.innerHTML = "<h4>R</h4>";
        BtnContainer.title = "Auto-Respawn";
    } else if (JSON.parse(localStorage.getItem('tm_join/spec')) === 2) {
        BtnContainer.style.borderColor = "#1660a0";
        BtnContainer.innerHTML = "<h4>S</h4>";
        BtnContainer.title = "Spectate after Death";
    } else {
        BtnContainer.style.borderColor = "#3c3c3c";
        BtnContainer.innerHTML = "";
        BtnContainer.title = "";
    }
}

//user button
mouseover = false;
BtnContainer.onmouseover = function () {
    mouseover = true;
};
BtnContainer.onmouseout = function () {
    mouseover = false;
};

function mouseup(event) {
    if (mouseover) {
        if (event.button === 0) {
            if (JSON.parse(localStorage.getItem('tm_join/spec')) < 2) {
                localStorage.setItem('tm_join/spec', JSON.parse(localStorage.getItem('tm_join/spec')) + 1);
            } else {
                localStorage.setItem('tm_join/spec', "0");
            }
            setMode();
        }
        if (event.button === 2) { //insert interval
            swal({
                title: 'Set check interval',
                html: '<p>in milliseconds</p><p>Low value may cause lag, recommended is 50-200.',
                input: 'range',
                inputAttributes: {
                    min: 0,
                    max: 300,
                    step: 10
                },
                inputValue: localStorage.getItem('tm_interval')
            }).catch(swal.noop).then(function (result) {
                if (result !== undefined && result !== localStorage.getItem('tm_interval')) {
                    localStorage.setItem('tm_interval', result);
                    swal({
                        title: 'Refresh required',
                        text: 'Refresh to take affect!',
                        type: 'error',
                        showCancelButton: 'true',
                        confirmButtonText: 'Yes, refresh now!',
                        cancelButtonText: 'No, refresh later!',
                        onOpen: function () {
                            swal.getConfirmButton().onclick = function () {
                                location.reload();
                            };
                        }
                    }).catch(swal.noop);
                }
            });
        }
    }
}

//respawn & spectate function
var overlay = false;
var just_joined = false;

window.setInterval(function () {
    if (isJoinedGame !== true && myApp.isSpectating !== true && currentIP !== "" && overlay !== true) {
        if (JSON.parse(localStorage.getItem('tm_join/spec')) === 1 && just_joined !== true) {
            document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0].click();
            just_joined = true;
            window.setTimeout(function () {
                just_joined = false;
            }, 100);
        } else if (JSON.parse(localStorage.getItem('tm_join/spec')) === 2) {
            spectate();
        }
    }
    overlay = document.getElementById('overlays').style.display === "none" ? false : window.setTimeout(function () {
        overlay = true;
    }, 100);
}, localStorage.getItem('tm_interval'));

// Spectate after joining a server
window.setInterval(function () {
    if (window.webSocket !== undefined && webSocket.readyState === 0)
        setTimeout(spectate, 300);
}, 100);
// ------------------------END OF AUTO RESPAWN & SPECTATE AFTER DEATH------------------------

// HOTKEYS

// alert warning when reached first/last server
function warning() {
    if (window.warning1 === undefined || warning1.parentNode === null) {
        warning1 = document.createElement('div');
        warning1.Id = 'noty_layout__topCenter';
        document.getElementsByTagName('body')[0].appendChild(warning1);
        warning1.style.paddingTop = "5%";
        warning1.style.margin = "auto";
        warning1.style.width = "325px";
        warning1.style.position = "relative";
        warning1.style.zIndex = "99999";


        var warning2 = document.createElement('div');
        warning2.Id = 'noty_bar_88661265-2652-4807-94ed-77f64613667a';
        warning2.className = 'noty_bar noty_type__warning noty_theme__mint noty_close_with_click noty_has_timeout';
        warning1.appendChild(warning2);

        warning2_firstChild = document.createElement('div');
        warning2_firstChild.className = 'noty_body';
        warning2_firstChild.textContent = (s > 1 ? "Last" : "First") + " Server reached!";
        warning2_firstChild.style.textAlign = "center";
        warning2.appendChild(warning2_firstChild);
        setTimeout(function () {
            warning1.remove();
        }, 1000);
    }
}

//get variables
var serverObject;
var server;
var region;
var s;
var serverlist = document.getElementsByClassName('uk-list');
var gamemodesEU = [];
var gamemodesNA = [];
var gamemodesAS = [];
addLoadEvent(function () {
    for (var i = 0; i < 6; i++) {
        gamemodesEU[i] = document.getElementById('eu-server').firstChild.childNodes[i].id.split('-')[1].toLowerCase();
        gamemodesNA[i] = document.getElementById('na-server').firstChild.childNodes[i].id.split('-')[1].toLowerCase();
        gamemodesAS[i] = document.getElementById('as-server').firstChild.childNodes[i].id.split('-')[1].toLowerCase();
    }
});

function getVars() {
    if (myApp.getCurrentPartyCode() !== "") {
        serverObject = myApp.getCurrentPartyCode().split(".");
        region = serverObject[2];
        s = parseInt(serverObject[4].slice(-2));
        sl = region !== 'as' ? region == 'eu' ? gamemodesEU.indexOf(serverObject[1]) : gamemodesNA.indexOf(serverObject[1]) + 6 : gamemodesAS.indexOf(serverObject[1]) + 12;
    }
}


function keydown() {
    if (window.webSocket !== undefined && document.activeElement.tagName !== "INPUT" && document.getElementById('hotkeysoverlay').style.display !== "block") {
        switch (event.keyCode) {
            case 32:
                split();
                break;
            case 87:
                feeding = true;
                setTimeout(feed, 0);
                break;
            case parseInt(localStorage.getItem('tm_hk_play')):
                document.getElementsByClassName('uk-button uk-button-default btn-play uk-button-large uk-width-small')[0].click();
                break;
            case parseInt(localStorage.getItem('tm_hk_spec')):
                spectate(); //triggers spectate function
                break;
            case parseInt(localStorage.getItem('tm_hk_next')):
                //if next-key is pressed, connect to next server
                getVars();
                if (s < serverlist[sl].childElementCount)
                    serverlist[sl].childNodes[s].click();
                else warning();
                break;
            case parseInt(localStorage.getItem('tm_hk_prev')):
                //if previous-key is pressed, connect to previous server
                getVars();
                if (s > 1)
                    serverlist[sl].childNodes[s - 2].click();
                else warning();
                break;
            case parseInt(localStorage.getItem('tm_hk_switch')):
                getVars();
                regionint = region !== 'as' ? region === 'eu' ? 0 : 6 : 12;
                serverlist[sl + 1 < regionint + 6 ? sl + 1 : regionint].firstChild.click();
                setTimeout(spectate, 300);
        }
    }
}

//fix spectate bug
window.setInterval(function () {
    document.getElementsByClassName('uk-button uk-button-default btn-spectate')[0].disabled = "";
}, 40);

// Macro Split
function split() {
    $("body").trigger($.Event("keydown", {
        keyCode: 32
    }));
    $("body").trigger($.Event("keyup", {
        keyCode: 32
    }));
}

//Macro Feed
function keyup(event) {
    if (event.keyCode == 87) { // key W
        feeding = false;
    }
}

function feed() {
    if (feeding) {
        window.onkeydown({
            keyCode: 87
        }); // key W
        window.onkeyup({
            keyCode: 87
        });
        setTimeout(feed, 0);
    }
}

// ------------------------END OF HOTKEYS------------------------

// HOTKEY INPUT
var thingsClicked = {
    spec: false,
    play: false,
    next: false,
    prev: false,
    switch: false,
};
var keyCode;
var codeAsChar;

function unselect() {
    selectedHotkeyRow = null; // unselect "real" Hotkeys
    thingsClicked.spec = false;
    thingsClicked.play = false;
    thingsClicked.next = false;
    thingsClicked.prev = false;
    thingsClicked.switch = false;
}

document.getElementsByClassName('close-overlay')[1].onclick = function () {
    unselect();
};
SpecHk.onclick = function () {
    unselect();
    thingsClicked.spec = true;
};
PlayHk.onclick = function () {
    unselect();
    thingsClicked.play = true;
};
NextHk.onclick = function () {
    unselect();
    thingsClicked.next = true;
};
PrevHk.onclick = function () {
    unselect();
    thingsClicked.prev = true;
};
SwitchHk.onclick = function () {
    unselect();
    thingsClicked.switch = true;
};

var things = ["spec", "play", "next", "prev", "switch"];

function Hotkey(event) {
    if (event.keyCode) {
        for (let thing of things) {
            if (thingsClicked[thing]) {
                if (event.keyCode !== 46)
                    localStorage.setItem('tm_hk_' + thing, event.keyCode);
                else
                    localStorage.setItem('tm_hk_' + thing, '0');
            }
        }
        unselect();
        // display the character:
        SpecHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_spec')] || localStorage.getItem('tm_hk_spec') ? String.fromCharCode(localStorage.getItem('tm_hk_spec')) : "";
        PlayHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_play')] || localStorage.getItem('tm_hk_play') ? String.fromCharCode(localStorage.getItem('tm_hk_play')) : "";
        NextHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_next')] || localStorage.getItem('tm_hk_next') ? String.fromCharCode(localStorage.getItem('tm_hk_next')) : "";
        PrevHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_prev')] || localStorage.getItem('tm_hk_prev') ? String.fromCharCode(localStorage.getItem('tm_hk_prev')) : "";
        SwitchHkLabel1.textContent = specialCases[localStorage.getItem('tm_hk_switch')] || localStorage.getItem('tm_hk_switch') ? String.fromCharCode(localStorage.getItem('tm_hk_switch')) : "";
    }
}
// ------------------------END OF HOTKEYINPUT------------------------


// Short Script to simplyfy onload function
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function () {
            if (oldonload) {
                oldonload();
            }
            func();
        };
    }
}
// Date
var date = new Date();
$("lb_detail").after('<div id="datename" style="font-size:14px;font-weight:900;color:#00bfff;padding-top:10px;">' + date.toLocaleString() + '</div>');
document.getElementById('datename').style.textDecoration = 'overline';
document.getElementById("nick").maxLength = "25";
document.getElementById("team_name").placeholder = "Team";
document.getElementById("nick").placeholder = "Your ugly nick";
document.getElementById("skinurl").placeholder = "Your ugly skin(imgur)";

// New  nice Theme

document.getElementById('lb_title').style.color = '#009900';
document.getElementById('div_score').style.color = 'red';
document.getElementById('div_score').style.fontWeight = '900';
document.getElementById('lb_title').style.fontWeight = '900';
document.getElementById('minimap').style.height = '215px';
document.getElementById('minimap').style.width = '215px';
document.getElementById('div_lb').style.width = '215px';
document.getElementById('ad_main').style.display = 'hidden';
document.getElementById('ad_main').style.display = 'hidden';
document.getElementById('hideui').style.color = 'red';
document.getElementById('hideui').style.width = '20px';
document.getElementById('hideui').style.heigth = '20px';
document.getElementById('lb_title').style.textDecoration = 'underline';


// -------------------------------END--------------------------------