// ==UserScript== // @name The Ultimate Ratio Script (time, score/min, projected times) // @namespace http://tampermonkey.net/ // @version 1.4 // @description Uses time from your computer to calculate your ratio and expected time to get milestones based on that // @author MrCheese#1337 // @match https://diep.io/ // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; //Add text to screen const GUI1 = document.createElement("div"); const GUI2 = document.createElement("div"); const GUI3 = document.createElement("div"); const GUI4 = document.createElement("div"); const GUI5 = document.createElement("div"); const GUI6 = document.createElement("div"); GUI1.style = `pointer-events: none; position: fixed; bottom:335px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 33px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI2.style = `pointer-events: none; position: fixed; bottom:370px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; GUI3.style = `pointer-events: none; position: fixed; bottom:313px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI4.style = `pointer-events: none; position: fixed; bottom:291px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI5.style = `pointer-events: none; position: fixed; bottom:269px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI6.style = `pointer-events: none; position: fixed; bottom:247px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; document.body.appendChild(GUI1); document.body.appendChild(GUI2); document.body.appendChild(GUI3); document.body.appendChild(GUI4); document.body.appendChild(GUI5); document.body.appendChild(GUI6); GUI1.innerHTML = ' 00:00:00'; resetTimes(); //Set vaiables var curTime = '00:00:00'; var rawTime = 0; var ratio = 0; var rawRatio = 0; var hide = true; var _100k = false; var _500k = false; var _1m = false; var _2m = false; //Reset times at the start of each round function resetTimes() { GUI2.innerHTML = '100k 00:00:00'; GUI3.innerHTML = '500k 00:00:00'; GUI4.innerHTML = '1.0m 00:00:00'; GUI5.innerHTML = '2.0m 00:00:00'; GUI6.innerHTML = '0/min'; } //Press X to toggle document.body.onkeydown=function(e){ if(e.keyCode===88){ if (hide == false) { GUI1.style = `pointer-events: none; position: fixed; bottom:335px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 33px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; //GUI2.style = `pointer-events: none; position: fixed; bottom:370px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI3.style = `pointer-events: none; position: fixed; bottom:313px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI4.style = `pointer-events: none; position: fixed; bottom:291px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI5.style = `pointer-events: none; position: fixed; bottom:269px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; GUI6.style = `pointer-events: none; position: fixed; bottom:247px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; hide = true; } else { GUI1.style = `pointer-events: none; position: fixed; bottom:335px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; //GUI2.style = `pointer-events: none; position: fixed; bottom:370px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; GUI3.style = `pointer-events: none; position: fixed; bottom:313px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; GUI4.style = `pointer-events: none; position: fixed; bottom:291px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; GUI5.style = `pointer-events: none; position: fixed; bottom:269px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; GUI6.style = `pointer-events: none; position: fixed; bottom:247px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; hide = false; } } } //Get current score (by ABC) let _rScore = "0"; CanvasRenderingContext2D.prototype.fillText = new Proxy(CanvasRenderingContext2D.prototype.fillText, { apply(fillRect, ctx, [text, x, y, ...blah]) { if (text.startsWith('Score: ')) _rScore = text fillRect.call(ctx, text, x, y, ...blah); } }); const getScore = () => { if (!input.should_prevent_unload()) return -1; return parseFloat(_rScore.slice(7).replace(/,/g, '')); } //Parse time for projected score times function timeParse(score) { let time = (score / rawRatio) * 60; let hours = 0; let minutes = 0; let seconds = 0; if (time >= 3600) { hours = Math.round(time / 3600 - 0.5); time -= hours * 3600; if (hours < 10) hours = '0' + hours; } else hours = '00'; if (time >= 60) { minutes = Math.round(time / 60 - 0.5); time -= minutes * 60; if (minutes < 10) minutes = '0' + minutes; } else minutes = '00'; if (time !== 0) { seconds = Math.round(time); if (seconds < 10) seconds = '0' + seconds; } else seconds = '00'; let parsedTime = hours + ':' + minutes + ':' + seconds; return parsedTime; } //Main code (runs once a second) setInterval(() => { //if (input.should_prevent_unload()) { // GUI2.style = `pointer-events: none; position: fixed; bottom:370px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 0px;`; //} else { // GUI2.style = `pointer-events: none; position: fixed; bottom:370px; right:15px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-size: 20px; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;`; //} //Get time and display on main timer if (input.should_prevent_unload() && GUI1.innerHTML == ' 00:00:00') { GUI1.innerHTML = `${curTime}`; } else if (input.should_prevent_unload()) { let [hours, minutes, seconds] = curTime.split(':'); if (parseInt(seconds) + 1 !== 60) { let addZero = (parseInt(seconds) + 1).toString().length == 1 ? '0' : ''; seconds = `${addZero}${parseInt(seconds) + 1}`; rawTime += 1; } else { if (parseInt(minutes) + 1 !== 60) { let addZero = (parseInt(minutes) + 1).toString().length == 1 ? '0' : ''; seconds = '00'; minutes = `${addZero}${parseInt(minutes) + 1}`; } else { let addZero = (parseInt(hours) + 1).toString().length == 1 ? '0' : ''; seconds = '00'; minutes = '00'; hours = `${addZero}${parseInt(hours) + 1}`; } } curTime = `${hours}:${minutes}:${seconds}`; GUI1.innerHTML = `${curTime}`; } else if (!input.should_prevent_unload()) { GUI1.innerHTML = ' 00:00:00'; curTime = '00:00:00'; rawTime = 0; } //Check if score is 0 if (getScore() !== -1) { if (getScore() == 0) resetTimes() else { //Calculate and display ratio if (rawTime != 0) ratio = getScore() / (rawTime / 60); else ratio = 0; rawRatio = ratio; if (ratio >= 1000000) { ratio /= 1000000; ratio = ratio.toFixed(2); ratio = ratio + 'm'; } else if (ratio >= 1000) { ratio /= 1000; ratio = ratio.toFixed(2); ratio = ratio + 'k'; } else ratio = Math.round(ratio); GUI6.innerHTML = ratio + '/min'; //Display projected score times if (getScore() < 100000) { GUI2.innerHTML = '100k ' + timeParse(100000); } else if (_100k == false) { GUI2.innerHTML = curTime; _100k = true; } if (getScore() < 500000) { GUI3.innerHTML = '500k ' + timeParse(500000); } else if (_500k == false) { GUI3.innerHTML = curTime; _500k = true; } if (getScore() < 1000000) { GUI4.innerHTML = '1.0m ' + timeParse(1000000); } else if (_1m == false) { GUI4.innerHTML = curTime; _1m = true; } if (getScore() < 2000000) { GUI5.innerHTML = '2.0m ' + timeParse(2000000); } else if (_2m == false) { GUI5.innerHTML = curTime; _2m = true; } } } }, 1000); })();