Bitburner: Automação para nós de hacknet

Automação completa para nós Hacknet que estão procurando a atualização mais lucrativa e escolhendo-a.

Como funciona

Algoritmo está procurando a proporção mais lucrativa.

Ratio = Crescimento da produção dividido por Custo de atualização
Crescimento da produção = Produção após atualização dividido por Produção atual

Eu recomendo você to pass bigger loop iteration time (por exemplo. 100 000) ou deixe o padrão para permitir que os nós de hacknet coletem mais dinheiro para que possam comparar mais atualizações em vez de atualizar constantemente o mais barato.

Uso

Passo a passo

  1. Abra o terminal
  2. Modelo “nano hacknet-bot.ns” para criar um arquivo
  3. Limpe o arquivo e cole o código abaixo lá
  4. Salve o arquivo
  5. Volte para o terminal
  6. Modelo “execute hacknet-bot.ns” para executar um script

Você pode definir um tempo de frequência de loop passando um argumento de script adicional
por exemplo. “execute hacknet-bot.ns 10000”

Frequência de loop padrão. is 60 000 ms = 1 min.

You can also copy the code from https://www.paste.org/121034.

Código

/** @param {NS} ns **/
export const main = async ns => {
	// helpers
	const getMoney = () => ns.getPlayer().dinheiro;
	const getProdução = (nível, RAM, núcleos) => (level * 1.5) * Math.pow(1.035, RAM - 1) * ((cores + 5) / 6);
 
	// loop interval passed as a script parameter, default interval is 60 000ms
	const interval = ns.args[0] || 60000;
 
	// main loop
	while (verdadeiro) {
		// loop through all hacknet nodes
		for (var index = 0; índice < aguarde ns.hacknet.numNodes(); índice++) { // your current money const money = getMoney(); // your production multiplier from installed augmentations const prodMultiplier = await ns.getHacknetMultipliers().production; // get current node stats const nodeStats = await ns.hacknet.getNodeStats(índice); const curRam = nodeStats.ram; const curLevel = nodeStats.level; const curCores = nodeStats.cores; const curProd = nodeStats.production; // get costs of upgrades const ramUpgradeCost = await ns.hacknet.getRamUpgradeCost(índice); const levelUpgradeCost = aguardar ns.hacknet.getLevelUpgradeCost(índice); const coreUpgradeCost = aguarde ns.hacknet.getCoreUpgradeCost(índice); // check upgrades profitability and if you have enough money // UPGRADE RATIO = production growth after upgrade / current production const prodGrowthAfterLevelUpgrade = (obterProdução(curLevel + 1, curRam, curCores) * prodMultiplier) - curProd; const levelUpgradeRatio = dinheiro >= aguardar nívelUpgradeCost 
				? prodGrowthAfterLevelUpgrade / await levelUpgradeCost
				: 0;
 
			const prodGrowthAfterRamUpgrade = (obterProdução(CurLevel, curRam * 2, curCores) * prodMultiplier) - curProd;
			const ramUpgradeRatio = dinheiro >= aguardar ramUpgradeCost
				? prodGrowthAfterRamUpgrade / await ramUpgradeCost
				: 0;
 
			const prodGrowthAfterCoresUpgrade = (obterProdução(CurLevel, curRam, curCores + 1) * prodMultiplier) - curProd;
			const coresUpgradeRatio = dinheiro >= aguardar coreUpgradeCost 
				? prodGrowthAfterCoresUpgrade / await coreUpgradeCost
				: 0;
 
			// check if you have enough money for any upgrade
			const ratios = [levelUpgradeRatio, ramUpgradeRatio, CoreUpgradeRatio];
			E se (proporções.todos(proporção => ratio === 0)) {
				Prosseguir;
			}
 
			// find the most profitability upgrade
			const mostProfitUpgrade = Math.max(...ratios);
			const mostProfitUpgradeIndex = ratios.findIndex(proporção => proporção === mostProfitUpgrade);
 
			// execute the most profitability upgrade
			switch (mostProfitUpgradeIndex) {
				case 0:
					aguarde ns.hacknet.upgradeLevel(índice, 1);
					pausa;	
				case 1:
					aguarde ns.hacknet.upgradeRam(índice, 1);
					pausa;	
				case 2:
					aguarde ns.hacknet.upgradeCore(índice, 1);
					pausa;
				padrão:
					Prosseguir;
			}
		}
 
		// check if you can buy new node machine
		if (obterDinheiro() > aguarde ns.hacknet.getPurchaseNodeCost()) {
			aguarde ns.hacknet.purchaseNode();
		}
		
		// sleep to prevent crash because of infinite loop
		await ns.sleep(intervalo);
	}
}

De syw1

Mais guias:

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*