Novice automation scripts for beginners. (Spoilers)

The Scripts

In order to get these to work you will need to paste each of them into its own file.

you create a script file by using the nano command. These are all .js files.

Spiderwire.js = 6.30gb ram

nano Spiderwire.jsHackBotNetv1.js

nano HackBotNetv1.js ServerDeploy.js = 4.15gb ram

nano ServerDeploy.js hacksmash.js = 4.65gb ram

nano hacksmash.js serverwallknock.js = 4.65gb ram

serverwallknock.js hackawait.js = 3.75gb ram

nano hackawait.js

Spiderwire.js

This script does a lot of things. It goes through all the servers and starts the other scripts. it also writes the nexthacklevel.txt file for hackawait.js to know when to restart Spiderwire.

/** @param {NS} ns **/ const servers = ["ecorp", "megacorp", "b-and-a", "blade", "nwo", "clarkinc", "omnitek", "4sigma", "kuai-gong", "fulcrumtech", "fulcrumassets", "stormtech", "defcomm", "infocomm", "helios", "vitalife", "icarus", "univ-energy", "titan-labs", "microdyne", "taiyang-digital", "galactic-cyber", "aerocorp", "omnia", "zb-def", "applied-energetics", "solaris", "deltaone", "global-pharm", "nova-med", "zeus-med", "unitalife", "lexo-corp", "rho-construction", "alpha-ent", "aevum-police", "rothman-uni", "zb-institute", "summit-uni", "syscore", "catalyst", "the-hub", "comptek", "netlink", "johnson-ortho", "n00dles", "foodnstuff", "sigma-cosmetics", "joesguns", "zer0", "nectar-net", "neo-net", "silver-helix", "hong-fang-tea", "harakiri-sushi", "phantasy", "max-hardware", "omega-net", "crush-fitness", "iron-gym", "millenium-fitness", "powerhouse-fitness", "snap-fitness", "run4theh111z", "I.I.I.I", "avmnite-02h", "CSEC", "The-Cave", "w0r1d_d43m0n", "."]; const hacklevelarray = []; export async function main(ns) { var old = Math.floor(((ns.getServerMaxMoney(ns.args[0]) / ns.getHackTime(ns.args[0])) * ns.hackAnalyzeChance(ns.args[0]))); while (hacklevelarray.length > 1) { hacklevelarray.pop() }; if (hacklevelarray.length < 1) { hacklevelarray.push("fulcrumassets"); } servers.forEach(server => { if (ns.args[0] != "scan") { if (!ns.serverExists(server)) { ns.tprint(server + " does not exist!"); ns.print(server + " does not exist!"); } else if (ns.getHackingLevel() >= ns.getServerRequiredHackingLevel(server)) { ns.exec("hacksmash.js", "home", 1, server, ns.args[0]); } else if (ns.getServerRequiredHackingLevel(server) < ns.getServerRequiredHackingLevel(hacklevelarray[0])) { hacklevelarray.pop(); hacklevelarray.push(server); } } else if (ns.getHackingLevel() >= ns.getServerRequiredHackingLevel(server)) { ns.exec("analyze_server.js", "home", 1, server); } var shouldhack = Math.floor(((ns.getServerMaxMoney(server) / ns.getHackTime(server)) * ns.hackAnalyzeChance(server))); if (shouldhack > old) { if (ns.getServerRequiredHackingLevel(server) <= ns.getHackingLevel()) { ns.print("Perhaps you should hack " + server + " with a hack score of " + shouldhack + " and a max cash of " + ns.nFormat(ns.getServerMaxMoney(server), "$0.000a")); } } }) ns.tprint(hacklevelarray[0] + " is the next server requiring the hacking level of " + ns.getServerRequiredHackingLevel(hacklevelarray[0])) ns.tprint(ns.args[0] + " Is the target with a hack score of:" + old + " and a max cash of " + ns.nFormat(ns.getServerMaxMoney(ns.args[0]), "$0.000a")) ns.exec("ServerDeploy.js", "home", 1, ns.args[0]); await ns.write("nexthacklevel.txt", ns.getServerRequiredHackingLevel(hacklevelarray[0]), "w") ns.spawn("hackawait.js", 1, ns.args[0]); }

HackBotNetv1.js

You might see what I was trying to do here. Well in any event maybe in the future someone can use the ports.

/** @param {NS} ns **/ let GlobalTarget; let GlobalMoneyThresh; let GlobalSecurityThresh; export async function main(ns) { GlobalTarget = ns.args[0]; GlobalMoneyThresh = ns.args[1] * 0.75; GlobalSecurityThresh = ns.args[2] + 5; while(true) { if (ns.getServerSecurityLevel(GlobalTarget) > GlobalSecurityThresh) { await ns.weaken(GlobalTarget); } else if (ns.getServerMoneyAvailable(GlobalTarget) < GlobalMoneyThresh) { await ns.grow(GlobalTarget); } else { await ns.hack(GlobalTarget); } } }

ServerDeploy.js

This is the script to re-engage your bought hacking servers. It is initiated by Spiderwire.

