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.06
// @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);

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

document.getElementById('lb_title').style.color = 'red';
document.getElementById('div_score').style.color = '#009900';
document.getElementById('lb_title').style.fontWeight = 'bolder';
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';
// -------------------------------END--------------------------------