From 481373deb9a2e02ebec078b88d1f4b32708cb083 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 13 Oct 2024 23:21:32 +0200 Subject: [PATCH] sync --- Ramses/home/CorpControl.js | 19 +++----- Ramses/home/Library.js | 99 +++++++++++++++++++++----------------- 2 files changed, 63 insertions(+), 55 deletions(-) diff --git a/Ramses/home/CorpControl.js b/Ramses/home/CorpControl.js index 8d24578..ef1f5aa 100644 --- a/Ramses/home/CorpControl.js +++ b/Ramses/home/CorpControl.js @@ -84,7 +84,6 @@ export async function main(ns) { nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); oOfficeData = ns.readPort(nListenPID); - ns.tprint(oOfficeData); nListenPID = ns.run("/corp/HireWorkers.js", 1, sDivisionName, sCity, JSON.stringify(oOfficeData)); await ns.nextPortWrite(nListenPID); } @@ -92,19 +91,15 @@ export async function main(ns) { break; case 50: let aCurrentGoods = [ - {"sMaterialName":"Food","yAmount":"MAX","yPrice":"MP"}, - {"sMaterialName":"Plants","yAmount":"MAX","yPrice":"MP"} + { "sMaterialName": "Food", "yAmount": "MAX", "yPrice": "MP-1" }, + { "sMaterialName": "Plants", "yAmount": "MAX", "yPrice": "MP-1" } ] - aCurrentGoods.forEach(async (entry) =>{ for (let sCity of aCitites) { - forEach - nListenPID = ns.run("/corp/SetSalePrices.js", 1, sDivisionName, sCity, oCurrentGoods); - await ns.nextPortWrite(nListenPID); - oOfficeData = ns.readPort(nListenPID); - ns.tprint(oOfficeData); - nListenPID = ns.run("/corp/HireWorkers.js", 1, sDivisionName, sCity, JSON.stringify(oOfficeData)); - await ns.nextPortWrite(nListenPID); - }}) + aCurrentGoods.forEach(async (entry) => { + nListenPID = ns.run("/corp/SetSalePrices.js", 1, sDivisionName, sCity, JSON.stringify(entry)); + await ns.nextPortWrite(nListenPID); + }) + } oCorpStatus.nStep = 200; break; case 60: diff --git a/Ramses/home/Library.js b/Ramses/home/Library.js index 3770479..fe130cf 100644 --- a/Ramses/home/Library.js +++ b/Ramses/home/Library.js @@ -33,13 +33,13 @@ export function getCracks(ns) { /** @param {NS} ns */ export function scanServerList(ns) { const home = "home"; - let serverList = []; + let serverList = {}; let unscanned = []; unscanned.push(home); while (unscanned.length > 0) { let currentServer = unscanned.pop(); - if (!serverList.some(obj => obj["serverName"] === currentServer)) { + if (!serverList[currentServer]) { let maxRam = ns.getServerMaxRam(currentServer); let minPorts = ns.getServerNumPortsRequired(currentServer); let minSecLevel = ns.getServerMinSecurityLevel(currentServer); @@ -51,7 +51,8 @@ export function scanServerList(ns) { let serverOrgs = serverStats.organizationName; let serverCores = serverStats.cpuCores; - serverList.push({ + serverList[currentServer] = + { serverName: currentServer, maxRam: maxRam, maxMoney: serverMoney, @@ -63,11 +64,11 @@ export function scanServerList(ns) { serverOrgs: serverOrgs, serverCores: serverCores, serverFiles: serverFiles, - }); + }; let neighbours = ns.scan(currentServer); for (let i = 0; i < neighbours.length; i++) { let neighbour = neighbours[i]; - if (serverList.some(obj => obj["serverName"] === neighbour)) { + if (serverList[neighbour]) { continue } unscanned.push(neighbour); @@ -88,17 +89,17 @@ export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTar bestEntry = null; let nMaxMoneyPerChance = 0; let nBestMoneyPerChance = 0; - serverList.forEach((entry)=> { + for (const [name, entry] of Object.entries(serverList)) { if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl <= currentHackLevel) { - nMaxMoneyPerChance = (entry.maxMoney * ns.hackAnalyzeChance(entry.serverName)) / entry.minSec; + nMaxMoneyPerChance = (entry.maxMoney * ns.hackAnalyzeChance(name)) / entry.minSec; if (nMaxMoneyPerChance > nBestMoneyPerChance) { nBestMoneyPerChance = nMaxMoneyPerChance; - bestEntry = entry.serverName; + bestEntry = name; } } - }) + } } - ns.write("bestTarget.txt", JSON.stringify(serverList.find((entry) => entry.serverName === bestEntry)), "w"); + ns.write("bestTarget.txt", JSON.stringify(serverList[bestEntry]), "w"); } @@ -106,25 +107,24 @@ export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTar export function crackingAndRooting(ns, cracks) { if (!ns.fileExists("serverList.txt", "home")) scanServerList(); let serverList = JSON.parse(ns.read("serverList.txt")); - let newServerList = serverList.map((entry) => { + for (const [name, entry] of Object.entries(serverList)) { let cracked = false; - let openPorts = entry.openPorts || 0; + let openPorts = serverList[name].openPorts || 0; if (entry.minPorts === 0 || (entry.minPorts > openPorts && entry.minPorts <= Object.keys(cracks).length)) { for (let k = 0; k < entry.minPorts; k++) { - cracks[Object.keys(cracks)[k]](entry.serverName); - entry.openPorts = k; + cracks[Object.keys(cracks)[k]](name); + serverList[name].openPorts = k; } cracked = true; } - if (!ns.hasRootAccess(entry.serverName) && cracked === true) { - ns.nuke(entry.serverName); - if (ns.hasRootAccess(entry.serverName)) { - entry.rootAccess = true; + if (!ns.hasRootAccess(name) && cracked === true) { + ns.nuke(name); + if (ns.hasRootAccess(name)) { + serverList[name].rootAccess = true; } } - return entry - }) - ns.write("serverList.txt", JSON.stringify(newServerList), "w"); + ns.write("serverList.txt", JSON.stringify(serverList), "w"); + } ns.tprint("Cracking and rooting done"); } @@ -132,26 +132,25 @@ export function crackingAndRooting(ns, cracks) { /** @param {NS} ns */ export function copyAndRunScript(ns, funnyScript, currentServer) { let bestTarget = JSON.parse(ns.read("bestTarget.txt")); + let name = currentServer; let serverList = JSON.parse(ns.read("serverList.txt")); - let bestEntry = serverList.find((entry) => entry.serverName === bestTarget.serverName) - let currentEntry = serverList.find((entry) => entry.serverName === currentServer) - - if (currentEntry.rootAccess === true && bestEntry.rootAccess === true) { - if (currentEntry.serverName !== "home") { - ns.print("killed threads on: " + currentEntry.serverName + ns.killall(currentEntry.serverName, true)); + ns.print(name); + if (serverList[name].rootAccess === true && serverList[bestTarget.serverName].rootAccess === true) { + if (name !== "home") { + ns.print("killed threads on: " + name + ns.killall(name, true)); } else { - ns.print("killed threads on: " + currentEntry.serverName + ns.scriptKill(funnyScript[0], currentEntry.serverName)); + ns.print("killed threads on: " + name + ns.scriptKill(funnyScript[0], name)); }; - if (currentEntry.maxRam > 0) { - ns.scp(funnyScript, currentEntry.serverName, "home"); + if (serverList[name].maxRam > 0) { + ns.scp(funnyScript, name, "home"); let maxProcesses = 1; - if (currentEntry.maxRam >= 8) { - maxProcesses = Math.max(Math.floor((currentEntry.maxRam) / 8), 1); + if (serverList[name].maxRam >= 8) { + maxProcesses = Math.max(Math.floor((serverList[name].maxRam) / 8), 1); } else { maxProcesses = 1 }; for (let n = 1; n <= maxProcesses; n++) { - ns.exec(funnyScript[0], currentEntry.serverName, 1, bestTarget.serverName); + ns.exec(funnyScript[0], name, 1, bestTarget.serverName); } } } @@ -166,7 +165,7 @@ export async function purchaseAndUpgradeServers(ns) { let purchasedServers = []; let pServcount = listPurchasedServers(ns).length; let currentMoney = 0; - let serverList = []; + let serverList = {}; while (pServcount < maxPurchasedServers) { purchasedServers = listPurchasedServers(ns); currentMoney = ns.getServerMoneyAvailable("home"); @@ -181,7 +180,7 @@ export async function purchaseAndUpgradeServers(ns) { ns.toast("Purchased " + hostname, "info", 10000); pServcount = listPurchasedServers(ns).length; serverList = JSON.parse(ns.read("serverList.txt")); - serverList.push({ + serverList[hostname] = { serverName: hostname, maxRam: 16, maxMoney: 0, @@ -190,7 +189,7 @@ export async function purchaseAndUpgradeServers(ns) { minHackLvl: 1, rootAccess: true, openPorts: 0, - }); + }; ns.write("serverList.txt", JSON.stringify(serverList), "w"); continue } else { @@ -203,20 +202,19 @@ export async function purchaseAndUpgradeServers(ns) { purchasedServers = listPurchasedServers(ns); for (let currentServer of purchasedServers) { currentMoney = ns.getServerMoneyAvailable("home"); - if (ns.getServerMaxRam(currentServer) < targetRam){ - if (ns.getPurchasedServerUpgradeCost(currentServer, targetRam) < currentMoney) { + if (ns.getServerMaxRam(currentServer) < targetRam && ns.getPurchasedServerUpgradeCost(currentServer, targetRam) < currentMoney) { if (ns.upgradePurchasedServer(currentServer, targetRam)) { ns.print(currentServer + " upgraded to " + targetRam + " GB RAM"); serverList = JSON.parse(ns.read("serverList.txt")); - let newServerList = serverList.map((entry) => { if (entry.serverName === currentServer){ entry.maxRam = targetRam} return entry}); - ns.write("serverList.txt", JSON.stringify(newServerList), "w"); + serverList[currentServer].maxRam = targetRam; + ns.write("serverList.txt", JSON.stringify(serverList), "w"); ns.tprint(cCyan + "Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB" + cReset); ns.toast("Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB", "info", 10000); } } else { await ns.sleep(5000); continue - }}; + }; } ++i; } @@ -262,6 +260,8 @@ export function listWorkServers(ns) { 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)); + //ns.tprint(serverList); + //const oList = sortDataByNestedKey(serverList, 'serverCores'); let nTotalWorkerRAM = 0; let nTotalFreeRAM = 0; @@ -273,7 +273,7 @@ export function listWorkServers(ns) { ns.printRaw("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓"); ns.printRaw("┃ Server ┃ Free / Max RAM ┃ Cores ┃"); ns.printRaw("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫"); - serverList.forEach((entry) => { + 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); @@ -284,7 +284,20 @@ export function listWorkServers(ns) { nTotalWorkerRAM += entry.maxRam; nTotalFreeRAM += nFreeRAM; } - }); + } ns.printRaw("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛"); ns.printRaw(`Total Free: ${nTotalFreeRAM.toLocaleString()} / ${nTotalWorkerRAM.toLocaleString()} GB`); +} + +function sortDataByNestedKey(data, key) { + return data.sort((a, b) => { + const aValue = Object.values(a)[0][key]; + const bValue = Object.values(b)[0][key]; + + if (typeof aValue === 'string') { + return aValue.localeCompare(bValue); + } else { + return aValue - bValue; + } + }); } \ No newline at end of file