Advertisement
r00key

yggdrasil.js

Aug 15th, 2022 (edited)
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Bitburner script: yggdrassil.js
  2. //yggdrassil.js
  3. /** @param {NS} ns */
  4. export async function main(ns) {
  5.     let payload = ns.args[0];
  6.     let hackingLevel = ns.args[1];
  7.     let multithreadPayload = ns.args[2];
  8.     let payloadRamUsage = ns.args[3];
  9.     let useHost = ns.args[4];
  10.     let prevHost = ns.args[5];
  11.     let currentHost = ns.args[6];
  12.     let branches = ns.scan();
  13.     let validBranches = getValidBranches(ns, branches, hackingLevel, prevHost);
  14.     if(validBranches.length == 0){
  15.         return;
  16.     }
  17.     await prepareBranches(ns, validBranches, payload, currentHost);
  18.  
  19.     for (let branch of validBranches) {
  20.         await deployPayload(ns, branch, payload, multithreadPayload, payloadRamUsage, useHost)
  21.     }
  22. }
  23.  
  24. function branchValid(ns, branch, hackingLevel, prevHost) {
  25.     let retVal = branch != prevHost;
  26.     retVal &&= ns.getServerRequiredHackingLevel(branch) <= hackingLevel;
  27.     retVal &&= ns.hasRootAccess(branch);
  28.     retVal &&= ns.getServerMaxRam(branch) >= 4.0;
  29.     return retVal;
  30. }
  31.  
  32. async function deployPayload(ns, target, payload, multithreadPayload, payloadRamUsage, useHost) {
  33.     let threads = 1;
  34.     if (multithreadPayload) {
  35.         let serverRam = ns.getServerMaxRam(target);
  36.         threads = Math.floor(serverRam / payloadRamUsage);
  37.     }
  38.     if (useHost) {
  39.         await ns.exec(payload, target, threads, target);
  40.     } else {
  41.         await ns.exec(payload, target, threads);
  42.     }
  43. }
  44.  
  45. function getValidBranches(ns, branches, hackingLevel, prevHost) {
  46.     let validBranches = [];
  47.     for (let branch of branches) {
  48.         if (branchValid(ns, branch, hackingLevel, prevHost)) {
  49.             validBranches.push(branch);
  50.         }
  51.     }
  52.     return validBranches;
  53. }
  54.  
  55. async function prepareBranches(ns, validBranches, payload, currentHost) {
  56.     for (let branch of validBranches) {
  57.         await ns.scp([payload, 'yggdrasil.js', 'jormungandr.js'], branch);
  58.         await ns.exec('jormungandr.js', branch);
  59.     }
  60.     for (let branch of validBranches) {
  61.         while (ns.isRunning('jormungandr.js', branch)) {
  62.             await ns.sleep(200);
  63.             ns.print("wait for 'jormungandr.js' on branch");
  64.             ns.print(branch);
  65.         }
  66.         await ns.exec('yggdrasil.js', branch, 1, ns.args[0], ns.args[1], ns.args[2], ns.args[3], ns.args[4], currentHost, branch);
  67.     }
  68.     for (let branch of validBranches) {
  69.         while (ns.isRunning('yggdrasil.js', branch, ns.args[0], ns.args[1], ns.args[2], ns.args[3], ns.args[4], currentHost, branch)) {
  70.             await ns.sleep(200);
  71.             ns.print("wait for 'yggdrasil.js' on branch");
  72.             ns.print(branch);
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement