// ==UserScript==
// @name Sploop Improver
// @namespace -
// @version -
// @description Improves Sploop
// @author Carolina Reaper
// @match *://sploop.io/*
// @match *://lostworld.io/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=sploop.io
// @grant none
// ==/UserScript==
// Start Injection
let inject1 = Date.now();
console.log("Injecting Script, Sploop Improver.");
// Remove annoying pop-up before tab is closed
window.onbeforeunload = null;
//Element Remover
function remove(e) {
e.forEach(t => document.getElementById(t) && document.getElementById(t).remove());
};
// Removes unnessecary stuff
setInterval(function() {
remove(["google_play", "cross-promo", "da-bottom", "bottom-wrap", "right-content", "lostworld-io_970x250", "lostworld-io_300x250", "lostworld-io_300x250_1", "lostworld-io_300x250_2", "shop-io-games", "webgames-text", "da-right", "da-left"]);
}, 0);
// Create New Elements
let progress = document.createElement("div"), progressBar = document.createElement("div"), progressTitle = document.createElement("div"),
percentageValue = document.createElement("div"), scoreValue = document.createElement("div"), rightTextKills = document.createElement("div"),
rightTextDeaths = document.createElement("div"), killDeathRatio = document.createElement("div");
// Variables for menu parts
let bottom = document.getElementById("game-bottom-content"), right = document.getElementById("game-right-content-main"), left = document.getElementById("game-left-content-main");
// Provide ID and Class to elements
progress.classList.add("progress");
progressBar.classList.add("progressBar");
progressTitle.id = "progressTitle";
percentageValue.id = "percentageValue";
scoreValue.id = "scoreValue";
rightTextKills.id = "rightTextKills";
rightTextDeaths.id = "rightTextDeaths";
killDeathRatio.id = "killDeathRatio";
bottom.classList.add("boldBorders");
right.classList.add("boldBorders");
left.classList.add("boldBorders");
// Append elements to bottom
bottom.appendChild(progressTitle);
bottom.appendChild(progress);
progress.appendChild(progressBar);
progressBar.appendChild(percentageValue);
bottom.appendChild(scoreValue);
// Append elements to right
right.appendChild(rightTextKills);
right.appendChild(rightTextDeaths);
right.appendChild(killDeathRatio);
// Add innerHTML
progressTitle.innerHTML = "Rank Progress";
// Interval
setInterval(function() {
let percentage = Math.round((parseInt(document.getElementById("total-score").innerText, 1e1) / (parseInt(document.getElementById("score-left-value").innerText, 1e1) + parseInt(document.getElementById("total-score").innerText, 1e1))) * 1e2);
progressBar.style.width = percentage.toString() + "%";
percentageValue.innerHTML = progressBar.style.width;
scoreValue.innerHTML = "(" + document.getElementById("total-score").innerText + " / " + (parseInt(document.getElementById("score-left-value").innerText) + parseInt(document.getElementById("total-score").innerText)).toString() + ")";
rightTextKills.innerHTML = "Total Kills<br>" + document.getElementById("total-kill").innerText;
rightTextDeaths.innerHTML = "Total Deaths<br>" + document.getElementById("total-death").innerText;
killDeathRatio.innerHTML = Math.round(parseInt(document.getElementById("total-kill").innerText) / parseInt(document.getElementById("total-death").innerText)) + " kills per death";
}, 0);
// Add CSS
let styleSheet = document.createElement("style");
styleSheet.innerText = `
.boldBorders {
border: 5px solid rgb(20 20 20 / 30%);
border-radius: 10px;
}
#game-bottom-content {
width: 1000px;
height: 225px;
}
#progressTitle {
font-size: 25px;
text-align: center;
color: rgba(255, 255, 255, 0.8);
border: 7px solid rgba(0,0,0,0);
}
.progress {
background-color: rgb(20 20 20 / 40%);
border-radius: 25px;
border: 5px solid rgb(20 20 20 / 80%);
height: 50px;
width: 700px;
margin: auto;
}
.progressBar {
display: flex;
align-items: center;
justify-content: center;
border-radius: 25px;
background-color: rgb(20 20 20 / 60%);
height: 100%;
width: 0%;
transition: 1s ease 0.25s;
}
#percentageValue {
color: rgba(255, 255, 255, 0.8);
font-size: 18px;
text-align: center;
}
#scoreValue {
font-size: 18px;
text-align: center;
color: rgba(255, 255, 255, 0.8);
border: 5px solid rgba(0,0,0,0);
}
#rightTextKills {
font-size: 20px;
color: rgba(255, 255, 255, 0.8);
border: 10px solid rgba(0,0,0,0);
text-align: center;
float: left;
}
#rightTextDeaths {
font-size: 20px;
color: rgba(255, 255, 255, 0.8);
border: 10px solid rgba(0,0,0,0);
text-align: center;
float: right;
}
#killDeathRatio {
font-size: 20px;
color: rgba(255, 255, 255, 0.8);
border: 5px solid rgba(0,0,0,0);
text-align: center;
}
`;
document.head.appendChild(styleSheet);
// FPS + Server
(function() {
'use strict';
try {
window.admob = {
requestInterstitialAd: () => {},
showInterstitialAd: () => {}
};
} catch (e) {
console.warn(e)
};
let UPDATE_DELAY = 7e2;
let UPDATE_DELAY1 = 1e2;
let frames = 0;
let frames1 = 0;
let lastUpdate = 0;
let lastUpdate1 = 0;
function updateCounter1() {
let bgColor = getComputedStyle(document.body, null).getPropertyValue("background-color");
let bgColorValues = cssColorToRGB(bgColor);
let textColor = getInvertedRGB(bgColorValues);
let displayBg = getOpaqueRGB(bgColorValues);
let now = Date.now();
let elapsed = now - lastUpdate1;
if (elapsed < UPDATE_DELAY1) frames1++;
else {
frames1 = 0;
lastUpdate1 = now;
};
requestAnimationFrame(updateCounter1);
};
lastUpdate1 = Date.now();
requestAnimationFrame(updateCounter1);
let displayElement = document.createElement("div");
displayElement.style.padding = "20px";
displayElement.style = "font-size:20px;"
displayElement.style.display = "block";
displayElement.style.position = "absolute";
displayElement.style.top = "1px";
displayElement.style.left = "50%";
displayElement.style.transform = "translateX(-50%)";
displayElement.textContent = "Loading...";
displayElement.style.color = "#fff";
displayElement.style.background = "rgba(255, 255, 255, 0)";
document.body.appendChild(displayElement);
function cssColorToRGB(color) {
let values;
if (color.startsWith("rgba")) {
values = color.substring(5, color.length - 1).split(",");
} else if (color.startsWith("rgb")) {
values = color.substring(4, color.length - 1).split(",");
} else if (color.startsWith("#") && color.length === 4) {
values = [];
values[0] = "" + parseInt("0x" + color.substr(1, 1));
values[1] = "" + parseInt("0x" + color.substr(2, 1));
values[2] = "" + parseInt("0x" + color.substr(3, 1));
} else if (color.startsWith("#") && color.length === 7) {
values = [];
values[0] = "" + parseInt("0x" + color.substr(1, 2));
values[1] = "" + parseInt("0x" + color.substr(3, 2));
values[2] = "" + parseInt("0x" + color.substr(5, 2));
} else return {
r: 255,
g: 255,
b: 255
};
return {
r: Number(values[0]),
g: Number(values[1]),
b: Number(values[2])
};
};
function getInvertedRGB(values) {
return "rgb(" + (255 - values.r) + "," + (255 - values.g) + "," + (255 - values.b) + ")";
};
function getOpaqueRGB(values) {
return "rgba(" + values.r + "," + values.g + "," + values.b + ", 0.7)";
};
const dropDown = document.querySelector("#server-select");
function updateCounter() {
let bgColor = getComputedStyle(document.body, null).getPropertyValue("background-color");
let bgColorValues = cssColorToRGB(bgColor);
let textColor = getInvertedRGB(bgColorValues);
let displayBg = getOpaqueRGB(bgColorValues);
let now = Date.now();
let elapsed = now - lastUpdate;
if (elapsed < UPDATE_DELAY) frames++;
else {
let fps = Math.round(frames / (elapsed / 1e3));
frames = 0;
lastUpdate = now;
displayElement.textContent = `Fps: ${fps} \n ${dropDown.value.split(" -")[0]}`;
};
requestAnimationFrame(updateCounter);
};
lastUpdate = Date.now();
requestAnimationFrame(updateCounter);
})();
// Complete Injection
let injectionTime = Date.now() - inject1;
console.log("Injection Complete, Sploop Improver.\nInjection Time: " + injectionTime + "ms");