From 1ca00b3b73a9699e41f81e154cea32934c16de03 Mon Sep 17 00:00:00 2001 From: AlmightyMiau Date: Sat, 26 Oct 2024 13:06:14 -0700 Subject: First commit --- bitburnerFiles1026/batch/batch.js | 36 ++++++ bitburnerFiles1026/batch/batcher.js | 216 ++++++++++++++++++++++++++++++++++++ bitburnerFiles1026/batch/chef.js | 13 +++ bitburnerFiles1026/batch/grow.js | 5 + bitburnerFiles1026/batch/hack.js | 5 + bitburnerFiles1026/batch/weaken.js | 5 + 6 files changed, 280 insertions(+) create mode 100644 bitburnerFiles1026/batch/batch.js create mode 100644 bitburnerFiles1026/batch/batcher.js create mode 100644 bitburnerFiles1026/batch/chef.js create mode 100644 bitburnerFiles1026/batch/grow.js create mode 100644 bitburnerFiles1026/batch/hack.js create mode 100644 bitburnerFiles1026/batch/weaken.js (limited to 'bitburnerFiles1026/batch') diff --git a/bitburnerFiles1026/batch/batch.js b/bitburnerFiles1026/batch/batch.js new file mode 100644 index 0000000..c5cb7f5 --- /dev/null +++ b/bitburnerFiles1026/batch/batch.js @@ -0,0 +1,36 @@ +import { setOfObjects } from '/batch/batcher.js'; + +/** @param {NS} ns */ +export async function main(ns) { + // SINGLE BATCH RUN BY BATCHER.JS + // RUNS TWO WEAKENS, A GROW, AND A HACK + // SEPERATED BY SOME TIME + /* + Initialize the object + + run weaken.js with [weaken-hack] threads + wait some [weakenBuffer] time + run weaken.js with [weakenThreadsGrow] threads + wait some [grow buffer] time + run grow.js with [grow] threads + wait some [hack buffer] time + run hack.js with [hack] threads + */ + + // ns.disableLog("ALL"); + // ns.clearLog(); + // ns.tail(); + + let object = setOfObjects[ns.args[0]]; + + + ns.exec("/batch/weaken.js", "home", Math.ceil(object.weakenThreadsHack), object.target); + await ns.sleep(object.weakenBuffer); + ns.exec("/batch/weaken.js", "home", Math.ceil(object.weakenThreadsGrow), object.target); + await ns.sleep(object.growBuffer); + ns.exec("/batch/grow.js", "home", Math.ceil(object.growThreads), object.target); + await ns.sleep(object.hackBuffer); + ns.exec("/batch/hack.js", "home", Math.ceil(object.hackThreads), object.target); + // ns.tprint(object.weakenThreadsHack) + +} \ No newline at end of file diff --git a/bitburnerFiles1026/batch/batcher.js b/bitburnerFiles1026/batch/batcher.js new file mode 100644 index 0000000..e3c1546 --- /dev/null +++ b/bitburnerFiles1026/batch/batcher.js @@ -0,0 +1,216 @@ +// Make starting values so it won't break +const BUFFER = 150; +const THREADS = 100; +const HOME = 'home'; + +let setOfObjects = {}; +// Object is now initialized +let object = { + target: {}, + bufferTime: 100, + + weakenTime: {}, + weakenAmount: 0.05, + + growTime: {}, + growPercent: {}, + growSecurity: {}, + + hackTime: {}, + maxMoney: {}, + hackSecurity: {}, + + growThreads: THREADS, + weakenThreadsGrow: THREADS, + hackThreads: THREADS, + weakenThreadsHack: THREADS, + + weakenBuffer: {}, + growBuffer: {}, + hackBuffer: {} +}; +export { setOfObjects }; + +/** @param {NS} ns */ +export async function main(ns) { +// RUNS BATCH.JS SCRIPTS FOR LEAST DOWNTIME +/******************************************************************** + * Takes as argument: server, ?("ram" || "memory") + * + * If ram or memory are the second args, just determines ram needed to use program + * If not, runs the sequence hack, weaken, grow, weaken with a time of [BUFFER] between each step + * This should (theoretically) earn the most money possible from a server + * + * Biggest downside of this program is that it needs many TB of ram (64+) + * + * run batch.js once every buffer time * 4 + * pass the object through as an object + ****************************************************************/ + // ns.disableLog("ALL"); + // ns.enableLog("sleep"); + ns.tail(); + ns.resizeTail(300, 130); + ns.moveTail(1065, 550); + + // Get the target server from the arguments passed + let target = ns.args[0]; + if (target === undefined) { + ns.tprint("No target specified for batcher"); + ns.exit(); + } + + // Stand idle until we can actually hack the server + if (ns.getHackingLevel() < ns.getServerRequiredHackingLevel(target)) { + while (ns.getHackingLevel() < ns.getServerRequiredHackingLevel(target)) { + await ns.sleep(6000); + } + } + + // Make sure the security is at a minimum + while (ns.getServerSecurityLevel(target) > ns.getServerMinSecurityLevel(target)) { + ns.print("Weakening ", target); + ns.exec("batch/weaken.js", "home", + Math.min( + Math.ceil((ns.getServerSecurityLevel(target) - ns.getServerMinSecurityLevel(target)) * 20), + Math.floor((ns.getServerMaxRam(HOME) - ns.getServerUsedRam(HOME)) / ns.getScriptRam("batch/weaken.js")) + ), + target); + await ns.sleep(ns.getWeakenTime(target) + 500); + } + // Make sure the money is at a maximum + while (ns.getServerMoneyAvailable(target) != ns.getServerMaxMoney(target)) { + // Make sure the security is at a minimum + while (ns.getServerSecurityLevel(target) > ns.getServerMinSecurityLevel(target)) { + ns.print("Weakening ", target); + ns.exec("batch/weaken.js", "home", + Math.min( + Math.ceil((ns.getServerSecurityLevel(target) - ns.getServerMinSecurityLevel(target)) * 20), + Math.floor((ns.getServerMaxRam(HOME) - ns.getServerUsedRam(HOME)) / ns.getScriptRam("batch/weaken.js")) + ), + target); + await ns.sleep(ns.getWeakenTime(target) + 500); + } + ns.print("Growing ", target); + ns.exec("batch/grow.js", "home", + Math.min( + Math.ceil(ns.growthAnalyze(target, ns.getServerMaxMoney(target) / (ns.getServer().moneyAvailable + 1))), + Math.floor((ns.getServerMaxRam(HOME) - ns.getServerUsedRam(HOME)) / ns.getScriptRam("batch/grow.js")) + ), + target); + await ns.sleep(ns.getGrowTime(target) + 500); + } + // Make sure the security is at a minimum + while (ns.getServerSecurityLevel(target) > ns.getServerMinSecurityLevel(target)) { + ns.print("Weakening ", target); + ns.exec("batch/weaken.js", "home", + Math.min( + Math.ceil((ns.getServerSecurityLevel(target) - ns.getServerMinSecurityLevel(target)) * 20), + Math.floor((ns.getServerMaxRam(HOME) - ns.getServerUsedRam(HOME)) / ns.getScriptRam("batch/weaken.js")) + ), + target); + await ns.sleep(ns.getWeakenTime(target) + 500); + } + + setOfObjects[target] = object; + + setOfObjects[target].target = ns.args[0]; + setOfObjects[target].bufferTime = BUFFER; + + setOfObjects[target].weakenTime = ns.getWeakenTime(setOfObjects[target].target); + setOfObjects[target].weakenAmount = 0.05; + + setOfObjects[target].growTime = ns.getGrowTime(setOfObjects[target].target); + setOfObjects[target].growPercent = ns.getServerGrowth(setOfObjects[target].target); + setOfObjects[target].growSecurity = ns.growthAnalyzeSecurity(1, setOfObjects[target].target, ns.getServer("home").cpuCores); + + setOfObjects[target].hackTime = ns.getHackTime(setOfObjects[target].target); + setOfObjects[target].maxMoney = ns.getServerMaxMoney(setOfObjects[target].target); + setOfObjects[target].hackSecurity = ns.hackAnalyzeSecurity(1, setOfObjects[target].target); + + setOfObjects[target].growThreads = 1 + ns.growthAnalyze(setOfObjects[target].target, setOfObjects[target].maxMoney / (ns.getServer().moneyAvailable + 1)); + setOfObjects[target].weakenThreadsGrow = 10 + ((ns.growthAnalyzeSecurity(setOfObjects[target].growThreads, target, ns.getServer("home").cpuCores)) / setOfObjects[target].weakenAmount); + setOfObjects[target].hackThreads = 1 + ns.hackAnalyzeThreads(setOfObjects[target].target, setOfObjects[target].maxMoney); + setOfObjects[target].weakenThreadsHack = 10 + (ns.hackAnalyzeSecurity(setOfObjects[target].hackThreads, setOfObjects[target].target)) / setOfObjects[target].weakenAmount; + + setOfObjects[target].weakenBuffer = (2 * setOfObjects[target].bufferTime); + setOfObjects[target].growBuffer = (setOfObjects[target].weakenTime - setOfObjects[target].bufferTime - setOfObjects[target].growTime); + setOfObjects[target].hackBuffer = (setOfObjects[target].growTime - (2 * setOfObjects[target].bufferTime) - setOfObjects[target].hackTime); + + // if ram or memory are the second args, determine ram need to use program + // Ram per second { ram of each batch (batch, weaken * 2, grow, hack) divided by (BUFFER * 5 / 1000) } + // max ram is rate * weaken time + if (ns.args[1] == "ram" || ns.args[1] == "memory") { + ns.tprint( // Max RAM from batching this server + "RAM needed to batch ", target, " is ", + ( // RAM per second + ( // RAM per batch + ns.getScriptRam("/batch/batch.js") + + (ns.getScriptRam("/batch/weaken.js") * setOfObjects[target].weakenThreadsGrow) + + (ns.getScriptRam("/batch/weaken.js") * setOfObjects[target].weakenThreadsHack) + + (ns.getScriptRam("/batch/grow.js") * setOfObjects[target].growThreads) + + (ns.getScriptRam("/batch/hack.js") * setOfObjects[target].hackThreads) + ) + / + ( + BUFFER * 5 / 1000 + ) + ) + * + ( // Number of seconds + ns.getWeakenTime(target) / 1000 + ) + ); + ns.tprint( + "Values: ", + "\nbatch ram: ", ns.getScriptRam("/batch/batch.js"), + "\nweaken ram: ", 2 * ns.getScriptRam("/batch/weaken.js"), + "\ngrow ram: ", ns.getScriptRam("/batch/grow.js"), + "\nhack ram: ", ns.getScriptRam("/batch/hack.js"), + "\nRAM per batch: ", ( ns.getScriptRam("/batch/batch.js") + ns.getScriptRam("/batch/weaken.js") + ns.getScriptRam("/batch/weaken.js") + ns.getScriptRam("/batch/grow.js") + ns.getScriptRam("/batch/hack.js") ), + "\nPer time: ", BUFFER * 5 / 1000, + "\nRAM per second: ", ( // RAM per batch + ns.getScriptRam("/batch/batch.js") + + (ns.getScriptRam("/batch/weaken.js") * setOfObjects[target].weakenThreadsGrow) + + (ns.getScriptRam("/batch/weaken.js") * setOfObjects[target].weakenThreadsHack) + + (ns.getScriptRam("/batch/grow.js") * setOfObjects[target].growThreads) + + (ns.getScriptRam("/batch/hack.js") * setOfObjects[target].hackThreads) + ) + / + ( + BUFFER * 5 / 1000 + ), + "\nFor ", ns.getWeakenTime(target) / 1000, " seconds" + ); + ns.exit(); + } + + ns.disableLog("ALL"); + ns.clearLog(); + + ns.print(target, ":"); + ns.print("Money: ", formatLargeNumber(setOfObjects[target].maxMoney)); + ns.print("per time: ", setOfObjects[target].bufferTime * 5); + ns.print("Money per second: ", formatLargeNumber(setOfObjects[target].maxMoney / (BUFFER * 5 / 1000))); + + while (true) { + ns.exec("/batch/batch.js", "home", 1, target); + await ns.sleep(setOfObjects[target].bufferTime * 5); + } + + // ns.tprint(setOfObjects[target].weakenThreadsHack); + +} + +// NOT MY CODE +// Used to format numbers for logging +function formatLargeNumber(number) { + const suffixes = ['', ' thousand', ' million', ' billion', ' trillion', ' quadrillion', ' quintillion', ' sextillion', ' septillion', ' octillion', ' nonillion', ' decillion']; + let suffixIndex = 0; + + while (number >= 1000 && suffixIndex < suffixes.length - 1) { + number /= 1000; + suffixIndex++; + } + + return number.toFixed(2).replace(/\.00$/, '') + suffixes[suffixIndex]; +} \ No newline at end of file diff --git a/bitburnerFiles1026/batch/chef.js b/bitburnerFiles1026/batch/chef.js new file mode 100644 index 0000000..bead946 --- /dev/null +++ b/bitburnerFiles1026/batch/chef.js @@ -0,0 +1,13 @@ +/** @param {NS} ns */ +export async function main(ns) { + let servers = ns.read("moneyServers.txt").split('\n'); + for (let i = 0; i < servers.length; i--) { + ns.print(servers[i]); + let money = ns.getServerMaxMoney(servers[i]); + ns.print(money); // Money + ns.print(750); // second + ns.print(money * 1000 / 750); // Money per second + let timeLive = ns.getWeakenTime(servers[i]) + 750; // Time each batch.js is alive + + } +} \ No newline at end of file diff --git a/bitburnerFiles1026/batch/grow.js b/bitburnerFiles1026/batch/grow.js new file mode 100644 index 0000000..62f7f9d --- /dev/null +++ b/bitburnerFiles1026/batch/grow.js @@ -0,0 +1,5 @@ +/** @param {NS} ns */ +export async function main(ns) { + let target = ns.args[0]; + await ns.grow(target); +} \ No newline at end of file diff --git a/bitburnerFiles1026/batch/hack.js b/bitburnerFiles1026/batch/hack.js new file mode 100644 index 0000000..e21bbb1 --- /dev/null +++ b/bitburnerFiles1026/batch/hack.js @@ -0,0 +1,5 @@ +/** @param {NS} ns */ +export async function main(ns) { + let target = ns.args[0]; + await ns.hack(target); +} \ No newline at end of file diff --git a/bitburnerFiles1026/batch/weaken.js b/bitburnerFiles1026/batch/weaken.js new file mode 100644 index 0000000..046cfa6 --- /dev/null +++ b/bitburnerFiles1026/batch/weaken.js @@ -0,0 +1,5 @@ +/** @param {NS} ns */ +export async function main(ns) { + let target = ns.args[0]; + await ns.weaken(target); +} \ No newline at end of file -- cgit v1.2.3