Bitburner: Skript zum Kampfgruppenmanagement (Komplett automatisch)

Dieses Skript ermöglicht es Ihnen, eine Kampfbande automatisch zu verwalten.

 

Beschreibung

Dieses Skript ermöglicht es Ihnen, eine Kampfbande automatisch zu verwalten.
Es dauert weniger als 32 GB, kann also ohne RAM-Upgrades von zu Hause aus gestartet werden.
Es dauert weniger als einen Tag, um den BN2-Knoten zu gewinnen.
Es hat viele von Hand einstellbare Konstanten (Ich habe sie nicht gut abgestimmt, So können Sie das Skript optimieren, wenn Sie die Standardeinstellungen schlecht ausbalanciert finden).
Die Aufgaben der Gangmitglieder können manuell umgeschaltet werden, Das Skript erkennt dies und schaltet sie nicht automatisch zurück, wenn jemand die Aufgaben gewechselt hat (Sie können zur Automatik zurückkehren, wenn Sie dies einstellen “Nicht zugewiesen” Aufgabe, oder starte einfach das Skript neu).
Steigt auf, Ausrüstung und Territorialkrieg werden auch vom Skript verwaltet.
Jawohl, Codierungsstil ist schlecht, es ist “schnelle Entwicklung”.

Der Code

/* (kopiere diesen Kommentar nicht, es ist nur ein Haftungsausschluss für russische Gesetze)
* Die unten aufgeführten Aktivitäten sind auf dem Territorium der Russischen Föderation verboten und werden vom Autor dieses Handbuchs verurteilt. Diese Anleitung hat nichts mit dem wirklichen Leben zu tun., alle darin ausgeführten Aktionen wirken sich nur auf die Zahlen im Videospiel aus und sind ausschließlich fiktiv. */

const TASK_TRAIN = "Zugkampf";
const TASK_VIGI = "Selbstjustiz";
const TASK_NOOB = String.fromCharCode(77) + "und Leute";
const TASK_RESPECT = String.fromCharCode(84) + "Fehler";
const TASK_MONEY = "Menschlich " + String.fromCharCode(84) + "rafficking";
const TASK_WARFARE = "Territoriale Kriegsführung";
const TASK_NULL = "Nicht zugewiesen";
const TASK_MANUAL = "Manuell/NotReallyTaskName";

konstant ASCEND_ON_MPL = 10;
const EQUIP_AFFORD_COEFF = 100;

const STATS_TRESHOLD = 0.7;
const STATS_MIN = 4000;
Konstante 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 MITGLIEDER_MIN = 6;
const MITGLIEDER_MAX = 12;

const SLEEP_TIME = 10000;

