Bitburner: Guión de gestión de bandas de combate (Completamente automatico)

Este script te permite administrar automáticamente una banda de combate..

 

Descripción

Este script te permite administrar automáticamente una banda de combate..
Ocupa menos de 32 Gb, por lo que se puede iniciar desde su casa sin actualizaciones de RAM.
Se tarda menos de un día en ganar el nodo BN2.
Tiene muchas constantes ajustables a mano. (no los sintonicé bien, para que pueda optimizar el script si encuentra que los valores predeterminados están mal equilibrados).
Las tareas de los miembros de la pandilla se pueden cambiar manualmente, el script detecta esto y no los cambiará automáticamente si encuentra que alguien cambió las tareas (puede volver a automático si configura “Sin asignar” tarea, o simplemente reinicie el script).
asciende, el equipo y la guerra territorial también son administrados por el guión.
sí, el estilo de codificación es malo, es “desarrollo rápido”.

El código

/* (no copiar este comentario, es un descargo de responsabilidad solo para las leyes rusas)
* Las actividades enumeradas a continuación están prohibidas en el territorio de la Federación Rusa y están condenadas por el autor de esta guía.. Esta guía no tiene nada que ver con la vida real., todas las acciones realizadas en él solo afectan a los números del videojuego y son puramente ficticias. */

const TASK_TRAIN = "Combate de trenes";
constante TAREA_VIGI = "Justicia vigilante";
const TASK_NOOB = String.fromCharCode(77) + "y personas";
const TASK_RESPECT = String.fromCharCode(84) + "errorismo";
constante TAREA_MONEY = "Humano " + String.fromCharCode(84) + "tráfico de personas";
constante TAREA_GUERRA = "Guerra territorial";
constante TAREA_NULL = "Sin asignar";
constante TAREA_MANUAL = "Manual/No es realmente el nombre de la tarea";

constante ASCEND_ON_MPL = 10;
constante EQUIP_AFFORD_COEFF = 100;

const STATS_TRESHOLD = 0.7;
constante ESTADÍSTICAS_MIN = 4000;
constante STATS_HARD_MIN = 200;
constante OPORTUNIDAD_ENTRENO = 0.2;
constante RESPECT_MIN = 2e+6;

const WANTED_PENALTY_TRESHOLD = 0.99;
const WARFARE_TRESHOLD = 2;

constante MIEMBROS_MIN = 6;
constante MIEMBROS_MAX = 12;

const SLEEP_TIME = 10000;

