Repository navigation
Expand file tree
/
Copy pathdiscover.js
More file actions
79 lines (66 loc) · 2.3 KB
/
Copy pathdiscover.js
File metadata and controls
79 lines (66 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { ServerData } from "classes.js";
var servers = [];
var serversToScan = [];
var paths;
export async function main(ns) {
let servers = await ScanServers(ns);
servers = await FilterHackableServers(ns, servers, 2, ns.getHackingLevel());
servers = await SortByMoney(ns, servers);
servers = servers.filter(s => s.ram > 5);
servers.forEach(s => s.info(ns));
}
export async function ScanServers(ns) {
servers = [];
serversToScan = ["home"];
await PopulateServersToScan(ns);
await ProcessServersToScan(ns);
return servers;
}
export async function SortByMoney(ns, serversToSort) {
return serversToSort.sort((a, b) => b.maxMoney - a.maxMoney);
}
export async function SortByMem(ns, serversToSort) {
return serversToSort.sort((a, b) => b.ram - a.ram);
}
export async function FilterHackableServers(ns, serversToFilter, mp, hs) {
return serversToFilter.filter(sd => (sd.reqPorts <= mp && sd.hackSkill <= hs) || sd.name == "home");
}
export async function FilterZeroMoneyServers(ns, serversToFilter) {
return serversToFilter.filter(sd => sd.maxMoney > 0);
}
export async function FilterByMem(ns, serversToFilter, minMem) {
return serversToFilter.filter(s => s.ram >= minMem)
}
async function PopulateServersToScan(ns) {
paths = new Object();
serversToScan = ["home"];
paths["home"] = [];
let idx = 0;
while (idx < serversToScan.length) {
let serverName = serversToScan[idx++];
let s = await ns.scan(serverName);
for (let i = 0; i < s.length; i++) {
let sn = s[i];
if (!serversToScan.includes(sn)) {
serversToScan.push(sn);
paths[sn] = paths[serverName].concat(new Array(serverName));
}
}
}
}
async function ProcessServersToScan(ns) {
while (serversToScan.length > 0) {
let serverName = serversToScan.shift();
await ScanServer(ns, serverName);
}
}
async function ScanServer(ns, serverName) {
let root = ns.hasRootAccess(serverName);
let ram = ns.getServerMaxRam(serverName);
let hackSkill = ns.getServerRequiredHackingLevel(serverName);
let secLevel = ns.getServerMinSecurityLevel(serverName);
let maxMoney = ns.getServerMaxMoney(serverName);
let reqPorts = ns.getServerNumPortsRequired(serverName);
let sd = new ServerData(serverName, root, ram, hackSkill, secLevel, maxMoney, reqPorts, paths[serverName]);
servers.push(sd);
}