import { getGrowThreads, getSetting } from "Library.js"; /** @param {NS} ns */ export async function main(ns) { ns.tail(); const sTarget = ns.args[0]; // target server const sHackScript = "RMhack.js"; const sGrowScript = "RMgrow.js"; const sWeakenScript = "RMweaken.js"; const sServerListFile = "serverList.txt"; const sDistScript = "testdistribute.js"; const nHackScriptRAM = 1.75; const nGrowScriptRAM = 1.7; const nWeakenScriptRAM = 1.75; const nThisScriptRAM = 4.70; while (true) { let nMaxRAM = ns.getServerMaxRam("home"); let oServerlist = JSON.parse(ns.read(sServerListFile)); //let nMaxRAM = oServerlist[1].nMaxRAM; ns.tprint("nMaxRAM = " + nMaxRAM); //let nMaxRAM = [name, entry] of Object.entries(oServerlist); //let nMaxRAM = oServerlist["home"].maxRam; //ns.print("nMaxRAM = " + nMaxRAM); let nWeakenTime = ns.getWeakenTime(sTarget); let nGrowTime = nWeakenTime * 0.8; let nHackTime = nWeakenTime / 4; let nGrowDelay = nWeakenTime - nGrowTime; let nHackDelay = nWeakenTime - nHackTime; let nUsedRAM = nThisScriptRAM; let nHackThreads; let nGrowThreads; let nGrowThreadsINT; let nWeakenThreads; let nWeakenThreadsINT; let nCheckRAM; let nTotalHackRAM; let nTotalGrowRAM; let nTotalWeakenRAM; let nTempHackThreads; let nTempGrowThreads; let nTempGrowThreadsINT; let nTempWeakenThreads; let nTempWeakenThreadsINT; for (let i = 1; nUsedRAM < nMaxRAM; i++) { nTempHackThreads = i; //ns.print("nTempHackThreads = " + nTempHackThreads); nTempGrowThreads = Math.max(2, getGrowThreads(ns, sTarget, nTempHackThreads)); nTempGrowThreadsINT = Math.ceil(nTempGrowThreads); //ns.print("nTempGrowThreads = " + nTempGrowThreads); //ns.print("nTempGrowThreadsINT = " + nTempGrowThreadsINT); //25 hacks or 12.5 grows nTempWeakenThreads = Math.max(2, (nTempHackThreads / 25) + (nTempGrowThreadsINT / 12.5)); nTempWeakenThreadsINT = Math.ceil(nTempWeakenThreads); //ns.print("nTempWeakenThreads = " + nTempWeakenThreads); //ns.print("nTempWeakenThreadsINT = " + nTempWeakenThreadsINT); nTotalHackRAM = (nTempHackThreads * nHackScriptRAM); nTotalGrowRAM = (nTempGrowThreadsINT * nGrowScriptRAM); nTotalWeakenRAM = (nTempWeakenThreadsINT * nWeakenScriptRAM); //ns.print("nTotalHackRAM = " + nTotalHackRAM); //ns.print("nTotalGrowRAM = " + nTotalGrowRAM); //ns.print("nTotalWeakenRAM = " + nTotalWeakenRAM); nCheckRAM = nThisScriptRAM + (nTempHackThreads * nHackScriptRAM) + (nTempGrowThreadsINT * nGrowScriptRAM) + (nTempWeakenThreadsINT * nWeakenScriptRAM); //ns.print("nCheckRAM = " + nCheckRAM); if (nCheckRAM < nMaxRAM) { nUsedRAM = nCheckRAM; nHackThreads = nTempHackThreads; nGrowThreads = nTempGrowThreads; nGrowThreadsINT = nTempGrowThreadsINT; nWeakenThreads = nTempWeakenThreads; nWeakenThreadsINT = nTempWeakenThreadsINT; } else { break; } //ns.print("nMaxRAM = " + nMaxRAM + " nUsedRAM = " + nUsedRAM); } //ns.print("nMaxRAM = " + nMaxRAM + " nUsedRAM = " + nUsedRAM); let nHackPID = ns.run(sHackScript, nHackThreads, sTarget, false, nHackDelay - 100); let nGrowPID = ns.run(sGrowScript, nGrowThreadsINT, sTarget, false, nGrowDelay - 50); let nWeakenPID = ns.run(sWeakenScript, nWeakenThreadsINT, sTarget, false, 0); //ns.tail(nHackPID, "home", nHackThreads, sTarget, false, nHackDelay - 100); //ns.tail(nGrowPID, "home", nGrowThreadsINT, sTarget, false, nGrowDelay - 50); //ns.tail(nWeakenPID, "home", nWeakenThreadsINT, sTarget, false, 0); await Promise.all([ ns.nextPortWrite(nHackPID), ns.nextPortWrite(nGrowPID), ns.nextPortWrite(nWeakenPID) ]) await ns.sleep(1); let nHackFinnish = ns.readPort(nHackPID); let nGrowFinnish = ns.readPort(nGrowPID); let nWeakenFinnish = ns.readPort(nWeakenPID); ns.print("nHackFinnish = " + nHackFinnish); ns.print("nGrowFinnish = " + nGrowFinnish); ns.print("nWeakenFinnish = " + nWeakenFinnish); } }