Bitburner: Script de gestion des gangs de combat (Entièrement automatique)

Ce script permet de gérer automatiquement un gang de combat.

 

La description

Ce script permet de gérer automatiquement un gang de combat.
Il faut moins de 32 Go, peut donc être démarré depuis votre domicile sans mise à niveau de la RAM.
Prend moins d'une journée pour gagner le nœud BN2.
Il a beaucoup de constantes réglables à la main (je ne les ai pas bien réglés, vous pouvez donc optimiser le script si vous trouvez que les valeurs par défaut sont mal équilibrées).
Les tâches des membres du gang peuvent être commutées manuellement, le script détecte cela et ne les rebasculera pas automatiquement s'il trouve que quelqu'un a changé les tâches (vous pouvez revenir à automatique si vous définissez “Non attribué” tâche, ou simplement redémarrer le script).
Ascension, l'équipement et la guerre de territoire sont également gérés par le script.
Oui, le style de codage est mauvais, il est “développement rapide”.

Le code

/* (ne copiez pas ce commentaire, c'est un avertissement pour les lois russes seulement)
* Les activités énumérées ci-dessous sont interdites sur le territoire de la Fédération de Russie et sont condamnées par l'auteur de ce manuel. Ce guide n'a rien à voir avec la vraie vie., toutes les actions qui y sont effectuées n'affectent que les chiffres du jeu vidéo et sont exclusivement fictives. */

