import { EXPLOITS } from "./constants.js" /** @param {import(".").NS } ns */ export async function main(ns) { // ns.disableLog('ALL'); // function scanServer(currentServer, previousServer = currentServer) { // let availableServers = ns.scan(currentServer); // let result = []; // for (let i = 0; i < availableServers.length; ++i) { // let nextServer = availableServers[i]; // if (nextServer != currentServer && nextServer != previousServer) { // result.concat(scanServer(nextServer, currentServer)); // } // } // return [currentServer].concat(result); // } function maxPortsToHack() { let maxPorts = 0; for (const exploit of EXPLOITS) { if (ns.fileExists(exploit.name)) ++maxPorts; } // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`); return maxPorts; } function analyzeServer(server) { let requiredHacking = ns.getServerRequiredHackingLevel(server); let requiredPorts = ns.getServerNumPortsRequired(server); let currentHacking = ns.getHackingLevel(); return { "name": server, "rootAccess": ns.hasRootAccess(server), "requiredHacking": requiredHacking, "requiredPorts": requiredPorts, "nukeAvailable": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts), "currentMoney": ns.getServerMoneyAvailable(server), "maxMoney": ns.getServerMaxMoney(server), "currentSecurity": ns.getServerSecurityLevel(server), "minSecurity": ns.getServerMinSecurityLevel(server), }; } function scanServer(currentServer, previousServer = currentServer, network = []) { let availableServers = ns.scan(currentServer); network.push(analyzeServer(currentServer)); for (let i = 0; i < availableServers.length; ++i) { let nextServer = availableServers[i]; if (nextServer != currentServer && nextServer != previousServer) { scanServer(nextServer, currentServer, network); } } return network; } let network = scanServer('home'); ns.tprint(network[0]) ns.as }