NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name WF Upkeep calculator
// @version 2024-06-12
// @author Mario
// @license MIT
// @description Calculates upkeep.
// @match https://beta4.atmoburn.com/ship_designs.php*
// @grant unsafeWindow
// ==/UserScript==
eval(unsafeWindow.byId.toString());
unsafeWindow.eval(calcmass.toString());
let wages = 250;
if (localStorage.getItem("wages")) {
wages = parseInt(localStorage.getItem("wages"));
}
let wagesInput = document.createElement('input');
wagesInput.type = "text";
wagesInput.class = "darkinput";
wagesInput.id = "wagesInput";
wagesInput.size = "4";
wagesInput.maxlength = "6";
wagesInput.value = wages;
wagesInput.addEventListener("change", calcmass);
let setWages = document.createElement('button');
setWages.innerHTML = "Save wages";
setWages.id = "setWages";
setWages.className = "darkbutton";
setWages.addEventListener("click", saveWages);
setWages.title = "Saves wages in localstorage";
if (document.getElementsByClassName("highlight padding5 overauto")[0]) { // checks if we're making a new design
document.getElementsByClassName("padding5 light margintb2 aligncenter")[0].append(wagesInput);
document.getElementsByClassName("padding5 light margintb2 aligncenter")[0].append(setWages);
let upkeep = document.createElement('div');
upkeep.id = "upkeep";
upkeep.innerHTML = "Upkeep: ";
byId("pricespan").parentElement.append(upkeep);
} else if (document.getElementsByClassName("flex flexwrap gap2")[0]) { // we're looking at an existing design
document.getElementsByClassName("padding5 light margintb2 aligncenter")[0].append(wagesInput);
document.getElementsByClassName("padding5 light margintb2 aligncenter")[0].append(setWages);
let crewText = document.getElementsByClassName("flex flexwrap gap2")[0].textContent;
crewText = crewText.substr(crewText.indexOf("Crew")+6);
crewText = crewText.substr(0,crewText.indexOf("\n"));
let costText = document.getElementsByClassName("light bold padding5")[0].textContent;
let upkeep = document.createElement('div');
upkeep.id = "upkeep";
upkeep.innerHTML = "Upkeep: " + numberFormat(parseInt(parseInt(costText.split(" ")[1].replaceAll(",",""))/2000 + parseInt(crewText.replaceAll(",","")) * 2 * byId("wagesInput").value)) + " cr";
document.getElementsByClassName("light bold padding5")[0].append(upkeep);
}
function saveWages() {
localStorage.setItem("wages", byId("wagesInput").value);
}
function calcmass() {
var layoutmass = (drivemass + gunmass + batterymass + armormass + shieldmass);
var totalmass = Math.round((ship.mass + (layoutmass / 1000)) * 100) / 100;
var spaceleft = Math.round(maxmass - layoutmass);
freemass = spaceleft;
//Recolor lists based on layout available
driveList.forEach(element => changeOptionColor(element.id, element.mass, ship.numdrives, freemass, maxmass, drivemass, "drvOption"));
gunList.forEach(element => changeOptionColor(element.id, element.mass, ship.gun, freemass, maxmass, gunmass, "gunOption"));
batteryList.forEach(element => changeOptionColor(element.id, element.mass, ship.battery, freemass, maxmass, batterymass, "batteryOption"));
armorList.forEach(element => changeOptionColor(element.id, element.mass, 1, freemass, maxmass, armormass, "armorOption"));
shieldList.forEach(element => changeOptionColor(element.id, element.mass, 1, freemass, maxmass, shieldmass, "shieldOption"));
byId('totalmass').innerHTML = numberFormat(totalmass);
byId('freelayout').innerHTML = numberFormat(spaceleft) + " kilograms";
var dprice = 0;
dprice += Math.round(hull.price);
var drvindex = byId('driveselect').options[byId('driveselect').selectedIndex].value;
if (drvindex != 'x') {
dprice = dprice + (Math.round(driveList.find(element => element.id == drvindex).price) * ship.numdrives);
}
if (ship.gun > 0) {
var gunindex = byId('gunselect').options[byId('gunselect').selectedIndex].value;
if (gunindex != 'x') {
dprice = dprice + Math.round(gunList.find(element => element.id == gunindex).price) * ship.gun;
}
}
if (ship.battery > 0) {
var batteryindex = byId('batteryselect').options[byId('batteryselect').selectedIndex].value;
if (batteryindex != 'x') {
dprice = dprice + Math.round(batteryList.find(element => element.id == batteryindex).price) * ship.battery;
}
}
var armorindex = byId('armorselect').options[byId('armorselect').selectedIndex].value;
if (armorindex != 'x') {
dprice = dprice + Math.round(armorList.find(element => element.id == armorindex).price) * armorsld.value;
}
var shieldindex = byId('shieldselect').options[byId('shieldselect').selectedIndex].value;
if (shieldindex != 'x') {
dprice = dprice + Math.round(shieldList.find(element => element.id == shieldindex).price) * shieldsld.value;
}
byId('pricespan').innerHTML = numberFormat(dprice);
byId("upkeep").innerHTML = "Upkeep: " + numberFormat(parseInt(dprice/2000 + ship.pilots * 2 * byId("wagesInput").value)) + " cr";
// console.log((dprice/2000 + ship.pilots * 250).toString());
var resNeeded = {};
materials.forEach(function (material) {
resNeeded[material] = hull[material];
if (drvindex != 'x') {
resNeeded[material] += Math.round(driveList.find(element => element.id == drvindex)[material] * ship.numdrives);
}
if (ship.gun > 0 && gunindex != 'x') {
resNeeded[material] += Math.round(gunList.find(element => element.id == gunindex)[material] * ship.gun);
}
if (ship.battery > 0 && batteryindex != 'x') {
resNeeded[material] += Math.round(batteryList.find(element => element.id == batteryindex)[material] * ship.battery);
}
if (armorindex != 'x') {
resNeeded[material] += Math.round(armorList.find(element => element.id == armorindex)[material] * armorsld.value);
}
if (shieldindex != 'x') {
resNeeded[material] += Math.round(shieldList.find(element => element.id == shieldindex)[material] * shieldsld.value);
}
byId(material.replace(/ /, "_") + 'span').innerHTML = numberFormat(resNeeded[material]);
});
if (spaceleft < 0 || drvindex == 'x') {
designIsValid = false;
} else {
designIsValid = true;
}
setSubmitButton();
return totalmass;
}