summaryrefslogtreecommitdiff
path: root/start.js
diff options
context:
space:
mode:
Diffstat (limited to 'start.js')
-rw-r--r--start.js234
1 files changed, 234 insertions, 0 deletions
diff --git a/start.js b/start.js
new file mode 100644
index 0000000..66b75fb
--- /dev/null
+++ b/start.js
@@ -0,0 +1,234 @@
+let ports;
+const HOME = "home";
+
+/** @param {NS} ns */
+export async function main(ns) {
+ let lvlpercent = 2 / 3;
+ let ram = ns.getServerMaxRam(HOME);
+
+ let debug = false;
+ if (ns.args[0] == "debugging") {
+ debug = true;
+ } else if (ns.args[0] == "--help") {
+ ns.tprint("\n This script should be run to start all automated programs.\n Such programs include:\n Hacking the best server available using every server available.\n Buying and upgrading max hacknet nodes.\n Purchasing the maximum amount of servers with 1/2 Ram of the home server.");
+ ns.exit();
+ }
+
+ ports = [
+ "NUKE.exe",
+ "BruteSSH.exe",
+ "FTPCrack.exe",
+ "RelaySMTP.exe",
+ "HTTPWorm.exe",
+ "SQLInject.exe"
+ ];
+ // List of targets for each level of root function
+ const targets = [
+ "harakiri-sushi",
+ "iron-gym",
+ "the-hub",
+ "rho-construction",
+ "global-pharm",
+ "deltaone",
+ ];
+
+ ns.tail();
+ ns.moveTail(1050, 425);
+ ns.resizeTail(250, 100);
+
+ // stop logging certain actions
+ ns.disableLog("ALL");
+ ns.clearLog();
+
+ // too expensive
+ // Only write to these files if its been less than a minute since last aug
+ if (ns.getResetInfo().lastAugReset < 60000) {
+ ns.write("stockgains.txt", "", "w");
+ ns.write("augbaseprice.txt", ns.singularity.getAugmentationPrice("NeuroFlux Governor"), "w");
+ }
+
+ // Kill all instances of batch and batcher on startup
+ // to prevent errors from batch trying to use the object from batcher
+ ns.scriptKill("batch/batcher.js", HOME);
+ ns.scriptKill("batch/batch.js", HOME);
+
+ if (ns.getHackingLevel() < 40) {
+ ns.scriptKill("hack.js", HOME);
+ ns.print("Running root script #0, hacking ", "joesguns");
+ ns.nuke("joesguns");
+ ns.exec("hack.js", HOME, (ns.getServerMaxRam(HOME) > 200) ? (Math.max(Math.floor((ns.getServerMaxRam(HOME) - ns.getServerUsedRam(HOME) - 200) / 2.4), 10)) : (Math.max(Math.floor((ns.getServerMaxRam(HOME) - ns.getScriptRam("start.js")) / 2.4), 10)), "joesguns", true);
+ }
+
+ // too expensive
+ // start working for Sector-12 to get hacking exp
+ if (ns.getServerMoneyAvailable(HOME) >= 15000000) {
+ const invites = ns.singularity.checkFactionInvitations();
+ for (let i = 0; i < invites.length; i++) {
+ if (invites[i] == "Sector-12") {
+ ns.singularity.joinFaction(invites[i]);
+ }
+ }
+ ns.singularity.workForFaction("Sector-12", "hacking", false);
+ }
+
+ // start autoinfil
+ ns.exec("misc/autoinfiltrate.js", HOME, 1, "--quiet");
+
+ // start backdooring faction servers to get invites
+ ns.print("Running start/milestones.js");
+ ns.scriptKill("start/milestones.js", HOME);
+ ns.exec("start/milestones.js", HOME);
+
+ // start augment monitor
+ ns.print("Running start/augments.js");
+ ns.scriptKill("start/augments.js", HOME);
+ ns.exec("start/augments.js", HOME);
+
+ // start home monitor
+ // upgrades ram and cores
+ // joins factions
+ ns.print("Running start/home.js");
+ ns.scriptKill("start/home.js", HOME);
+ ns.exec("start/home.js", HOME);
+
+ // too expensive
+ if (ns.getPlayer().money > 200000) {
+ ns.singularity.purchaseTor();
+ }
+
+ // Buy all of the .exe's
+ let m = 0;
+ for (let i = 0; i < ports.length; ++i) {
+ // too expensive
+ if (!ns.fileExists(ports[i])) {
+ // too expensive
+ if (ns.getServerMoneyAvailable(HOME) > ns.singularity.getDarkwebProgramCost(ports[i])) {
+ ns.singularity.purchaseProgram(ports[i]);
+ }
+ ns.print("Waiting for ", ports[i]);
+ while (!ns.fileExists(ports[i])) {
+ if (ns.getServerMoneyAvailable(HOME) > 250000000) {
+ buyall(ns);
+ }
+ await ns.sleep(10000);
+ }
+ }
+ // too expensive
+ if (ns.getServerRequiredHackingLevel(targets[i]) > (ns.getHackingLevel() * lvlpercent)) {
+ ns.print("Waiting to reach hacking level ", (ns.getServerRequiredHackingLevel(targets[i]) / lvlpercent), " to hack ", targets[i]);
+ while (ns.getServerRequiredHackingLevel(targets[i]) > (ns.getHackingLevel() * lvlpercent)) {
+ if (ns.getServerMoneyAvailable(HOME) > 5000000000) {
+ buyall(ns);
+ }
+ await ns.sleep(60000);
+ }
+ }
+
+ // Try to root all targets
+ if (!ns.hasRootAccess("deltaone") && ns.fileExists("SQLInject.exe") && !ns.isRunning("root.js")) {
+ ns.exec("root.js", HOME)
+ }
+ // Kill hack.js for foodnstuff
+ if (ns.getHackingLevel() > 200) {
+ ns.scriptKill("hack.js", HOME);
+ }
+ // Run hacker.js
+ if (!(ns.scriptRunning("start/hacker.js", HOME))) {
+ ns.print("Running start/hacker.js");
+ ns.exec("start/hacker.js", HOME);
+ }
+
+ // too expensive
+ if (ns.getServerMoneyAvailable(HOME) > 5000000000) {
+ buyall(ns);
+ }
+
+
+ if (ports[i] == "NUKE.exe") {
+ } else if (ports[i] == "BruteSSH.exe") {
+ // ns.print("Running start/hacknet2.js");
+ // ns.scriptKill("start/hacknet2.js", HOME);
+ // ns.exec("start/hacknet2.js", HOME, 1, debug);
+ } else if (ports[i] == "FTPCrack.exe") {
+ ns.print("Running the server purchasing script");
+ ns.scriptKill("start/buyservers.js", HOME);
+ ns.exec("start/buyservers.js", HOME, 1, 512, "max", false, debug);
+ } else if (ports[i] == "RelaySMTP.exe" && ns.stock.has4SDataTIXAPI()) {
+ ns.print("Running the stocker script");
+ ns.scriptKill("stocks/stocks.js", HOME);
+ ns.exec("stocks/stocks.js", HOME, 1);
+ }
+ }
+
+ await ns.sleep(1000);
+
+ ns.print("Going idle now");
+
+ // while loop to check every minute if something should be done
+ // (checks if home has more RAM than before)
+ while (true) {
+ // too expensive
+ if (ram != ns.getServerMaxRam(HOME)) {
+ if (ns.getServerMoneyAvailable(HOME) >= ns.singularity.getUpgradeHomeRamCost()) {
+ ns.singularity.upgradeHomeRam();
+ }
+ }
+ // Run batcher on top 4 targets
+ if (!ns.getRunningScript("batch/batcher.js", HOME, "deltaone") && ns.getHackingLevel() > ns.getServerRequiredHackingLevel("deltaone")) {
+ ns.print("Running batch/batcher.js");
+ ns.exec("batch/batcher.js", HOME, 1, "deltaone");
+ }
+ if (!ns.getRunningScript("batch/batcher.js", HOME, "zeus-med") && ns.getHackingLevel() > ns.getServerRequiredHackingLevel("deltaone")) {
+ ns.print("Running batch/batcher.js");
+ ns.exec("batch/batcher.js", HOME, 1, "zeus-med");
+ }
+ if (!ns.getRunningScript("batch/batcher.js", HOME, "aerocorp") && ns.getHackingLevel() > ns.getServerRequiredHackingLevel("deltaone")) {
+ ns.print("Running batch/batcher.js");
+ ns.exec("batch/batcher.js", HOME, 1, "aerocorp");
+ }
+ if (!ns.getRunningScript("batch/batcher.js", HOME, "zb-institute") && ns.getHackingLevel() > ns.getServerRequiredHackingLevel("deltaone")) {
+ ns.print("Running batch/batcher.js");
+ ns.exec("batch/batcher.js", HOME, 1, "zb-institute");
+ }
+ if (!ns.fileExists("Formulas.exe") && ns.getServerMoneyAvailable(HOME) > 5000000000) {
+ // too expensive
+ buyall(ns);
+ ns.print("Running the server upgrading script");
+ ns.scriptKill("start/buyservers.js", HOME);
+ ns.exec("start/buyservers.js", HOME, 1, 2048, "max", true, debug);
+ }
+ if (ns.serverExists("pserv-00")) {
+ if (ns.getPurchasedServerUpgradeCost("pserv-00", ns.getServerMaxRam("pserv-00") * 2) < 1000000000) {
+ if (ns.isRunning("start/buyservers.js", HOME, 1, 512, "max", false, debug) || !ns.isRunning("start/buyservers.js", HOME, 1, 2048, "max", true, debug)) {
+ ns.scriptKill("start/buyservers.js", HOME);
+ ns.exec("start/buyservers.js", HOME, 1, 2048, "max", true, debug);
+ }
+ }
+ }
+ if (m < 4) {
+ // start backdooring faction servers to get invites
+ ns.print("Running milestones.js");
+ ns.scriptKill("start/milestones.js", HOME);
+ ns.exec("start/milestones.js", HOME);
+ m++;
+ }
+ await ns.sleep(60000);
+ }
+}
+
+function buyall(ns) {
+ // too expensive
+ for (let i = 1; i < ports.length; ++i) {
+ if (!ns.fileExists(ports[i])) {
+ ns.singularity.purchaseProgram(ports[i]);
+ }
+ }
+ if (ns.getServerMoneyAvailable(HOME) > 5000000000) {
+ ns.singularity.purchaseProgram("Formulas.exe");
+ }
+}
+
+/*
+ Start.js should continuously check if new .exe files have been made, then re-run root.js when they have been made,
+ so that better servers are targeted, servers that will make more money.
+*/