Dies ist ein kurzes All-in-One-Gang-Skript mit über 500 Zeilen, das ich zusammengeschustert habe. Liste der Hauptmerkmale:
- Geringer Speicherbedarf (nur 3 GB)
- SINGLE enthaltenes Skript (keine anderen Skripte erforderlich)
- Behandelt alle Gang-Aktionen (kommentieren Sie mich für weitere Funktionen)
- Schönes HUD für den Status von Gang-Sachen auf einen Blick
- Verwaltet Rekrutierung, Aufstieg, Aufgabenpflichten
- Automatisierter Geräteeinkauf mit Budget
- Behandelt Territorialkriege mit benutzerdefinierten Parametern
- Hochgradig anpassbar an Ihren eigenen Spielstil
Wie der Code funktioniert, sollte über die Kommentare selbstverständlich sein. Ich habe auch DEBUG-Codezeilen gelassen, damit Sie lernen und sehen können, was passiert (Sie können sie gerne löschen). Kommentare sind willkommen!
Einleitung
Das neueste Update verwendet externen Skript-Ausführungscode (angepasst vom hervorragenden Alain Bryden), um einen kleinen Speicherbedarf von 3.0 GB zu erhalten – jetzt können Sie Gang Ops schnell ausführen!
* Jedes Gang-Mitglied erhält automatisch die Namen 0 bis 11 (zur einfacheren Auflistung, Referenz und Programmierung, obwohl Sie benutzerdefinierte Namen programmieren könnten, wenn Sie möchten).
* Ich habe auch versucht, das Konzept von zu verwenden
'Ränge'
um zu verwalten, wann Mitglieder aufsteigen sollten – es verfolgt sie über ihre Statistikstufe (auch nach Berücksichtigung der Ausrüstung).
* Die Kriegsführung wird automatisch verwaltet und stoppt auch automatisch, wenn das Territorium 100 % erreicht (unterschätzen Sie die Kriegsführung nicht, da die Gewinne ziemlich exponentiell für den Cashflow sind).
*
Es gibt viele Theorien und Diskussionen darüber, wie man Gangmitglieder aufsteigen, ausrüsten und verwalten kann
. Durch das Durchsehen des Codes hoffe ich, dass ich Ihnen genügend Flexibilität gegeben habe, um Ihren eigenen Ganging-Stil zu ändern und zu konfigurieren.
Das Protokollfenster wird als kleines HUD verwendet, um zu sehen, was passiert. Dies verhindert, dass Sie ständig durch die Gang-Menüs scrollen müssen, und Sie können es minimieren und das Protokoll-HUD in die Ecke des Bildschirms verschieben, wenn es nicht verwendet wird.
Ich persönlich behalte gerne das minimierte Protokollfenster, das die Gesundheitsstatuszeile abdeckt, wie unten gezeigt (da es nicht wichtig ist, spielt der Gesundheitszustand für die Heilung keine Rolle, da die Krankenhausgebühren linear steigen) und erweitere es, wann immer du nach der Bande sehen musst.
Kurz das HUD zeigt:
1. Jeder
Mitgliedsname
und welche
aktuelle Aufgabe
sie sind damit beschäftigt
2.
Mitgliedsstatistik
für 💪 Stärke, 🦴 Verteidigung, 👀 Geschicklichkeit, 🦶 Beweglichkeit, 🧠Aufstiegsrang
3. #
Zeiten geloopt
, 👜
Zeug Einstellung kaufen
, 👜$
Für Ausrüstung ausgegebenes Geld
, 💰
Aktuelles Geld
4. 💰
Minimale Geldeinstellung
, 🩸
Respekt besessen
, 🔥
Fahndungslevel
5. W
Strafprozent
, Wan/Erwiderung:
Gesucht/Respekt-Verhältnis
6. 🗡🗡
In Kriegsführung verwickelt?
✊🗡
Mitglieder im Krieg
, 🥥
Gebiet in % besessen + Geschichte
Code Teil 1: Einstellungen
// GANG V5 – Benötigt 3 GB RAM von Troff//Hinweis: Dies ist ein NON-HACK (dh Kampfgang)-Gang-Skript.
//Version 5 – automatisierte Handhabung von Konfigurationsdateien hinzugefügt (kein manuelles Zeug mehr!)
// Kleinere Verbesserungen vorgenommen, dazu gehören besseres Kriegsmanagement und auch
// ausgenommen den Kauf von Nicht-Kampfausrüstung, um etwas Geld zu sparen.
// Sie können die mit „DEBUG“ gekennzeichneten Zeilen einschalten, um ein weiteres Verständnis zu erhalten, oder
// zur Fehlersuche. Fühlen Sie sich frei, sie zu löschen (da sie nicht erforderlich sind)
/** @param {NS} ns **/
asynchrone Funktion exportieren main (ns) {
// =============================================
// EINSTELLUNGEN STARTEN (nach Bedarf ändern)
var lenCom = 21; //Textlänge der angezeigten Aufgabe des Gangmitglieds
lass buyStuff = 1; //Können Gangmitglieder Ausrüstung kaufen? 1=Ja, 0=Nein
let minCash = 50111222; //Mindestbargeld zu behalten (Bandenausrüstung ist teuer)
// minCash lassen = 52333111222; //Mindestbargeld (25/50B für Aktienmarkt-API)
// minCash lassen = 150333111222; //Min Cash (150B um ein Unternehmen zu gründen)
lassen Sie maxrank = 7; // Maximales Ranglevel für jedes Gangmitglied
lass Equirank = 2; // Rang, bei dem Mitglieder Ausrüstung kaufen können (Standard: 2)
let defaulttask = „Handel mit illegalen Waffen“; //Standardaufgabe, wenn keine Kriterien erfüllt sind
let sleepdelay = 16000; // Pause in Millisekunden zwischen jeder Schleife
// Kriegsteam (z. B. die ersten 6) stoppen automatisch, sobald wir 100 % Territorium erreicht haben
let warguys = 6; // Anzahl der Gangmitglieder, die sich an Territorialkriegen beteiligen
Let warchance = 0.97; // Minimale Gewinnchance, bevor wir mit Banden in den Krieg ziehen
// ### Aufstiegsstufeneinstellungen (bei Bedarf anpassen) ###
// Informieren Sie sich über den Gang-Level-Fortschritt. Sie sollten einen sauberen Lauf und eine Notiz machen
// Ihre eigenen Regeln/Stufen usw. - wir verwenden Rangnummern, um die Aufstiegsstufe zu verfolgen,
// zB 4=934 Statistiken, 5=56k. Fügen Sie bei Bedarf weitere ein, müssen Sie jedoch etwas Code anpassen
aufsteigen lassen = wahr; // überprüfen wir Aufstiege?
lass rnk1 = 98; // Rang 1 (ergibt einen x2-Multiplikator)
sei rnk2 = 274; // Rang 2 (ergibt einen x4-Multiplikator, +0.25-Rate)
sei rnk3 = 550; // Rang 3 (gibt x6 Multiplikator)
sei rnk4 = 934; // Rang 4 (x8 Multiplikator)
lass rnk5 = 56000; // Rang 5 (19-facher Multiplikator mit Mods)
lass rnk6 = 145111; // Rang 6 (36-facher Multiplikator mit Mods)
lassen Sie rnk7 = 380111; // Rang 7 (x80-82 Multiplikator mit Mods)
// lassen Sie rnk8 = 1256111; // Rang 8 (ungefähr 1 Milliarde $/zweites Einkommen)
//TO DO in v6 – Rang 8 und höher automatisieren, um höheren Levels gerecht zu werden
// Kriterien für den Beginn der Vigilante-Arbeit auf ein niedrigeres Wanted-Level
sei minVResp = 1; // Minimaler Respekt, um Bürgerwehrarbeit zu leisten
lass minVPen = 10; // Wenn die Strafe darüber liegt, dann führe Vigi-Arbeit aus
lassen Sie minVWant = 5; // Wenn Wanted-Level darüber, dann Vigi ausführen
lassen Sie minVRank = rnk2; // Minimaler Mitglieder-Aufstiegsrang zu Vigi
// EINSTELLUNGEN ENDE
// =============================================
// DEFAULT VARIABLES setzen (nichts ändern)
Schleifen lassen = 0; // verfolgt Schleifen
Aufstiegszähler = 0 lassen; // Hilft zu verfolgen, wann Aufstiege überprüft werden müssen
// Standard-Aufstiegsränge der Mitglieder festlegen. Mitglieder werden mit 0, 1, 2 usw. bezeichnet
let ascmem = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, XNUMX];
lass lengthdump = 0; // Standard-Bandengröße aus cfg-Datei gelesen
let warfare = false; // Territorial Warfare auf false setzen
// Standard-Gang-Territorium festlegen (mehr Variablen erforderlich, da der Umsatz länger ist)
var gangt0 = 0; var gangt1 = 0; var gangt2 = 0; lass gangtx = 0;
lass ganginwar = 0; // Setze den Zähler für die Anzahl der Mitglieder im Territorialkrieg
// Protokolle deaktivieren
ns.disableLog("disableLog"); ns.disableLog("sleep"); ns.disableLog("exec");
ns.disableLog("getServerMoneyAvailable");ns.disableLog("gang.ascendMember");
ns.disableLog("gang.setMemberTask");ns.disableLog("gang.purchaseEquipment");
ns.disableLog("gang.recruitMember");ns.disableLog("gang.setTerritoryWarfare");
// Protokollfenster öffnen und Start des Skripts in Protokollen anzeigen
ns.tail();
ns.print(“🔥 GANG SCRIPT START 🔥”);
// Versuch, die Ränge der aktuellen Gangmitglieder aus der Textkonfigurationsdatei zu lesen
//ns.print(“Beginnt mit dem Lesen der Gang-TXT-Datei…“); // DEBUG
if ( ns.fileExists(“/Temp/gang-cfg.txt“, „home“) ){
ns.print ("INFO ## Gang txt-Datei EXISTIERT ##")
let listnames = [];
var datadump = JSON.parse(ns.read(“/Temp/gang-cfg.txt“));
if (datadump.length > 0) {
lengthdump = datadump.length; // Wert zur späteren Überprüfung übergeben
for (var ij = 0; ij <datadump.length; ij++) {
listnames[ij] = datadump[ij].name;
ascmem[ij] = datadump[ij].ascmem;
ns.print(“N:“, listnames[ij], „Asc:“, ascmem[ij])
}
}
}
// Wenn die Anzahl der Gangmitglieder zu gering ist, müssen wir die Konfigurationsdatei zurücksetzen
// (Dies setzt voraus, dass Sie bei späteren Starts mehr als 3 Leute haben werden)
// Sobald du mit mehr als 3 Leuten am Laufen bist, wird dies ignoriert
// anschließende Stopps und Neustarts dieses Skripts.
if (Längenauszug < 4) {
const resetconfig = warte auf resetGangFile(ns);
//ns.sleep(100); // Sicherheitshalber beim Schreiben der Datei etwas verzögern
ns.print („Gang-Datei zurücksetzen: “, resetconfig);
// Laden Sie währenddessen hier im Programm die Reset-Variablen in den Speicher
ascmem = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,XNUMX];
}
// ##################################
// MAIN WHILE LOOP STARTEN
während (wahr) {
// Ändern Sie die Größe des Protokollfensters auf die Breite der roten Punkte, um es perfekt anzupassen
ns.print(” “); // Leerzeile zum Trennen von Schleifen
ns.print("🔴🔴🔴🔴🔴🔴🔴 GANG 🔴🔴🔴🔴🔴🔴🔴");
// Erhalte Gang-Informationen, Bargeld und Ausrüstungsnamen
let myGang = await runCom1(ns, 'ns.gang.getGangInformation()', 'getGangInfo');
let curCash=await runCom1(ns, 'ns.getServerMoneyAvailable(ns.args[0])','getSerMon', [„home“]);
let allEquipment = await runCom1(ns, 'ns.gang.getEquipmentNames()', 'getEqName');
var curResp = ns.nFormat(myGang.respect, „0,0.a“);
var curResp2 = myGang.respect;
//ns.print(“Respekt: ” + curResp2); // DEBUG
// Rekrutiere wenn möglich Mitglieder
var canrecruit = await runCom1(ns, 'ns.gang.canRecruitMember()', 'canRecr');
//ns.print(“INFO Kann rekrutieren: ” + canrecruit); // DEBUG
while (canrecruit == true) {
for (es sei ij = 0; ij < 30; ++ij) {
var canrecruit=await runCom1(ns,'ns.gang.canRecruitMember()','canRecr');
//ns.print(“INFO Kann rekrutieren: ” + canrecruit); // DEBUG
if (canrecruit == wahr) {
ns.print(“🔴EINGESTELLT: ” + ij + “🔴”);
}
}
}
// Namen von Gangmitgliedern abrufen
Mitglieder lassen = warten runCom1(ns, 'ns.gang.getMemberNames()','getMemNam');
// Holen Sie sich Territory % und erhalten Sie das Level "Gesucht vor Respekt".
var ganginfo = await runCom1(ns,'ns.gang.getGangInformation()','getGangInfo');
gangtx = ganginfo.gebiet;
var curResp = ganginfo.respekt;
var curWant = ganginfo.wantedLevel;
var curPena2b = ganginfo.wantedLevel/ganginfo.respect * 100;
//ns.print(“🔴Want/Respect: ” + ns.nFormat(curPena2b, “0,0.00”) +“ %“ );
// //Prüfung auf Gangmitglieder im Gebietskrieg zurücksetzen & Kriegszustand zurücksetzen
Ganginwar = 0;
Kriegsführung = falsch;
Code Teil 2: Hauptschleife
for (let ij = 0; ij <members.length; ++ij) {
var Mitglied = Mitglieder[ij];
var memberInfo = await runCom1(ns, 'ns.gang.getMemberInformation(ns.args[0])','getMemInf', [member]);// @@@@@@@@ Check Equipment START @@@@ @@@@@@@
var cashSpen = 0; // Verfolgen Sie das ausgegebene Geld in einer Schleife
//ns.print(“👜BUYSTUFF: ” + buyStuff); // DEBUG
//ns.print(“*mitglieder.länge: ” + mitglieder.länge); // DEBUG
if (buyStuff==1) {
for (var j = 0; j <allEquipment.length; ++j) {
var equipment = allEquipment[j];
//var eqdebug=equipment.toString(); ns.print (eqdebug); //DEBUGGEN
//ns.print("Chk",equipment,memberInfo.upgrades.indexOf(equipment));
//Oben gibt AWM Sniper Rifle 12, Graphene Armor -1 usw. zurück //DEBUG
//ns.print("Überprüfung: ", Ausrüstung); // DEBUG
//Falls ein Typ mit einem bestimmten Rang & kein NICHT-HACKENDES Zeug hat, kauf es
if ( (memberInfo.upgrades.indexOf(equipment) == -1) && (memberInfo.augmentations.indexOf(equipment) == -1) && ascmem[ij] >= equiprank && equipment != “NUKE Rootkit” && equipment ! = “Soulstealer Rootkit” && Ausrüstung != “Demon Rootkit” && Ausrüstung != “Hmap Node” && Ausrüstung != “Jack the Ripper” && Ausrüstung != “DataJack” && Ausrüstung != “Neuralstimulator” && Ausrüstung != “BitWire ") {
var cost = await runCom1(ns, 'ns.gang.getEquipmentCost(ns.args[0])','getEqCost', [equipment]);
if ( (Kosten + MinCash) < CurCash ) {
var gangbuy = await runCom1(ns, 'ns.gang.purchaseEquipment(ns.args[0], ns.args[1])','getEqCost', [member, equipment]);
//ns.print(“gangbuy: ” + gangbuy); // DEBUG
if (gangbuy == wahr) {
cashSpen = cashSpen + Kosten;
ns.print(“👜: ” + Ausrüstung + ” @” + Mitglied);
curCash=await runCom1(ns, 'ns.getServerMoneyAvailable(ns.args[0])','getSerMon', [„home“]);
}
}
}
}
}
// @@@@@@@@@@ Ausrüstung prüfen ENDE @@@@@@@@@@@
// Member-Variablen abrufen
var memstr = memberInfo.str; // Stärke
var memdef = memberInfo.def; // Verteidigung
var memdex = memberInfo.dex; // Geschicklichkeit
var memagi = memberInfo.agi; // Agilität
//################################################ ##############
//ASSIGN Tasks (Reihe von „if else“-Anweisungen, nach Belieben bearbeiten)
//█Gesuchter Status: Wenn zu hoch, dann gehen Sie zur Bürgerwehr, um ihn zu senken
if (curResp>minVResp && curPena2b>minVPen && curWant>minVWant && memstr>minVRank) {
var gangtask = „Bürgerwehr“;
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
ns.print(“📱”+ij +”. r0🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//█Rang 1: Wenn der Typ nicht auf Rang 2 ist, trainiere den Kampf, bis alle Statistiken auf Rang 2 sind
sonst wenn (memstr
var gangtask = „Zugkampf“;
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
ns.print(“📱”+ij +”. r1🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//█Rang 3: Wenn auf den Rängen 1-4, trainiere den Kampf bis Kampfwerte auf Rang 4
sonst wenn ( (memstr
var gangtask = „Zugkampf“;
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
ns.print(“📱”+ij +”. r2🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//BEISPIEL für weitere Kriterien, die einfach per if's eingefügt werden können
//█Rang5: Trainiere den Kampf, bis die Statistiken auf Rang 6 und die Mitglieder 3-11 sind
/* else if ( (memstr 5 && Mitglieder.Länge < 5 && maxrank == 5 ){
var gangtask = „Zugkampf“;
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
ns.print(ij +“. r3🚶:“ + member + „ >“ + gangtask.substring(0,lenCom) );
} */
//█Terrorismus: Tun, bis der Respekt 10 Millionen erreicht (für den Aufstieg)
sonst wenn (curResp2 < 10111222) {
var gangtask = „Terrorismus“;
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
ns.print(“📱”+ij +”. r3🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//█TERRORITY WARFARE: Aufgabe stellen, wenn Typ über Rang 2 ist, Mitglieder mindestens 9,
// ist Teil des Kriegsteams (Warguys) und Territorium < 100 % erobert (Gangtx)
sonst if(ascmem[ij]>2 && mitglieder.länge>9 && (ij>=0 && ij
Ganginwar = Ganginwar + 1; // Inkrementzähler für Gangs in der Kriegsführung
var gangtask = „Territory Warfare“;
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
//ns.print(“DEBUG Territory Gangtx = „+ gangtx ); // DEBUG
//ns.print("DEBUG ganginwar = "+ ganginwar); // DEBUG
ns.print(“📱”+ij +”. 🚶:”+member+” > “+gangtask.substring(0,lenCom) );
// Kriegschancen gegen Clans prüfen
const dowewar=checkgangwar warten (ns, warchance);//Warcheck-Funktion
if (dowewar == wahr) {
Kriegsführung = wahr;
await runCom1(ns, 'ns.gang.setTerritoryWarfare(ns.args[0])','setWar', [true]);
//ns.print(“WARN Kriegsstatus geändert: “+ warfare ); //DEBUGGEN
} Else {
await runCom1(ns, 'ns.gang.setTerritoryWarfare(ns.args[0])','setWar', [false]);
}
}
//█Handel/Illegale Waffen: (Geldverdienen hier!)
//Wenn wir genug Respekt haben, machen wir eine Aufgabe zum Sammeln von Geld
sonst wenn (curResp2 > 10111222) {
var gangtask = „Handel mit illegalen Waffen“;
//var gangtask = „Menschenhandel“; // Ändern Sie dies, falls gewünscht
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
ns.print(“📱”+ij +”. r4🚶:”+member+” > “+gangtask.substring(0,lenCom) );
}
//█DEFAULT: Wenn alles andere fehlschlägt, setze den Typen auf die Standardaufgabe
else {
var gangtask = Standardaufgabe; // Standardaufgabe
await runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [member, gangtask]);
ns.print(“📱”+ij +”. 🚶:”+member+” > “+gangtask.substring(0,lenCom) );
}
// Statistiken und Rang (Gehirnsymbol) des Mitglieds drucken
// Festgelegte Länge von 5 erscheint schöner, da führende Nullen den Vergleich erleichtern
var mstr = ns.nFormat (memstr, „00000“); // 💪 Stärke (Muskelsymbol)
var mdef = ns.nFormat(memdef, „00000“); // 🦴 Verteidigung (Knochen-Emoji)
var mdex = ns.nFormat (memdex, „00000“); // 👀 Geschicklichkeit (Augen Emoji)
var magi = ns.nFormat(memagi, „00000“); // 🦶 Beweglichkeit (Fußsymbol)
ns.print(“ 💪“+mstr+“ 🦴“+mdef+“ 👀“+mdex+“ 🦶“+magi+“ 🧠“ +ascmem[ij]);
}
// ###### MAIN FOR LOOP END #####
Code Teil 3: Ascension + Misc
if (ascensionCounter != 50) { ascend = true } // Alle 50 Schleifen prüfen // Beachten Sie, dass wir jedes Mal die aktuellen Rankings (ascmem[ij]) prüfen müssen
//um nicht auf Duplikate in Regelsätzen zu stoßen
if (aufsteigen == wahr) {
for (let ij = 0; ij <members.length; ++ij) {
let Mitglied = Mitglieder[ij];
//// Mitgliedsstatistiken erneut abrufen
var memberInfo = await runCom1(ns, 'ns.gang.getMemberInformation(ns.args[0])','getMemInf', [member]);
var memstr = memberInfo.str; var memdef = memberInfo.def;
var memdex = memberInfo.dex; var memagi = memberInfo.agi;
/*
//█ Auf Rang 8 aufsteigen [BEISPIEL EINER benutzerdefinierten Aufstiegsregel]
if (memstr>=rnk8 && ascmem[ij]==7 && maxrank >= 8 ){
ns.gang.ascendMember(Mitglied);
ns.print(“🌟Rang 4>5, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 5; // Rang des Aufstiegsstatus auf 5 setzen
}
*/
//█ Auf Rang 7 aufsteigen
if (memstr>=rnk7 && ascmem[ij]==6 && maxrank >=7 ){
await runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [member]);
ns.print(“🌟Rang 6>7, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 7; // Rang des Aufstiegsstatus auf 5 setzen
}
//█ Auf Rang 6 aufsteigen
if (memstr>=rnk6 && ascmem[ij]==5 && maxrank >=6 ){
await runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [member]);
ns.print(“🌟Rang 5>6, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 6; // Rang des Aufstiegsstatus auf 4 setzen
//countrank2 = countrank2 + 1;
}
//█ Auf Rang 5 aufsteigen
if (memstr>=rnk5 && ascmem[ij]==4 && maxrank >=5 ){
await runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [member]);
ns.print(“🌟Rang 4>5, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 5; // Rang des Aufstiegsstatus auf 3 setzen
}
//█ Auf Rang 4 aufsteigen
else if (memstr>=rnk4 && ascmem[ij]==3 && maxrank >= 4 ){
await runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [member]);
ns.print(“🌟Rang 3>4, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 4; // Rang des Aufstiegsstatus auf 4 setzen
}
//█ Auf Rang 3 aufsteigen, um XP auf dem Weg zu Rang 4 zu erhöhen, ca. 25 Minuten
else if (memstr>=rnk3 && memagi>=rnk3 && ascmem[ij]==2){
await runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [member]);
ns.print(“🌟Rang 2>3, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 3; // Rang des Aufstiegsstatus auf 3 setzen
}
//█ Auf Rang 2 aufsteigen
else if(memstr>=rnk2 && memagi>=rnk2 && ascmem[ij]==1) {
await runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [member]);
ns.print(“🌟Rang 1>2, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 2; // Rang des Aufstiegsstatus auf 2 setzen
}
//█ Steige frühzeitig auf Rang 1 auf, um den XP-Gewinn zu „boosten“, ca. 25 Minuten
else if (memstr>=rnk1 && memagi>=rnk1 && ascmem[ij]==0){
await runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [member]);
ns.print(“🌟Rang 0>1, ” + Mitglied + ” aufgestiegen! 🌟”);
ascmem[ij] = 1; // Rang des Aufstiegsstatus auf 1 setzen
}
}
}
// @@@@@@@@@ ENDE ASCEND SECTION @@@@@@@@
Schleifen++; // Schleifenzähler erhöhen
// #### START Status in txt-Datei schreiben ####
var txtstring = „[“;
let members3 = wait runCom1(ns, 'ns.gang.getMemberNames()','getMemNam');
for (let ij = 0; ij < members3.length; ++ij) {
var Mitglied = Mitglieder3[ij];
var myGang2 = await runCom1(ns, 'ns.gang.getMemberInformation(ns.args[0])','getMemInf', [member]);
txtstring = txtstring + '{\”name\”:\”' + meineGang2.name + '\", ';
txtstring = txtstring + '\”ascmem\”:' + ascmem[ij] + '}';
if (ij!=members3.length-1) {txtstring = txtstring + ','}
}
txtstring = txtstring + ']';
var filewrite = waiting ns.write(“/Temp/gang-cfg.txt”, txtstring, “w”);
// #### END Status in txt-Datei schreiben ####
// STATUS ZEIGEN
var money = ns.nFormat(curCash, „0,0.0a“); //Geld in der Hand: 💰Cur
var minCash2 = ns.nFormat(minCash, „0,0.0a“); //Mindestbargeldstand: 💰Min
var getGang = await runCom1(ns, 'ns.gang.getGangInformation()', 'getGangInfo');
var curResp = ns.nFormat(getGang.respect, „0,0.0a“); // Respekt: 🩸Res
var curWant =ns.nFormat(getGang.wantedLevel, „0,0.0a“);//Wanted level: 🔥W
var curPena =ns.nFormat(myGang.wantedPenalty,”0.00a”);//Strafstufe: W
var curPenaRatio =getGang.wantedLevel/getGang.respect *100;//Penalty Ratio
var curPenaRatio2 = ns.nFormat( curPenaRatio , „0.00a“) ; //Schöneres Format
gangt2 = gangt1; gangt1 = gangt0; gangt0 = gangtx;//Gebietsverlauf hinzufügen
gangtx = getGang.territory; // Holen Sie sich den aktuellen Gebietsverlauf
gangt2 = ns.nFormat (gangt2, „0.00 %“); // In Prozent umwandeln
gangtx = ns.nFormat(gangtx, „0.00 %“); // In Prozent umwandeln
ns.print(“#: „+loops+“ 👜:“ +buyStuff+“ 👜:$“ +cashSpen+“ 💰Cur $“ +money);
ns.print(“💰Min: $” + minCash2 +” 🩸Res: ” +curResp + ” 🔥W: ” +curWant);
ns.print("W Pen:" +curPena +"%" +" Wan/Resp:" +curPenaRatio2 +"%");
ns.print(“🗡🗡:”+warfare+” ✊🗡:”+warguys +” 🥥: “+gangt2 +” > “+ gangtx);
ns.print("🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴");//Untere Fußzeile
auf Schlaf warten (sleepdelay);
//Überprüfen Sie, ob die Gang nur 3 Jungs ist+zu hoch eingestuft, dann setzen Sie die Konfigurationsdatei zurück
//Dies fängt einen Fehler ab, wenn das Gang-Skript aus irgendeinem Grund abstürzt/endet
if (members3.length < 4 && ascmem[0]>2 && ascmem[1]>2 && ascmem[2]>2) {
const resetconfig = warte auf resetGangFile(ns);
ns.print („Gang-Datei zurücksetzen: “, resetconfig);
ascmem=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,XNUMX];
}
}
// MAIN WHILE LOOP ENDE
// ##################################
}
Code Teil 4: Funktionen
Funktion Schlaf (ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}// Funktion: Kriegschancen gegen andere Gangs prüfen
Asynchrone Funktion exportieren checkgangwar(ns, winchance) {
var Gangergebnis = wahr; // Standardmäßig KÖNNEN wir Krieg führen
// Gangnamen als Referenz:
// Tetraden, das Syndikat, Sprecher für die Toten
// Die Schwarze Hand, Die Dunkle Armee, NiteSec
//const othergang = ns.gang.getOtherGangInformation(); // DEBUG
//ns.print(“Name : “+JSON.stringify(othergang['Tetraden']) ); //DEBUGGEN
//ns.print(“Power: “+JSON.stringify(othergang['Tetraden'].power) ); //DEBUGGEN
//ns.print(“Terro: “+JSON.stringify(othergang['Tetraden'].territory));//DEB
//ns.print(“Clash: „+ns.gang.getChanceToWinClash('Terads') ); //DEBUGGEN
// Erhalten Sie Chancen, Kriege für alle anderen Banden zu gewinnen:
var chantetr = await runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [„Tetraden“]);
var chansynd = await runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [„The Syndicate“]);
var chanspea = await runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [„Speakers for the Dead“]);
var chanblac = await runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [„Die Schwarze Hand“]);
var chandark = await runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [„Die dunkle Armee“]);
var channite = await runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [„NiteSec“]);
//ns.print(“Tetraden %: ” + ns.nFormat(chantetr, “0.00%”)); //DEBUGGEN
//ns.print(“Syndikat %: ” + ns.nFormat(chansynd, “0.00%”)); //DEBUGGEN
//ns.print(“Speakers %: ” + ns.nFormat(chanspea, “0.00%”)); //DEBUGGEN
//ns.print(“Black Hand%: ” + ns.nFormat(chanblac, “0.00%”)); //DEBUGGEN
//ns.print(“Dark Army %: ” + ns.nFormat(chandark, “0.00%”)); //DEBUGGEN
//ns.print(“NiteSec %: ” + ns.nFormat(channite, “0.00%”)); //DEBUGGEN
// Prüfen Sie, ob die Chancen für die Kriegsführung gut sind, wenn nicht, dann greifen Sie nicht an
if (chantetr < winchance) {gangresult = false; }
if (chansynd <winchance) {gangresult = false; }
if (chanspea < winchance) {gangresult = false; }
if (chanblac < winchance) {gangresult = false; }
if (chandark <winchance) { gangresult = false; }
if (channite <winchance) { gangresult = false; }
//ns.print("INFO GangResult : " + GangResult ); //DEBUGGEN
if (gangresult == true) { return true; }
if (gangresult == false) { return false; }
}
// Funktion: Gang-Datei zurücksetzen
// Der Inhalt der neuen Standarddatei gang-cfg.txt lautet wie folgt:
// [{“name”:”0″,”ascmem”:0},{“name”:”1″,”ascmem”:0},{“name”:”2″,”ascmem”:0}]
Funktion resetGangFile(ns) {
ns.print(“WARN Neue Gang-Konfigurationsdatei wird geschrieben…”);
const cfgScriptContent = „[{\“name\“:\“0\“, \“ascmem\“:0},{\“name\“:\“1\“, \“ascmem\“:0},{ \“name\“:\“2\“, \“ascmem\“:0}]“;
const cfgScript = „/Temp/gang-cfg.txt“;
ns.write(cfgScript, cfgScriptContent, „w“);
return true;
}
//============================================== ============================
// Externes SCRIPT RUNNER START (angepasst/gekürzt für ALAIN BRYDENs Skripte)
Asynchrone Funktion exportieren runCom1(ns, command, fileName, args = []) {
var Vorläufer = „gang5-“; // Könnte Gang-, Blade-, etc. sein
var Dateiname = „/Temp/“ + Vorläufer + Dateiname + „.txt“;
var Dateiname2 = Dateiname + „.js“;
//ns.print („fileName =“, fileName) // DEBUG
//ns.print (" fileName2 = ", fileName2) // DEBUG
// KOMPLEXES SCHRIFT
let script = `Export async function main(ns) {` +
`let r;try{r=JSON.stringify(\n` +
` ${Befehl}\n` +
`);}catch(e){r=”ERROR: “+(typeof e=='string'?e:e.message||JSON.stringify(e));}\n` +
`const f="${fileName}"; if(ns.read(f)!==r) await ns.write(f,r,'w') } `;
var oldContents = ns.read(fileName2);
while (oldContents != script) {
warte auf ns.write (Dateiname2, Skript, „w“);
// Warten, bis das Skript lesbar erscheint (kann beim Schreiben pingelig sein)
var oldContents = ns.read(fileName2);
}
//ns.print („args = “, args) // DEBUG
for (var ij = 0; ij < 5; ij++) { if (args[ij] == null) args[ij] = „0“;
//ns.print („args[“,ij“,] = „,args[ij]) // DEBUG
};
//Führe das Skript aus!
await ns.exec(fileName2,”home”,1,args[0],args[1],args[2],args[3]);
// warten ns.sleep (50);
// Wir 'versuchen', JSON-Fehler abzufangen (sie verschwinden nach 1-2 Schleifen)
const fileData = await ns.read (Dateiname);
versuche {
var fileData2 = JSON.parse(fileData);
} fangen (e) {
console.log('Die Zeichenkette kann nicht geparst werden.')
}
Dateidaten2 zurückgeben;
}
// Externes SCRIPT RUNNER END
//============================================== ============================
//Ende der Linie
Zusammenfassung
Ich werde dieses Skript im Laufe der Zeit aktualisieren. Ich habe bereits einige Kommentare erhalten, dass einige Dinge möglicherweise nicht optimal sind – fühlen Sie sich frei, den Code für Ihre eigenen Skripte und Funktionen zu kommentieren und zu kannibalisieren!
Prost und hoffe, es hilft dir (in irgendeiner Weise)!
Das ist alles, was wir heute dafür teilen Bitbrenner führen. Dieses Handbuch wurde ursprünglich erstellt und geschrieben von Trophäe. Falls wir dieses Handbuch nicht aktualisieren, finden Sie das neueste Update, indem Sie diesen folgen Link.