const TASK_TRAIN = "Combat de train";
const TASK_VIGI = "Justice Vigilante";
const TASK_NOOB = String.fromCharCode(77) + "et les gens";
const TASK_RESPECT = String.fromCharCode(84) + "l'erreur";
const TASK_MONEY = "Humain " + String.fromCharCode(84) + "la traite";
const TASK_WARFARE = "Guerre de territoire";
const TASK_NULL = "Non attribué";
const TASK_MANUAL = "Manuel/PasReallyTaskName";

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 {N.-É.} ns **/
export async function main(ns) {
	const gang = ns.gang;
	// Récupère la somme des statistiques pondérées (à ce moment là, somme des statistiques de combat dans des proportions équivalentes) 
	fonction getStatsSum(membre) {
		const info = gang.getMemberInformation(membre);
		retour info.str + info.def + info.dex + info.agi;
	}
	// Find the best gang power except our gang
	function maxEnemyPower(mon gang) {
		const autres = ns.gang.getOtherGangInformation();
		laissez maxPower = 0;
		pour (laisser le nom dans les autres) {
			si (nom === monGang.faction) Continuez;
			maxPower = Math.max(maximum d'énergie, autres[Nom].Puissance);
		}
		retour maxPower;
	}
	// Définir une tâche ou ne pas définir (si outrepassé manuellement)
	const autoTâches = {}
	ensemble de fonctions AutoTask(membre, tâche) {
		const info = gang.getMemberInformation(membre);
		const lastTask = info.task;
		// Tâche manuelle: la tâche stockée ne correspond pas à la tâche réelle et n'est pas non attribuée
si (dernièreTâche !== TASK_NULL && autoTasks.hasOwnProperty(membre) && Tâches automatiques[membre] !== dernière tâche) {
			Tâches automatiques[membre] = TASK_MANUAL;
			revenir;
		}
		// Tâche automatique: réglez-le s'il diffère du vrai
Tâches automatiques[membre] = tâche;
		si (dernièreTâche !== tâche) {
			gang.setMemberTask(membre, tâche);
		}
	}
	// Le script accepte l'argument pour le remplacement de la tâche par défaut (optionnel)
	laisser defaultTask = null;
	si (ns.args[0] && gang.getTaskNames().comprend(ns.args[0])) {
		tâche par défaut = ns.args[0];
	}
	// Main loop
	for (;;) {
		// Recruit any member possible 
		while (gang.canRecruitMembre()) gang.recruterMembre('membre' + gang.getMemberNames().longueur);
		laissez bestStats = STATS_MIN / STATS_TRESHOLD; // minimum
		const members = gang.getMemberNames();
		const info = gang.getGangInformation();
		// Ascend if good enough
		for (laisser membre des membres) {
			const r = gang.getAscensionResult(membre);
			si (!r) Continuez;
			const mpl = r.agi * r.def * r.dex * r.str;
			si (mpl > ASCEND_ON_MPL) {
				gang.ascendMembre(membre);
				ns.tprint(`Membre ${membre} monté!`);
			}
		}
		// Purchase equipment 
		const allEquip = gang.getEquipmentNames();
		laisser l'argent = ns.getServerMoneyAvailable('domicile');
		pour (laisser équiper de tout équiper) {
			coût const = gang.getEquipmentCost(équiper);
			montant const = argent/coût;
			si (quantité < EQUIP_AFFORD_COEFF) Continuez; pour (laisser membre des membres) { const info = gang.getMemberInformation(membre); si (info.upgrades.include(équiper) || info.augmentations.includes(équiper)) Continuez; si (gang.achatÉquipement(membre, équiper)) { argent -= coût; } } } // Trouvez les meilleures statistiques pour (laisser membre des membres) { let sum = getStatsSum(membre); si (somme > bestStats) bestStats = somme;
		}
		// Check if we are powerful enough
		let powerfulEnough = info.power >= maxEnemyPower(Info) * WARFARE_TRESHOLD;
		gang.setTerritoireGuerre(assez puissant);
		// Choose the default task for members
		let task = defaultTask;
		si (!tâche par défaut) {
			// Si le gang n'est pas complet - gagner le respect
si (membres.longueur < MEMBERS_MAX) {
				tâche = (membres.longueur < MEMBRES_MIN) ? TASK_NOOB : TASK_RESPECT;
			} autre {
				// si respect trop bas - gagnez-le en premier, puissance seconde, l'argent en dernier
si (info.respect < RESPECT_MIN) {
					tâche = TASK_RESPECT;
				} sinon si (!assez puissant) {
					tâche = TASK_WARFARE;
				} autre {
					tâche = TASK_MONEY;
				}
			}
		}
		// Assign tasks
		for (laisser membre des membres) {
			let sum = getStatsSum(membre);
			// Former les membres, pas acceptable en 'mode noob'
si (somme < STATS_HARD_MIN || (membres.longueur >= MEMBRES_MIN && somme < bestStats * STATS_TRESHOLD)) { setAutoTask(membre, TASK_TRAIN); Continuez; } // Vigi si voulu pénalité trop grande si (info.vouluNiveau > 2 && info.wantedPénalité < WANTED_PENALTY_TRESHOLD) {
				setAutoTask(membre, TASK_VIGI);
				Continuez;
			}
			// Effectue la tâche par défaut (autosélectionné ou appelé avec des arguments[0])
			setAutoTask(membre, Math.random() < TRAIN_CHANCE ? TASK_TRAIN : tâche);
		}
		attendre ns.sommeil(TEMPS DE SOMMEIL);
	}
}

Par Shogal

Plus de guides:

2 Commentaires

  1. salut, merci pour votre scénario.
    j'ai cette erreur quand je le lance:

    ERREUR D'EXÉCUTION
    [email protected]

    le membre n'est pas défini
    empiler:
    Erreur de référence: le membre n'est pas défini
    sur Module.main (gang.ns:121:16)
    à exécuterJSScript (fichier:///C:/Programme Fichiers (x86)/Steam/steamapps/common/Bitburner/resources/app/main.bundle.js:19:83091)

    Comment déclarer “membre” ?

    Sincères amitiés

  2. } // Vigi si voulu pénalité trop grande si (info.vouluNiveau > 2 &&

    Sur cette ligne supprimer pour commenter pour corriger:
    “// Vigi si pénalité voulue trop importante “

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée.


*