diff --git a/Ramses/home/Library.js b/Ramses/home/Library.js index 556f4de..7495782 100644 --- a/Ramses/home/Library.js +++ b/Ramses/home/Library.js @@ -83,14 +83,14 @@ export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTar if (!ns.fileExists("serverList.txt", "home")) scanServerList(); let serverList = JSON.parse(ns.read("serverList.txt")); let bestEntry = ""; - if (manualTargetOverride.length > 0) { + if (manualTargetOverride && manualTargetOverride.length > 0) { bestEntry = manualTargetOverride; } else { bestEntry = null; let nMaxMoneyPerChance = 0; let nBestMoneyPerChance = 0; for (const [name, entry] of Object.entries(serverList)) { - if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl < currentHackLevel) { + if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl <= currentHackLevel) { nMaxMoneyPerChance = (entry.maxMoney * ns.hackAnalyzeChance(name)) / entry.minSec; if (nMaxMoneyPerChance > nBestMoneyPerChance) { nBestMoneyPerChance = nMaxMoneyPerChance; @@ -172,7 +172,7 @@ export async function purchaseAndUpgradeServers(ns) { let targetRamInitial = 16; if (ns.getPurchasedServerCost(targetRamInitial) < currentMoney) { let sFrontZero = "0"; - if (pServcount >= 9) { + if (pServcount > 9) { sFrontZero = ""; } let hostname = ns.purchaseServer("pserv-" + sFrontZero + pServcount, targetRamInitial); @@ -241,3 +241,48 @@ export function getGrowThreads(ns, sTarget, nHackThreads, nCores) { let nGrowthThreads = ns.growthAnalyze(sTarget, 1 + nHackAmountPercent, nCores); return nGrowthThreads; } + +/** @param {NS} ns */ +export async function ExecuteAndWait(ns, sScript, ...args) { + if (!ns.isRunning(sScript, ...args)) { ns.exec(sScript, ...args); } + while (ns.isRunning(sScript, ...args)) { await ns.sleep(100); } +} + +/** @param {NS} ns */ +export async function RunAndWait(ns, sScript, ...args) { + if (!ns.isRunning(sScript, ...args)) { ns.run(sScript, ...args); } + while (ns.isRunning(sScript, ...args)) { await ns.sleep(100); } +} + +/** @param {NS} ns */ +export function listWorkServers(ns) { + ns.disableLog("ALL"); + const sFileName = "serverList.txt"; + if (!ns.fileExists(sFileName, "home")) { ns.print(`ERROR ${sFileName} does not exist.`); return false; }; + let serverList = JSON.parse(ns.read(sFileName)); + + let nTotalWorkerRAM = 0; + let nTotalFreeRAM = 0; + + const nServerColumnWidth = 20; + const nValueColumnWidth = 8; + const nCoresWidth = 5; + + ns.printRaw("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓"); + ns.printRaw("┃ Server ┃ Free / Max RAM ┃ Cores ┃"); + ns.printRaw("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫"); + for (const [name, entry] of Object.entries(serverList)) { + if (entry.rootAccess && entry.maxRam >= 1) { + let sServerName = entry.serverName.padEnd(nServerColumnWidth, ' '); + let nFreeRAM = entry.maxRam - ns.getServerUsedRam(entry.serverName); + let sFreeRAM = nFreeRAM.toLocaleString().padStart(nValueColumnWidth, ' '); + let sMaxRam = entry.maxRam.toLocaleString().padStart(nValueColumnWidth, ' '); + let sCores = entry.serverCores.toLocaleString().padStart(nCoresWidth, ' '); + ns.printRaw(`┃ ${sServerName} ┃ ${sFreeRAM} / ${sMaxRam} ┃ ${sCores} ┃`); + nTotalWorkerRAM += entry.maxRam; + nTotalFreeRAM += nFreeRAM; + } + } + ns.printRaw("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛"); + ns.printRaw(`Total Free: ${nTotalFreeRAM.toLocaleString()} / ${nTotalWorkerRAM.toLocaleString()} GB`); +} \ No newline at end of file diff --git a/Ramses/home/WorkerList.js b/Ramses/home/WorkerList.js new file mode 100644 index 0000000..107e501 --- /dev/null +++ b/Ramses/home/WorkerList.js @@ -0,0 +1,20 @@ +import { listWorkServers } from "/Library.js"; + +/** @param {NS} ns */ +export async function main(ns) { + ns.disableLog("ALL"); + ns.tail(); + ns.resizeTail(522,625); + let nStatus = 0; + let aStatus = ["─", "╲", "│", "╱"]; + let bWhile = true; + while (bWhile !== false) { + ns.clearLog(); + bWhile = listWorkServers(ns); + //ns.printRaw(aStatus[nStatus]) + ns.setTitle(`WorkerList ${aStatus[nStatus]}`); + nStatus++; + if (nStatus > 3) nStatus = 0; + await ns.sleep(1050); + } +} \ No newline at end of file