/** @param {NS} ns */ export async function main(ns) { ns.tail(); const sTarget = ns.args[0]; // target server // declare objects const oHome = ns.getServer("home"); //const oTarget = ns.getServer(sTarget); // Lowram settings const sBatchScript = "lowram/Lowhgw.js"; const sPrepScript = "lowram/Lowprep.js"; const sRunScript = "lowram/Lowrun.js"; const sGrowScript = "lowram/Lowgrow.js"; //declare variables const sWeakenScript = "RMweaken.js"; const nCores = oHome.cpuCores; let nSecurity = ns.getServerSecurityLevel(sTarget); const nMinSecurity = ns.getServerMinSecurityLevel(sTarget); const nWeakenSTR = ns.weakenAnalyze(1, nCores); let nThreads = Math.ceil((nSecurity - nMinSecurity) / nWeakenSTR); ns.print("nThreads = " + nThreads); ns.tail(ns.pid, oHome.hostname, sTarget); //ns.resizeTail(815, 395); //ns.moveTail(1925, 0); let nWeakenPID; if (nThreads > 0) { const nDelay = ns.getWeakenTime(sTarget); ns.print("current security is: " + nSecurity); ns.print("minimum security is: " + nMinSecurity); ns.print("threads needed for weaken: " + nThreads); ns.print(nThreads + " will reduce Security by " + ns.weakenAnalyze(nThreads, nCores)); ns.print(nThreads + " of " + sWeakenScript + " requires " + (ns.getScriptRam(sWeakenScript, "home") * nThreads) + " GB of RAM"); ns.print("weakening will take " + (nDelay / 1000 / 60) + " minutes"); if ((ns.getServerMaxRam(oHome.hostname) - ns.getServerUsedRam(oHome.hostname)) >= (ns.getScriptRam(sWeakenScript, "home") * nThreads)) { nWeakenPID = ns.run(sWeakenScript, nThreads, sTarget); ns.print("Waiting for PID = " + nWeakenPID); await ns.nextPortWrite(nWeakenPID); nSecurity = ns.getServerSecurityLevel(sTarget); ns.print("Breach complete, security level is now at: " + nSecurity); } else { nThreads = Math.floor(((ns.getServerMaxRam("home") - ns.getServerUsedRam("home")) / ns.getScriptRam(sWeakenScript))); nWeakenPID = ns.run(sWeakenScript, nThreads, sTarget); ns.print("Waiting for PID = " + nWeakenPID); await ns.nextPortWrite(nWeakenPID); nSecurity = ns.getServerSecurityLevel(sTarget); ns.print("Breach in progress, security level is now at: " + nSecurity); } } //back to Lowrun ns.spawn(sRunScript, { threads: 1, spawnDelay: 0 }, sTarget); }