NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Colony Tweaks // @version 2024-08-01 // @author Mario // @license MIT // @match https://*.atmoburn.com/view_colony.php // @match https://*.atmoburn.com/view_colony.php?colony=* // @match https://*.atmoburn.com/build_facility.php?colony=* // @match https://*.atmoburn.com/shipyard.php?colony=* // @match https://*.atmoburn.com/fleet_configuration.php?colony=* // @match https://*.atmoburn.com/scientists.php?colony=* // @match https://*.atmoburn.com/colony_trade.php?colony=* // @match https://*.atmoburn.com/shiptrade.php?colony=* // @match https://*.atmoburn.com/colony_setup.php?colony=* // @match https://*.atmoburn.com/building_demolish.php?colony=* // @match https://*.atmoburn.com/ship_junkyard.php?colony=* // @match https://*.atmoburn.com/colony_setup.php?colony=* // @grant unsafeWindow // ==/UserScript== eval(unsafeWindow.byId.toString()); unsafeWindow.eval(checkElementIndex.toString()); // functions for ColSettings Templates unsafeWindow.eval(saveColSettingsTemplate.toString()); unsafeWindow.eval(applyColSettingsTemplate.toString()); // functions for Index Templates unsafeWindow.eval(saveIndexTemplate.toString()); unsafeWindow.eval(applyIndexTemplate.toString()); // Calculates the price per worker if (document.URL.includes("atmoburn.com/build_facility.php?colony=") && document.URL.includes("&type=")) { for (let blueprint of document.getElementsByClassName("blueprintswrap padding5")[0].children) { if (blueprint.className === "flexwrap marginbottom") { let bpstats = blueprint.getElementsByClassName("light padding5 lineheight margin2")[0].textContent; let workers = parseInt(bpstats.substr(bpstats.indexOf("Capacity: ")+10,bpstats.indexOf(" Workers")-(bpstats.indexOf("Capacity: ")+10)).replaceAll(",","")); let price = parseInt(blueprint.children[1].children[0].textContent.replaceAll("\t","").split("\n")[2].replaceAll(",","")); blueprint.getElementsByClassName("light padding5 lineheight margin2")[0].innerHTML = blueprint.getElementsByClassName("light padding5 lineheight margin2")[0].innerHTML + '<br> Cost per worker: ' + numberFormat(price/workers).toString() } } } // Building defaults if (document.URL.includes("atmoburn.com/build_facility.php?colony=") && document.URL.includes("&type=")) { let type = document.URL.substr(document.URL.indexOf("&type=")+6, document.URL.indexOf("&subtype=")-(document.URL.indexOf("&type=")+6)) let subtype = document.URL.substr(document.URL.indexOf("&subtype=")+9) if (localStorage.getItem(document.domain.split(".")[0] + "-" + type + "-" + subtype)) { document.getElementsByName("amount")[0].value = localStorage.getItem(document.domain.split(".")[0] + "-" + type + "-" + subtype) } let saveDefaultWrapper = document.createElement('div'); saveDefaultWrapper.className = "aligncenter"; let saveDefaultBuildNumber = document.createElement('button'); saveDefaultBuildNumber.className = "darkbutton"; saveDefaultBuildNumber.type = "button"; saveDefaultBuildNumber.innerHTML = "Save Default"; saveDefaultBuildNumber.title = "Save current number of buildings as default for this building type"; saveDefaultBuildNumber.addEventListener("click", function() {localStorage.setItem(document.domain.split(".")[0] + "-" + type + "-" + subtype, document.getElementsByName("amount")[0].value)}); saveDefaultWrapper.append(saveDefaultBuildNumber); document.getElementsByClassName("blueprintswrap padding5")[0].before(saveDefaultWrapper); } // ColSettings Templates if (document.URL.includes("atmoburn.com/view_colony.php?colony=")) { let saveColSettingsTemplateButton = document.createElement('button'); saveColSettingsTemplateButton.className = "darkbutton"; saveColSettingsTemplateButton.type = "button"; saveColSettingsTemplateButton.innerHTML = "Save Template"; saveColSettingsTemplateButton.title = "Save current template"; saveColSettingsTemplateButton.addEventListener("click", saveColSettingsTemplate); if (document.domain.includes("beta3")) { byId("Modify2").after(saveColSettingsTemplateButton) } else { document.getElementsByName("Modify")[0].after(saveColSettingsTemplateButton) } let applyColSettingsTemplateButton = document.createElement('button'); applyColSettingsTemplateButton.className = "darkbutton"; applyColSettingsTemplateButton.type = "button"; applyColSettingsTemplateButton.innerHTML = "Apply Template"; applyColSettingsTemplateButton.title = "Applies current template"; applyColSettingsTemplateButton.addEventListener("click", applyColSettingsTemplate); saveColSettingsTemplateButton.after(applyColSettingsTemplateButton) } // Index Templates if (document.URL.includes("atmoburn.com/colony_setup.php?colony=")) { let saveIndexTemplateButton = document.createElement('button'); saveIndexTemplateButton.className = "darkbutton"; saveIndexTemplateButton.type = "button"; saveIndexTemplateButton.innerHTML = "Save Template"; saveIndexTemplateButton.title = "Save current template"; saveIndexTemplateButton.addEventListener("click", saveIndexTemplate); document.getElementsByClassName("padding5 italic width50 marginauto alignleft lineheight")[0].after(saveIndexTemplateButton) let applyIndexTemplateButton = document.createElement('button'); applyIndexTemplateButton.className = "darkbutton"; applyIndexTemplateButton.type = "button"; applyIndexTemplateButton.innerHTML = "Apply Template"; applyIndexTemplateButton.title = "Applies current template"; applyIndexTemplateButton.addEventListener("click", applyIndexTemplate); saveIndexTemplateButton.after(applyIndexTemplateButton) } // Next and Previous colony buttons if (byId("colonylist").getElementsByClassName("highlight")[0].previousElementSibling && byId("colonylist").getElementsByClassName("highlight")[0].previousElementSibling.className !== "sidemenu_header") { let previousColony = document.createElement('a'); previousColony.innerHTML = "Previous colony"; previousColony.id = "previousColony"; previousColony.className = "darkbutton"; previousColony.style.fontSize = "10px"; previousColony.href = byId("colonylist").getElementsByClassName("highlight")[0].previousElementSibling.getElementsByClassName("colmenu_name")[0].href; let elementIndex = 0; byId("midcolumn").children[checkElementIndex(elementIndex)].prepend(previousColony) } if (byId("colonylist").getElementsByClassName("highlight")[0].nextElementSibling) { let nextColony = document.createElement('a'); nextColony.innerHTML = "Next colony"; nextColony.id = "nextColony"; nextColony.className = "darkbutton"; nextColony.style.fontSize = "10px"; nextColony.href = byId("colonylist").getElementsByClassName("highlight")[0].nextElementSibling.getElementsByClassName("colmenu_name")[0].href; let elementIndex = 0; byId("midcolumn").children[checkElementIndex(elementIndex)].append(nextColony) } function checkElementIndex(elementIndex) { if (byId("midcolumn").children[elementIndex].className == "toptitle home" || byId("midcolumn").children[elementIndex].className == "infomessage bold") { return checkElementIndex(elementIndex + 1); } else { return elementIndex } } // functions for ColSettings Templates function saveColSettingsTemplate() { let colSettings = { "govtype": document.getElementsByName("govtype")[0].value, "religion": document.getElementsByName("religion")[0].value, "colgroup": document.getElementsByName("colgroup")[0].value, "wages": document.getElementsByName("wages")[0].value, "income": document.getElementsByName("income")[0].value, "wealth": document.getElementsByName("wealth")[0].value } localStorage.setItem("colSettings", JSON.stringify(colSettings)); } function applyColSettingsTemplate() { let colSettings = JSON.parse(localStorage.getItem("colSettings")); document.getElementsByName("govtype")[0].value = colSettings.govtype; document.getElementsByName("religion")[0].value = colSettings.religion; document.getElementsByName("colgroup")[0].value = colSettings.colgroup; document.getElementsByName("wages")[0].value = colSettings.wages; document.getElementsByName("income")[0].value = colSettings.income; document.getElementsByName("wealth")[0].value = colSettings.wealth; } // functions for Index Templates function saveIndexTemplate() { let indexes = { "urban": byId("urban").value, "tech": byId("tech").value, "industry": byId("industry").value, "military": byId("military").value, } localStorage.setItem("indexes", JSON.stringify(indexes)); } function applyIndexTemplate() { let indexes = JSON.parse(localStorage.getItem("indexes")) byId("urban").value = indexes.urban; byId("tech").value = indexes.tech; byId("industry").value = indexes.industry; byId("military").value = indexes.military; updateEstimates(); } byId("colonylist").getElementsByClassName("highlight")[0].style.backgroundColor = "darkgreen" //Keyboard shortcuts section document.onkeydown = function(e) { e = e || window.event; var keycode = e.which || e.keyCode; var ctrlPressed = e.ctrlKey || e.metaKey; //record if Ctrl key is pressed if( !ctrlPressed && document.activeElement.tagName == "BODY") { //skip if Ctrl key is pressed, activeElement used to skip if user has a text input active, don't do anything before page is loaded try { if( keycode == 37 && byId("previousColony") && byId("previousColony").style.visibility != "hidden") {// '37' is the keycode for ArrowLeft, skip if previous colony button doesn't exist or is hidden e.preventDefault(); byId("previousColony").click(); } else if( keycode == 39 && byId("nextColony") && byId("nextColony").style.visibility != "hidden") {//'39' is the keycode for ArrowRight, skip if next colony button doesn't exist or is hidden e.preventDefault(); byId("nextColony").click(); } } catch (error) {console.log("slow down faggot")} } };