137 lines
4.3 KiB
JavaScript
137 lines
4.3 KiB
JavaScript
import { isHackable, getNodesByPriority, getNodesByRam } from "getNodes.js";
|
|
import { formatMoney } from "formatMoney.js";
|
|
|
|
var nodes = [];
|
|
var workerNodes = [];
|
|
var targetIndex = 0;
|
|
|
|
/**
|
|
* @param {NS} ns
|
|
* @param {string[]} workerNodes
|
|
* @param {string} targetNode
|
|
* @param {string} script
|
|
*/
|
|
async function distribute(ns, script) {
|
|
/*
|
|
if(script == "hack.js") {
|
|
var hackAmount = ns.hackAnalyze(nodes[targetIndex]);
|
|
var totalHackAmount = 0;
|
|
for(var i = 0; i < workerNodes.length; i++) {
|
|
var availableThreads = Math.floor(ns.getServerMaxRam(workerNodes[i]) / ns.getScriptRam(script));
|
|
totalHackAmount += hackAmount * availableThreads;
|
|
|
|
// This is to ensure that I do not over-hack the target.
|
|
if(totalHackAmount < .5) {
|
|
ns.killall(workerNodes[i]);
|
|
|
|
ns.scp(script, workerNodes[i]);
|
|
ns.exec(script, workerNodes[i], availableThreads, nodes[targetIndex]);
|
|
} else {
|
|
if(targetIndex == nodes.length) {
|
|
ns.tprint("Something really bad has happened...ran out of nodes to hack!");
|
|
exit();
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
*/
|
|
// Use maximum RAM on all worker nodes.
|
|
for(var i = 0; i < workerNodes.length; i++) {
|
|
ns.killall(workerNodes[i]);
|
|
|
|
var availableThreads = Math.floor(ns.getServerMaxRam(workerNodes[i]) / ns.getScriptRam(script));
|
|
|
|
ns.scp(script, workerNodes[i]);
|
|
ns.exec(script, workerNodes[i], availableThreads, nodes[targetIndex]);
|
|
}
|
|
|
|
// Use 80% of the home server's RAM to execute the script.
|
|
var availableThreads = Math.floor((ns.getServerMaxRam("home") / ns.getScriptRam(script)) * 0.8);
|
|
ns.scriptKill("weaken.js", "home");
|
|
ns.scriptKill("grow.js", "home");
|
|
ns.scriptKill("hack.js", "home");
|
|
ns.run(script, availableThreads, nodes[targetIndex]);
|
|
//}
|
|
}
|
|
|
|
/**
|
|
* @param {NS} ns
|
|
*/
|
|
async function grow(ns) {
|
|
ns.tprint("distributing grow.js...");
|
|
distribute(ns, "grow.js");
|
|
|
|
var growTime = ns.getGrowTime(nodes[targetIndex]);
|
|
ns.alert("growing for " + Math.ceil(growTime / 60000) + " minutes");
|
|
await ns.sleep(growTime + 1000);
|
|
ns.alert("finished growing " + nodes[targetIndex] + "\nnow at " + formatMoney(ns.getServerMoneyAvailable(nodes[targetIndex])));
|
|
}
|
|
|
|
/**
|
|
* @param {NS} ns
|
|
*/
|
|
async function weaken(ns) {
|
|
ns.tprint("distributing weaken.js...");
|
|
distribute(ns, "weaken.js");
|
|
|
|
var weakenTime = ns.getWeakenTime(nodes[targetIndex]);
|
|
ns.alert("weakening for " + Math.ceil(weakenTime / 60000) + " minutes");
|
|
await ns.sleep(weakenTime + 1000);
|
|
ns.alert("finished weakening " + nodes[targetIndex]);
|
|
}
|
|
|
|
/**
|
|
* @param {NS} ns
|
|
* @param {string[]} workerNodes
|
|
* @param {string} targetNode
|
|
*/
|
|
async function hack(ns) {
|
|
ns.tprint("distributing hack.js...");
|
|
distribute(ns, "hack.js");
|
|
|
|
var hackTime = ns.getHackTime(nodes[targetIndex]);
|
|
ns.alert("hacking for " + Math.ceil(hackTime / 60000) + " minutes");
|
|
await ns.sleep(hackTime + 1000);
|
|
ns.alert("finished hacking " + nodes[targetIndex]);
|
|
}
|
|
|
|
/** @param {NS} ns */
|
|
export async function main(ns) {
|
|
nodes = await getNodesByPriority(ns);
|
|
workerNodes = await getNodesByRam(ns);
|
|
|
|
// Override the default target node to use a user provided one instead.
|
|
if(ns.args.length == 2) {
|
|
if(ns.args[0] == "--target-node" || ns.args[0] == "-tn") {
|
|
if(nodes.indexOf(ns.args[1]) != -1 && isHackable(ns, nodes[ns.args[1]])) {
|
|
targetIndex = nodes.indexOf(ns.args[1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
while(!isHackable(ns, nodes[targetIndex])) {
|
|
targetIndex++;
|
|
|
|
if(targetIndex == nodes.length) {
|
|
ns.tprint("No hackable nodes!");
|
|
exit();
|
|
}
|
|
}
|
|
*/
|
|
|
|
// @ignore-infinite
|
|
while(true) {
|
|
nodes = await getNodesByPriority(ns);
|
|
workerNodes = await getNodesByRam(ns);
|
|
let targetNode = nodes[0];
|
|
|
|
if(ns.getServerMoneyAvailable(targetNode) != ns.getServerMaxMoney(targetNode)) {
|
|
await grow(ns);
|
|
} else if(ns.getServerSecurityLevel(targetNode) > ns.getServerMinSecurityLevel(targetNode)) {
|
|
await weaken(ns);
|
|
} else {
|
|
await hack(ns);
|
|
}
|
|
}
|
|
} |