Files
A_Bitburner_Saga/Ramses/home/singularity/RMroutelist.js
2024-10-05 21:15:20 +02:00

52 lines
1.9 KiB
JavaScript

/** @param {NS} ns */
export async function main(ns) {
ns.tail();
let serverRoutes = await scanRecursiveWrapper(ns);
let currentHackingLevel = ns.getHackingLevel();
let currentArray = [];
let currentHop = "";
for (const [name, entry] of Object.entries(serverRoutes)) {
if (ns.getServerRequiredHackingLevel(name) < currentHackingLevel && ns.hasRootAccess(name) === true) {
currentArray = entry;
if (entry.length > 0) {
while (currentArray.length > 0) {
currentHop = currentArray.shift();
if (ns.singularity.connect(currentHop) === false) ns.tprint("Error when trying to connect to: " + currentHop);
}
ns.tprint("Trying to backdoor " + currentHop)
await ns.singularity.installBackdoor(currentHop);
ns.tprint("Success on " + currentHop)
ns.singularity.connect("home");
}
}
}
}
/** @param {NS} ns */
async function scanRecursiveWrapper(ns) {
let startTime = Date.now();
ns.rm("ServerRouteList.txt");
await scanRecursive(ns, [], "home", startTime);
let result = JSON.parse("[" + ns.read("ServerRouteList.txt") + "{}]").reduce((acc, obj) => ({ ...acc, ...obj }), {});
ns.write("ServerRouteList.txt", JSON.stringify(result, "w"));
return result;
}
/** @param {NS} ns */
async function scanRecursive(ns, parents, currentServer, startTime) {
let currentTime = Date.now();
if (currentTime > startTime + 5) {
return
} else {
let currentChildren = ns.scan(currentServer);
let parentsSet = new Set(parents);
let cleanedChildren = currentChildren.filter(element => !parentsSet.has(element));
let tempServername = String(currentServer);
ns.write("ServerRouteList.txt", JSON.stringify({ [tempServername]: parents }) + ",", "a");
parents.push(currentServer);
for (let child in cleanedChildren) {
await scanRecursive(ns, parents, cleanedChildren[child], startTime)
}
}
}