// ==UserScript==
// @name r!PsAw small mod
// @namespace http://tampermonkey.net/
// @version 0.0.2
// @description autorespawn, redrawing player, copy party link, leave game, no privacy settings button, no apes.io advertisment
// @author You
// @match https://diep.io/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=diep.io
// @grant none
// @license MIT
// ==/UserScript==
// Mouse coordinates
var uwuX = '0'; var uwuY = '0';
document.addEventListener('mousemove', function(e) {
uwuX = e.clientX;
uwuY = e.clientY;
});
//remove privacy settings button and apes.io promo
setTimeout(() => {
document.getElementById("cmpPersistentLink").remove();
document.getElementById("apes-io-promo").remove();
}, 2500);
//toggle leave game
let active = false;
let s = false;
let ingame_quit_btn = document.getElementById("quick-exit-game");
let app = document.getElementById("app");
function check_class(){
if(ingame_quit_btn.classList.contains("shown")){
active = false;
}else if(ingame_quit_btn.classList.contains("hidden")){
active = true;
}
}
setInterval(check_class, 300);
var toggle_quit_btn = document.createElement('button');
toggle_quit_btn.innerHTML = `leave button active? ${active}`;
toggle_quit_btn.style.color = "white";
toggle_quit_btn.style.position = "fixed";
toggle_quit_btn.style.width = "100px";
toggle_quit_btn.style.height = "50px";
toggle_quit_btn.style.bottom = "20%";
toggle_quit_btn.style.left = "20%";
toggle_quit_btn.style.transform = "translate(-50%, 50%)";
toggle_quit_btn.style.cursor = "pointer";
toggle_quit_btn.style.zIndex = '9999';
toggle_quit_btn.onclick = function() {
s = !s;
toggle_quit_btn.innerHTML = `leave button active? ${active}`;
if(s){
ingame_quit_btn.classList.remove("hidden");
ingame_quit_btn.classList.add("shown");
}else{
ingame_quit_btn.classList.remove("shown");
ingame_quit_btn.classList.add("hidden");
}
}
app.appendChild(toggle_quit_btn);
//autorespawn (easy way)
let ingamescreen = document.getElementById("in-game-screen");
let autorespawn = false;
function respawn(){
if(autorespawn){
if(ingamescreen.classList.contains("screen") && ingamescreen.classList.contains("active")){
return;
}else{
let spawnbtn = document.getElementById("spawn-button");
spawnbtn.click();
}
}
}
setInterval(respawn, 1000);
var toggle_auto_r_btn = document.createElement('button');
toggle_auto_r_btn.innerHTML = `auto respawn active? ${autorespawn}`;
toggle_auto_r_btn.style.color = "white";
toggle_auto_r_btn.style.position = "fixed";
toggle_auto_r_btn.style.width = "100px";
toggle_auto_r_btn.style.height = "50px";
toggle_auto_r_btn.style.bottom = "20%";
toggle_auto_r_btn.style.left = "25%";
toggle_auto_r_btn.style.transform = "translate(-50%, 50%)";
toggle_auto_r_btn.style.cursor = "pointer";
toggle_auto_r_btn.style.zIndex = '9999';
toggle_auto_r_btn.onclick = function() {
autorespawn = !autorespawn;
toggle_auto_r_btn.innerHTML = `auto respawn active? ${autorespawn}`;
}
app.appendChild(toggle_auto_r_btn);
//copy party link
var copy_p_link_btn = document.createElement('button');
copy_p_link_btn.innerHTML = `copy party link`;
copy_p_link_btn.style.color = "white";
copy_p_link_btn.style.position = "fixed";
copy_p_link_btn.style.width = "100px";
copy_p_link_btn.style.height = "50px";
copy_p_link_btn.style.bottom = "20%";
copy_p_link_btn.style.left = "30%";
copy_p_link_btn.style.transform = "translate(-50%, 50%)";
copy_p_link_btn.style.cursor = "pointer";
copy_p_link_btn.style.zIndex = '9999';
copy_p_link_btn.onclick = function() {
document.getElementById("copy-party-link").click();
}
app.appendChild(copy_p_link_btn);
//find the current Level (works only after Level 3 for some reason)
CanvasRenderingContext2D.prototype.fillText = new Proxy(CanvasRenderingContext2D.prototype.fillText, {
apply(fillRect, ctx, [text, x, y, ...blah]) {
if (text.startsWith('Lvl ')) {
currentLevel = text.split(' ')[1];
tanky = text.split(' ')[2];
}
fillRect.call(ctx, text, x, y, ...blah);
}
});
//Diep Units & fov calculator
/* bugs that I need to fix:
- when increasing level while being Tank, circle radius decreases (to ranger size), but tank body increases
-> possible solution: (complete tanks table, find the fieldFactors here: https://github.com/ABCxFF/diepindepth/blob/main/extras/tankdefs.json)
- window.resize doesn't check if canvas size changes, but only if the user changes it.
For example opening google console changes canvas size, but user didn't change the window.
-
*/
var currentLevel = 0;
var lastLevel = 0;
var tanky = "";
let ripsaw_radius;
let fieldFactor = 1.0;
let found = false;
let loltank;
const diepUnits = 55;
let FOV = (0.55 * fieldFactor) / Math.pow(1.01, (currentLevel - 1) / 2);
let scalingFactor = FOV * windowScaling();
const fieldFactors = [
{tank: "Sniper", factor: 0.899},
{tank: "Overseer", factor: 0.899},
{tank: "Overlord", factor: 0.899},
{tank: "Assassin", factor: 0.8},
{tank: "Necromancer", factor: 0.899},
{tank: "Hunter", factor: 0.85},
{tank: "Stalker", factor: 0.8},
{tank: "Ranger", factor: 0.699},
{tank: "Manager", factor: 0.899},
{tank: "Predator", factor: 0.85},
{tank: "Trapper", factor: 0.899},
{tank: "Gunner Trapper", factor: 0.899},
{tank: "Overtrapper", factor: 0.899},
{tank: "Mega Trapper", factor: 0.899},
{tank: "Tri-Trapper", factor: 0.899},
{tank: "Smasher", factor: 0.899},
{tank: "Landmine", factor: 0.899},
{tank: "Streamliner", factor: 0.85},
{tank: "Auto Trapper", factor: 0.899},
{tank: "Battleship", factor: 0.899},
{tank: "Auto Smasher", factor: 0.899},
{tank: "Spike", factor: 0.899},
{tank: "Factory", factor: 0.899},
{tank: "Skimmer", factor: 0.899},
{tank: "Rocketeer", factor: 0.899},
]
function windowScaling() {
const a = canvas.height / 1080;
const b = canvas.width / 1920;
return b < a ? a : b;
}
function calculateFOV(Fv, l) {
const numerator = 0.55 * Fv;
console.log("interesting" + l);
const denominator = Math.pow(1.01, (l - 1) / 2);
FOV = numerator / denominator;
return FOV;
}
function apply_values(FF){
calculateFOV(FF, currentLevel);
scalingFactor = FOV * windowScaling();
ripsaw_radius = diepUnits * scalingFactor;
}
function apply_changes(value){
if(found){
fieldFactor = fieldFactors[value].factor;
loltank = tanky;
lastLevel = currentLevel;
apply_values(fieldFactor);
}else{
if(value === null){
fieldFactor = 1.0;
loltank = "default";
lastLevel = currentLevel;
apply_values(fieldFactor);
}
}
}
function bruteforce_tanks(){
for (let i = 0; i < fieldFactors.length; i++){
if(tanky.includes(fieldFactors[i].tank)){
found = true;
console.log("FOUND TANK");
apply_changes(i);
break;
}else{
found = false;
if(i < fieldFactors.length - 1){
console.log(`checking tank ${i}`);
}else{
console.log("No Tank was found, resetting to default")
apply_changes(null);
}
}
}
}
window.addEventListener("resize", bruteforce_tanks);
function check_lvl_change() {
if(lastLevel === currentLevel){
console.log("level wasn't changed");
}else{
console.log("changed level, bruteforcing");
bruteforce_tanks();
}
}
function check_change(){
console.log("lastLevel: " + lastLevel + " currentLevel: " + currentLevel);
check_lvl_change();
if(loltank != tanky){
if(loltank === "default"){
return;
}else{
bruteforce_tanks();
}
}
}
setInterval(check_change, 250);
//canvas gui
const ctx = canvas.getContext('2d');
function ctx_text(fcolor, scolor, lineWidth, font, text, textX, textY){
ctx.fillStyle = fcolor;
ctx.lineWidth = lineWidth;
ctx.font = font;
ctx.strokeStyle = scolor;
ctx.strokeText(`${text}`, textX, textY)
ctx.fillText(`${text}`, textX, textY)
}
function ctx_arc(x, y, r, sAngle, eAngle, counterclockwise, c){
ctx.beginPath();
ctx.arc(x, y, r, sAngle, eAngle, counterclockwise);
ctx.fillStyle = c;
ctx.fill();
}
setTimeout(() => {
let gui = () => {
if(ingamescreen.classList.contains("screen") && ingamescreen.classList.contains("active")){
ctx_text("white", "DarkRed", 6, 1.5 + "em Ubuntu", "canvas Lvl:" + currentLevel, canvas.width/20 + 10, 60);
ctx_text("white", "DarkRed", 6, 1.5 + "em Ubuntu", "canvas tank: " + tanky, canvas.width/20 + 10, 80);
ctx_text("white", "DarkRed", 6, 1.5 + "em Ubuntu", "radius: " + ripsaw_radius, canvas.width/20 + 10, 100);
ctx_text("white", "DarkRed", 6, 1.5 + "em Ubuntu", "field Factor: " + fieldFactor, canvas.width/20 + 10, 120);
if(currentLevel != null && tanky != null){
ctx.beginPath();
ctx.moveTo(canvas.width / 2, canvas.height / 2);
ctx.lineTo(uwuX*2, uwuY*2);
ctx.stroke();
ctx_arc(canvas.width / 2, canvas.height / 2, ripsaw_radius, 0, 2 * Math.PI, false, "darkblue");
ctx_arc(canvas.width / 2, canvas.height / 2, ripsaw_radius*0.9, 0, 2 * Math.PI, false, "lightblue");
};
}
window.requestAnimationFrame(gui);
}
gui();
setTimeout(() => {
gui();
},5000);
}, 1000);