/** @param {NS} ns */ export async function main(ns) { ns.tail(); let aPserv = ns.getPurchasedServers(); //array of purchased servers let nPserv = aPserv.length; //amount of purchased servers we have let nMoney = ns.getServerMoneyAvailable("home"); //player money let nPrevSize = 4; //nPrevSize is 4 so the first server we will buy is 8 //Purchase Servers //idea is to purchase the first server at 8 gb, next one at 16, next at 32 and so on for (let i = 0; nPserv < i; i++) { nMoney = ns.getServerMoneyAvailable("home"); //check money for each iteration if (nMoney >= ns.getPurchasedServerCost(nPrevSize * 2)) { //can we afford next server? const sServer = ns.purchaseServer(`pserv-${toString(i).padStart(2, "0")}`, nPrevSize * 2); //purchase server with name pserv- + 0i ns.print(`Purchased ${sServer} for ${nPrevSize * 2}`); //print tail message that we purchased server nPrevSize *= 2; //increase nPrevSize for next iteration nPserv++ //increase number of purchased servers } else { ns.print(`Insufficient funds for pserv-${toString(i).padStart(2, "0")} ${nMoney} / ${ns.getPurchasedServerCost(nPrevSize * 2)}`); await ns.sleep(5000); } } ns.tprint("for loop purchase complete"); //upgrade servers //idea is to upgrade the lowest server to match the highest (which should be 2^20 in size) let nCurrentRAM; let nLowestRAM = 2 ** 21; let nHighestRAM = 0; let sLowestPserv; let sHighestPserv; let nTotalPServRAM = 0; for (let i = 0; i < nPserv; i++) { nCurrentRAM = ns.getServerMaxRam(aPserv[i]); nTotalPServRAM += nCurrentRAM; if (nCurrentRAM < nLowestRAM) { nLowestRAM = nCurrentRAM sLowestPserv = aPservers[i]; } if (nCurrentRAM > nHighestRAM) { nHighestRAM = nCurrentRAM sHighestPserv = aPserv[i]; } } //sLowestPserv should now be the lowest server //sHighestPserv should now be the highest server for (let i = 0; sLowestPserv < sHighestPserv ; i++) { if (nMoney >= ns.getPurchasedServerUpgradeCost(sLowestPserv, 2^20)){ ns.upgradePurchasedServer(sLowestPserv, 2^20); } } }