summaryrefslogtreecommitdiff
path: root/start/buyservers.js
diff options
context:
space:
mode:
Diffstat (limited to 'start/buyservers.js')
-rw-r--r--start/buyservers.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/start/buyservers.js b/start/buyservers.js
new file mode 100644
index 0000000..af82de7
--- /dev/null
+++ b/start/buyservers.js
@@ -0,0 +1,134 @@
+
+// enter ram size, number of servers, upgrade yes or no.
+
+
+/** @param {NS} ns */
+export async function main(ns) {
+ const HOME = "home";
+ let size = ns.args[0]; // int; home many GB of ram to buy standard: 2048
+ let number = ns.args[1]; // int; how many pservs to obtain standard: "max"
+ const upgrade = ns.args[2]; // bool; does it upgrade existing pservs standard: true
+ const debug = ns.args[3]; // bool; does it log what happens standard: false
+ const LIMIT = 64000; // sets the max on how much ram a pserv can have (64 TB)
+
+ if (size == "--help") {
+ ns.tprint("\n 1st arg is the Ram size of the servers; does not do anything if upgrade is true; Mandatory.\n 2nd arg is the number of servers; does not do anything if upgrade is true; default to 24.\n 3rd arg is whether to continously upgrade servers; default to false.\n 4th arg is whether to enable debug logs; default is false.");
+ ns.exit();
+ }
+ if (debug != true) {
+ ns.disableLog("getServerMaxRam");
+ ns.disableLog("sleep");
+ ns.disableLog("getServerMoneyAvailable");
+ }
+
+ if (size === undefined) {
+ ns.print("Arguments for this script are RAM size of the servers, number of servers, and true or false for if existing servers should be upgraded.");
+ ns.exit();
+ } else if (Math.log2(size) % 1 != 0) {
+ ns.print("The RAM size must be a power of two.");
+ ns.exit();
+ } else if (number === undefined) {
+ number = 1;
+ } if (number > 25 || number == "max") {
+ number = 25;
+ ns.print("The Maximum number of servers is 25. Reverting to 25 servers");
+ }
+
+ if (upgrade) {
+ const homeram = ns.getServerMaxRam(HOME);
+ let fullservs = 0;
+ while (fullservs < 24) {
+ // start a for loop that goes through each server name
+ for (let i = 0; i < number; i++) {
+ // set the server name
+ let serv;
+ if (i < 10) {
+ serv = "pserv-0" + i;
+ } else {
+ serv = "pserv-" + i;
+ }
+ // check if the server already exists, if it does, upgrade it up to 1/2 of home
+ if (ns.serverExists(serv)) {
+ let servram = ns.getServerMaxRam(serv);
+ // upgrading until server ram is 1/2 home ram
+ if (servram < LIMIT) {
+ // wait to upgrade the server until we have enough money
+ if (ns.getPurchasedServerUpgradeCost(serv, servram * 2) > ns.getServerMoneyAvailable(HOME)) {
+ ns.print("Not enough money yet to upgrade ", serv);
+ ns.print("Need ", ns.getPurchasedServerUpgradeCost(serv, servram * 2), " to upgrade ", serv);
+ while (ns.getPurchasedServerUpgradeCost(serv, servram * 2) > ns.getServerMoneyAvailable(HOME)) {
+ await ns.sleep(60000);
+ }
+ }
+ ns.print("Upgrading ", serv, " from ", servram, " to ", servram * 2);
+ ns.upgradePurchasedServer(serv, servram * 2);
+ }
+ } else {
+ // wait to buy the server until we have enough money
+ while (ns.getPurchasedServerCost(size) > ns.getServerMoneyAvailable(HOME)) {
+ ns.print("Not enough money yet for new server.");
+ await ns.sleep(60000);
+ }
+ // buy the server (root.js will take care of hacking)
+ ns.purchaseServer(serv, size);
+ }
+ }
+ for (let i = 0; i < number; i++) {
+ // set the server name
+ let serv = "pserv-" + i;
+ // check if the server already exists, if it does, see if it is upgraded
+ if (ns.serverExists(serv)) {
+ let servram = ns.getServerMaxRam(serv);
+ // counting how many servers are fully upgraded
+ if (servram >= LIMIT) {
+ fullservs++;
+ } else {
+ fullservs = 0;
+ break;
+ }
+ }
+ }
+ await ns.sleep(100);
+ }
+ ns.print("All servers fully upgraded");
+ } else {
+ // start a for loop that goes through each server name
+ for (let i = 0; i < number; i++) {
+ // set the server name
+ let serv;
+ if (i < 10) {
+ serv = "pserv-0" + i;
+ } else {
+ serv = "pserv-" + i;
+ }
+ // check if the server already exists, if it does, skip it
+ for (let j = 0; j < 24 && ns.serverExists(serv); j++) {
+ if ((i + j) < 10) {
+ serv = "pserv-0" + (i + j);
+ } else {
+ serv = "pserv-" + (i + j);
+ }
+ if ((i + j) >= 24) {
+ ns.print("Maximum amount of purchased servers acquired.");
+ ns.exit();
+ }
+ }
+ // wait to buy the server until we have enough money
+ while (ns.getPurchasedServerCost(size) > ns.getServerMoneyAvailable(HOME)) {
+ ns.print("Not enough money yet for new server.");
+ await ns.sleep(60000);
+ }
+ // buy the server (root.js will take care of hacking)
+ ns.purchaseServer(serv, size);
+ }
+ }
+
+ if (debug == true) {
+ ns.print("Debug time!");
+ await ns.sleep(60000);
+ }
+}
+
+
+// enter ram size, number of servers, upgrade yes or no.
+// auto copy and exec hack.js at maximum threads \ No newline at end of file