This is an automated script for midgame (or SF1+ games) that buys and rebuys servers. It has editable variables for extra customization.
About this Bot
This is a bot that will:
- Buy servers of RAM you specify (default is half your home RAM, minimum of 32GB)
- Upload and execute a script of your choosing
- Template for uploading additional scripts of your choosing (즉. if your main script calls 3x scripts like mine does)
- If you have max servers (25) and they are weak (<25% of your home RAM) and have sufficient money to upgrade, it will prompt a yes/no box to upgrade them. This deletes and rebuys.
Due to the logic inside, it is quite hefty at 13.3GB of RAM required, as such it is not really suited for a very early game.
There is some basic technical knowledge required to change a few lines of code to suit your setup. Read the how-to carefully.
You can force a server rebuy by running it with the ‘f’ argument (즉. “run servers.js f”)
The Script
// Server purchasing script for Bitburner - https://danielyxie.github.io/bitburner/ , written by steamid/Meng // Runs until satisfied, will rebuy servers money is sufficient and server is worse than 25% of ram. Run with 'f' argument to force rebuy // 버전 1.22 // Added additional comments and MAIN_SCRIPT variable so that the code will be usable for others export async function main(ns) { // ~~~~~~~~~Editable variables~~~~~~~~~~~ const SVRNAME = "plex"; // What hostname your purchased servers will have const MIN_RAM = 32; // Minimum RAM you want to buy for a server const SVR_RAM_RATIO = 2; // Target RAM for server is "집" 숫양, divided by SVR_RAM_RATIO, must = power of 2 (0.5, 1, 2, 4...). 예를 들어. '2' is 50% of home RAM const MAIN_SCRIPT = "breaker.js" // Name of your main script that you want to upload // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ let currentServers = ns.getPurchasedServers(); let ram = calculateRam(); // Calculates how much RAM to buy for the server let i = currentServers.length; const serverMax = 25; // hardcoded max servers as of Bitburner v1.3 // Check and ensure servers are running scripts (recover after a forced reboot) // if server is not running scripts, overwrite existing breaker and run. ns.print('Starting scripts on existing servers...') ~을 위한(let x = 0; 엑스 < currentServers.length; x++){ 만약에 (!ns.isRunning(MAIN_SCRIPT, currentServers[엑스])){ await ns.scp(MAIN_SCRIPT, currentServers[엑스]); ns.exec(MAIN_SCRIPT, currentServers[엑스], 1); } }; // Server purchase info const serverPriceInfoText = (ns.getPurchasedServerCost(ram) / 1000000).toFixed(2); ns.toast(`Server price is ${serverPriceInfoText} M`, "정보"); ns.print(`about to start buying servers @ ${ram}gb for ${serverPriceInfoText}`); ns.sleep을 기다리세요(15000) // then Continuously try to purchase servers until we've reached the maximum while (나 < serverMax) { // Check if we have enough money to purchase a server if (ns.getServerMoneyAvailable("집") > ns.getPurchasedServerCost(ram)) { // if sufficient money, buy server, name it, upload scripts and exec MAIN_SCRIPT let hostname = ns.purchaseServer(SVRNAME + 나, ram); await ns.scp(MAIN_SCRIPT, hostname); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Add any extra scripts you want to upload here, or delete the lines // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ await ns.scp("hackscript.js", hostname); await ns.scp("growscript.js", hostname); await ns.scp("weakscript.js", hostname); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ns.exec(MAIN_SCRIPT, hostname, 1); ns.toast(`Server ${hostname} was purchased`, "success") ++나; } 또 다른 { ns.print(`cannot buy yet - price is `+ ns.getPurchasedServerCost(ram)) ns.sleep을 기다리세요(20000) } } // end of while (ns.getPurchasedServerCost(ram) * 13) ){ // if money is sufficient for upgrade.. let areYouSure = await ns.prompt(`do you want to rebuy servers? Est Cost: $ ${((ns.getPurchasedServerCost(ram) * 25)/1000000000).toFixed(2)} B`); 만약에 (areYouSure){ ~을 위한 (let i = 0; 나 < currentServers.length; i++){ // Delete all existing servers ns.killall(currentServers); ns.deleteServer(currentServers); } ns.spawn("servers.js", 1); // Kills and Restarts this script to start buy process } } ns.sleep을 기다리세요 (900000); } function calculateRam() { // Calculate how much RAM to buy for the server (set to SVR_RAM_RATIO) const myRam = ns.getServerMaxRam("집"); const maxPossRam = 1048576; // Hardcoded value for maximum purchasable server ram @ Bitburner v1.3 if (myRam > maxPossRam){return maxPossRam} else if (myRam <= MIN_RAM){return MIN_RAM} 또 다른 {반품 (myRam / SVR_RAM_RATIO)}; } } // end of script
사용방법
Here’s how you can use this script
- terminal > nano “servers.js”
- paste the below code in
- EDIT THE CODE – Line 13 + Lines 45-50
- Line 13: Change “breaker.js” to whatever your main script filename is that you would like to execute on the remote server.
- Lines 45-50: If you want to upload more scripts, then amend these lines as well, if you do not need them, then delete them between the lines. Note that these will not auto-execute, they assume that your main script calls them. If you need to execute them as well, then add extra lines of
ns.exec("yourScriptNameHere.js", hostname, 1);
- 구하다
- terminal > run servers.js
메모: If you do not name the file servers.js, then you amend line 70 to whatever you name the file, or the rebuy function will not work.
I just spent multiple minutes to fix the syntax errors before I was able to understand at least parts of it. I don’t know if the website messed it up or it was user error but like this nobody can execute it. almost all ifs are commented out, 예를 들어. the linebreaks are a mess, if there are any. Multiple ; are missing. At first I thought you tried to write while else (turned out to be another commented if). Why don’t you just use let scriptArray = [“script1.js”, “script2.js”,…,”scriptn.js”]; to be used in ns.scp(scriptArray, hostname);? Does need one scp instead of 3 while uploading every amount of scripts at once. And what the heck are you trying to do in the final loop? the condition (one value multiplied by 13) would always be true if it weren’t commented out. This script would constantly spam “do you want to rebuy servers?”, probably instant-spending all the players money. Maybe you should stick to reddit with your scripts, there you’ll get instant feedback and enhancement suggestions…