Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Bitburner script: yggdrassil.js
- //yggdrassil.js
- /** @param {NS} ns */
- export async function main(ns) {
- let payload = ns.args[0];
- let hackingLevel = ns.args[1];
- let multithreadPayload = ns.args[2];
- let payloadRamUsage = ns.args[3];
- let useHost = ns.args[4];
- let prevHost = ns.args[5];
- let currentHost = ns.args[6];
- let branches = ns.scan();
- let validBranches = getValidBranches(ns, branches, hackingLevel, prevHost);
- if(validBranches.length == 0){
- return;
- }
- await prepareBranches(ns, validBranches, payload, currentHost);
- for (let branch of validBranches) {
- await deployPayload(ns, branch, payload, multithreadPayload, payloadRamUsage, useHost)
- }
- }
- function branchValid(ns, branch, hackingLevel, prevHost) {
- let retVal = branch != prevHost;
- retVal &&= ns.getServerRequiredHackingLevel(branch) <= hackingLevel;
- retVal &&= ns.hasRootAccess(branch);
- retVal &&= ns.getServerMaxRam(branch) >= 4.0;
- return retVal;
- }
- async function deployPayload(ns, target, payload, multithreadPayload, payloadRamUsage, useHost) {
- let threads = 1;
- if (multithreadPayload) {
- let serverRam = ns.getServerMaxRam(target);
- threads = Math.floor(serverRam / payloadRamUsage);
- }
- if (useHost) {
- await ns.exec(payload, target, threads, target);
- } else {
- await ns.exec(payload, target, threads);
- }
- }
- function getValidBranches(ns, branches, hackingLevel, prevHost) {
- let validBranches = [];
- for (let branch of branches) {
- if (branchValid(ns, branch, hackingLevel, prevHost)) {
- validBranches.push(branch);
- }
- }
- return validBranches;
- }
- async function prepareBranches(ns, validBranches, payload, currentHost) {
- for (let branch of validBranches) {
- await ns.scp([payload, 'yggdrasil.js', 'jormungandr.js'], branch);
- await ns.exec('jormungandr.js', branch);
- }
- for (let branch of validBranches) {
- while (ns.isRunning('jormungandr.js', branch)) {
- await ns.sleep(200);
- ns.print("wait for 'jormungandr.js' on branch");
- ns.print(branch);
- }
- await ns.exec('yggdrasil.js', branch, 1, ns.args[0], ns.args[1], ns.args[2], ns.args[3], ns.args[4], currentHost, branch);
- }
- for (let branch of validBranches) {
- while (ns.isRunning('yggdrasil.js', branch, ns.args[0], ns.args[1], ns.args[2], ns.args[3], ns.args[4], currentHost, branch)) {
- await ns.sleep(200);
- ns.print("wait for 'yggdrasil.js' on branch");
- ns.print(branch);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement