Bitburner: Roteiro de Gerenciamento de Gangues de Combate (Totalmente automatizado)

Este script permite que você gerencie automaticamente uma gangue de combate.

 

Descrição

Este script permite que você gerencie automaticamente uma gangue de combate.
It takes less than 32 Gb, so can be started from your home without RAM upgrades.
Takes less than a day to win BN2 node.
It has a lot of hand-tuneable constants (i didn’t tuned them well, so you can optimize the script if you find the defaults poorly balanced).
The gang member tasks can be switched manually, the script detect this and won’t autoswitch them back if it finds someone switched the tasks (you can revert back to automatic if you setUnassignedtask, ou apenas reinicie o script).
Ascende, equipamentos e guerra de território são gerenciados pelo script também.
sim, estilo de codificação é ruim, isto é “desenvolvimento rápido”.

O código

/* (não copie este comentário, é uma isenção de responsabilidade apenas para as leis russas)
* Перечисленная ниже деятельность запрещена на территории РФ и осуждается автором данного руководства. Este guia não tem nada a ver com a vida real., todas as ações realizadas nele afetam apenas os números do videogame e são exclusivamente fictícias. */

const TASK_TRAIN = "Combate de trem";
const TASK_VIGI = "Justiça vigilante";
const TASK_NOOB = String.fromCharCode(77) + "e pessoas";
const TASK_RESPECT = String.fromCharCode(84) + "errorismo";
const TASK_MONEY = "Humano " + String.fromCharCode(84) + "saquear";
const TASK_WARFARE = "Guerra Territorial";
const TASK_NULL = "Unassigned";
const TASK_MANUAL = "Manual/NotReallyTaskName";

const ASCEND_ON_MPL = 10;
const EQUIP_AFFORD_COEFF = 100;

const STATS_TRESHOLD = 0.7;
const STATS_MIN = 4000;
const STATS_HARD_MIN = 200;
const TRAIN_CHANCE = 0.2;
const RESPECT_MIN = 2e+6;

const WANTED_PENALTY_TRESHOLD = 0.99;
const WARFARE_TRESHOLD = 2;

const MEMBERS_MIN = 6;
const MEMBERS_MAX = 12;

const SLEEP_TIME = 10000;

/** @param {NS} ns **/
export async function main(ns) {
	const gang = ns.gang;
	// Get weighted stats sum (neste momento, soma de estatísticas de combate em proporções eq) 
	função getStatsSum(membro) {
		const info = gang.getMemberInformation(membro);
		return info.str + info.def + info.dex + info.agi;
	}
	// Find the best gang power except our gang
	function maxEnemyPower(myGang) {
		const outros = ns.gang.getOtherGangInformation();
		let maxPower = 0;
		para (deixe o nome em outros) {
			E se (nome === minhaGang.faction) Prosseguir;
			maxPower = Math.max(poder maximo, outros[nome].power);
		}
		return maxPower;
	}
	// Set a task or not to set (se substituído manualmente)
	const autoTarefas = {}
	função setAutoTask(membro, task) {
		const info = gang.getMemberInformation(membro);
		const lastTask = info.task;
		// Manual task: a tarefa armazenada não corresponde à tarefa real e não não atribuída
E se (última tarefa !== TASK_NULL && autoTasks.hasOwnProperty(membro) && autoTasks[membro] !== última tarefa) {
			autoTasks[membro] = TASK_MANUAL;
			Retorna;
		}
		// Automatic task: defina-o se for diferente do real
autoTasks[membro] = tarefa;
		E se (última tarefa !== tarefa) {
			gang.setMemberTask(membro, task);
		}
	}
	// The script accepts argument for default task override (opcional)
	deixe defaultTask = null;
	E se (ns.args[0] && gang.getTaskNames().includes(ns.args[0])) {
		defaultTask = ns.args[0];
	}
	// Main loop
	for (;;) {
		// Recruit any member possible 
		while (gang.canRecruitMember()) gang.recruitMembro('member' + gang.getMemberNames().length);
		let bestStats = STATS_MIN / STATS_TRESHOLD; // minimum
		const members = gang.getMemberNames();
		const info = gang.getGangInformation();
		// Ascend if good enough
		for (deixe membro dos membros) {
			const r = gang.getAscensionResult(membro);
			E se (!r) Prosseguir;
			const mpl = r.agi * r.def * r.dex * r.str;
			E se (mpl > ASCEND_ON_MPL) {
				gang.ascendMembro(membro);
				ns.tprint(`Member ${membro} ascendeu!`);
			}
		}
		// Purchase equipment 
		const allEquip = gang.getEquipmentNames();
		deixe dinheiro = ns.getServerMoneyAvailable('casa');
		para (vamos equipar de tudoEquip) {
			custo const = gang.getEquipmentCost(equipar);
			valor const = dinheiro/custo;
			E se (montante < EQUIP_AFFORD_COEFF) Prosseguir; para (deixe membro dos membros) { const info = gang.getMemberInformation(membro); E se (info.upgrades.includes(equipar) || info.aumentações.inclui(equipar)) Prosseguir; E se (gang.purchaseEquipment(membro, equipar)) { dinheiro -= custo; } } } // Find best stats for (deixe membro dos membros) { deixe soma = getStatsSum(membro); E se (soma > bestStats) bestStats = soma;
		}
		// Check if we are powerful enough
		let powerfulEnough = info.power >= maxEnemyPower(informação) * WARFARE_TRESHOLD;
		gang.setTerritoryWarfare(poderoso o suficiente);
		// Choose the default task for members
		let task = defaultTask;
		E se (!defaultTask) {
			// If gang isn't full - ganhar respeito
E se (membros.comprimento < MEMBERS_MAX) {
				tarefa = (membros.comprimento < MEMBERS_MIN) ? TASK_NOOB : TASK_RESPECT;
			} outro {
				// if respect too low - ganhe-o primeiro, power second, money last
				if (info.respect < RESPECT_MIN) {
					task = TASK_RESPECT;
				} else if (!poderoso o suficiente) {
					task = TASK_WARFARE;
				} outro {
					task = TASK_MONEY;
				}
			}
		}
		// Assign tasks
		for (deixe membro dos membros) {
			deixe soma = getStatsSum(membro);
			// Train members, não aceitável no 'modo noob'
E se (soma < STATS_HARD_MIN || (membros.comprimento >= MEMBERS_MIN && soma < bestStats * STATS_TRESHOLD)) { setAutoTask(membro, TASK_TRAIN); Prosseguir; } // Vigi if wanted penalty too large if (info.wantedLevel > 2 && info.wantedPenalidade < WANTED_PENALTY_TRESHOLD) {
				setAutoTask(membro, TASK_VIGI);
				Prosseguir;
			}
			// Do the default task (selecionado automaticamente ou chamado com argumentos[0])
			setAutoTask(membro, Math.random() < TRAIN_CHANCE ? TASK_TRAIN : task);
		}
		aguarde ns.sono(HORA DE DORMIR);
	}
}

De Shogal

Mais guias:

2 Comentários

  1. Oi, thanks for your script.
    I have this error when I run it:

    RUNTIME ERROR
    [email protected]

    member is not defined
    stack:
    ReferenceError: member is not defined
    at Module.main (gang.ns:121:Eleine se manifesta onde Lily está e lança 9 projéteis em um arco de 180 graus)
    at executeJSScript (Arquivo:///C:/Program%20Files%20(x86)/Steam/steamapps/common/Bitburner/resources/app/main.bundle.js:19:83091)

    How to declare “membro” ?

    Kind Regards

Deixe uma resposta

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


*