/** @param {NS} ns **/
export async function main(ns) {
	const gang = ns.gang;
	// Erhalte gewichtete Statistiksumme (in diesem Moment, Summe der Kampfwerte in gleichen Anteilen) 
	Funktion getStatsSum(Mitglied) {
		const info = gang.getMemberInformation(Mitglied);
		zurück info.str + info.def + info.dex + info.agi;
	}
	// Find the best gang power except our gang
	function maxEnemyPower(meine Gang) {
		const other = ns.gang.getOtherGangInformation();
		sei maxPower = 0;
		Pro (lass andere benennen) {
			wenn (Name === myGang.faction) fortsetzen;
			maxPower = Math.max(maximale Kraft, Andere[Name].Energie);
		}
		maxPower zurückgeben;
	}
	// Eine Aufgabe setzen oder nicht setzen (wenn manuell überschrieben)
	const autoTasks = {}
	Funktion setAutoTask(Mitglied, Aufgabe) {
		const info = gang.getMemberInformation(Mitglied);
		const lastTask = info.task;
		// Manuelle Aufgabe: gespeicherte Aufgabe stimmt nicht mit echter Aufgabe überein und ist nicht nicht zugewiesen
wenn (letzte Aufgabe !== TASK_NULL && autoTasks.hasOwnProperty(Mitglied) && autoAufgaben[Mitglied] !== letzteAufgabe) {
			autoAufgaben[Mitglied] = AUFGABE_MANUAL;
			Rückkehr;
		}
		// Automatische Aufgabe: set it if differs from real one
		autoTasks[Mitglied] = Aufgabe;
		wenn (letzte Aufgabe !== Aufgabe) {
			gang.setMemberTask(Mitglied, Aufgabe);
		}
	}
	// Das Skript akzeptiert das Argument für die Überschreibung der Standardaufgabe (Optional)
	let defaultTask = null;
	wenn (ns.args[0] && gang.getTaskNames().enthält(ns.args[0])) {
		defaultTask = ns.args[0];
	}
	// Main loop
	for (;;) {
		// Recruit any member possible 
		while (gang.canRecruitMember()) gang.recruitMember('Mitglied' + gang.getMemberNames().Länge);
		let bestStats = STATS_MIN / STATS_TRESHOLD; // minimum
		const members = gang.getMemberNames();
		const info = gang.getGangInformation();
		// Ascend if good enough
		for (lass mitglied von mitgliedern) {
			const r = gang.getAscensionResult(Mitglied);
			wenn (!R) fortsetzen;
			const mpl = r.agi * r.def * r.dex * r.str;
			wenn (mpl > ASCEND_ON_MPL) {
				gang.ascendMember(Mitglied);
				ns.tprint(`Mitglied ${Mitglied} aufgestiegen!`);
			}
		}
		// Purchase equipment 
		const allEquip = gang.getEquipmentNames();
		Geld lassen = ns.getServerMoneyAvailable('Heimat');
		Pro (lass alles ausrüstenEquip) {
			const cost = gang.getEquipmentCost(ausrüsten);
			const Betrag = Geld/Kosten;
			wenn (Höhe < EQUIP_AFFORD_COEFF) fortsetzen; Pro (lass mitglied von mitgliedern) { const info = gang.getMemberInformation(Mitglied); wenn (info.upgrades.inklusive(ausrüsten) || info.augmentations.includes(ausrüsten)) fortsetzen; wenn (gang.kaufenEquipment(Mitglied, ausrüsten)) { Geld -= Kosten; } } } // Finde die besten Statistiken für (lass mitglied von mitgliedern) { let sum = getStatsSum(Mitglied); wenn (Summe > bestStats) besteStats = Summe;
		}
		// Check if we are powerful enough
		let powerfulEnough = info.power >= maxEnemyPower(die Info) * WARFARE_TRESHOLD;
		gang.setTerritoryWarfare(mächtig genug);
		// Choose the default task for members
		let task = defaultTask;
		wenn (!defaultTask) {
			// Wenn die Bande nicht voll ist - Respekt gewinnen
wenn (Mitglieder.Länge < MITGLIEDER_MAX) {
				Aufgabe = (Mitglieder.Länge < MITGLIEDER_MIN) ? TASK_NOOB : TASK_RESPECT;
			} anders {
				// wenn Respekt zu gering - gewinne es zuerst, Macht Sekunde, Geld zuletzt
wenn (info.respekt < RESPECT_MIN) {
					Aufgabe = TASK_RESPECT;
				} sonst wenn (!mächtig genug) {
					Aufgabe = TASK_WARFARE;
				} anders {
					Aufgabe = TASK_MONEY;
				}
			}
		}
		// Assign tasks
		for (lass mitglied von mitgliedern) {
			let sum = getStatsSum(Mitglied);
			// Mitglieder ausbilden, nicht akzeptabel im 'Noob-Modus'
wenn (Summe < STATS_HARD_MIN || (Mitglieder.Länge >= MITGLIEDER_MIN && Summe < besteStats * STATS_TRESHOLD)) { setAutoTask(Mitglied, TASK_TRAIN); fortsetzen; } // Vigi wenn gewollt Strafe zu hoch wenn (info.wantedLevel > 2 && info.gesuchtStrafe < WANTED_PENALTY_TRESHOLD) {
				setAutoTask(Mitglied, TASK_VIGI);
				fortsetzen;
			}
			// Erledige die Standardaufgabe (automatisch ausgewählt oder mit Argumenten aufgerufen[0])
			setAutoTask(Mitglied, Math.zufällig() < TRAIN_CHANCE ? TASK_TRAIN : Aufgabe);
		}
		warte auf ns.schlaf(SCHLAFENSZEIT);
	}
}

Von Shogal

Weitere Anleitungen:

2 Kommentare

  1. Hallo, danke für dein Skript.
    Ich habe diesen Fehler, wenn ich es ausführe:

    LAUFZEIT FEHLER
    [email protected]

    Mitglied ist nicht definiert
    Stapel:
    Referenzfehler: Mitglied ist nicht definiert
    bei Module.main (Gang.ns:121:16)
    bei executeJSScript (Datei:///C:/Programm Dateien (x86)/Steam/steamapps/common/Bitburner/resources/app/main.bundle.js:19:83091)

    Wie deklarieren “Mitglied” ?

    Mit freundlichen Grüße

  2. } // Vigi wenn gewollt Strafe zu hoch wenn (info.wantedLevel > 2 &&

    In dieser Zeile entfernen, um zu kommentieren, um zu beheben:
    “// Vigi falls gewollt Strafe zu hoch “

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*