diff options
Diffstat (limited to 'start.js')
-rw-r--r-- | start.js | 234 |
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. +*/ |