/** @param {NS} ns **/ export async function main(ns) { var i = 0; //start var x = 25; //upperlimit var hostname = String; while (i < x) { hostname = "pserv-" + i; if (ns.serverExists(hostname)) { const threads = Math.floor(ns.getServerMaxRam(hostname) / 2.2) await ns.scp("HackBotNetv1.js", hostname); ns.killall(hostname); ns.exec("serverwallknock.js", "home", 1, hostname, ns.args[0]); } ++i; } }

Hacksmash.js

This is the script initiated by Spiderwire to knock down walls.

/** @param {NS} ns **/ export async function main(ns) { const hostname = ns.args[0]; const target = ns.args[1]; if (ns.fileExists("BruteSSH.exe", "home")) { ns.brutessh(hostname); ns.brutessh(target); } if (ns.fileExists("FTPCrack.exe", "home")) { ns.ftpcrack(hostname); ns.ftpcrack(target); } if (ns.fileExists("relaySMTP.exe", "home")) { ns.relaysmtp(hostname); ns.relaysmtp(target); } if (ns.fileExists("HTTPworm.exe", "home")) { ns.httpworm(hostname); ns.httpworm(target); } if (ns.fileExists("SQLInject.exe", "home")) { ns.sqlinject(hostname); ns.sqlinject(target); } ns.nuke(hostname); ns.nuke(target); const threads = Math.floor(ns.getServerMaxRam(hostname) / 2.2) if (!ns.fileExists("HackBotNetv1.js", hostname)) { await ns.scp("HackBotNetv1.js", hostname); } ns.killall(hostname); if (threads > 0) { ns.exec("HackBotNetv1.js", hostname, threads, target, ns.getServerMaxMoney(target), ns.getServerMinSecurityLevel(target)); } }

Serverwallknock.js

A smart man would combine this and hacksmash into one function. Maybe eventually.

/** @param {NS} ns **/ export async function main(ns) { const hostname = ns.args[0]; const target = ns.args[1]; if (ns.fileExists("BruteSSH.exe", "home")) { ns.brutessh(target); }; if (ns.fileExists("FTPCrack.exe", "home")) { ns.ftpcrack(target); }; if (ns.fileExists("relaySMTP.exe", "home")) { ns.relaysmtp(target); }; if (ns.fileExists("HTTPworm.exe", "home")) { ns.httpworm(target); }; if (ns.fileExists("SQLInject.exe", "home")) { ns.sqlinject(target); }; ns.nuke(target); const threads = Math.floor(ns.getServerMaxRam(hostname) / 2.2) if (!ns.fileExists("HackBotNetv1.js", hostname)) { await ns.scp("HackBotNetv1.js", hostname); }; ns.killall(hostname); if (threads > 0) { ns.exec("HackBotNetv1.js", hostname, threads, target, ns.getServerMaxMoney(target), ns.getServerMinSecurityLevel(target)); }; }

Hackawait.js

This little script eats up 3.75 gb of ram until your hacking level is high enough to hack the next server. then it restarts Spiderwire for you.

/** @param {NS} ns **/ export async function main(ns) { var hackinglevel = ns.getHackingLevel(); var nexthacklevel = (ns.read("nexthacklevel.txt")).valueOf(); while (hackinglevel < nexthacklevel) { hackinglevel = ns.getHackingLevel(); if (ns.fileExists("nexthacklevel.txt", "home")) { nexthacklevel = ((ns.read("nexthacklevel.txt")).valueOf()); ns.print(hackinglevel + " of " + nexthacklevel); } else { ns.exit(); } await ns.sleep(60000); } if(nexthacklevel !=0){ ns.alert("You can hack a new server!"); ns.spawn("Spiderwire.js", 1, ns.args[0]); }; };

BONUS: BuyBestServers.js

It buys and upgrades your servers automatically until they are all maxed out (at least up to 25 of them). It takes 9gb ram.

/** @param {NS} ns **/ export async function main(ns) { var hostname = String; var i = 0; var z = 1; var refresh = 1; // Continuously try to purchase servers until we've reached the maximum // amount of servers while (refresh < 21) { while (i < 25) { var ram = Math.pow(2, z); var cost = ns.getPurchasedServerCost(ram); ns.print("Ram:" + ram + " Cost: $" + cost); //if you can afford it if (ns.getServerMoneyAvailable("home") > cost) { hostname = ("pserv-" + i); if (ns.serverExists(hostname)) { var serverram = ns.getServerMaxRam(hostname); //if the one you're trying to buy is better if (serverram < ram) { ns.killall(hostname); ns.print("deleting pserv-" + i); ns.tprint("deleting pserv-" + i); ns.deleteServer(hostname); ns.print("buying pserv-" + i); ns.purchaseServer(hostname, ram); ns.print("attempting to load HackBotNetv1.js"); const threads = Math.floor(ns.getServerMaxRam(hostname) / 2.2) if (threads >= 1) { await ns.scp("HackBotNetv1.js", hostname); ns.exec("serverwallknock.js", "home", 1, hostname, ns.args[0]); } ++i; //if it's maxed out } else if (serverram === 1048576) { ns.print("pserv-" + i + "is maxxed"); ++i; } else { ns.print("NEXT!!!"); ++i; } } else { ns.purchaseServer(hostname, ram); ns.print("attempting to load HackBotNetv1.js"); const threads = Math.floor(ns.getServerMaxRam(hostname) / 2.2) if (threads >= 1) { await ns.scp("HackBotNetv1.js", hostname); ns.exec("serverwallknock.js", "home", 1, hostname, ns.args[0]); } ++i; } //If you couldn't afford it. } else if (serverram < ram) { ns.print("Waiting to reach $" + cost + " to upgrade server " + hostname); await ns.sleep(60000); } await ns.sleep(60); ns.print("microsleep") } ++z; ++refresh; i = 0; ns.print("Movin On Up!") if (z === 21) { ns.exit() } } }

Source: https://steamcommunity.com/sharedfiles/filedetails/?id=2756854392					

More Bitburner guilds