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);