import * as helpers from "/apis/helpers.js" /** @param {NS} ns */ export async function main(ns) { let targetMoney = 1000000000; let inCity = true; let startup = true; let programPurchased = true; let scriptsToRun = ['scanForCCT.js','hud.js','infiltration.js'] for (let script of scriptsToRun){ ns.run(script); } //ns.run('hiveCluster/hiveMind.js', 1, "n00dles"); await ns.sleep(1000); while (startup) { //travel to Aevum if we can. if (ns.getPlayer().city != "Aevum") { if (!ns.singularity.travelToCity("Aevum")) { //If we are stuck in Aevum lets just infiltrate MegaCorp. await infiltrate(ns, "MegaCorp"); continue; } } if (ns.getPlayer().city == "Aevum"){ //run an infiltrate on Ecorp await infiltrate(ns, "ECorp"); } //buy tor if we dont have it already if (!ns.getPlayer().tor) ns.singularity.purchaseTor(); //buy programs and tor if we can. if (ns.getPlayer().tor) { let programsToBuy = ["BruteSSH.exe", "FTPCrack.exe", "relaySMTP.exe", "HTTPWorm.exe", "SQLInject.exe"]; for (let program of programsToBuy) { if (!ns.fileExists(program, "home")) { if (ns.singularity.purchaseProgram(program)) programPurchased = true; } } } //if any programs were purchased, attempt to root new systems. if (programPurchased) { let servers = await helpers.getAllServers(ns, []); for (let server of servers) { await dropImmunity(ns, server); } } await ns.sleep(1000); if (ns.getServerMoneyAvailable("home") >= targetMoney) startup = false; } } const doc = eval("document"); /** @param {import(".").NS} ns */ export async function infiltrate(ns, corpName) { getCityE().click(); let fail = false; getCorp(corpName).click(); clickUntrusted("Infil"); // clickUntrusted("Start"); console.log("***************************************************************Started"); while (isInfiltrating()) { await ns.asleep(1000); if (getCorp(corpName)) { //booted to city! fail = true; break; } console.log("***************************************************************Waiting"); } if (!fail) { //clickUntrusted("Sell"); console.log("***************************************************************Sell"); getButton("Sell").click(); return true; } return false; } function getCityE() { for (const elem of doc.querySelectorAll("p")) { if (elem.textContent == "City") { return elem; } } } function getCorp(corpName) { return doc.querySelector('[aria-label="' + corpName + '"]'); } function getButton(text) { for (const elem of doc.querySelectorAll("button")) { if (elem.textContent.toLowerCase().includes(text.toLowerCase())) { return elem; } } } function clickUntrusted(text) { var button = getButton(text); const handler = Object.keys(button)[1]; button[handler].onClick({ isTrusted: true }); } function isInfiltrating() { return ![...doc.querySelectorAll('h4')].some(e => e.innerText === 'Infiltration successful!'); } /** @param {NS} ns */ async function dropImmunity(ns, server) { // If we have the BruteSSH.exe program, use it to open the SSH Port // on the target server let portLevel = 0; if (ns.fileExists("BruteSSH.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) { //log(ns, "Attempting BruteSSH on " + server, 2); ns.brutessh(server); portLevel++; } if (ns.fileExists("FTPCrack.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) { //log(ns, "Attempting FTPCrack on " + server, 2); ns.ftpcrack(server); portLevel++; } if (ns.fileExists("relaySMTP.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) { //log(ns, "Attempting relaySMTP on " + server, 2); ns.relaysmtp(server); portLevel++; } if (ns.fileExists("HTTPWorm.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) { //log(ns, "Attempting HTTPWorm on " + server, 2); ns.httpworm(server); portLevel++; } if (ns.fileExists("SQLInject.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) { //log(ns, "Attempting SQLInject on " + server, 2); ns.sqlinject(server); portLevel++; } // Get root access to target server if (!ns.hasRootAccess(server)) { if (ns.getServerNumPortsRequired(server) <= portLevel) { ns.nuke(server); if (ns.hasRootAccess(server)) { //log(ns, "Gained root access to " + server, 1); } } //else log(ns, "Not enough open ports for " + server + " to run NUKE.exe", 2); } }