Skip to content
Riot Bits

Riot Bits

  • Home
  • All Games
  • Guides
  • Video Guides
  • Patch Notes
  • Crossword Vault
  • Report Abuse
  • Toggle search form
Bitburner

Bitburner – Optimized Hacknet Bot

Posted on 01/15/2022 By syw1 No Comments on Bitburner – Optimized Hacknet Bot
Bitburner
Table of Contents show
1. How It Works
2. How to Use

Simple Bot that uses math to choose the most profitable upgrade.

How It Works

The bot takes the following steps.

  1. Checks cost and production growth of all the possible upgrades
  2. Calculates profitable ratio of each upgrade
  3. Sorts elements by ratio descending
  4. Chooses the first element
  5. Checks if you can purchase upgrade now, if not, it waits to collect money
  6. Checks if you can buy a new node in less than 30 seconds (you can customize this time), if so, it buys it
  7. Repeat…

Profitable ratio = Production growth / upgrade cost
Production growth = Production after upgrade / current production

This guide is based on my previous “Automation for Hacknet Nodes”.

How to Use

Take the following steps.

  1. Run the terminal
  2. Type ‘nano hacknet-bot.js’
  3. Copy and paste the code below into this file
  4. Save the file (ctrl + s)
  5. Back to the terminal
  6. Type ‘run hacknet-bot.js’

/** @param {NS} ns **/
export async function main(ns) {
	// helpers
	const getMoney = () => ns.getPlayer().money;
	const getProd = (level, ram, cores) => (level * 1.5) * Math.pow(1.035, ram - 1) * ((cores + 5) / 6);
	// your production multiplier
	const PROD_MULTIPLIER = ns.getHacknetMultipliers().production;
	// maximum waiting time for collecting money for new node (default 30s)
	const WAITING_TIME = ns.args[0] || 30;

	while (true) {
		const ratios = [];
		let hacknetProduction = 0;
		// loop through all nodes
		for (let index = 0; index < ns.hacknet.numNodes(); index++) { // get current node stats const { level, ram, cores, production } = ns.hacknet.getNodeStats(index); hacknetProduction += production; // get upgrades cost const levelUpgradeCost = ns.hacknet.getLevelUpgradeCost(index); const ramUpgradeCost = ns.hacknet.getRamUpgradeCost(index); const coreUpgradeCost = ns.hacknet.getCoreUpgradeCost(index); // get prod. growth / cost ratios const levelUpgradeRatio = ((getProd(level + 1, ram, cores) * PROD_MULTIPLIER) - production) / levelUpgradeCost; const ramUpgradeRatio = ((getProd(level, ram * 2, cores) * PROD_MULTIPLIER) - production) / ramUpgradeCost; const coreUpgradeRatio = ((getProd(level, ram, cores + 1) * PROD_MULTIPLIER) - production) / coreUpgradeCost; // possible upgrades of current node const currentNodeUpgrades = [ {ratio: levelUpgradeRatio, cost: levelUpgradeCost, nodeIndex: index, upgrade: "level"}, {ratio: ramUpgradeRatio, cost: ramUpgradeCost, nodeIndex: index, upgrade: "ram"}, {ratio: coreUpgradeRatio, cost: coreUpgradeCost, nodeIndex: index, upgrade: "core"} ]; // push current node upgrades to all upgrades ratios.push(...currentNodeUpgrades); } // get the most profitable upgrade const { cost, nodeIndex, upgrade } = ratios.sort((a, b) => b.ratio - a.ratio)[0];
		// wait until you have the money for upgrade
		while (getMoney() < cost) { await ns.sleep(1); } // execute upgrade switch (upgrade) { case "level": await ns.hacknet.upgradeLevel(nodeIndex); break; case "ram": await ns.hacknet.upgradeRam(nodeIndex); break; case "core": await ns.hacknet.upgradeCore(nodeIndex); break; default: continue; } // check if you can purchase new node const purchaseNodeCost = ns.hacknet.getPurchaseNodeCost(); const missingMoneyForNewNode = purchaseNodeCost - getMoney(); if (missingMoneyForNewNode > 0 && missingMoneyForNewNode < hacknetProduction * WAITING_TIME) {
			// if you need to wait for purchase node less than WAITING_TIME (in seconds) program waits to collect money
			while (getMoney() < purchaseNodeCost) {
				await ns.sleep(1);
			}
			ns.hacknet.purchaseNode();
		}

		// sleep 1ms to prevent crash because of infinite loop
		await ns.sleep(1);
	}
}

You can customize the time of waiting for purchase node (by default 30s) by passing an additional script argument. For example:

run hacknet-bot.js 120

That's everything we are sharing today for this Bitburner guide. This guide was originally created and written by syw1. In case we fail to update this guide, you can find the latest update by following this link.

If you believe that any of the content on this site violates your rights, including your intellectual property rights, please contact us immediately using our contact form.
Bitburner Tags:Guides

Post navigation

Previous Post: Thea 2: The Shattering – All Theopedia Terrain List
Next Post: Escape Simulator – Wallace in Yonderland Walkthrough

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Disclaimer

All content cited is derived from their respective sources. If you think we have used your content without permission, make sure to reach us and we will be taking it seriously.

Recent Posts

  • Call of the Abyss – All Artifacts and Their Properties
  • DUSK – Untouchable Achievement Guide
  • Police Stories – Mission Equipment Unlock Guide
  • The Artful Escape 100% Achievement Guide
  • Fights in Tight Spaces – How to Get High Scores in Daily Play Mode
  • About Us
  • Contact Us
  • Privacy Policy
  • Terms of Service

Copyright © 2023 Riot Bits.

We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.OkPrivacy policy