Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** @param {NS} ns */
- export async function main(ns) {
- var allservers = ["home"];
- var servers = [];
- var ramInfo = [];
- const maintarget = ns.args[0];
- var targetinfo = [];
- targetinfo.push(maintarget);
- targetinfo.push(ns.getServerMaxMoney(maintarget));
- targetinfo.push(ns.getServerMinSecurityLevel(maintarget));
- targetinfo.push(ns.getServerRequiredHackingLevel(maintarget));
- const moneythresh = 0.8;
- const securitythresh = 1.5;
- var usableservers = getallusableservers();
- for (let i = 0; i < usableservers.length / 2; i++) {
- servers.push(usableservers[2 * i]);
- ramInfo.push(usableservers[(2 * i) + 1]);
- }
- await attackallservers(...allservers);
- if (targetinfo[3] < ns.getHackingLevel()) {
- while (true) {
- const hacktime = ns.getHackTime(maintarget);
- const growtime = ns.getGrowTime(maintarget);
- const weakentime = ns.getWeakenTime(maintarget);
- const currentmoneypercent = (ns.getServerMoneyAvailable(maintarget) / targetinfo[1]);
- const securitylevel = (ns.getServerSecurityLevel(maintarget) / targetinfo[2]);
- if (securitylevel > securitythresh) {
- var targetservers = [];
- var targetramusage = [];
- var weakenScriptRam = ns.getScriptRam("weaken.js", "home");
- var neededweakenthreads = Math.ceil((securitylevel - targetinfo[2]) / (ns.weakenAnalyze(1)));
- var threadsPerServer = findram(neededweakenthreads, weakenScriptRam);
- for (let i = 0; i < threadsPerServer.length / 2; i++) {
- targetservers.push(threadsPerServer[2 * i]);
- targetramusage.push(threadsPerServer[(2 * i) + 1]);
- }
- ns.print("trying to run script on " + targetservers, "INFO")
- for (let i = 0; i < targetservers.length; i++) {
- await ns.scp("weaken.js", targetservers[i], "home");
- await ns.exec("weaken.js", targetservers[i], targetramusage[i], maintarget);
- ns.print("running weaken.js on " + targetservers[i]);
- }
- ns.print("waiting for weaken");
- await ns.sleep(weakentime);
- } else if (currentmoneypercent <= moneythresh) {
- var targetservers = [];
- var targetramusage = [];
- var growthScriptRam = ns.getScriptRam("grow.js", "home");
- var neededgrowththreads = Math.ceil(ns.growthAnalyze(maintarget, 1.25));
- var threadsPerServer = await findram(neededgrowththreads, growthScriptRam);
- for (let i = 0; i < threadsPerServer.length / 2; i++) {
- targetservers.push(threadsPerServer[2 * i]);
- targetramusage.push(threadsPerServer[(2 * i) + 1]);
- }
- ns.print("trying to run script on " + targetservers, "INFO")
- for (let i = 0; i < targetservers.length; i++) {
- await ns.scp("grow.js", targetservers[i], "home");
- await ns.exec("grow.js", targetservers[i], targetramusage[i], maintarget);
- ns.print("running grow.js on " + targetservers[i]);
- }
- ns.print("waiting for growth");
- await ns.sleep(growtime);
- } else {
- var targetservers = [];
- var targetramusage = [];
- var hackScriptRam = ns.getScriptRam("hack.js", "home");
- var neededhackthreads = Math.ceil(((moneythresh) / ns.hackAnalyze(maintarget)));
- var threadsPerServer = await findram(neededhackthreads, hackScriptRam);
- for (let i = 0; i < threadsPerServer.length / 2; i++) {
- targetservers.push(threadsPerServer[2 * i]);
- targetramusage.push(threadsPerServer[(2 * i) + 1]);
- }
- ns.print("trying to run script on " + targetservers, "INFO")
- for (let i = 0; i < targetservers.length; i++) {
- await ns.scp("hack.js", targetservers[i], "home");
- await ns.exec("hack.js", targetservers[i], targetramusage[i], maintarget);
- ns.print("running hack.js on " + targetservers[i]);
- }
- ns.print("waiting for hack");
- await ns.sleep(hacktime);
- }
- await ns.sleep(550);
- }
- }
- function findram(threadsneeded, scriptram) {
- var threadsStillNeeded = Math.ceil(threadsneeded);
- //var totalramfound = 0;
- var counter = 0;
- var threadsUsedPerServer = [];
- for (const server of servers) {
- //var threadsusedonthisserver = 0;
- var currentram = (ramInfo[counter] - ns.getServerUsedRam(server));
- //var ramUsedOnThisServer = 0;
- const possibleThreads = Math.floor(currentram / scriptram);
- var ramArray = [possibleThreads, threadsStillNeeded];
- ramArray.sort((a, b) => a - b);
- if (ramArray[0] > 0) {
- threadsUsedPerServer.push(server);
- threadsUsedPerServer.push(ramArray[0]);
- }
- threadsStillNeeded -= ramArray[0];
- counter++;
- if (threadsStillNeeded <= 0) {
- return [...threadsUsedPerServer];
- }
- }
- ns.print("unable to find enough ram to run script on " + maintarget);
- return [...threadsUsedPerServer];
- }
- function getallusableservers() {
- var serverlist = ["home", ns.getServerMaxRam("home")];
- for (let i = 0; i < 20; i++) {
- for (const server of allservers) {
- const connections = ns.scan(server);
- for (const connection of connections) {
- if ((!(serverlist.includes(connection))) && (ns.getServerMaxRam(connection) > 2) && (connection != "darkweb") && (connection != "home") && (connection != "pserv-0") && ns.hasRootAccess(connection)) {
- serverlist.push(connection);
- serverlist.push(ns.getServerMaxRam(connection));
- //ns.toast(connection + " added to server list.");
- }
- if (!(allservers.includes(connection))) {
- allservers.push(connection);
- }
- }
- }
- }
- serverlist.push(serverlist.shift());
- serverlist.push(serverlist.shift());
- return [...serverlist];
- }
- async function attackallservers(...targetlist) {
- for (let i = 0; i < (targetlist.length - 1); i++) {
- if (targetlist[i] != "home" && targetlist[i] != "darkweb")
- await attack(targetlist[i]);
- }
- }
- async function attack(server) {
- var hacktoolnum = 0; //count and use hack tools owned if you don't have root
- if (!ns.hasRootAccess(server)) {
- ns.toast('Opening ports on ' + server);
- if (ns.fileExists('BruteSSH.exe', 'home')) {
- ns.brutessh(server);
- hacktoolnum++;
- }
- if (ns.fileExists('FTPCrack.exe', 'home')) {
- ns.ftpcrack(server);
- hacktoolnum++;
- }
- if (ns.fileExists('relaySMTP.exe', 'home')) {
- ns.relaysmtp(server);
- hacktoolnum++;
- }
- if (ns.fileExists('HTTPWorm.exe', 'home')) {
- ns.httpworm(server);
- hacktoolnum++;
- }
- if (ns.fileExists('SQLInject.exe', 'home')) {
- ns.sqlinject(server);
- hacktoolnum++;
- }
- }
- if (ns.getServerNumPortsRequired(server) <= hacktoolnum && !ns.hasRootAccess(server)) {
- ns.toast("nuking " + server);
- ns.nuke(server);
- }
- if (!ns.hasRootAccess(server)) {
- ns.toast("unable to gain root to " + server, "error");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement