From c70d328e61a84c17b2351772b80ddceaf5aa2826 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 6 Oct 2024 12:42:37 +0200 Subject: [PATCH] sync 1 --- Ramses/home/CrackAndRootAll.js | 2 +- Ramses/home/EveryServerRun.js | 2 +- Ramses/home/{RamsesUtils.js => Library.js} | 129 +++--- Ramses/home/Serverlist.js | 27 +- Ramses/home/batch.js | 2 +- Ramses/home/bestTarget.txt | 1 + Ramses/home/factionboost.js | 6 + .../{killAllScript.js => killAllScripts.js} | 0 Ramses/home/myLibrary.js | 77 ---- Ramses/home/serverList.txt | 1 + Ramses/home/serverlister.js | 371 ------------------ Ramses/home/upgrade.js | 66 ---- 12 files changed, 60 insertions(+), 624 deletions(-) rename Ramses/home/{RamsesUtils.js => Library.js} (65%) create mode 100644 Ramses/home/bestTarget.txt create mode 100644 Ramses/home/factionboost.js rename Ramses/home/{killAllScript.js => killAllScripts.js} (100%) delete mode 100644 Ramses/home/myLibrary.js create mode 100644 Ramses/home/serverList.txt delete mode 100644 Ramses/home/serverlister.js delete mode 100644 Ramses/home/upgrade.js diff --git a/Ramses/home/CrackAndRootAll.js b/Ramses/home/CrackAndRootAll.js index 719803d..0636f06 100644 --- a/Ramses/home/CrackAndRootAll.js +++ b/Ramses/home/CrackAndRootAll.js @@ -1,5 +1,5 @@ -import { getCracks, scanServerList, findBestTarget, crackingAndRooting, copyAndRunScript } from "/RamsesUtils.js"; +import { getCracks, scanServerList, findBestTarget, crackingAndRooting, copyAndRunScript } from "/Library.js"; /** @param {NS} ns */ export async function main(ns) { let cracks = {}; diff --git a/Ramses/home/EveryServerRun.js b/Ramses/home/EveryServerRun.js index 143ab09..ba099e6 100644 --- a/Ramses/home/EveryServerRun.js +++ b/Ramses/home/EveryServerRun.js @@ -1,4 +1,4 @@ -import { getGrowThreads } from "myLibrary.js"; +import { getGrowThreads } from "Library.js"; /** @param {NS} ns */ export async function main(ns) { diff --git a/Ramses/home/RamsesUtils.js b/Ramses/home/Library.js similarity index 65% rename from Ramses/home/RamsesUtils.js rename to Ramses/home/Library.js index 24d0ef4..1defefa 100644 --- a/Ramses/home/RamsesUtils.js +++ b/Ramses/home/Library.js @@ -3,6 +3,12 @@ export async function main(ns) { ns.tprint("This is just a function library, it doesn't do anything."); } +// Custom color coding. +const cCyan = "\u001b[36m"; +const cGreen = "\u001b[32m"; +const cRed = "\u001b[31m"; +const cReset = "\u001b[0m"; + /** @param {NS} ns */ export function getCracks(ns) { let cracks = {}; @@ -29,6 +35,7 @@ export function scanServerList(ns) { const home = "home"; let serverList = {}; let unscanned = []; + unscanned.push(home); while (unscanned.length > 0) { let currentServer = unscanned.pop(); @@ -40,8 +47,10 @@ export function scanServerList(ns) { let rootAccess = ns.hasRootAccess(currentServer); let serverMoney = ns.getServerMaxMoney(currentServer); let serverFiles = ns.ls(currentServer); - let skillFactor = (2.5 * minHackLevel * minSecLevel + 500) / (ns.getHackingLevel() + 50); - let compareTimeFactor = serverMoney / skillFactor / 10e7; + let serverStats = ns.getServer(currentServer); + let serverOrgs = serverStats.organizationName; + let serverCores = serverStats.cpuCores; + serverList[currentServer] = { serverName: currentServer, @@ -51,8 +60,9 @@ export function scanServerList(ns) { minPorts: minPorts, minHackLvl: minHackLevel, rootAccess: rootAccess, - factorMoneyPerTime: compareTimeFactor, openPorts: 0, + serverOrgs: serverOrgs, + serverCores: serverCores, serverFiles: serverFiles, }; let neighbours = ns.scan(currentServer); @@ -72,25 +82,29 @@ export function scanServerList(ns) { export function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTargetOverride) { if (!ns.fileExists("serverList.txt", "home")) scanServerList(); let serverList = JSON.parse(ns.read("serverList.txt")); - let bestEntry = null; - let compareTime = 0; - for (const [name, entry] of Object.entries(serverList)) { - if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl < currentHackLevel) { - if (entry.factorMoneyPerTime > compareTime) { - compareTime = entry.factorMoneyPerTime; - bestEntry = name; - } - } - } + let bestEntry = ""; if (manualTargetOverride.length > 0) { bestEntry = manualTargetOverride; + } else { + bestEntry = null; + let nMaxMoneyPerChance = 0; + let nBestMoneyPerChance = 0; + for (const [name, entry] of Object.entries(serverList)) { + if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl < currentHackLevel) { + nMaxMoneyPerChance = (entry.maxMoney * ns.hackAnalyzeChance(name)) / entry.minSec; + if (nMaxMoneyPerChance > nBestMoneyPerChance) { + nBestMoneyPerChance = nMaxMoneyPerChance; + bestEntry = name; + } + } + } } ns.write("bestTarget.txt", JSON.stringify(serverList[bestEntry]), "w"); } /** @param {NS} ns */ -export function crackingAndRooting(ns, cracks, funnyScript, copy) { +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)) { @@ -107,9 +121,6 @@ export function crackingAndRooting(ns, cracks, funnyScript, copy) { ns.nuke(name); if (ns.hasRootAccess(name)) { serverList[name].rootAccess = true; - if (serverList[name].maxRam > 0 && copy === true) { - copyAndRunScript(ns, funnyScript, name); - } } } ns.write("serverList.txt", JSON.stringify(serverList), "w"); @@ -120,10 +131,7 @@ export function crackingAndRooting(ns, cracks, funnyScript, copy) { /** @param {NS} ns */ export function copyAndRunScript(ns, funnyScript, currentServer) { - // change to run for one specific server with bestTarget from file - //let minRam = ns.getScriptRam(funnyScript); let bestTarget = JSON.parse(ns.read("bestTarget.txt")); - let name = currentServer; let serverList = JSON.parse(ns.read("serverList.txt")); ns.print(name); @@ -133,7 +141,6 @@ export function copyAndRunScript(ns, funnyScript, currentServer) { } else { ns.print("killed threads on: " + name + ns.scriptKill(funnyScript[0], name)); }; - //move script and run if (serverList[name].maxRam > 0) { ns.scp(funnyScript, name, "home"); let maxProcesses = 1; @@ -142,30 +149,9 @@ export function copyAndRunScript(ns, funnyScript, currentServer) { } else { maxProcesses = 1 }; - for (let n = 1; n <= maxProcesses; n++) { ns.exec(funnyScript[0], name, 1, bestTarget.serverName); } - - /*let maxThreads = 0; - if (name === "home") { - maxThreads = Math.floor((serverList[name].maxRam - ns.getServerUsedRam(name) - 32) / minRam); - ns.print(name + " " + maxThreads); - } else { - ns.print(name); - maxThreads = Math.floor(serverList[name].maxRam / minRam); - ns.print(name + " " + maxThreads); - }; - while (maxThreads > 0) { - let threadsToAssign = maxThreads < 500 ? maxThreads : 500; - if (ns.exec(funnyScript, name, threadsToAssign, bestTarget.serverName, serverList[bestTarget.serverName].minSec, serverList[bestTarget.serverName].maxMoney, JSON.stringify(serverList[bestTarget.serverName])) !== 0) { - ns.print("Executing script on: " + name + " with: " + threadsToAssign + " threads out of " + maxThreads + " total threads"); - maxThreads = maxThreads - threadsToAssign; - } else { - ns.tprint("Error running script on: " + name); - maxThreads = -1; - }; - }*/ } } } @@ -185,8 +171,13 @@ export async function purchaseAndUpgradeServers(ns) { currentMoney = ns.getServerMoneyAvailable("home"); let targetRamInitial = 16; if (ns.getPurchasedServerCost(targetRamInitial) < currentMoney) { - let hostname = ns.purchaseServer("pserv-" + purchasedServers.length, 16); - + let sFrontZero = "0"; + if (nServers >= 9) { + sFrontZero = ""; + } + let hostname = ns.purchaseServer("pserv-" + sFrontZero + (aServers.length), targetRamInitial); + ns.tprint("Purchased " + cCyan + hostname + cReset); + ns.toast("Purchased " + hostname, "info", 10000); count = listPurchasedServers(ns).length; serverList = JSON.parse(ns.read("serverList.txt")); serverList[hostname] = { @@ -197,7 +188,6 @@ export async function purchaseAndUpgradeServers(ns) { minPorts: 5, minHackLvl: 1, rootAccess: true, - factorMoneyPerTime: 99999999, openPorts: 0, }; ns.write("serverList.txt", JSON.stringify(serverList), "w"); @@ -206,20 +196,20 @@ export async function purchaseAndUpgradeServers(ns) { await ns.sleep(5000); } } - let i = 5; while (i < 21) { let targetRam = 2 ** i; purchasedServers = listPurchasedServers(ns); for (let currentServer of purchasedServers) { currentMoney = ns.getServerMoneyAvailable("home"); - if (ns.getServerMaxRam(currentServer) < targetRam && ns.getPurchasedServerUpgradeCost(currentServer, targetRam) < currentMoney) { 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"); + ns.tprint(cCyan + "Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB" + cReset); + ns.toast("Server: " + currentServer + " upgraded to: " + targetRam.toLocaleString() + " GB", "info", 10000); } } else { await ns.sleep(5000); @@ -237,42 +227,17 @@ function listPurchasedServers(ns) { } /** @param {NS} ns */ -export async function runControllerOnPserv(ns) { - let purchasedServers = listPurchasedServers(ns); - let nPID = 0; - nPID = ns.exec("S2controller.js", "home"); - ns.tprint("Started S2controller.js on " + "home" + " with PID " + nPID) - for (let currentServer of purchasedServers) { - ns.scp(["S2tGrow.js", "S2tWeaken.js", "S2tHack.js", "S2controller.js", "S2utils.js"], currentServer, "home"); - nPID = ns.exec("S2controller.js", currentServer); - if (nPID > 0) { - ns.tprint("Started S2controller.js on " + currentServer + " with PID " + nPID) - } - } +export function getSetting(ns, sSetting) { + let oSettings = JSON.parse(ns.read("settings.txt")); + let settingEntry = oSettings.setting[sSetting]; + //ns.tprint(oSettings.setting[sSetting]) + //ns.tprint("settingEntry = "+settingEntry); + return settingEntry; } /** @param {NS} ns */ -export async function backdoor(ns) { - let serverList = JSON.parse(ns.read("serverList.txt")); - let lasthackingLevel = 0; - let currentHackingLevel = 0; - while (true) { - currentHackingLevel = ns.getHackingLevel(); - if (currentHackingLevel > lasthackingLevel) { - lasthackingLevel = currentHackingLevel; - for (const [name, entry] of Object.entries(serverList)) { - if (entry.minHackLvl <= lasthackingLevel && entry.hasBackdoor !== true) { - ns.singularity.connect(name); - await ns.singularity.installBackdoor(); - ns.singularity.connect("home"); - serverList[name].hasBackdoor = true; - ns.tprint("Backdoor on: " + name); - } - } - ns.write("serverList.txt", JSON.stringify(serverList), "w"); - } else { - await ns.sleep(30000) - }; - - } +export function getGrowThreads(ns, sTarget, nHackThreads, nCores) { + let nHackAmountPercent = ns.hackAnalyze(sTarget) * nHackThreads; + let nGrowthThreads = ns.growthAnalyze(sTarget, 1 + nHackAmountPercent, nCores); + return nGrowthThreads; } diff --git a/Ramses/home/Serverlist.js b/Ramses/home/Serverlist.js index 8b94568..29237fd 100644 --- a/Ramses/home/Serverlist.js +++ b/Ramses/home/Serverlist.js @@ -1,9 +1,7 @@ -import { getCracks, scanServerList, findBestTarget, crackingAndRooting, copyAndRunScript, purchaseAndUpgradeServers } from "/RamsesUtils.js"; +import { getCracks, scanServerList, findBestTarget, crackingAndRooting } from "/Library.js"; /** @param {NS} ns */ export async function main(ns) { - const funnyScript = ["batch.js", "Ramses-grow.js", "Ramses-weaken.js", "Ramses-hack.js"]; - //write function to purchase scripts from tor network and rerun getCracks() then recrack and reroot let cracks = {}; cracks = getCracks(ns); let maxPorts = Object.keys(cracks).length; @@ -12,31 +10,10 @@ export async function main(ns) { if (ns.getHackingLevel() < 200) { manualTargetOverride = "n00dles"; }; - findBestTarget(ns, 999, maxPorts, ns.getHackingLevel(), manualTargetOverride); let bestTarget = ns.read("bestTarget.txt") - ns.tprint("Best Target: " + bestTarget); ns.tprint(Object.keys(JSON.parse(ns.read("serverList.txt"))).length); - crackingAndRooting(ns, cracks, funnyScript, true); - ns.exec(funnyScript[0], "home", 1, JSON.parse(bestTarget).serverName, 500, true); - let reset = ns.args[0]; - ns.print(reset); - if (reset === true) { - ns.tprint("reset === true") - findBestTarget(ns, 999, maxPorts, ns.getHackingLevel(), manualTargetOverride); - let serverList = JSON.parse(ns.read("serverList.txt")); - for (const [name, entry] of Object.entries(serverList)) { - - copyAndRunScript(ns, funnyScript, name); - } - } - /*let serverListForFiles = JSON.parse(ns.read("serverList.txt")); - for (const [name2, entry2] of Object.entries(serverListForFiles)) { - ns.tprint(name2 + " Files: " + entry2.serverFiles) - }*/ - //await ns.sleep(500000); - await purchaseAndUpgradeServers(ns); - + crackingAndRooting(ns, cracks); } diff --git a/Ramses/home/batch.js b/Ramses/home/batch.js index 1c4a9b0..97772ba 100644 --- a/Ramses/home/batch.js +++ b/Ramses/home/batch.js @@ -1,4 +1,4 @@ -import { getGrowThreads } from "myLibrary.js"; +import { getGrowThreads } from "Library.js"; /** @param {NS} ns */ export async function main(ns) { diff --git a/Ramses/home/bestTarget.txt b/Ramses/home/bestTarget.txt new file mode 100644 index 0000000..f4e2cf2 --- /dev/null +++ b/Ramses/home/bestTarget.txt @@ -0,0 +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"]} \ No newline at end of file diff --git a/Ramses/home/factionboost.js b/Ramses/home/factionboost.js new file mode 100644 index 0000000..9045a44 --- /dev/null +++ b/Ramses/home/factionboost.js @@ -0,0 +1,6 @@ +/** @param {NS} ns */ +export async function main(ns) { + while (true) { + await ns.share(); + } +} \ No newline at end of file diff --git a/Ramses/home/killAllScript.js b/Ramses/home/killAllScripts.js similarity index 100% rename from Ramses/home/killAllScript.js rename to Ramses/home/killAllScripts.js diff --git a/Ramses/home/myLibrary.js b/Ramses/home/myLibrary.js deleted file mode 100644 index 3374fe3..0000000 --- a/Ramses/home/myLibrary.js +++ /dev/null @@ -1,77 +0,0 @@ -// Custom color coding. -const cCyan = "\u001b[36m"; -const cGreen = "\u001b[32m"; -const cRed = "\u001b[31m"; -const cReset = "\u001b[0m"; - -/** @param {NS} ns */ -export async function main(ns) { - ns.print("This script does nothing on its own, it contains functions for other scripts to use"); -} - - - - - - - - -/** @param {NS} ns */ -export async function purchaseServers(ns) { - - const ram = 64; - - let aServers = listPurchasedServers(ns); - let nServers = aServers.length; - if (nServers >= ns.getPurchasedServerLimit()) { - return nServers; - } - - if (ns.getServerMoneyAvailable("home") > ns.getPurchasedServerCost(ram)) { - let sFrontZero = "0"; - if (nServers >= 9) { - sFrontZero = ""; - } - let hostname = ns.purchaseServer("pserv-" + sFrontZero + (aServers.length + 1), ram); - - ns.tprint("Purchased " + cCyan + hostname + cReset); - ns.toast("Purchased " + hostname, "info", 10000); - } - - aServers = listPurchasedServers(ns); - return aServers.length; -} - - - - - -/** @param {NS} ns */ -export function listPurchasedServers(ns) { - return ns.getPurchasedServers(); -} - - - - - -/** @param {NS} ns */ -export function getSetting(ns, sSetting) { - let oSettings = JSON.parse(ns.read("settings.txt")); - let settingEntry = oSettings.setting[sSetting]; - //ns.tprint(oSettings.setting[sSetting]) - //ns.tprint("settingEntry = "+settingEntry); - return settingEntry; -} - - - - - - -/** @param {NS} ns */ -export function getGrowThreads(ns, sTarget, nHackThreads, nCores) { - let nHackAmountPercent = ns.hackAnalyze(sTarget) * nHackThreads; - let nGrowthThreads = ns.growthAnalyze(sTarget, 1 + nHackAmountPercent, nCores); - return nGrowthThreads; -} \ No newline at end of file diff --git a/Ramses/home/serverList.txt b/Ramses/home/serverList.txt new file mode 100644 index 0000000..7349ee5 --- /dev/null +++ b/Ramses/home/serverList.txt @@ -0,0 +1 @@ +{"home":{"serverName":"home","maxRam":512,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"Home PC","serverCores":1,"serverFiles":["AutoLink.exe","Backdoor.js","BruteSSH.exe","ContractSolverRamses.js","CorpControl.js","CrackAndRootAll.js","DeepscanV1.exe","EveryServerRun.js","FTPCrack.exe","HTTPWorm.exe","Library.js","NUKE.exe","RMgrow.js","RMhack.js","RMweaken.js","S4controller.js","S4logHelper.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","S4utils.js","Serverlist.js","analyzeContract.js","ascii/detective.txt","ascii/detective2.txt","ascii/detective3.txt","ascii/hacker.txt","ascii/judge.txt","ascii/noir.txt","ascii/sonic.js","autoexec.js","b1t_flum3.exe","backup/batch2.js","backup/bitnodeStart.js","backup/growrepeater.js","backup/maxGrow.js","batch.js","bestTarget.txt","breach.js","corp/Autosell.js","corp/HireWorkers.js","corp/SetupExport.js","corp/Smart.js","corp/UpgradeOffice.js","corporation-management-handbook.lit","csec-test.msg","earlyHWGW.js","fl1ght.exe","gang/argFunctions.js","gang/auto-gang.js","gang/auto-gang2.js","gang/gangManager.js","hackers-starting-handbook.lit","j0.msg","j1.msg","j2.msg","killAllScript.js","nitesec-test.msg","purchaseServers.js","relaySMTP.exe","serverList.txt","serverlister.js","settings.txt","sharePserv.js","upgrade.js"]},"pserv-24":{"serverName":"pserv-24","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-23":{"serverName":"pserv-23","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-22":{"serverName":"pserv-22","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-21":{"serverName":"pserv-21","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-20":{"serverName":"pserv-20","maxRam":512,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-19":{"serverName":"pserv-19","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-18":{"serverName":"pserv-18","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-17":{"serverName":"pserv-17","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-16":{"serverName":"pserv-16","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-15":{"serverName":"pserv-15","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-14":{"serverName":"pserv-14","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-13":{"serverName":"pserv-13","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-12":{"serverName":"pserv-12","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-11":{"serverName":"pserv-11","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-10":{"serverName":"pserv-10","maxRam":256,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-9":{"serverName":"pserv-9","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-8":{"serverName":"pserv-8","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-7":{"serverName":"pserv-7","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-6":{"serverName":"pserv-6","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-5":{"serverName":"pserv-5","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-4":{"serverName":"pserv-4","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-3":{"serverName":"pserv-3","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-2":{"serverName":"pserv-2","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-1":{"serverName":"pserv-1","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"pserv-0":{"serverName":"pserv-0","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"","serverCores":1,"serverFiles":["S2controller.js","S2tGrow.js","S2tHack.js","S2tWeaken.js","S2utils.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"darkweb":{"serverName":"darkweb","maxRam":0,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":1,"rootAccess":false,"openPorts":0,"serverOrgs":"darkweb","serverCores":1,"serverFiles":[]},"iron-gym":{"serverName":"iron-gym","maxRam":32,"maxMoney":20000000,"minSec":10,"minPorts":1,"minHackLvl":100,"rootAccess":true,"openPorts":0,"serverOrgs":"Iron Gym Network","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-939977.cct"]},"harakiri-sushi":{"serverName":"harakiri-sushi","maxRam":16,"maxMoney":4000000,"minSec":5,"minPorts":0,"minHackLvl":40,"rootAccess":true,"openPorts":0,"serverOrgs":"HaraKiri Sushi Bar Network","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"CSEC":{"serverName":"CSEC","maxRam":8,"maxMoney":0,"minSec":1,"minPorts":1,"minHackLvl":59,"rootAccess":true,"openPorts":0,"serverOrgs":"CyberSec","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","democracy-is-dead.lit"]},"silver-helix":{"serverName":"silver-helix","maxRam":64,"maxMoney":45000000,"minSec":10,"minPorts":2,"minHackLvl":150,"rootAccess":true,"openPorts":1,"serverOrgs":"Silver Helix","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","new-triads.lit"]},"crush-fitness":{"serverName":"crush-fitness","maxRam":0,"maxMoney":52267814,"minSec":12,"minPorts":2,"minHackLvl":258,"rootAccess":true,"openPorts":1,"serverOrgs":"Crush Fitness","serverCores":2,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"syscore":{"serverName":"syscore","maxRam":0,"maxMoney":402262996,"minSec":21,"minPorts":4,"minHackLvl":583,"rootAccess":true,"openPorts":3,"serverOrgs":"SysCore Securities","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-196725.cct","contract-884808-CyberSec.cct"]},"johnson-ortho":{"serverName":"johnson-ortho","maxRam":0,"maxMoney":82963936,"minSec":22,"minPorts":2,"minHackLvl":258,"rootAccess":true,"openPorts":1,"serverOrgs":"Johnson Orthopedics","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"I.I.I.I":{"serverName":"I.I.I.I","maxRam":16,"maxMoney":0,"minSec":1,"minPorts":3,"minHackLvl":354,"rootAccess":true,"openPorts":2,"serverOrgs":"I.I.I.I","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","democracy-is-dead.lit"]},"aevum-police":{"serverName":"aevum-police","maxRam":32,"maxMoney":277087702,"minSec":25,"minPorts":4,"minHackLvl":445,"rootAccess":true,"openPorts":3,"serverOrgs":"Aevum Police Headquarters","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"snap-fitness":{"serverName":"snap-fitness","maxRam":0,"maxMoney":450000000,"minSec":16,"minPorts":4,"minHackLvl":734,"rootAccess":true,"openPorts":3,"serverOrgs":"Snap Fitness","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"summit-uni":{"serverName":"summit-uni","maxRam":64,"maxMoney":322287556,"minSec":21,"minPorts":3,"minHackLvl":465,"rootAccess":true,"openPorts":2,"serverOrgs":"Summit University","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","secret-societies.lit","synthetic-muscles.lit","the-failed-frontier.lit"]},"millenium-fitness":{"serverName":"millenium-fitness","maxRam":16,"maxMoney":250000000,"minSec":17,"minPorts":3,"minHackLvl":494,"rootAccess":true,"openPorts":2,"serverOrgs":"Millenium Fitness Network","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-27723.cct","contract-325971-CyberSec.cct","contract-407875-CyberSec.cct","contract-864024.cct"]},"computek":{"serverName":"computek","maxRam":0,"maxMoney":232036024,"minSec":21,"minPorts":3,"minHackLvl":383,"rootAccess":true,"openPorts":2,"serverOrgs":"CompuTek","serverCores":4,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-225752-CyberSec.cct","contract-311658.cct","man-and-machine.lit"]},"zb-institute":{"serverName":"zb-institute","maxRam":16,"maxMoney":926443792,"minSec":28,"minPorts":5,"minHackLvl":773,"rootAccess":false,"openPorts":0,"serverOrgs":"ZB Institute of Technology","serverCores":5,"serverFiles":["contract-156802-CyberSec.cct"]},"alpha-ent":{"serverName":"alpha-ent","maxRam":128,"maxMoney":616689214,"minSec":21,"minPorts":4,"minHackLvl":580,"rootAccess":true,"openPorts":3,"serverOrgs":"Alpha Enterprises","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-181960.cct","contract-982082.cct","sector-12-crime.lit"]},"galactic-cyber":{"serverName":"galactic-cyber","maxRam":0,"maxMoney":841319318,"minSec":20,"minPorts":5,"minHackLvl":849,"rootAccess":false,"openPorts":0,"serverOrgs":"Galactic Cybersystems","serverCores":5,"serverFiles":[]},"lexo-corp":{"serverName":"lexo-corp","maxRam":128,"maxMoney":776022357,"minSec":22,"minPorts":4,"minHackLvl":684,"rootAccess":true,"openPorts":3,"serverOrgs":"LexoCorp","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-460428.cct"]},"global-pharm":{"serverName":"global-pharm","maxRam":16,"maxMoney":1718048665,"minSec":27,"minPorts":4,"minHackLvl":754,"rootAccess":true,"openPorts":3,"serverOrgs":"Global Pharmaceuticals","serverCores":5,"serverFiles":["A-Green-Tomorrow.lit","S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-626145.cct"]},"deltaone":{"serverName":"deltaone","maxRam":0,"maxMoney":1467966501,"minSec":28,"minPorts":5,"minHackLvl":899,"rootAccess":false,"openPorts":0,"serverOrgs":"DeltaOne","serverCores":4,"serverFiles":[]},"zeus-med":{"serverName":"zeus-med","maxRam":0,"maxMoney":1376135808,"minSec":29,"minPorts":5,"minHackLvl":812,"rootAccess":false,"openPorts":0,"serverOrgs":"Zeus Medical","serverCores":8,"serverFiles":[]},"univ-energy":{"serverName":"univ-energy","maxRam":128,"maxMoney":1197585990,"minSec":27,"minPorts":4,"minHackLvl":840,"rootAccess":true,"openPorts":3,"serverOrgs":"Universal Energy","serverCores":7,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"taiyang-digital":{"serverName":"taiyang-digital","maxRam":0,"maxMoney":857694312,"minSec":24,"minPorts":5,"minHackLvl":936,"rootAccess":false,"openPorts":0,"serverOrgs":"Taiyang Digital","serverCores":5,"serverFiles":["A-Green-Tomorrow.lit","brighter-than-the-sun.lit"]},"applied-energetics":{"serverName":"applied-energetics","maxRam":0,"maxMoney":987324069,"minSec":26,"minPorts":4,"minHackLvl":788,"rootAccess":true,"openPorts":3,"serverOrgs":"Applied Energetics","serverCores":6,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-863130.cct"]},"helios":{"serverName":"helios","maxRam":32,"maxMoney":734014213,"minSec":30,"minPorts":5,"minHackLvl":854,"rootAccess":false,"openPorts":0,"serverOrgs":"Helios Labs","serverCores":12,"serverFiles":["beyond-man.lit","contract-877989.cct"]},"stormtech":{"serverName":"stormtech","maxRam":0,"maxMoney":1066092443,"minSec":30,"minPorts":5,"minHackLvl":941,"rootAccess":false,"openPorts":0,"serverOrgs":"Storm Technologies","serverCores":9,"serverFiles":[]},"omnia":{"serverName":"omnia","maxRam":32,"maxMoney":970395703,"minSec":31,"minPorts":5,"minHackLvl":852,"rootAccess":false,"openPorts":0,"serverOrgs":"Omnia Cybersystems","serverCores":4,"serverFiles":["contract-26028-CyberSec.cct","history-of-synthoids.lit"]},"defcomm":{"serverName":"defcomm","maxRam":0,"maxMoney":868433685,"minSec":32,"minPorts":5,"minHackLvl":878,"rootAccess":false,"openPorts":0,"serverOrgs":"DefComm","serverCores":5,"serverFiles":["contract-471747.cct","contract-484184.cct"]},"zb-def":{"serverName":"zb-def","maxRam":0,"maxMoney":915888027,"minSec":21,"minPorts":4,"minHackLvl":796,"rootAccess":true,"openPorts":3,"serverOrgs":"ZB Defense Industries","serverCores":6,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-683885-CyberSec.cct","synthetic-muscles.lit"]},"microdyne":{"serverName":"microdyne","maxRam":64,"maxMoney":579265634,"minSec":22,"minPorts":5,"minHackLvl":808,"rootAccess":false,"openPorts":0,"serverOrgs":"Microdyne Technologies","serverCores":8,"serverFiles":["contract-756453.cct","synthetic-muscles.lit"]},"vitalife":{"serverName":"vitalife","maxRam":128,"maxMoney":711887246,"minSec":28,"minPorts":5,"minHackLvl":869,"rootAccess":false,"openPorts":0,"serverOrgs":"VitaLife","serverCores":12,"serverFiles":["A-Green-Tomorrow.lit","contract-215911.cct","contract-402799.cct","contract-630966.cct"]},".":{"serverName":".","maxRam":16,"maxMoney":0,"minSec":1,"minPorts":4,"minHackLvl":522,"rootAccess":true,"openPorts":3,"serverOrgs":".","serverCores":7,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-6488.cct"]},"clarkinc":{"serverName":"clarkinc","maxRam":0,"maxMoney":20319452615,"minSec":19,"minPorts":5,"minHackLvl":969,"rootAccess":false,"openPorts":0,"serverOrgs":"Clarke Incorporated","serverCores":11,"serverFiles":["beyond-man.lit","cost-of-immortality.lit"]},"megacorp":{"serverName":"megacorp","maxRam":0,"maxMoney":45088926725,"minSec":33,"minPorts":5,"minHackLvl":1128,"rootAccess":false,"openPorts":0,"serverOrgs":"MegaCorp","serverCores":12,"serverFiles":["contract-713352-CyberSec.cct"]},"ecorp":{"serverName":"ecorp","maxRam":0,"maxMoney":42257055444,"minSec":33,"minPorts":5,"minHackLvl":1333,"rootAccess":false,"openPorts":0,"serverOrgs":"ECorp","serverCores":14,"serverFiles":["contract-152374.cct"]},"nwo":{"serverName":"nwo","maxRam":0,"maxMoney":38531364256,"minSec":33,"minPorts":5,"minHackLvl":1093,"rootAccess":false,"openPorts":0,"serverOrgs":"NWO","serverCores":8,"serverFiles":["the-hidden-world.lit"]},"The-Cave":{"serverName":"The-Cave","maxRam":0,"maxMoney":0,"minSec":1,"minPorts":5,"minHackLvl":925,"rootAccess":false,"openPorts":0,"serverOrgs":"Helios","serverCores":13,"serverFiles":["alpha-omega.lit"]},"blade":{"serverName":"blade","maxRam":256,"maxMoney":10648396943,"minSec":30,"minPorts":5,"minHackLvl":953,"rootAccess":false,"openPorts":0,"serverOrgs":"Blade Industries","serverCores":13,"serverFiles":["beyond-man.lit"]},"fulcrumassets":{"serverName":"fulcrumassets","maxRam":0,"maxMoney":1000000,"minSec":33,"minPorts":5,"minHackLvl":1134,"rootAccess":false,"openPorts":0,"serverOrgs":"Fulcrum Technologies","serverCores":14,"serverFiles":[]},"b-and-a":{"serverName":"b-and-a","maxRam":0,"maxMoney":18724850396,"minSec":29,"minPorts":5,"minHackLvl":1069,"rootAccess":false,"openPorts":0,"serverOrgs":"Bachman & Associates","serverCores":14,"serverFiles":["contract-937033-CyberSec.cct"]},"kuai-gong":{"serverName":"kuai-gong","maxRam":0,"maxMoney":26866270396,"minSec":32,"minPorts":5,"minHackLvl":977,"rootAccess":false,"openPorts":0,"serverOrgs":"KuaiGong International","serverCores":13,"serverFiles":["contract-539538.cct","contract-910238-CyberSec.cct"]},"nectar-net":{"serverName":"nectar-net","maxRam":16,"maxMoney":2750000,"minSec":7,"minPorts":0,"minHackLvl":20,"rootAccess":true,"openPorts":0,"serverOrgs":"Nectar Nightclub Network","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"phantasy":{"serverName":"phantasy","maxRam":32,"maxMoney":24000000,"minSec":7,"minPorts":2,"minHackLvl":100,"rootAccess":true,"openPorts":1,"serverOrgs":"Phantasy Club","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-791347.cct"]},"neo-net":{"serverName":"neo-net","maxRam":32,"maxMoney":5000000,"minSec":8,"minPorts":1,"minHackLvl":50,"rootAccess":true,"openPorts":0,"serverOrgs":"Neo Nightclub Network","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-392751.cct","contract-595581.cct","contract-866749.cct","the-hidden-world.lit"]},"avmnite-02h":{"serverName":"avmnite-02h","maxRam":128,"maxMoney":0,"minSec":1,"minPorts":2,"minHackLvl":219,"rootAccess":true,"openPorts":1,"serverOrgs":"NiteSec","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","democracy-is-dead.lit"]},"hong-fang-tea":{"serverName":"hong-fang-tea","maxRam":16,"maxMoney":3000000,"minSec":5,"minPorts":0,"minHackLvl":30,"rootAccess":true,"openPorts":0,"serverOrgs":"HongFang Teahouse","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","brighter-than-the-sun.lit","contract-277597.cct","contract-394709.cct","contract-476868.cct","contract-718505.cct","contract-876883.cct"]},"joesguns":{"serverName":"joesguns","maxRam":16,"maxMoney":2500000,"minSec":5,"minPorts":0,"minHackLvl":10,"rootAccess":true,"openPorts":0,"serverOrgs":"Joe's Guns","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-394178.cct"]},"sigma-cosmetics":{"serverName":"sigma-cosmetics","maxRam":16,"maxMoney":2300000,"minSec":3,"minPorts":0,"minHackLvl":5,"rootAccess":true,"openPorts":0,"serverOrgs":"Sigma Cosmetics","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-999054.cct"]},"max-hardware":{"serverName":"max-hardware","maxRam":32,"maxMoney":10000000,"minSec":5,"minPorts":1,"minHackLvl":80,"rootAccess":true,"openPorts":0,"serverOrgs":"Max Hardware Store","serverCores":2,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-628424.cct"]},"zer0":{"serverName":"zer0","maxRam":32,"maxMoney":7500000,"minSec":8,"minPorts":1,"minHackLvl":75,"rootAccess":true,"openPorts":0,"serverOrgs":"ZER0 Nightclub","serverCores":2,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-427549.cct","contract-765100.cct"]},"omega-net":{"serverName":"omega-net","maxRam":32,"maxMoney":69174578,"minSec":10,"minPorts":2,"minHackLvl":202,"rootAccess":true,"openPorts":1,"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"]},"netlink":{"serverName":"netlink","maxRam":128,"maxMoney":275000000,"minSec":27,"minPorts":3,"minHackLvl":422,"rootAccess":true,"openPorts":2,"serverOrgs":"NetLink Technologies","serverCores":2,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","simulated-reality.lit"]},"catalyst":{"serverName":"catalyst","maxRam":128,"maxMoney":385146539,"minSec":21,"minPorts":3,"minHackLvl":400,"rootAccess":true,"openPorts":2,"serverOrgs":"Catalyst Ventures","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-343112.cct","tensions-in-tech-race.lit"]},"rothman-uni":{"serverName":"rothman-uni","maxRam":16,"maxMoney":197917621,"minSec":18,"minPorts":3,"minHackLvl":392,"rootAccess":true,"openPorts":2,"serverOrgs":"Rothman University","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-699776.cct","secret-societies.lit","tensions-in-tech-race.lit","the-failed-frontier.lit"]},"rho-construction":{"serverName":"rho-construction","maxRam":16,"maxMoney":664249104,"minSec":16,"minPorts":3,"minHackLvl":515,"rootAccess":true,"openPorts":2,"serverOrgs":"Rho Construction","serverCores":3,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-915025.cct"]},"aerocorp":{"serverName":"aerocorp","maxRam":0,"maxMoney":1015107875,"minSec":28,"minPorts":5,"minHackLvl":903,"rootAccess":false,"openPorts":0,"serverOrgs":"AeroCorp","serverCores":7,"serverFiles":["contract-198918.cct","man-and-machine.lit"]},"unitalife":{"serverName":"unitalife","maxRam":16,"maxMoney":1080390337,"minSec":24,"minPorts":4,"minHackLvl":799,"rootAccess":true,"openPorts":3,"serverOrgs":"UnitaLife Group","serverCores":6,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"solaris":{"serverName":"solaris","maxRam":32,"maxMoney":748993919,"minSec":26,"minPorts":5,"minHackLvl":750,"rootAccess":false,"openPorts":0,"serverOrgs":"Solaris Space Systems","serverCores":9,"serverFiles":["A-Green-Tomorrow.lit","the-failed-frontier.lit"]},"nova-med":{"serverName":"nova-med","maxRam":0,"maxMoney":1102985284,"minSec":26,"minPorts":4,"minHackLvl":813,"rootAccess":true,"openPorts":3,"serverOrgs":"Nova Medical","serverCores":5,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-694250.cct"]},"run4theh111z":{"serverName":"run4theh111z","maxRam":512,"maxMoney":0,"minSec":1,"minPorts":4,"minHackLvl":505,"rootAccess":true,"openPorts":3,"serverOrgs":"The Runners","serverCores":10,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-841219-CyberSec.cct","simulated-reality.lit","the-new-god.lit"]},"icarus":{"serverName":"icarus","maxRam":0,"maxMoney":973856267,"minSec":31,"minPorts":5,"minHackLvl":867,"rootAccess":false,"openPorts":0,"serverOrgs":"Icarus Microsystems","serverCores":9,"serverFiles":["contract-167476-CyberSec.cct"]},"infocomm":{"serverName":"infocomm","maxRam":0,"maxMoney":821494209,"minSec":28,"minPorts":5,"minHackLvl":912,"rootAccess":false,"openPorts":0,"serverOrgs":"InfoComm","serverCores":10,"serverFiles":[]},"titan-labs":{"serverName":"titan-labs","maxRam":128,"maxMoney":851353254,"minSec":25,"minPorts":5,"minHackLvl":849,"rootAccess":false,"openPorts":0,"serverOrgs":"Titan Laboratories","serverCores":6,"serverFiles":["coded-intelligence.lit","contract-336507.cct"]},"fulcrumtech":{"serverName":"fulcrumtech","maxRam":512,"maxMoney":1469881765,"minSec":30,"minPorts":5,"minHackLvl":1099,"rootAccess":false,"openPorts":0,"serverOrgs":"Fulcrum Technologies","serverCores":9,"serverFiles":["simulated-reality.lit"]},"4sigma":{"serverName":"4sigma","maxRam":0,"maxMoney":21062718422,"minSec":23,"minPorts":5,"minHackLvl":1051,"rootAccess":false,"openPorts":0,"serverOrgs":"Four Sigma","serverCores":13,"serverFiles":["contract-593720.cct"]},"powerhouse-fitness":{"serverName":"powerhouse-fitness","maxRam":32,"maxMoney":900000000,"minSec":19,"minPorts":5,"minHackLvl":1051,"rootAccess":false,"openPorts":0,"serverOrgs":"Powerhouse Fitness","serverCores":8,"serverFiles":[]},"omnitek":{"serverName":"omnitek","maxRam":128,"maxMoney":13664841468,"minSec":31,"minPorts":5,"minHackLvl":1048,"rootAccess":false,"openPorts":0,"serverOrgs":"OmniTek Incorporated","serverCores":8,"serverFiles":["coded-intelligence.lit","history-of-synthoids.lit"]},"the-hub":{"serverName":"the-hub","maxRam":8,"maxMoney":153800542,"minSec":13,"minPorts":2,"minHackLvl":318,"rootAccess":true,"openPorts":1,"serverOrgs":"The Hub","serverCores":4,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]},"foodnstuff":{"serverName":"foodnstuff","maxRam":16,"maxMoney":2000000,"minSec":3,"minPorts":0,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"FoodNStuff","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js","contract-527347.cct","contract-824965-CyberSec.cct","sector-12-crime.lit"]},"n00dles":{"serverName":"n00dles","maxRam":4,"maxMoney":70000,"minSec":1,"minPorts":0,"minHackLvl":1,"rootAccess":true,"openPorts":0,"serverOrgs":"Noodle Bar","serverCores":1,"serverFiles":["S2tGrow.js","S2tHack.js","S2tWeaken.js","S4tGrow.js","S4tHack.js","S4tWeaken.js"]}} \ No newline at end of file diff --git a/Ramses/home/serverlister.js b/Ramses/home/serverlister.js deleted file mode 100644 index 7194340..0000000 --- a/Ramses/home/serverlister.js +++ /dev/null @@ -1,371 +0,0 @@ - - -// Custom color coding. -const cCyan = "\u001b[36m"; -const cGreen = "\u001b[32m"; -const cRed = "\u001b[31m"; -const cReset = "\u001b[0m"; - - - - - -/** @param {NS} ns */ -export async function main(ns) { - let reset = ns.args[0]; - const bSilent = ns.args[1] === true ? true : false; // if true supress feedback - //ns.tprint("bSilent = " + bSilent); - //host and script info - const sThisRunner = ns.getHostname(); - const sThisScript = ns.getScriptName(); - const nThisPID = ns.pid; - - //open log for this script - if (!bSilent) ns.tail(nThisPID, sThisRunner, ns.args); - - const funnyScript = ["breach.js", "batch.js", "grow.js", "weaken.js", "hack.js"]; - const sScript = "breach.js"; - //write function to purchase scripts from tor network and rerun getCracks() then recrack and reroot - let cracks = {}; - cracks = getCracks(ns); - let maxPorts = Object.keys(cracks).length; - scanServerList(ns, bSilent); - let manualTargetOverride = ""; - let nHackingLevel = ns.getHackingLevel(); - let nServerMaxSecurity = 100; - - - if (nHackingLevel < 10) { - manualTargetOverride = "n00dles"; - } - - - - //ns.tprint("find best target"); - findBestTarget(ns, nServerMaxSecurity, maxPorts, ns.getHackingLevel(), manualTargetOverride); - //ns.tprint("Best Target found? "); - //let bestTarget = ns.read("bestTarget.txt"); - //ns.tprint("Best Target: " + bestTarget); - //ns.tprint(Object.keys(JSON.parse(ns.read("serverList.txt"))).length); - crackingAndRooting(ns, cracks, funnyScript); - //ns.exec(funnyScript[0], "home", 1, JSON.parse(bestTarget).serverName); - //ns.print(reset); - if (reset === true) { - //ns.tprint("reset === true") - findBestTarget(ns, nServerMaxSecurity, maxPorts, ns.getHackingLevel(), manualTargetOverride); - let serverList = JSON.parse(ns.read("serverList.txt")); - for (const [name, entry] of Object.entries(serverList)) { - //copyAndRunSript(ns, funnyScript, name); - } - } - /*let serverListForFiles = JSON.parse(ns.read("serverList.txt")); - for (const [name2, entry2] of Object.entries(serverListForFiles)) { - ns.tprint(name2 + " Files: " + entry2.serverFiles) - }*/ - //await ns.sleep(500000); - //await purchaseAndUpgradeServers(ns, funnyScript); - //await runScriptsFromServers(ns, sScript, JSON.parse(bestTarget).serverName); - let oBestTarget = JSON.parse(ns.read("bestTarget.txt")); - let sBestTarget = oBestTarget.serverName; - //ns.exec(sScript, "home", 1, sBestTarget); - - /* - if(){ - ns.exec(sScript,"home",1); - } - */ -} - -/** @param {NS} ns */ -function crackingAndRooting(ns, cracks, funnyScript) { - let serverList = JSON.parse(ns.read("serverList.txt")); - for (const [name, entry] of Object.entries(serverList)) { - let cracked = false; - let openPorts = serverList[name].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; - } - cracked = true; - } - if (!ns.hasRootAccess(name) && cracked === true) { - ns.nuke(name); - if (ns.hasRootAccess(name)) { - serverList[name].rootAccess = true; - if (serverList[name].maxRam > 0) { - copyAndRunSript(ns, funnyScript, name); - } - } - } - ns.write("serverList.txt", JSON.stringify(serverList), "w"); - } - ns.tprint("Cracking and rooting done"); -} - -/** @param {NS} ns */ -async function purchaseAndUpgradeServers(ns, funnyScript) { - let maxPurchasedServers = ns.getPurchasedServerLimit(); - let purchasedServers = []; - let count = listPurchasedServers(ns).length; - let currentMoney = 0; - let serverList = {}; - while (count < maxPurchasedServers) { - purchasedServers = listPurchasedServers(ns); - currentMoney = ns.getServerMoneyAvailable("home"); - let targetRamInitial = 16; - if (ns.getPurchasedServerCost(targetRamInitial) < currentMoney) { - let hostname = ns.purchaseServer("pserv-" + purchasedServers.length, 16); - count = listPurchasedServers(ns).length; - serverList = JSON.parse(ns.read("serverList.txt")); - serverList[hostname] = { - serverName: hostname, - maxRam: 16, - maxMoney: 0, - minSec: 0, - minPorts: 5, - minHackLvl: 1, - rootAccess: true, - factorMoneyPerTime: 99999999, - openPorts: 0, - }; - ns.write("serverList.txt", JSON.stringify(serverList), "w"); - copyAndRunSript(ns, funnyScript, hostname); - continue - } else { - await ns.sleep(5000); - } - } - let i = 5; - while (i < 21) { - let targetRam = 2 ** i; - purchasedServers = listPurchasedServers(ns); - for (let currentServer of purchasedServers) { - currentMoney = ns.getServerMoneyAvailable("home"); - if (ns.getPurchasedServerUpgradeCost(currentServer, targetRam) < currentMoney) { - if (ns.upgradePurchasedServer(currentServer, targetRam)) { - ns.print(currentServer + " upgraded to " + targetRam + " GB RAM"); - copyAndRunSript(ns, funnyScript, currentServer); - serverList = JSON.parse(ns.read("serverList.txt")); - serverList[currentServer].maxRam = targetRam; - ns.write("serverList.txt", JSON.stringify(serverList), "w"); - } - } else { - await ns.sleep(5000); - continue - }; - } - ++i; - } - ns.tprint("Extiting purchaseServers script!") -} - -/** @param {NS} ns */ -function listPurchasedServers(ns) { - return ns.getPurchasedServers(); -} - -/** @param {NS} ns */ -function copyAndRunSript(ns, funnyScript, currentServer) { - // change to run for one specific server with bestTarget from file - //let minRam = ns.getScriptRam(funnyScript); - 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)); - } else { - ns.print("killed threads on: " + name + ns.scriptKill(funnyScript[0], name)); - }; - //move script and run - if (serverList[name].maxRam > 0) { - ns.scp(funnyScript, name, "home"); - let maxProcesses = 1; - if (serverList[name].maxRam - 64 > 512) { - - maxProcesses = Math.max(Math.floor((serverList[name].maxRam - 64) / 512), 1); - } else { - maxProcesses = 1 - }; - for (let n = 1; n <= maxProcesses; n++) { - ns.exec(funnyScript[0], name, 1, bestTarget.serverName); - } - /*let maxThreads = 0; - if (name === "home") { - maxThreads = Math.floor((serverList[name].maxRam - ns.getServerUsedRam(name) - 32) / minRam); - ns.print(name + " " + maxThreads); - } else { - ns.print(name); - maxThreads = Math.floor(serverList[name].maxRam / minRam); - ns.print(name + " " + maxThreads); - }; - while (maxThreads > 0) { - let threadsToAssign = maxThreads < 500 ? maxThreads : 500; - if (ns.exec(funnyScript, name, threadsToAssign, bestTarget.serverName, serverList[bestTarget.serverName].minSec, serverList[bestTarget.serverName].maxMoney, JSON.stringify(serverList[bestTarget.serverName])) !== 0) { - ns.print("Executing script on: " + name + " with: " + threadsToAssign + " threads out of " + maxThreads + " total threads"); - maxThreads = maxThreads - threadsToAssign; - } else { - ns.tprint("Error running script on: " + name); - maxThreads = -1; - }; - }*/ - } - } -} - -/** @param {NS} ns */ -function getCracks(ns) { - let cracks = {}; - if (ns.fileExists("BruteSSH.exe", "home")) { - cracks["BruteSSH.exe"] = ns.brutessh; - }; - if (ns.fileExists("FTPCrack.exe", "home")) { - cracks["FTPCrack.exe"] = ns.ftpcrack; - }; - if (ns.fileExists("relaySMTP.exe", "home")) { - cracks["relaySMTP.exe"] = ns.relaysmtp; - }; - if (ns.fileExists("HTTPWorm.exe", "home")) { - cracks["HTTPWorm.exe"] = ns.httpworm; - }; - if (ns.fileExists("SQLInject.exe", "home")) { - cracks["SQLInject.exe"] = ns.sqlinject; - }; - return cracks; -} - -/** @param {NS} ns */ -function scanServerList(ns, bSilent) { - const home = "home"; - let serverList = {}; - let unscanned = []; - let nHackingLevel = ns.getHackingLevel(); - let oServer; - unscanned.push(home); - while (unscanned.length > 0) { - let currentServer = unscanned.pop(); - if (!serverList[currentServer]) { - let maxRam = ns.getServerMaxRam(currentServer); - let minPorts = ns.getServerNumPortsRequired(currentServer); - let minSecLevel = ns.getServerMinSecurityLevel(currentServer); - let minHackLevel = ns.getServerRequiredHackingLevel(currentServer); - let rootAccess = ns.hasRootAccess(currentServer); - let serverMoney = ns.getServerMaxMoney(currentServer); - let serverFiles = ns.ls(currentServer); - let skillFactor = (2.5 * minHackLevel * minSecLevel + 500) / (nHackingLevel + 50); - let compareTimeFactor = serverMoney / skillFactor / 10e7; - let nHackingChance = ns.hackAnalyzeChance(currentServer); - oServer = ns.getServer(currentServer); - let sOrg = oServer.organizationName; - let nCores = oServer.cpuCores; - if (minHackLevel <= nHackingLevel && !currentServer.includes("home") && !currentServer.includes("pserv") && serverMoney > 0 && !bSilent) { - //if (!currentServer.includes("home") && !currentServer.includes("pserv") && !bSilent) { - ns.tprint("Server : " + currentServer); - ns.tprint("sOrg : " + sOrg); - ns.tprint("Hacking : " + minHackLevel); - ns.tprint("RAM : " + maxRam); - ns.tprint("Cores : " + nCores); - ns.tprint("Money : " + Math.floor(serverMoney).toLocaleString()); - ns.tprint("Hack chance : " + Math.floor(nHackingChance * 10000) / 100 + " %"); - ns.tprint("Security : " + minSecLevel); - ns.tprint("--------------------------------------------------------------"); - } - serverList[currentServer] = - { - serverName: currentServer, - maxRam: maxRam, - maxMoney: serverMoney, - minSec: minSecLevel, - minPorts: minPorts, - minHackLvl: minHackLevel, - rootAccess: rootAccess, - factorMoneyPerTime: compareTimeFactor, - openPorts: 0, - serverFiles: serverFiles, - hackingChance: nHackingChance - }; - let neighbours = ns.scan(currentServer); - for (let i = 0; i < neighbours.length; i++) { - let neighbour = neighbours[i]; - if (serverList[neighbour]) { - continue - } - unscanned.push(neighbour); - } - } - } - ns.write("serverList.txt", JSON.stringify(serverList), "w"); -} - -/** @param {NS} ns */ -function findBestTarget(ns, maxSec, maxPorts, currentHackLevel, manualTargetOverride) { - //ns.tprint("start of findBestTarget "); - const bSilent = ns.args[1] === true ? true : false; // if true supress feedback - //ns.tprint("bSilent = " +bSilent); - let sCurrentBestTarget = JSON.parse(ns.read("bestTarget.txt")); - //let sCurrentBestTarget = "n00dles"; - //ns.tprint("sCurrentBestTarget = " +JSON.stringify(sCurrentBestTarget)); - //if (!bSilent) ns.tprint("sCurrentBestTarget = " + sCurrentBestTarget.serverName); - let serverList = JSON.parse(ns.read("serverList.txt")); - let bestEntry = null; - let compareTime = 0; - let nMaxMoneyPerChance = 0; - let nBestMoneyPerChance = 0; - //ns.tprint("before for loop "); - for (const [name, entry] of Object.entries(serverList)) { - if (entry.minSec <= maxSec && entry.minPorts <= maxPorts && entry.minHackLvl < currentHackLevel) { - nMaxMoneyPerChance = (entry.maxMoney * entry.hackingChance) / entry.minSec; - //ns.tprint("nMaxMoneyPerChance " + nMaxMoneyPerChance); - /* - if (entry.factorMoneyPerTime > compareTime) { - compareTime = entry.factorMoneyPerTime; - bestEntry = name; - } - */ - if (nMaxMoneyPerChance > nBestMoneyPerChance) { - nBestMoneyPerChance = nMaxMoneyPerChance; - bestEntry = name; - if (!bSilent) ns.tprint("bestEntry " + bestEntry); - if (!bSilent) ns.tprint("╚ value = " + Math.floor(nMaxMoneyPerChance)); - - } - } - } - - if (manualTargetOverride.length > 0) { - bestEntry = manualTargetOverride; - } - - if (sCurrentBestTarget.serverName === bestEntry) { - if (!bSilent) ns.tprint("Same target = " + bestEntry); - } - else { - ns.tprint("New best target = " + cCyan + bestEntry + cReset); - } - ns.write("bestTarget.txt", JSON.stringify(serverList[bestEntry]), "w"); -} - -/** @param {NS} ns */ -async function runScriptsFromServers(ns, sScript, sTarget) { - let serverList = JSON.parse(ns.read("serverList.txt")); - let nScripts; - let nMaxRam = 0; - const nScriptRAM = ns.getScriptRam(sScript); - for (const [name, entry] of Object.entries(serverList)) { - //let rootAccess = ns.hasRootAccess(currentServer); - nMaxRam = ns.getServerMaxRam(entry.serverName); - nScripts = Math.floor(nMaxRam / nScriptRAM); - if (entry.maxRam >= 8 && serverList[name].rootAccess === true && !entry.serverName.includes("home") && !entry.serverName.includes("pserv")) { - //ns.killall(entry.serverName); - ns.scriptKill(sScript, entry.serverName); - ns.scp(sScript, entry.serverName); - while (nScripts > 0) { - ns.exec(sScript, entry.serverName, 1, sTarget); - nScripts--; - await ns.sleep(10); - } - } - } -} \ No newline at end of file diff --git a/Ramses/home/upgrade.js b/Ramses/home/upgrade.js deleted file mode 100644 index 283be81..0000000 --- a/Ramses/home/upgrade.js +++ /dev/null @@ -1,66 +0,0 @@ -import { listPurchasedServers, getSetting } from "myLibrary.js"; - -// Custom color coding. -const cCyan = "\u001b[36m"; -const cGreen = "\u001b[32m"; -const cRed = "\u001b[31m"; -const cReset = "\u001b[0m"; - -/** @param {NS} ns */ -export async function main(ns) { - ns.disableLog("ALL"); - - //host and script info - const sThisRunner = ns.getHostname(); - - //open log for this script - ns.tail(ns.pid, sThisRunner); - - //const npServ = ["pserv-0", "pserv-1", "pserv-2", "pserv-3", "pserv-4", "pserv-5", "pserv-6", "pserv-7", "pserv-8", "pserv-9", "pserv-10", "pserv-11", "pserv-12", "pserv-13", "pserv-14", "pserv-15", "pserv-16", "pserv-17", "pserv-18", "pserv-19", "pserv-20", "pserv-21", "pserv-22", "pserv-23", "pserv-24"]; - const npServ = listPurchasedServers(ns); - let nCurrentRAM = 4; - let nMyMoney = ns.getServerMoneyAvailable("home"); - let bAutoUpgrade = getSetting(ns, "autoUpgrades"); - while (bAutoUpgrade && nCurrentRAM < 2 ** 20) { - - //for (let i = 0; i < npServ.length; i++) { - for (let i = 0; i < npServ.length && bAutoUpgrade; i++) { - ns.print("----------------------------------------------------------------------"); - nMyMoney = ns.getServerMoneyAvailable("home"); - - let nNextRAM = nCurrentRAM * 2; - let nUpgradeCost = ns.getPurchasedServerUpgradeCost(npServ[i], nNextRAM); - - ns.print("npServ = " + npServ[i]); - ns.print("nMyMoney = " + Math.ceil(nMyMoney).toLocaleString()); - ns.print("nCurrentRAM = " + nCurrentRAM.toLocaleString()); - ns.print("nNextRAM = " + nNextRAM); - ns.print("nUpgradeCost = " + Math.ceil(nUpgradeCost).toLocaleString()); - - while (bAutoUpgrade && nMyMoney < nUpgradeCost) { - ns.print("Money Treshold = " + Math.ceil(nMyMoney).toLocaleString() + " / " + Math.ceil(nUpgradeCost).toLocaleString()); - await ns.sleep(1000); - bAutoUpgrade = getSetting(ns, "autoUpgrades"); - if (bAutoUpgrade === false) { - return; - } - nMyMoney = ns.getServerMoneyAvailable("home"); - } - - if (ns.upgradePurchasedServer(npServ[i], nNextRAM)) { - ns.print("Server: " + npServ[i] + " upgraded to: " + nNextRAM + "GB"); - ns.tprint(cCyan + "Server: " + npServ[i] + " upgraded to: " + nNextRAM.toLocaleString() + " GB" + cReset); - ns.toast("Server: " + npServ[i] + " upgraded to: " + nNextRAM.toLocaleString() + " GB", "info", 10000); - } - else { - ns.print("Server: " + npServ[i] + " could not be upgraded to : " + nNextRAM + "GB it is currently at: " + ns.getServerMaxRam(npServ[i]) + "GB"); - } - bAutoUpgrade = getSetting(ns, "autoUpgrades"); - if (bAutoUpgrade === false) { - return; - } - } - nCurrentRAM *= 2; - } - ns.print("----------------------------------------------------------------------"); -} \ No newline at end of file