Compare commits
2 Commits
15bf3332af
...
24c6fad825
| Author | SHA1 | Date | |
|---|---|---|---|
| 24c6fad825 | |||
| 1e6dbeac8a |
@@ -33,13 +33,13 @@ export function getCracks(ns) {
|
|||||||
/** @param {NS} ns */
|
/** @param {NS} ns */
|
||||||
export function scanServerList(ns) {
|
export function scanServerList(ns) {
|
||||||
const home = "home";
|
const home = "home";
|
||||||
let serverList = {};
|
let serverList = [];
|
||||||
let unscanned = [];
|
let unscanned = [];
|
||||||
|
|
||||||
unscanned.push(home);
|
unscanned.push(home);
|
||||||
while (unscanned.length > 0) {
|
while (unscanned.length > 0) {
|
||||||
let currentServer = unscanned.pop();
|
let currentServer = unscanned.pop();
|
||||||
if (!serverList[currentServer]) {
|
if (!serverList.some(obj => obj["serverName"] === currentServer)) {
|
||||||
let maxRam = ns.getServerMaxRam(currentServer);
|
let maxRam = ns.getServerMaxRam(currentServer);
|
||||||
let minPorts = ns.getServerNumPortsRequired(currentServer);
|
let minPorts = ns.getServerNumPortsRequired(currentServer);
|
||||||
let minSecLevel = ns.getServerMinSecurityLevel(currentServer);
|
let minSecLevel = ns.getServerMinSecurityLevel(currentServer);
|
||||||
@@ -51,8 +51,7 @@ export function scanServerList(ns) {
|
|||||||
let serverOrgs = serverStats.organizationName;
|
let serverOrgs = serverStats.organizationName;
|
||||||
let serverCores = serverStats.cpuCores;
|
let serverCores = serverStats.cpuCores;
|
||||||
|
|
||||||
serverList[currentServer] =
|
serverList.push({
|
||||||
{
|
|
||||||
serverName: currentServer,
|
serverName: currentServer,
|
||||||
maxRam: maxRam,
|
maxRam: maxRam,
|
||||||
maxMoney: serverMoney,
|
maxMoney: serverMoney,
|
||||||
@@ -64,11 +63,11 @@ export function scanServerList(ns) {
|
|||||||
serverOrgs: serverOrgs,
|
serverOrgs: serverOrgs,
|
||||||
serverCores: serverCores,
|
serverCores: serverCores,
|
||||||
serverFiles: serverFiles,
|
serverFiles: serverFiles,
|
||||||
};
|
});
|
||||||
let neighbours = ns.scan(currentServer);
|
let neighbours = ns.scan(currentServer);
|
||||||
for (let i = 0; i < neighbours.length; i++) {
|
for (let i = 0; i < neighbours.length; i++) {
|
||||||
let neighbour = neighbours[i];
|
let neighbour = neighbours[i];
|
||||||
if (serverList[neighbour]) {
|
if (serverList.some(obj => obj["serverName"] === neighbour)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
unscanned.push(neighbour);
|
unscanned.push(neighbour);
|
||||||
@@ -89,17 +88,17 @@ export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTar
|
|||||||
bestEntry = null;
|
bestEntry = null;
|
||||||
let nMaxMoneyPerChance = 0;
|
let nMaxMoneyPerChance = 0;
|
||||||
let nBestMoneyPerChance = 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) {
|
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) {
|
if (nMaxMoneyPerChance > nBestMoneyPerChance) {
|
||||||
nBestMoneyPerChance = nMaxMoneyPerChance;
|
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) {
|
export function crackingAndRooting(ns, cracks) {
|
||||||
if (!ns.fileExists("serverList.txt", "home")) scanServerList();
|
if (!ns.fileExists("serverList.txt", "home")) scanServerList();
|
||||||
let serverList = JSON.parse(ns.read("serverList.txt"));
|
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 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)) {
|
if (entry.minPorts === 0 || (entry.minPorts > openPorts && entry.minPorts <= Object.keys(cracks).length)) {
|
||||||
for (let k = 0; k < entry.minPorts; k++) {
|
for (let k = 0; k < entry.minPorts; k++) {
|
||||||
cracks[Object.keys(cracks)[k]](name);
|
cracks[Object.keys(cracks)[k]](entry.serverName);
|
||||||
serverList[name].openPorts = k;
|
entry.openPorts = k;
|
||||||
}
|
}
|
||||||
cracked = true;
|
cracked = true;
|
||||||
}
|
}
|
||||||
if (!ns.hasRootAccess(name) && cracked === true) {
|
if (!ns.hasRootAccess(entry.serverName) && cracked === true) {
|
||||||
ns.nuke(name);
|
ns.nuke(entry.serverName);
|
||||||
if (ns.hasRootAccess(name)) {
|
if (ns.hasRootAccess(entry.serverName)) {
|
||||||
serverList[name].rootAccess = true;
|
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");
|
ns.tprint("Cracking and rooting done");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,25 +132,26 @@ export function crackingAndRooting(ns, cracks) {
|
|||||||
/** @param {NS} ns */
|
/** @param {NS} ns */
|
||||||
export function copyAndRunScript(ns, funnyScript, currentServer) {
|
export function copyAndRunScript(ns, funnyScript, currentServer) {
|
||||||
let bestTarget = JSON.parse(ns.read("bestTarget.txt"));
|
let bestTarget = JSON.parse(ns.read("bestTarget.txt"));
|
||||||
let name = currentServer;
|
|
||||||
let serverList = JSON.parse(ns.read("serverList.txt"));
|
let serverList = JSON.parse(ns.read("serverList.txt"));
|
||||||
ns.print(name);
|
let bestEntry = serverList.find((entry) => entry.serverName === bestTarget.serverName)
|
||||||
if (serverList[name].rootAccess === true && serverList[bestTarget.serverName].rootAccess === true) {
|
let currentEntry = serverList.find((entry) => entry.serverName === currentServer)
|
||||||
if (name !== "home") {
|
|
||||||
ns.print("killed threads on: " + name + ns.killall(name, true));
|
if (currentEntry.rootAccess === true && bestEntry.rootAccess === true) {
|
||||||
|
if (currentEntry.serverName !== "home") {
|
||||||
|
ns.print("killed threads on: " + currentEntry.serverName + ns.killall(currentEntry.serverName, true));
|
||||||
} else {
|
} 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) {
|
if (currentEntry.maxRam > 0) {
|
||||||
ns.scp(funnyScript, name, "home");
|
ns.scp(funnyScript, currentEntry.serverName, "home");
|
||||||
let maxProcesses = 1;
|
let maxProcesses = 1;
|
||||||
if (serverList[name].maxRam >= 8) {
|
if (currentEntry.maxRam >= 8) {
|
||||||
maxProcesses = Math.max(Math.floor((serverList[name].maxRam) / 8), 1);
|
maxProcesses = Math.max(Math.floor((currentEntry.maxRam) / 8), 1);
|
||||||
} else {
|
} else {
|
||||||
maxProcesses = 1
|
maxProcesses = 1
|
||||||
};
|
};
|
||||||
for (let n = 1; n <= maxProcesses; n++) {
|
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 purchasedServers = [];
|
||||||
let pServcount = listPurchasedServers(ns).length;
|
let pServcount = listPurchasedServers(ns).length;
|
||||||
let currentMoney = 0;
|
let currentMoney = 0;
|
||||||
let serverList = {};
|
let serverList = [];
|
||||||
while (pServcount < maxPurchasedServers) {
|
while (pServcount < maxPurchasedServers) {
|
||||||
purchasedServers = listPurchasedServers(ns);
|
purchasedServers = listPurchasedServers(ns);
|
||||||
currentMoney = ns.getServerMoneyAvailable("home");
|
currentMoney = ns.getServerMoneyAvailable("home");
|
||||||
@@ -180,7 +181,7 @@ export async function purchaseAndUpgradeServers(ns) {
|
|||||||
ns.toast("Purchased " + hostname, "info", 10000);
|
ns.toast("Purchased " + hostname, "info", 10000);
|
||||||
pServcount = listPurchasedServers(ns).length;
|
pServcount = listPurchasedServers(ns).length;
|
||||||
serverList = JSON.parse(ns.read("serverList.txt"));
|
serverList = JSON.parse(ns.read("serverList.txt"));
|
||||||
serverList[hostname] = {
|
serverList.push({
|
||||||
serverName: hostname,
|
serverName: hostname,
|
||||||
maxRam: 16,
|
maxRam: 16,
|
||||||
maxMoney: 0,
|
maxMoney: 0,
|
||||||
@@ -189,7 +190,7 @@ export async function purchaseAndUpgradeServers(ns) {
|
|||||||
minHackLvl: 1,
|
minHackLvl: 1,
|
||||||
rootAccess: true,
|
rootAccess: true,
|
||||||
openPorts: 0,
|
openPorts: 0,
|
||||||
};
|
});
|
||||||
ns.write("serverList.txt", JSON.stringify(serverList), "w");
|
ns.write("serverList.txt", JSON.stringify(serverList), "w");
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
@@ -202,19 +203,20 @@ export async function purchaseAndUpgradeServers(ns) {
|
|||||||
purchasedServers = listPurchasedServers(ns);
|
purchasedServers = listPurchasedServers(ns);
|
||||||
for (let currentServer of purchasedServers) {
|
for (let currentServer of purchasedServers) {
|
||||||
currentMoney = ns.getServerMoneyAvailable("home");
|
currentMoney = ns.getServerMoneyAvailable("home");
|
||||||
if (ns.getServerMaxRam(currentServer) < targetRam && ns.getPurchasedServerUpgradeCost(currentServer, targetRam) < currentMoney) {
|
if (ns.getServerMaxRam(currentServer) < targetRam){
|
||||||
|
if (ns.getPurchasedServerUpgradeCost(currentServer, targetRam) < currentMoney) {
|
||||||
if (ns.upgradePurchasedServer(currentServer, targetRam)) {
|
if (ns.upgradePurchasedServer(currentServer, targetRam)) {
|
||||||
ns.print(currentServer + " upgraded to " + targetRam + " GB RAM");
|
ns.print(currentServer + " upgraded to " + targetRam + " GB RAM");
|
||||||
serverList = JSON.parse(ns.read("serverList.txt"));
|
serverList = JSON.parse(ns.read("serverList.txt"));
|
||||||
serverList[currentServer].maxRam = targetRam;
|
let newServerList = serverList.map((entry) => { if (entry.serverName === currentServer){ entry.maxRam = targetRam} return entry});
|
||||||
ns.write("serverList.txt", JSON.stringify(serverList), "w");
|
ns.write("serverList.txt", JSON.stringify(newServerList), "w");
|
||||||
ns.tprint(cCyan + "Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB" + cReset);
|
ns.tprint(cCyan + "Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB" + cReset);
|
||||||
ns.toast("Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB", "info", 10000);
|
ns.toast("Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB", "info", 10000);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await ns.sleep(5000);
|
await ns.sleep(5000);
|
||||||
continue
|
continue
|
||||||
};
|
}};
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@@ -260,44 +262,69 @@ export function listWorkServers(ns) {
|
|||||||
const sFileName = "serverList.txt";
|
const sFileName = "serverList.txt";
|
||||||
if (!ns.fileExists(sFileName, "home")) { ns.print(`ERROR ${sFileName} does not exist.`); return false; };
|
if (!ns.fileExists(sFileName, "home")) { ns.print(`ERROR ${sFileName} does not exist.`); return false; };
|
||||||
let serverList = JSON.parse(ns.read(sFileName));
|
let serverList = JSON.parse(ns.read(sFileName));
|
||||||
//ns.tprint(serverList);
|
let sortedList = sortJsonArrayByKey(serverList, "serverCores", "maxRam").reverse();
|
||||||
//const oList = sortDataByNestedKey(serverList, 'serverCores');
|
|
||||||
|
|
||||||
let nTotalWorkerRAM = 0;
|
let nTotalWorkerRAM = 0;
|
||||||
let nTotalFreeRAM = 0;
|
let nTotalFreeRAM = 0;
|
||||||
|
|
||||||
const nServerColumnWidth = 20;
|
const nServerColumnWidth = 20;
|
||||||
const nValueColumnWidth = 8;
|
const nValueColumnWidth = 10;
|
||||||
const nCoresWidth = 5;
|
const nCoresWidth = 5;
|
||||||
|
|
||||||
ns.printRaw("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓");
|
ns.printRaw("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓");
|
||||||
ns.printRaw("┃ Server ┃ Free / Max RAM ┃ Cores ┃");
|
ns.printRaw("┃ Server ┃ Free / Max RAM ┃ Cores ┃");
|
||||||
ns.printRaw("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫");
|
ns.printRaw("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫");
|
||||||
for (const [name, entry] of Object.entries(serverList)) {
|
sortedList.forEach((entry) => {
|
||||||
if (entry.rootAccess && entry.maxRam >= 1) {
|
if (entry.rootAccess && entry.maxRam >= 1) {
|
||||||
let sServerName = entry.serverName.padEnd(nServerColumnWidth, ' ');
|
let sServerName = entry.serverName.padEnd(nServerColumnWidth, ' ');
|
||||||
let nFreeRAM = entry.maxRam - ns.getServerUsedRam(entry.serverName);
|
let nFreeRAM = entry.maxRam - ns.getServerUsedRam(entry.serverName);
|
||||||
let sFreeRAM = nFreeRAM.toLocaleString().padStart(nValueColumnWidth, ' ');
|
let sFreeRAM = Math.floor(nFreeRAM).toLocaleString("en-US").padStart(nValueColumnWidth, ' ');
|
||||||
let sMaxRam = entry.maxRam.toLocaleString().padStart(nValueColumnWidth, ' ');
|
let sMaxRam = entry.maxRam.toLocaleString("en-US").padStart(nValueColumnWidth, ' ');
|
||||||
let sCores = entry.serverCores.toLocaleString().padStart(nCoresWidth, ' ');
|
let sCores = entry.serverCores.toLocaleString("en-US").padStart(nCoresWidth, ' ');
|
||||||
ns.printRaw(`┃ ${sServerName} ┃ ${sFreeRAM} / ${sMaxRam} ┃ ${sCores} ┃`);
|
ns.printRaw(`┃ ${sServerName} ┃ ${sFreeRAM} / ${sMaxRam} ┃ ${sCores} ┃`);
|
||||||
nTotalWorkerRAM += entry.maxRam;
|
nTotalWorkerRAM += entry.maxRam;
|
||||||
nTotalFreeRAM += nFreeRAM;
|
nTotalFreeRAM += nFreeRAM;
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
ns.printRaw("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛");
|
ns.printRaw("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛");
|
||||||
ns.printRaw(`Total Free: ${nTotalFreeRAM.toLocaleString()} / ${nTotalWorkerRAM.toLocaleString()} GB`);
|
ns.printRaw(`Total Free: ${Math.floor(nTotalFreeRAM).toLocaleString("en-US")} / ${nTotalWorkerRAM.toLocaleString("en-US")} GB`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function sortDataByNestedKey(data, key) {
|
export function sortJsonArrayByKey(array, primaryKey, secondaryKey) {
|
||||||
return data.sort((a, b) => {
|
return array.sort((a, b) => {
|
||||||
const aValue = Object.values(a)[0][key];
|
const xPrimary = a[primaryKey];
|
||||||
const bValue = Object.values(b)[0][key];
|
const yPrimary = b[primaryKey];
|
||||||
|
|
||||||
if (typeof aValue === 'string') {
|
// Handle null or undefined values for primary key
|
||||||
return aValue.localeCompare(bValue);
|
if (xPrimary === null || yPrimary === null || xPrimary === undefined || yPrimary === undefined) {
|
||||||
} else {
|
return 0;
|
||||||
return aValue - bValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compare primary keys
|
||||||
|
const primaryComparison = compareValues(xPrimary, yPrimary);
|
||||||
|
if (primaryComparison !== 0) {
|
||||||
|
return primaryComparison;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If primary keys are equal, compare secondary keys
|
||||||
|
const xSecondary = a[secondaryKey];
|
||||||
|
const ySecondary = b[secondaryKey];
|
||||||
|
|
||||||
|
// Handle null or undefined values for secondary key
|
||||||
|
if (xSecondary === null || ySecondary === null || xSecondary === undefined || ySecondary === undefined) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return compareValues(xSecondary, ySecondary);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
function compareValues(x, y) {
|
||||||
|
// Handle numeric and string comparisons differently
|
||||||
|
if (typeof x === 'string' && typeof y === 'string') {
|
||||||
|
return x.localeCompare(y); // For string comparison
|
||||||
|
} else {
|
||||||
|
return x - y; // For numeric comparison
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export async function main(ns) {
|
|||||||
let maxPorts = Object.keys(cracks).length;
|
let maxPorts = Object.keys(cracks).length;
|
||||||
scanServerList(ns);
|
scanServerList(ns);
|
||||||
let manualTargetOverride = "";
|
let manualTargetOverride = "";
|
||||||
if (ns.getHackingLevel() < 50) {
|
if (ns.getHackingLevel() < 200) {
|
||||||
manualTargetOverride = "n00dles";
|
manualTargetOverride = "n00dles";
|
||||||
};
|
};
|
||||||
findBestTarget(ns, 999, maxPorts, ns.getHackingLevel(), manualTargetOverride);
|
findBestTarget(ns, 999, maxPorts, ns.getHackingLevel(), manualTargetOverride);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { listWorkServers } from "/Library.js";
|
|||||||
export async function main(ns) {
|
export async function main(ns) {
|
||||||
ns.disableLog("ALL");
|
ns.disableLog("ALL");
|
||||||
ns.tail();
|
ns.tail();
|
||||||
ns.resizeTail(522,625);
|
ns.resizeTail(560,625);
|
||||||
let nStatus = 0;
|
let nStatus = 0;
|
||||||
let aStatus = ["─", "╲", "│", "╱"];
|
let aStatus = ["─", "╲", "│", "╱"];
|
||||||
let bWhile = true;
|
let bWhile = true;
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"serverName":"the-hub","maxRam":32,"maxMoney":4832749575,"minSec":24,"minPorts":2,"minHackLvl":291,"rootAccess":true,"openPorts":0,"serverOrgs":"The Hub","serverCores":4,"serverFiles":[]}
|
{"serverName":"the-hub","maxRam":32,"maxMoney":4832749575,"minSec":24,"minPorts":2,"minHackLvl":291,"rootAccess":true,"openPorts":0,"serverOrgs":"The Hub","serverCores":4,"serverFiles":["factionboost.js"]}
|
||||||
40
Mizzajl/home/game_readme.txt
Normal file
40
Mizzajl/home/game_readme.txt
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Bitburner
|
||||||
|
|
||||||
|
[](https://discord.gg/TFc3hKD)
|
||||||
|
|
||||||
|
[](https://github.com/bitburner-official/bitburner-src/actions/workflows/ci.yml)
|
||||||
|
|
||||||
|
Bitburner is a programming-based [incremental game](https://en.wikipedia.org/wiki/Incremental_game)
|
||||||
|
that revolves around hacking and cyberpunk themes.
|
||||||
|
The game can be played at https://bitburner-official.github.io/ (release build), https://bitburner-official.github.io/bitburner-src/ (development build), or installed through [Steam](https://store.steampowered.com/app/1812820/Bitburner/).
|
||||||
|
The location of the release build may change in the near future.
|
||||||
|
|
||||||
|
See the [frequently asked questions](./doc/FAQ.md) for more information . To discuss the game or get help, join the [official Discord server](https://discord.gg/TFc3hKD).
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
The game's official documentation can be found in-game.
|
||||||
|
|
||||||
|
The [in-game documentation](./markdown/bitburner.md) is generated from the [TypeScript definitions](./src/ScriptEditor/NetscriptDefinitions.d.ts).
|
||||||
|
|
||||||
|
Anyone is welcome to contribute to the documentation by editing the [source
|
||||||
|
files](/src/Documentation/doc) and then making a pull request with your contributions.
|
||||||
|
For further guidance, please refer to the "As A Documenter" section of
|
||||||
|
[CONTRIBUTING](./doc/CONTRIBUTING.md#as-a-documenter).
|
||||||
|
|
||||||
|
# Contribution
|
||||||
|
|
||||||
|
There are many ways to contribute to the game. It can be as simple as fixing
|
||||||
|
a typo, correcting a bug, or improving the UI. For guidance on doing so,
|
||||||
|
please refer to the [CONTRIBUTING](./doc/CONTRIBUTING.md) document.
|
||||||
|
|
||||||
|
You will retain all ownership of the Copyright of any contributions you make,
|
||||||
|
and will have the same rights to use or license your contributions. By
|
||||||
|
submitting a pull request you agree to grant me perpetual, worldwide,
|
||||||
|
non-exclusive, transferable, royalty-free, and irrevocable rights to use,
|
||||||
|
publish, and distribute your contributions to the project. A formal
|
||||||
|
Contributor's License Agreement will be drawn up in the future.
|
||||||
|
|
||||||
|
If you would like to make significant contributions to the project as a
|
||||||
|
collaborator, please reach out in #suggestions or #development on Discord to
|
||||||
|
help coordinate the effort.
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
/** @param {NS} ns */
|
/** @param {NS} ns */
|
||||||
export async function main(ns) {
|
export async function main(ns) {
|
||||||
let serverList = JSON.parse(ns.read("serverList.txt"));
|
let serverList = JSON.parse(ns.read("serverList.txt"));
|
||||||
for (const [name, entry] of Object.entries(serverList)) {
|
serverList.forEach(entry => {
|
||||||
|
ns.killall(entry.serverName, true)
|
||||||
ns.killall(name, true)
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ export async function main(ns) {
|
|||||||
const bRepeat = ns.args[3]; // should this script loop
|
const bRepeat = ns.args[3]; // should this script loop
|
||||||
const nMsecDelay = ns.args[4]; // MsecDelay
|
const nMsecDelay = ns.args[4]; // MsecDelay
|
||||||
|
|
||||||
|
|
||||||
const sWeakenScript = "RMweaken.js";
|
const sWeakenScript = "RMweaken.js";
|
||||||
const sGrowScript = "RMgrow.js";
|
const sGrowScript = "RMgrow.js";
|
||||||
const sHackScript = "RMhack.js";
|
const sHackScript = "RMhack.js";
|
||||||
@@ -17,6 +16,7 @@ export async function main(ns) {
|
|||||||
|
|
||||||
if (!ns.fileExists(sListName, "home")) { ns.print(`ERROR ${sListName} does not exist.`); return false; };
|
if (!ns.fileExists(sListName, "home")) { ns.print(`ERROR ${sListName} does not exist.`); return false; };
|
||||||
let sServerList = JSON.parse(ns.read(sListName));
|
let sServerList = JSON.parse(ns.read(sListName));
|
||||||
|
let aSortedList = sortJsonArrayByKey(sServerList, "serverCores", "maxRam").reverse();
|
||||||
|
|
||||||
ns.print(sScript);
|
ns.print(sScript);
|
||||||
ns.print(nThreads);
|
ns.print(nThreads);
|
||||||
@@ -28,32 +28,35 @@ export async function main(ns) {
|
|||||||
ns.print("nScriptSize = " + nScriptSize);
|
ns.print("nScriptSize = " + nScriptSize);
|
||||||
ns.print("nTotalSize = " + nTotalSize);
|
ns.print("nTotalSize = " + nTotalSize);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// get sorted list of most cores servers
|
// get sorted list of most cores servers
|
||||||
|
/*
|
||||||
|
aSortedList.forEach((entry) => {
|
||||||
|
if (entry.rootAccess && entry.maxRam >= 1 && entry.serverCores > 1) {
|
||||||
|
// if cores equal to previous entry put into same array?
|
||||||
|
}
|
||||||
|
}) */
|
||||||
// get total free RAM per number of cores
|
// get total free RAM per number of cores
|
||||||
// calculate effect of cores on each server with cores > 1
|
// calculate effect of cores on each server with cores > 1
|
||||||
// update nThreads
|
// update nThreads
|
||||||
// run weaken/grow on core servers until cores = 1
|
// run weaken/grow on core servers until cores = 1
|
||||||
|
|
||||||
// get sorted list of biggest RAM servers
|
// get sorted list of biggest RAM servers
|
||||||
// get total free RAM on core 1 servers
|
// get total free RAM on core 1 servers
|
||||||
// run remaining weaken/grow
|
// run remaining weaken/grow
|
||||||
// run hack untill RAM on cores 1 servers run out
|
// run hack untill RAM on cores 1 servers run out
|
||||||
// run remaining hacks on smallest to biggest core servers
|
// run remaining hacks on smallest to biggest core servers
|
||||||
|
|
||||||
|
aSortedList.forEach((entry) => {
|
||||||
|
if (entry.rootAccess && entry.maxRam >= 1 && entry.serverCores > 1) {
|
||||||
|
let sHost = entry.serverName;
|
||||||
|
ns.exec(sScript, sHost, nThreads, sTarget, bRepeat, nMsecDelay);
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for (i = 0; ; i++) {
|
for (i = 0; ; i++) {
|
||||||
let sHost = "";
|
let sHost = "";
|
||||||
ns.exec(sScript, sHost, nThreads, sTarget, bRepeat, nMsecDelay);
|
ns.exec(sScript, sHost, nThreads, sTarget, bRepeat, nMsecDelay);
|
||||||
}
|
} */
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user