NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Overview Tweaks // @version 2024-10-12 // @author Mario // @license MIT // @match https://*.atmoburn.com/overview.php* // @grant unsafeWindow // ==/UserScript== eval(unsafeWindow.byId.toString()); if (document.URL.includes("overview.php?view=14")) { // Production // now in the game itself // unsafeWindow.eval(createColonyWrappers.toString()); // unsafeWindow.eval(arrangeColonyStats.toString()); // unsafeWindow.eval(createResourceOptionsB3.toString()); // unsafeWindow.eval(createResourceOptionsB4.toString()); // unsafeWindow.eval(createSortingElements.toString()); // unsafeWindow.eval(sortOverview.toString()); // createColonyWrappers(); // createSortingElements(); } else if (document.URL.includes("overview.php?view=1")) { // Colony management unsafeWindow.eval(getColonyGroupInfo.toString()); let colonyGroupInfo = getColonyGroupInfo(); let colonies = colonyGroupInfo[0]; let colonyGroups = colonyGroupInfo[1]; // console.log(colonies); Array.from(document.getElementsByClassName("flexTable flexwrap margintop alignleft highlight")).forEach(colonyElement => { if (colonyElement.nextElementSibling) { // ignore the last result, that's not a colony let colony = colonies[colonyElement.children[0].children[0].href.split("=")[1]]; colony.element = colonyElement; let colonyGroupElement = document.createElement('span'); colonyGroupElement.className = "padding5"; colonyGroupElement.innerHTML = colony.group; colonyElement.children[0].children[0].after(colonyGroupElement); } }) // filter on colony group let groupFilter = document.createElement('select'); groupFilter.className = "darkselect"; groupFilter.id = "groupFilter"; groupFilter.addEventListener('change', function() {filterGroups(colonies)}); let val = 1; colonyGroups.unshift("all colonies"); colonyGroups.forEach(colonyGroup => { let groupOption = document.createElement('option'); groupOption.value = val; groupOption.innerHTML = colonyGroup; groupFilter.append(groupOption); val += 1 }) document.getElementsByClassName("highlight padding5 aligncenter")[0].append(groupFilter); // wealth shit let wealthOk = 210; let wealthNotOk = 190; let listWealthNotOk = []; Array.from(document.getElementsByClassName("alignleft flexwrap flex_center dark")).forEach(colony => { let wealthElement = colony.children[1].getElementsByTagName("tr")[2].children[1]; if (parseInt(wealthElement.childNodes[0].textContent.replace(",","")) <= wealthNotOk) { wealthElement.className = "padding5 warn"; listWealthNotOk.push(wealthElement); } else if (parseInt(wealthElement.childNodes[0].textContent.replace(",","")) >= wealthOk) { wealthElement.className = "padding5 ok"; } else { wealthElement.className = "padding5"; } }) } function getColonyGroupInfo() { // Goes over the colony sidemenu to collect information about the groups. Note that if you have capital set to top of list but have it grouped, then all ungrouped will be categorized as part of the capital group, this is a "bug" in the game. // returns [colonies, colonyGroups] // where colonies = {colonyID: colony, ...} // colony = {id: colonyID, name: colonyName, group: colonyGroup} // colonyGroups = [colonyGroup, ...] // get all colonies from the colonymenu let colonyGroupElements = []; Array.from(byId("colonylist").getElementsByClassName("sidemenu_group")).forEach(colonyGroup => { colonyGroupElements.push(colonyGroup.parentElement); }) let colonies = {}; let colonyGroups = []; let colonyGroup = "ungrouped"; Array.from(byId("colonylist").getElementsByClassName("colmenu_name")).forEach(colonyElement => { if (colonyGroupElements.includes(colonyElement.parentElement)) { colonyGroup = colonyElement.parentElement.children[0].textContent; // console.log(colonyGroup); } let colony = { "id": colonyElement.href.split("=")[1], "name": colonyElement.textContent, "group": colonyGroup } colonies[colony.id] = colony; if (!colonyGroups.includes(colonyGroup)) {colonyGroups.push(colonyGroup)} }) return [colonies, colonyGroups]; } function filterGroups(colonies) { let selectedGroup = byId("groupFilter").options[byId("groupFilter").selectedIndex].textContent Object.values(colonies).forEach(colony => { if (selectedGroup == "all colonies" || colony.group == selectedGroup) { colony.element.style.display = ''; colony.element.nextElementSibling.style.display = ''; } else { colony.element.style.display = "none"; colony.element.nextElementSibling.style.display = "none"; } }) } // functions for the production tab function createColonyWrappers() { // wraps each colony in a div with className "colonyWrapper" let overviewHeader = byId("midcolumn").getElementsByClassName("light padding5 aligncenter")[0]; let colonyStartingElements = byId("midcolumn").getElementsByClassName("highlight padding5 margintop aligncenter bold"); let numberOfRows = document.domain.includes("beta3") ? 13 : 16; for (let i=colonyStartingElements.length-1; i>=0; i--) { let nextElement = colonyStartingElements[colonyStartingElements.length-1]; // HTMLCollections keep the order in which its content appears in the DOM so when you put the last one on a higher spot in the DOM they will also be moved to a higher spot in the HTMLCollection let colony = [nextElement]; for (let j=0; j<numberOfRows; j++) { nextElement = nextElement.nextElementSibling; colony.push(nextElement); } let colonyElement = document.createElement("div"); colonyElement.className = "colonyWrapper"; colony.forEach(colonyPiece => {colonyElement.append(colonyPiece)}); overviewHeader.after(colonyElement); } } function arrangeColonyStats() { // creates an array with "colonyStats" // each "colonyStat" is an array starting with the respective colonyWrapper element followed by each "resource". // each "resource" is an array consisting of the resource name, its abundance, its daily average, and the current amount in storage, all within the respective colony. let colonies = []; Array.from(document.getElementsByClassName("colonyWrapper")).forEach(colony => { let colonyArray = [colony]; Array.from(colony.getElementsByClassName("light flexTable")).forEach(resource => { let resourceArray = []; resourceArray.push(resource.children[0].children[1].textContent.replaceAll(" ", "")); // name resourceArray.push(parseInt(resource.children[0].children[1].textContent.replaceAll(" ","").replace("%",""))); // abundance resourceArray.push(parseInt(resource.children[1].children[1].textContent.replaceAll(" ","").replaceAll(",","").replace("units",""))); // units per day resourceArray.push(parseInt(resource.children[1].children[2].textContent.replaceAll(" ","").replaceAll(",","").replace("units",""))); // units stored colonyArray.push(resourceArray); }); colonies.push(colonyArray); }) return colonies } function sortOverview() { let resource = parseInt(byId("sortResource").value); let sortType = parseInt(byId("sortType").value); let colonies = arrangeColonyStats(); let ascendDescend = parseInt(byId("ascendDescend").value); colonies.sort(function(first, second) { return ascendDescend * (second[resource][sortType] - first[resource][sortType]); }); let overviewHeader = byId("midcolumn").getElementsByClassName("light padding5 aligncenter")[0] colonies.forEach(colony => { overviewHeader.after(colony[0]); }) } function createSortingElements() { let sortSpan = document.createElement('span'); sortSpan.className = "largetext120"; sortSpan.innerHTML = "Sort by: "; sortSpan.style.marginLeft = "5px"; byId("midcolumn").children[1].children[0].append(sortSpan); if (document.domain.includes("beta3")) { createResourceOptionsB3() } else { createResourceOptionsB4() } let sortType = document.createElement('select'); sortType.className = "darkselect"; sortType.id = "sortType"; sortType.addEventListener('change', sortOverview); let sortAbundance = document.createElement('option'); sortAbundance.value = 1; sortAbundance.innerHTML = "Abundance"; sortType.append(sortAbundance); let sortProduction = document.createElement('option'); sortProduction.value = 2; sortProduction.innerHTML = "Daily Average"; sortType.append(sortProduction); let sortStorage = document.createElement('option'); sortStorage.value = 3; sortStorage.innerHTML = "In Storage"; sortType.append(sortStorage); byId("midcolumn").children[1].children[0].append(sortType); let ascendDescend = document.createElement('select'); ascendDescend.className = "darkselect"; ascendDescend.id = "ascendDescend"; ascendDescend.addEventListener('change', sortOverview); let sortAscend = document.createElement('option'); sortAscend.value = 1; sortAscend.innerHTML = "Ascend"; ascendDescend.append(sortAscend); let sortDescend = document.createElement('option'); sortDescend.value = -1; sortDescend.innerHTML = "Descend"; ascendDescend.append(sortDescend); byId("midcolumn").children[1].children[0].append(ascendDescend); } function createResourceOptionsB3() { let sortResource = document.createElement('select'); sortResource.className = "darkselect"; sortResource.id = "sortResource"; sortResource.addEventListener('change', sortOverview); let sortIron = document.createElement('option'); sortIron.value = 1; sortIron.innerHTML = "Iron"; sortResource.append(sortIron); let sortCopper = document.createElement('option'); sortCopper.value = 2; sortCopper.innerHTML = "Copper"; sortResource.append(sortCopper); let sortSilver = document.createElement('option'); sortSilver.value = 3; sortSilver.innerHTML = "Silver"; sortResource.append(sortSilver); let sortTitanium = document.createElement('option'); sortTitanium.value = 4; sortTitanium.innerHTML = "Titanium"; sortResource.append(sortTitanium); let sortGold = document.createElement('option'); sortGold.value = 5; sortGold.innerHTML = "Gold"; sortResource.append(sortGold); let sortUranium = document.createElement('option'); sortUranium.value = 6; sortUranium.innerHTML = "Uranium"; sortResource.append(sortUranium); let sortPlatinum = document.createElement('option'); sortPlatinum.value = 7; sortPlatinum.innerHTML = "Platinum"; sortResource.append(sortPlatinum); let sortDiamonds = document.createElement('option'); sortDiamonds.value = 8; sortDiamonds.innerHTML = "Diamonds"; sortResource.append(sortDiamonds); let sortOil = document.createElement('option'); sortOil.value = 9; sortOil.innerHTML = "Oil"; sortResource.append(sortOil); let sortWater = document.createElement('option'); sortWater.value = 10; sortWater.innerHTML = "Water"; sortResource.append(sortWater); let sortFood = document.createElement('option'); sortFood.value = 11; sortFood.innerHTML = "Food"; sortResource.append(sortFood); byId("midcolumn").children[1].children[0].append(sortResource); } function createResourceOptionsB4() { let sortResource = document.createElement('select'); sortResource.className = "darkselect"; sortResource.id = "sortResource"; sortResource.addEventListener('change', sortOverview); let sortSteel = document.createElement('option'); sortSteel.value = 1; sortSteel.innerHTML = "Steel"; sortResource.append(sortSteel); let sortAluminum = document.createElement('option'); sortAluminum.value = 2; sortAluminum.innerHTML = "Aluminum"; sortResource.append(sortAluminum); let sortTitanium = document.createElement('option'); sortTitanium.value = 3; sortTitanium.innerHTML = "Titanium"; sortResource.append(sortTitanium); let sortTungsten = document.createElement('option'); sortTungsten.value = 4; sortTungsten.innerHTML = "Tungsten alloy"; sortResource.append(sortTungsten); let sortUranium = document.createElement('option'); sortUranium.value = 5; sortUranium.innerHTML = "Uranium"; sortResource.append(sortUranium); let sortCopper = document.createElement('option'); sortCopper.value = 6; sortCopper.innerHTML = "Copper"; sortResource.append(sortCopper); let sortGold = document.createElement('option'); sortGold.value = 7; sortGold.innerHTML = "Gold"; sortResource.append(sortGold); let sortLithium = document.createElement('option'); sortLithium.value = 8; sortLithium.innerHTML = "Lithium"; sortResource.append(sortLithium); let sortSilicium = document.createElement('option'); sortSilicium.value = 9; sortSilicium.innerHTML = "Silicium"; sortResource.append(sortSilicium); let sortDiamonds = document.createElement('option'); sortDiamonds.value = 10; sortDiamonds.innerHTML = "Diamonds"; sortResource.append(sortDiamonds); let sortCement = document.createElement('option'); sortCement.value = 11; sortCement.innerHTML = "Cement"; sortResource.append(sortCement); let sortWood = document.createElement('option'); sortWood.value = 12; sortWood.innerHTML = "Wood"; sortResource.append(sortWood); let sortPlastic = document.createElement('option'); sortPlastic.value = 13; sortPlastic.innerHTML = "Plastic"; sortResource.append(sortPlastic); let sortFood = document.createElement('option'); sortFood.value = 14; sortFood.innerHTML = "Food"; sortResource.append(sortFood); byId("midcolumn").children[1].children[0].append(sortResource); }