/** @param {NS} ns */ export async function main(ns) { //args const sTarget = ns.args[0]; // target server // declare objects const oHome = ns.getServer("home"); //const oTarget = ns.getServer(sTarget); //declare variables const sScriptName = ns.getScriptName(); const sWeakenScript = "RMweaken.js"; const nScriptRAM = ns.getScriptRam(sScriptName); const sBatch = "EveryServerRun.js"; const nCores = oHome.cpuCores; let nSecurity = ns.getServerSecurityLevel(sTarget); const nMinSecurity = ns.getServerMinSecurityLevel(sTarget); const nWeakenSTR = ns.weakenAnalyze(1, nCores); const nThreads = Math.ceil((nSecurity - nMinSecurity) / nWeakenSTR); ns.tprint("nThreads = " + nThreads); ns.tail(ns.pid, oHome.hostname, sTarget); //ns.resizeTail(815, 395); //ns.moveTail(1925, 0); if (nThreads > 0) { const nDelay = ns.getWeakenTime(sTarget); ns.tprint("current security is: " + nSecurity); ns.tprint("minimum security is: " + nMinSecurity); ns.tprint("threads needed for weaken: " + nThreads); ns.tprint(nThreads + " will reduce Security by " + ns.weakenAnalyze(nThreads, nCores)); ns.tprint(nThreads + " of " + sWeakenScript + " requires " + (ns.getScriptRam(sWeakenScript, "home") * nThreads) + " GB of RAM"); ns.tprint("weakening will take " + (nDelay / 1000 / 60) + " minutes"); if ((ns.getServerMaxRam(oHome.hostname) - ns.getServerUsedRam(oHome.hostname)) >= (ns.getScriptRam(sWeakenScript, "home") * nThreads)) { ns.run(sWeakenScript, nThreads, sTarget); await ns.sleep(Math.ceil(nDelay)); nSecurity = ns.getServerSecurityLevel(sTarget); ns.tprint("Breach complete, security level is now at: " + nSecurity); //run batch const nBatchPID = ns.run(sBatch, 1, sTarget); ns.tail(nBatchPID, "home", sBatch, 1, sTarget); ns.resizeTail(815, 395, nBatchPID); ns.moveTail(1925, 0, nBatchPID); } else { ns.tprint("try to loop untill finished"); let nScripts = Math.ceil((ns.getServerMaxRam("home") - ns.getServerUsedRam("home")) / ns.getScriptRam(sWeakenScript, "home")-nScriptRAM); ns.tprint("nScripts = " + nScripts); ns.run(sWeakenScript, nScripts, sTarget); await ns.sleep(Math.ceil(nDelay)); } } }