66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
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
|
|
} |