Greasy Fork

The Ruiner of Alis.io

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!

目前为 2017-10-20 提交的版本。查看 最新版本

// ==UserScript==
// @name         The Ruiner of Alis.io
// @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/
// @grant        1$
// ==/UserScript==

// HUGE thanks to Acydwarp for stealing my ideas :)

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

// AdBlock is responsed.
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);
        }
    }
});


// CRAZY SETTINGS

// 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");
    }
};
// -0--0-00-CRAZY SETTINGS0-0-00-0-0


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

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


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------------------------


// 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);

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

// Feed God
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);
    }
}
// -------NO HOTKEYS-----------



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();
     
        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')) : "";
    }
}
// -------------HOTKEY END---------------


function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function () {
            if (oldonload) {
                oldonload();
            }
            func();
        };
    }
}
// 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';

// mother russia

window.onload = function() {
var sound = new Audio();
sound.src = 'mother_russia.mp3';
sound.play();
}
// End.