NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name DebrisDetection
// @namespace http://tampermonkey.net/
// @version 2025-04-27
// @description Search debris in 16 position of the universe of Ogame
// @author adesduende
// @match https://*.ogame.gameforge.com/game/*
// @require http://code.jquery.com/jquery-3.4.1.min.js
// @downloadURL https://openuserjs.org/install/adesduende/DebrisDetection.user.js
// @updateURL https://openuserjs.org/meta/adesduende/DebrisDetection.meta.js
// @icon data:image/gif;base64,R0lGODlhHgAeANU/ADJIWsLQ2bTBy0xidSlKZJysuDhUa8HP2CM5TFdvhKy6xKKxvCg9URsxRHGFlRw0SDZNYLzJ02h7iyxCVL/M1SREXY2eq1Bkc3uMmUFUZlpteyA+VbnH0FZrfLfFzoCWpYGSn7G+yUhdbWB0g7vI0r3K04WXpW2Ckqa1v0VabpSksKm3womZpixFVxctPkFXaBguQGR4h2+AjniKmE1hcUZfdJCfrCdBVx04Tl1xgFBnen6SoixKYHaHlXGAjRUeKyH5BAEAAD8ALAAAAAAeAB4AAAb/wJ9wSCwaj8ikcslsFmGQSQPpQrQAGYhrOVmgHC+EccJChTwKCUOJsJUoAssIMhVCBIf8oWSjPZIjEXkUESsmORA4dwGMAQckCxBJL3iMgxwFLwQCjXs2GXVHLQUHjZYoBgQKjhQcPWJKDyAUpgEUGBsEK3soOn9MgaYHHB0/GwslKpJKMEMvIaWnkjgWGDdCDCJrQi4TGRcyF0ItC9EHERh/DRM/ih02Aj2/PxoKHhwKGsYWpXAz20MyFOBAgUIIcUIQ5FgQIUKIDhVOUDiwwJcRBjJWlBgmoQgAEBxKFKiQgEIBA0oMfCjBgYYRBB0UCNBBIIGBCjFcFvlFQIKFqmVGIBTYQYCAAQsCOj5AACCFBBYybhKoMG9MjZq7OHQcYGEFBxIlIgj4MKDCkgoOODjS+qMHBz2mPOx4gaQBBBPRAnA48SPB21oHDPpAkmHBREuufgwIUcuWgBgAPYLwcHgYhh8vdgnzkGMJggEF3pAQcJlHgU5wRlRNAuDEjBw0AOyjtWdFBxxOfjxY7YAErwG5k+TwEAGFiOBJBihYcBw5Egggmjuf/iMIADs=
// @grant none
// @copyright 2025, adesduende (https://openuserjs.org/users/adesduende)
// @license MIT
// ==/UserScript==
let inProgress = true;
// Create interface
const $planetList = document.querySelector('#planetList');
const buttonFindDebris = document.createElement('i');
const buttonClearDebris = document.createElement('i');
const inputDebrisOffset = document.createElement('input');
const debrisContainer = document.createElement('div');
const positionDebrisContainer = document.createElement('div');
const ddProgressBar = document.createElement('div');
const ddBar = document.createElement('div');
debrisContainer.setAttribute('id', 'dd_debriscontainer');
buttonFindDebris.setAttribute('class', 'material-icons dd_icons dd_find');
buttonFindDebris.innerText = "search";
buttonClearDebris.setAttribute('class', 'material-icons dd_icons dd_delete');
buttonClearDebris.innerText = "delete";
inputDebrisOffset.setAttribute('type', 'text');
inputDebrisOffset.setAttribute('class', 'dd_searchbar');
inputDebrisOffset.setAttribute('placeholder', '1000000');
ddProgressBar.setAttribute('id', 'dd_progressBar');
ddBar.setAttribute('id', 'dd_Bar');
positionDebrisContainer.setAttribute('class', 'dd_positiondebriscontainer');
buttonFindDebris.addEventListener('click', () => {
localStorageDebrisClear();
let offSetDebris = (inputDebrisOffset.value !== "") ? inputDebrisOffset.value ?? 1000000 : 1000000;
console.log(offSetDebris);
getDebris(offSetDebris).then(() => {
console.log("End of scan")
});
positionDebrisContainer.innerHTML = "";
});
buttonClearDebris.addEventListener('click', () => {
ClearDebris();
});
ddProgressBar.append(ddBar);
debrisContainer.append(buttonFindDebris);
debrisContainer.append(inputDebrisOffset);
debrisContainer.append(buttonClearDebris);
debrisContainer.append(ddProgressBar);
debrisContainer.append(positionDebrisContainer);
$planetList.append(debrisContainer);
//Load data from localstorage on init
localStorageToDebris();
/*Delay function*/
function delay(time) {
return new Promise(resolve => setTimeout(resolve, time));
}
/*Get debris with a offset of min debris */
async function getDebris(offSetDebris) {
const gaMax = 5;
const ssMax = 499;
let debris = [];
for (let ga = 1; ga <= gaMax; ga++) {
for (let ss = 1; ss <= ssMax; ss++) {
//console.log(`Ask for Galaxy: ${ga} System: ${ss}`);
inProgress = true;
var jqxhr = $.post("https://s261-es.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy&action=fetchGalaxyContent&ajax=1&asJson=1", {
galaxy: ga,
system: ss
}, function (data) {
//Move progres bar
moveBar(ga * ss, gaMax * ssMax);
var json = $.parseJSON(data);
//Get debris of position 16
if (json.system.galaxyContent.length > 15) {
let UME = 0;
const metal = json.system.galaxyContent[15].planets.resources.metal.amount;
const crystal = json.system.galaxyContent[15].planets.resources.crystal.amount;
const deuterium = json.system.galaxyContent[15].planets.resources.deuterium.amount;
UME += metal;
UME += crystal * 2 / 3;
UME += deuterium * 1 / 3;
const minUME = offSetDebris;
if (UME >= minUME) {
const debri = {
coord: {
ga: ga,
ss: ss,
},
UME: UME,
Metal: metal,
Crystal: crystal,
Deuterium: deuterium
};
//Save to global variable
debris.push(debri);
//Save to local storage
debrisToLocalStorage(debris);
//Show Debris in DOM
ShowDebris(debri);
//Show in console
console.log(`*** Debris in [${ga}:${ss}:16] ___ METAL: ${amountConvert(metal)} CRISTAL: ${amountConvert(crystal)} DEUTERIO: ${amountConvert(deuterium)}`);
}
}
});
jqxhr.done(() => {
inProgress = false;
//console.log(inProgress);
});
await delay(100);
}
}
}
// FUnction to show debris in DOM
function ShowDebris(debris) {
positionDebrisContainer.innerHTML += `
<div class="dd_debris">
<a class="dd_coord" href="https://s261-es.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy&galaxy=${debris.coord.ga}&system=${debris.coord.ss}&position=16">[${debris.coord.ga}:${debris.coord.ss}:16]</a>
<span class="dd_ume"><div class="debrisTooltip microdebris debris_1"></div> ${amountConvert(debris.UME)}</span>
<span class="dd_metal">${amountConvert(debris.Metal)}</span>
<span class="dd_crystal">${amountConvert(debris.Crystal)}</span>
<span class="dd_deuterium">${amountConvert(debris.Deuterium)}</span>
</div>`;
//TODO: delete only one debri (icon: do_not_disturb_on)
}
//Function to clear debris
function ClearDebris() {
positionDebrisContainer.innerHTML = "";
localStorageDebrisClear();
}
//Clear localStorage
function localStorageDebrisClear() {
localStorage.removeItem('dd_coords');
}
//Get Positions from localstorage
function localStorageToDebris() {
const debris = JSON.parse(localStorage.getItem('dd_coords'));
if (debris == null) return;
for (let i = 0; i < debris.length; i++) {
ShowDebris(debris[i]);
}
}
//Save positions to localstorage
function debrisToLocalStorage(debris) {
localStorage.setItem('dd_coords', JSON.stringify(debris));
}
/* Convert amounts to short expresion*/
function amountConvert(amount) {
let result = "";
const decimals = 1;
if (amount > 1000000000) {
result = (Math.round(amount / (1000000000 / (decimals * 10))) / (decimals * 10)).toFixed(decimals) + "G";
}
else if (amount > 1000000) {
result = (Math.round(amount / (1000000 / (decimals * 10))) / (decimals * 10)).toFixed(decimals) + "M";
}
else {
result = (Math.round(amount / (1000 / (decimals * 10))) / (decimals * 10)).toFixed(decimals) + "K";
}
return result;
}
/* Progress bar movement*/
var i = 0;
function moveBar(amount, maxVal) {
const percent = amount * 100 / maxVal;
const elem = document.getElementById("dd_Bar");
elem.style.width = percent + "%";
}
/* CSS Style sheet*/
const dd_css = `
#dd_debriscontainer{
font-size: 8pt;
&>.dd_icons{
font-size: 19pt !important;
cursor: pointer;
&>.dd_find:hover {
font-size: 15pt !important;
}
&>.dd_delete:hover {
font-size: 15pt !important;
}
}
&>.dd_positiondebriscontainer {
display: flex;
flex-flow:column;
gap: 3px;
&>.dd_debris {
display: flex;
gap: 3px;
&>.dd_coord {
color: violet;
}
&>.dd_ume {
color: white;
display: flex;
&>.debrisTooltip.microdebris.debris_1 {
width: 12px;
height: 12px;
background-size: contain;
}
}
&>.dd_metal {
color: hsl(240deg 24% 68%);
}
&>.dd_crystal {
color: hsl(199deg 72% 74%);
}
&>.dd_deuterium {
color: hsl(172deg 45% 46%);
}
}
}
}
#dd_progressBar {
width: 100%;
background-color: grey;
margin-top: 3px;
margin-bottom: 3px;
}
#dd_Bar {
width: 0%;
height: 5px;
background-color: green;
}
`;
const ddStyleCSS = document.createElement('style');
//const matIcons = document.createElement('link');
ddStyleCSS.setAttribute('id', 'ddCssStyle');
ddStyleCSS.innerText = dd_css;
//matIcons.setAttribute('href','https://fonts.googleapis.com/icon?family=Material+Icons');
//matIcons.setAttribute('rel','stylesheet');
document.head.append(ddStyleCSS);
//document.head.append(matIcons);