/** @parámetro {NS} ns **/
export async function main(ns) {
	const gang = ns.gang;
	// Obtener la suma de estadísticas ponderadas (en este momento, suma de estadísticas de combate en proporciones iguales) 
	función obtenerSumaEstadísticas(miembro) {
		const info = gang.getMemberInformation(miembro);
		volver info.str + info.def + info.dex + info.agi;
	}
	// Find the best gang power except our gang
	function maxEnemyPower(mi pandilla) {
		const otros = ns.gang.getOtherGangInformation();
		sea ​​maxPower = 0;
		por (dejar nombre en otros) {
			si (nombre === myGang.faction) Seguir;
			maxPower = Math.max(máximo poder, otros[nombre].energía);
		}
		volver maxPower;
	}
	// Establecer una tarea o no establecer (si se anula manualmente)
	const autoTareas = {}
	conjunto de funcionesAutoTarea(miembro, tarea) {
		const info = gang.getMemberInformation(miembro);
		const últimaTarea = info.tarea;
		// Tarea manual: stored task mismatches real task and not unassigned
		if (última tarea !== TAREA_NULO && autoTasks.hasOwnProperty(miembro) && tareas automáticas[miembro] !== última tarea) {
			tareas automáticas[miembro] = TAREA_MANUAL;
			regresar;
		}
		// Tarea automática: set it if differs from real one
		autoTasks[miembro] = tarea;
		si (última tarea !== tarea) {
			gang.setMemberTask(miembro, tarea);
		}
	}
	// El script acepta el argumento para la anulación de la tarea predeterminada (Opcional)
	let defaultTask = nulo;
	si (ns.args[0] && gang.getTaskNames().incluye(ns.args[0])) {
		tareapredeterminada = ns.args[0];
	}
	// Main loop
	for (;;) {
		// Recruit any member possible 
		while (gang.canRecruitMember()) gang.recruitMember('miembro' + gang.getMemberNames().longitud);
		deje bestStats = STATS_MIN / STATS_TRESHOLD; // minimum
		const members = gang.getMemberNames();
		const info = gang.getGangInformation();
		// Ascend if good enough
		for (dejar miembro de miembros) {
			const r = gang.getAscensionResult(miembro);
			si (!r) Seguir;
			const mpl = r.agi * r.def * r.dex * r.str;
			si (mpl > ASCEND_ON_MPL) {
				gang.ascendMember(miembro);
				ns.tprint(`Miembro ${miembro} ascendido!');
			}
		}
		// Purchase equipment 
		const allEquip = gang.getEquipmentNames();
		dejar dinero = ns.getServerMoneyAvailable('casa');
		por (dejar equipar de todoEquipar) {
			costo constante = gang.getEquipmentCost(equipar);
			cantidad constante = dinero/costo;
			si (Monto < EQUIP_AFFORD_COEFF) Seguir; por (dejar miembro de miembros) { const info = gang.getMemberInformation(miembro); si (info.actualizaciones.incluye(equipar) || info.aumentos.incluye(equipar)) Seguir; si (equipo de compra en grupo(miembro, equipar)) { dinero = costo; } } } // Encuentra las mejores estadísticas para (dejar miembro de miembros) { let suma = getStatsSum(miembro); si (suma > mejoresEstadísticas) mejoresEstadísticas = suma;
		}
		// Check if we are powerful enough
		let powerfulEnough = info.power >= maxEnemyPower(info) * GUERRA_TRESHOLD;
		gang.setTerritoryWarfare(poderosoSuficientemente);
		// Choose the default task for members
		let task = defaultTask;
		si (!tarea por defecto) {
			// Si la pandilla no está llena - gain respect
			if (miembros.longitud < MIEMBROS_MAX) {
				tarea = (miembros.longitud < MIEMBROS_MIN) ? TAREA_NOOB : TAREA_RESPETO;
			} demás {
				// si el respeto es demasiado bajo - ganalo primero, segundo poder, money last
				if (info.respeto < RESPECT_MIN) {
					tarea = TAREA_RESPETO;
				} más si (!poderosoSuficientemente) {
					tarea = TASK_WARFARE;
				} demás {
					tarea = TAREA_DINERO;
				}
			}
		}
		// Assign tasks
		for (dejar miembro de miembros) {
			let suma = getStatsSum(miembro);
			// Entrenar miembros, not acceptable in 'noob mode'
			if (suma < STATS_HARD_MIN || (miembros.longitud >= MIEMBROS_MIN && suma < mejoresEstadísticas * STATS_TRESHOLD)) { setAutoTask(miembro, TREN_TAREA); Seguir; } // Vigi si quería pena demasiado grande si (info.wantedLevel > 2 && info.wantedPenalty < WANTED_PENALTY_TRESHOLD) {
				setAutoTask(miembro, TAREA_VIGI);
				Seguir;
			}
			//Hacer la tarea por defecto (autoseleccionado o llamado con argumentos[0])
			setAutoTask(miembro, matemáticas.al azar() < OPORTUNIDAD DE TREN ? TREN_TAREA : tarea);
		}
		esperar ns dormir(HORA DE DORMIR);
	}
}

Por Shogal

Más guías:

2 Comentarios

  1. Hola, gracias por tu guion.
    tengo este error cuando lo ejecuto:

    ERROR DE TIEMPO DE EJECUCIÓN
    [email protected]

    miembro no está definido
    apilar:
    Error de referencia: miembro no está definido
    en Módulo.principal (gang.ns:121:dieciséis)
    en ejecutarJSScript (expediente:///C:/Programa Archivos (x86)/Steam/steamapps/common/Bitburner/resources/app/main.bundle.js:19:83091)

    como declarar “miembro” ?

    Saludos cordiales

  2. } // Vigi si quería pena demasiado grande si (info.wantedLevel > 2 &&

    En esta línea eliminar para comentar para arreglar:
    “// Vigi si quería pena demasiado grande “

Dejar una contestacion

Tu dirección de correo no será publicada.


*