Compare commits

..

2 Commits

Author SHA1 Message Date
Philipp
66cfe2c929 Merge branch 'main' of https://gitea.goetje-ing.de/ArchitectsOfTheBitburner/The_Bitburner_Scripts 2024-10-13 13:02:30 +02:00
Philipp
5d9f31339b Replace serverList 2024-10-13 13:02:22 +02:00
4 changed files with 48 additions and 41 deletions

View File

@@ -33,13 +33,13 @@ export function getCracks(ns) {
/** @param {NS} ns */
export function scanServerList(ns) {
const home = "home";
let serverList = {};
let serverList = [];
let unscanned = [];
unscanned.push(home);
while (unscanned.length > 0) {
let currentServer = unscanned.pop();
if (!serverList[currentServer]) {
if (!serverList.some(obj => obj["serverName"] === currentServer)) {
let maxRam = ns.getServerMaxRam(currentServer);
let minPorts = ns.getServerNumPortsRequired(currentServer);
let minSecLevel = ns.getServerMinSecurityLevel(currentServer);
@@ -51,8 +51,7 @@ export function scanServerList(ns) {
let serverOrgs = serverStats.organizationName;
let serverCores = serverStats.cpuCores;
serverList[currentServer] =
{
serverList.push({
serverName: currentServer,
maxRam: maxRam,
maxMoney: serverMoney,
@@ -64,11 +63,11 @@ export function scanServerList(ns) {
serverOrgs: serverOrgs,
serverCores: serverCores,
serverFiles: serverFiles,
};
});
let neighbours = ns.scan(currentServer);
for (let i = 0; i < neighbours.length; i++) {
let neighbour = neighbours[i];
if (serverList[neighbour]) {
if (serverList.some(obj => obj["serverName"] === neighbour)) {
continue
}
unscanned.push(neighbour);
@@ -89,17 +88,17 @@ export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTar
bestEntry = null;
let nMaxMoneyPerChance = 0;
let nBestMoneyPerChance = 0;
for (const [name, entry] of Object.entries(serverList)) {
serverList.forEach((entry)=> {
if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl <= currentHackLevel) {
nMaxMoneyPerChance = (entry.maxMoney * ns.hackAnalyzeChance(name)) / entry.minSec;
nMaxMoneyPerChance = (entry.maxMoney * ns.hackAnalyzeChance(entry.serverName)) / entry.minSec;
if (nMaxMoneyPerChance > nBestMoneyPerChance) {
nBestMoneyPerChance = nMaxMoneyPerChance;
bestEntry = name;
bestEntry = entry.serverName;
}
}
}
})
}
ns.write("bestTarget.txt", JSON.stringify(serverList[bestEntry]), "w");
ns.write("bestTarget.txt", JSON.stringify(serverList.find((entry) => entry.serverName === bestEntry)), "w");
}
@@ -107,24 +106,25 @@ export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTar
export function crackingAndRooting(ns, cracks) {
if (!ns.fileExists("serverList.txt", "home")) scanServerList();
let serverList = JSON.parse(ns.read("serverList.txt"));
for (const [name, entry] of Object.entries(serverList)) {
let newServerList = serverList.map((entry) => {
let cracked = false;
let openPorts = serverList[name].openPorts || 0;
let openPorts = entry.openPorts || 0;
if (entry.minPorts === 0 || (entry.minPorts > openPorts && entry.minPorts <= Object.keys(cracks).length)) {
for (let k = 0; k < entry.minPorts; k++) {
cracks[Object.keys(cracks)[k]](name);
serverList[name].openPorts = k;
cracks[Object.keys(cracks)[k]](entry.serverName);
entry.openPorts = k;
}
cracked = true;
}
if (!ns.hasRootAccess(name) && cracked === true) {
ns.nuke(name);
if (ns.hasRootAccess(name)) {
serverList[name].rootAccess = true;
if (!ns.hasRootAccess(entry.serverName) && cracked === true) {
ns.nuke(entry.serverName);
if (ns.hasRootAccess(entry.serverName)) {
entry.rootAccess = true;
}
}
ns.write("serverList.txt", JSON.stringify(serverList), "w");
}
return entry
})
ns.write("serverList.txt", JSON.stringify(newServerList), "w");
ns.tprint("Cracking and rooting done");
}
@@ -132,25 +132,26 @@ export function crackingAndRooting(ns, cracks) {
/** @param {NS} ns */
export function copyAndRunScript(ns, funnyScript, currentServer) {
let bestTarget = JSON.parse(ns.read("bestTarget.txt"));
let name = currentServer;
let serverList = JSON.parse(ns.read("serverList.txt"));
ns.print(name);
if (serverList[name].rootAccess === true && serverList[bestTarget.serverName].rootAccess === true) {
if (name !== "home") {
ns.print("killed threads on: " + name + ns.killall(name, true));
let bestEntry = serverList.find((entry) => entry.serverName === bestTarget.serverName)
let currentEntry = serverList.find((entry) => entry.serverName === currentServer)
if (currentEntry.rootAccess === true && bestEntry.rootAccess === true) {
if (currentEntry.serverName !== "home") {
ns.print("killed threads on: " + currentEntry.serverName + ns.killall(currentEntry.serverName, true));
} else {
ns.print("killed threads on: " + name + ns.scriptKill(funnyScript[0], name));
ns.print("killed threads on: " + currentEntry.serverName + ns.scriptKill(funnyScript[0], currentEntry.serverName));
};
if (serverList[name].maxRam > 0) {
ns.scp(funnyScript, name, "home");
if (currentEntry.maxRam > 0) {
ns.scp(funnyScript, currentEntry.serverName, "home");
let maxProcesses = 1;
if (serverList[name].maxRam >= 8) {
maxProcesses = Math.max(Math.floor((serverList[name].maxRam) / 8), 1);
if (currentEntry.maxRam >= 8) {
maxProcesses = Math.max(Math.floor((currentEntry.maxRam) / 8), 1);
} else {
maxProcesses = 1
};
for (let n = 1; n <= maxProcesses; n++) {
ns.exec(funnyScript[0], name, 1, bestTarget.serverName);
ns.exec(funnyScript[0], currentEntry.serverName, 1, bestTarget.serverName);
}
}
}
@@ -165,7 +166,7 @@ export async function purchaseAndUpgradeServers(ns) {
let purchasedServers = [];
let pServcount = listPurchasedServers(ns).length;
let currentMoney = 0;
let serverList = {};
let serverList = [];
while (pServcount < maxPurchasedServers) {
purchasedServers = listPurchasedServers(ns);
currentMoney = ns.getServerMoneyAvailable("home");
@@ -180,7 +181,7 @@ export async function purchaseAndUpgradeServers(ns) {
ns.toast("Purchased " + hostname, "info", 10000);
pServcount = listPurchasedServers(ns).length;
serverList = JSON.parse(ns.read("serverList.txt"));
serverList[hostname] = {
serverList.push({
serverName: hostname,
maxRam: 16,
maxMoney: 0,
@@ -189,7 +190,7 @@ export async function purchaseAndUpgradeServers(ns) {
minHackLvl: 1,
rootAccess: true,
openPorts: 0,
};
});
ns.write("serverList.txt", JSON.stringify(serverList), "w");
continue
} else {
@@ -206,8 +207,8 @@ export async function purchaseAndUpgradeServers(ns) {
if (ns.upgradePurchasedServer(currentServer, targetRam)) {
ns.print(currentServer + " upgraded to " + targetRam + " GB RAM");
serverList = JSON.parse(ns.read("serverList.txt"));
serverList[currentServer].maxRam = targetRam;
ns.write("serverList.txt", JSON.stringify(serverList), "w");
let newServerList = serverList.map((entry) => { if (entry.serverName = currentServer){ entry.maxRam = targetRam}});
ns.write("serverList.txt", JSON.stringify(newServerList), "w");
ns.tprint(cCyan + "Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB" + cReset);
ns.toast("Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB", "info", 10000);
}
@@ -271,7 +272,7 @@ export function listWorkServers(ns) {
ns.printRaw("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓");
ns.printRaw("┃ Server ┃ Free / Max RAM ┃ Cores ┃");
ns.printRaw("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫");
for (const [name, entry] of Object.entries(serverList)) {
serverList.forEach((entry) => {
if (entry.rootAccess && entry.maxRam >= 1) {
let sServerName = entry.serverName.padEnd(nServerColumnWidth, ' ');
let nFreeRAM = entry.maxRam - ns.getServerUsedRam(entry.serverName);
@@ -282,7 +283,7 @@ export function listWorkServers(ns) {
nTotalWorkerRAM += entry.maxRam;
nTotalFreeRAM += nFreeRAM;
}
}
});
ns.printRaw("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛");
ns.printRaw(`Total Free: ${nTotalFreeRAM.toLocaleString()} / ${nTotalWorkerRAM.toLocaleString()} GB`);
}

View File

@@ -1 +1 @@
{"serverName":"omega-net","maxRam":32,"maxMoney":69174578,"minSec":10,"minPorts":2,"minHackLvl":202,"rootAccess":true,"openPorts":0,"serverOrgs":"Omega Software","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-909879.cct","the-new-god.lit"]}
{"serverName":"rho-construction","maxRam":16,"maxMoney":664249104,"minSec":16,"minPorts":3,"minHackLvl":515,"rootAccess":true,"openPorts":0,"serverOrgs":"Rho Construction","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-411062.cct","contract-53770.cct","contract-706524.cct","contract-903061-CyberSec.cct","contract-915025.cct","factionboost.js"]}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
import { findBestTarget, scanServerList } from "/Library.js";
/** @param {NS} ns */
export async function main(ns) {
scanServerList(ns);
findBestTarget(ns)
}