Dit is een kort alles-in-één bendescript van 500+ regels dat ik in elkaar heb geknutseld. Lijst met belangrijkste kenmerken:
- Kleine geheugenvoetafdruk (slechts 3 GB)
- SINGLE script (geen andere scripts vereist)
- Verwerkt alle bende-acties (commentaar me voor meer functies)
- Leuke HUD voor een overzicht van de status van bendedingen
- Beheert werving, hemelvaart, taaktaken
- Geautomatiseerde aankoop van apparatuur met budget
- Behandelt territoriumoorlogvoering met aangepaste parameters
- Zeer aanpasbaar aan uw eigen speelstijl
Hoe de code werkt, moet duidelijk zijn via de opmerkingen. Ik heb ook in DEBUG-coderegels gelaten zodat je kunt leren en zien wat er gebeurt (voel je vrij om ze te verwijderen). Opmerkingen zijn welkom!
Introductie
De nieuwste update maakt gebruik van code voor het uitvoeren van externe scripts (aangepast van de uitstekende Alain Bryden) om een kleine geheugenvoetafdruk van 3.0 GB te behouden - nu kunt u Gang Ops snel gaan uitvoeren!
* Elk bendelid krijgt automatisch de naam 0 tot 11 (voor het gemak van opsommen, raadplegen en programmeren, hoewel u desgewenst aangepaste namen kunt programmeren).
* Ik heb ook geprobeerd het concept van . te gebruiken
'rangen'
om te beheren wanneer leden moeten stijgen - het volgt ze via hun statistiekenniveau (zelfs na factoring-apparatuur).
* Oorlogvoering wordt automatisch beheerd en stopt ook automatisch wanneer territorium 100% bereikt (onderschat oorlogvoering niet, want de winsten zijn behoorlijk exponentieel op de cashflow)
*
Er zijn veel theorieën en discussies over het opstijgen, uitrusten en beheren van bendeleden
. Door de code door te kijken, hoop ik dat ik genoeg flexibiliteit voor je heb gemaakt om je eigen stijl van gang-ing aan te passen en te configureren.
Het logvenster wordt gebruikt als een kleine HUD om te zien wat er gebeurt. Dit voorkomt dat je constant door de Gang-menu's moet scrollen, en je kunt het minimaliseren en de log-HUD naar de hoek van het scherm schuiven wanneer het niet in gebruik is.
Ik houd er persoonlijk van om het geminimaliseerde logvenster te houden dat de gezondheidsstatusregel bedekt, zoals hieronder weergegeven (omdat het niet belangrijk is, maakt het gezondheidsniveau niet uit voor genezing, aangezien de ziekenhuiskosten lineair worden geschaald) en breid het uit wanneer je de bende wilt controleren.
In het kort laat de HUD zien:
1. Elk
naam lid
en welke
huidige taak
ze zijn bezig met
2.
Lidstatistieken
voor 💪 Kracht, 🦴 Verdediging, 👀 Behendigheid, 🦶 Behendigheid, 🧠 Ascension-rang
3. #
Tijden in een lus
,
Instelling spullen kopen
, $
Contant geld uitgegeven aan apparatuur
,
Huidig geld
4.
Minimale geldinstelling
,
Respect eigendom
,
Gewenst niveau
5. w
Strafpercentage
, Wan/Resp.:
Gezocht/Respect verhouding
6.
Verwikkeld in oorlogsvoering?
✊🗡
Leden in oorlog
,
Territorium % eigendom + geschiedenis
Code Deel 1: Instellingen
// GANG V5 – Vereist 3 GB RAM van Troff//Opmerking: dit is een NON-HACK (dwz gevechtsbende) bendescript.
//Versie 5 - geautomatiseerde verwerking van configuratiebestanden toegevoegd (geen handmatige dingen meer!)
// Kleine verbeteringen aangebracht, waaronder een beter oorlogsbeheer en ook
// exclusief het kopen van niet-gevechtsuitrusting om wat geld te besparen.
//U kunt regels AAN zetten die zijn gemarkeerd met "DEBUG" om meer begrip te krijgen of
// voor het oplossen van problemen. Voel je vrij om ze te verwijderen (aangezien ze niet verplicht zijn)
/** @param {NS} ns **/
export asynchrone functie main(ns) {
// ============================================
// INSTELLINGEN START (wijzig indien nodig)
var lenCom = 21; // Tekstlengte van de weergegeven taak van het bendelid
laat kopenStuff = 1; //Kunnen bendeleden uitrusting kopen? 1=Ja, 0=Nee
laat minCash= 50111222; //Min geld om te houden (bende-apparatuur is duur)
// laat minCash= 52333111222; //Min cash (25/50B voor beurs-API)
// laat minCash= 150333111222; //Min cash (150 miljard om een bedrijf te starten)
laat maxrank = 7; // Maximaal te rangschikken niveau voor elk bendelid
laat equiprank = 2; // Rang waar leden uitrusting kunnen kopen (standaard: 2)
let defaulttask = “Traffick Illegal Arms”; //Standaardtaak als er aan geen criteria is voldaan
laat slaapvertraging = 16000; // Pauzeer in milliseconden tussen elke lus
// Oorlogsteam (bijv. de eerste 6) stopt automatisch zodra we 100% territorium hebben bereikt
laat warguys = 6; // Aantal bendeleden dat deelneemt aan territoriumoorlog
laat warchance = 0.97; // Minimale winkans voordat we oorlog beginnen met bendes
// ### Ascension level instellingen (pas naar wens aan) ###
// Lees meer over de voortgang op bendeniveau. Je moet een schone run doen en noteren
// je eigen regels/niveaus enz. - we gebruiken rangnummers om het ascensieniveau bij te houden,
// bijv. 4=934 statistieken, 5=56k. Voeg indien nodig meer toe, maar moet wat code aanpassen
laat stijgen = waar; // controleren we ascensies?
laat rnk1 = 98; // Rang 1 (geeft een x2 vermenigvuldiger)
laat rnk2 = 274; // Rang 2 (geeft een x4 vermenigvuldiger, +0.25 tarief)
laat rnk3 = 550; // Rang 3 (geeft x6 vermenigvuldiger)
laat rnk4 = 934; // Rang 4 (x8 vermenigvuldiger)
laat rnk5 = 56000; // Rang 5 (x19 vermenigvuldiger met mods)
laat rnk6 = 145111; // Rang 6 (x36 vermenigvuldiger met mods)
laat rnk7 = 380111; // Rang 7 (x80-82 vermenigvuldiger met mods)
// laat rnk8 = 1256111; // Rang 8 (ongeveer $1 miljard/seconde inkomen)
//TO DO in v6 - automatiseer rang 8 en hoger om hogere niveaus te accommoderen
// Criteria voor wanneer Vigilante-werk moet worden gestart om het Wanted-niveau te verlagen
laat minVResp = 1; // Minimaal respect om burgerwacht werk te doen
laat minVPen = 10; // Als Penalty daarboven komt, doe dan vigi work
laat minVWant = 5; // Indien gewenst niveau boven dit, doe dan vigi
laat minVRank = rnk2; // Minimum lidmaatschapsrang tot vigi
// INSTELLINGEN EINDE
// ============================================
// Stel STANDAARD VARIABELEN in (verander niets)
laat lussen = 0; // houdt loops bij
laat ascensionCounter = 0; // helpt bij te houden wanneer opstijgingen moeten worden gecontroleerd
// Stel standaard opklimmingsrangen van leden in. Leden worden genoemd 0, 1, 2, etc
laat 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];
laat lengtedump = 0; // Standaard bendegrootte gelezen uit cfg-bestand
laat oorlogvoering = vals; // Stel territoriumoorlogvoering in op false
// Stel het standaard bendegebied in (meer variabelen nodig omdat de omzet langer is)
var gangt0 = 0; var gangt1 = 0; var gangt2 = 0; laat gangtx = 0;
laat ganginwar = 0; // Teller instellen voor aantal leden in territoriumoorlogvoering
// Logboeken uitschakelen
ns.disableLog(“disableLog”); ns.disableLog ("slaap"); ns.disableLog(“exec”);
ns.disableLog(“getServerMoneyAvailable”);ns.disableLog(“gang.ascendMember”);
ns.disableLog(“gang.setMemberTask”);ns.disableLog(“gang.purchaseEquipment”);
ns.disableLog(“bende.recruitMember”);ns.disableLog(“bende.setTerritoryWarfare”);
// Open het logvenster en toon het begin van het script in de logs
ns.staart();
ns.print(“🔥 GANG SCRIPT START 🔥”);
// Poging om de huidige rangen van bendeleden te lezen uit het tekstconfiguratiebestand
//ns.print ("Begint bende txt-bestand te lezen ... "); // DEBUG
if (ns.fileExists(“/Temp/gang-cfg.txt”, “home”) ){
ns.print ("INFO ## Gang txt-bestand BESTAAT ##")
laat lijstnamen = [];
var datadump = JSON.parse(ns.read(“/Temp/gang-cfg.txt”));
if (datadump.length > 0) {
lengtedump = gegevensdump.lengte; // Waarde overboeken om later te controleren
for (var ij = 0; ij < datadump.length; ij++) {
lijstnamen[ij] = datadump[ij].naam;
ascmem[ij] = datadump[ij].ascmem;
ns.print(“N:“, lijstnamen[ij], ” Asc: “, ascmem[ij])
}
}
}
// Als het aantal bendeleden te laag is, moeten we het configuratiebestand opnieuw instellen
// (dit gaat ervan uit dat je bij volgende lanceringen meer dan 3 jongens hebt)
// Als je eenmaal aan de slag bent met meer dan 3 jongens, wordt dit genegeerd op
// daaropvolgende stops en herstarten van dit script.
if (lengthdump < 4) {
const resetconfig = wacht op resetGangFile(ns);
//ns.slaap(100); // Voor de zekerheid een beetje uitstellen bij het schrijven van een bestand
ns.print ("Bende-bestand resetten: ", resetconfig);
// Ondertussen hier in het programma, laad de reset-variabelen in het geheugen
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];
}
// #########################################
// HOOFD TERWIJL LOOP START
terwijl (waar) {
// Verklein het logvenster tot de breedte van de rode stippen voor een perfecte pasvorm
ns.print(” “); // Blanco regel om lussen te scheiden
ns.print(“🔴🔴🔴🔴🔴🔴🔴 GANG 🔴🔴🔴🔴🔴🔴🔴”);
// Krijg informatie over bendes, geld en uitrustingsnamen
laat myGang = wachten op runCom1(ns, 'ns.gang.getGangInformation()', 'getGangInfo');
laat curCash=wachten runCom1(ns, 'ns.getServerMoneyAvailable(ns.args[0])','getSerMon', [“home”]);
laat allEquipment = wachten runCom1(ns, 'ns.gang.getEquipmentNames()', 'getEqName');
var curResp = ns.nFormaat (mijnGang.respect, "0,0.a");
var curResp2 = mijnGang.respect;
//ns.print ("Respect:" + curResp2); // DEBUG
// Rekruteer leden indien mogelijk
var canrecruit = wacht runCom1(ns, 'ns.gang.canRecruitMember()', 'canRecr');
//ns.print(“INFO Kan rekruteren: ” + canrecruit); // DEBUG
while (canrecruit == true) {
voor (laat ij = 0; ij < 30; ++ij) {
var canrecruit=wacht op runCom1(ns,'ns.gang.canRecruitMember()','canRecr');
//ns.print(“INFO Kan rekruteren: ” + canrecruit); // DEBUG
if (canrecruit == waar) {
ns.print(“🔴GEWORPEN: ” + ij + “🔴”);
}
}
}
// Krijg namen van bendeleden
laat leden = wachten runCom1(ns, 'ns.gang.getMemberNames()','getMemNam');
// Haal Territory % op en krijg het 'gezocht over respect'-niveau
var ganginfo = wacht runCom1(ns,'ns.gang.getGangInformation()','getGangInfo');
gangtx = ganginfo.territorium;
var curResp = ganginfo.respect;
var curWant = ganginfo.wantedLevel;
var curPena2b = ganginfo.wantedLevel/ganginfo.respect * 100;
//ns.print(“🔴Want/Respect: ” + ns.nFormat(curPena2b, “0,0.00”) +”%”);
// // Reset controle voor bendeleden in territoriumoorlogvoering & reset oorlogsstatus
bendeoorlog = 0;
oorlogvoering = vals;
Code Deel 2: Hoofdlus
for (laat ij = 0; ij < leden.lengte; ++ij) {
var lid = leden[ij];
var memberInfo = wacht runCom1(ns, 'ns.gang.getMemberInformation(ns.args[0])','getMemInf', [member]);// @@@@@@@@ Controleer apparatuur START @@@@ @@@@@@@
var cashSpen = 0; // Volg contant geld dat is uitgegeven in een lus
//ns.print ("👜BUYSTUFF:" + buyStuff); // DEBUG
//ns.print(“*leden.lengte: ” + leden.lengte); // DEBUG
als (koopspullen==1) {
for (var j = 0; j < allEquipment.length; ++j) {
var apparatuur = allEquipment[j];
//var eqdebug=apparatuur.toString(); ns.print(eqdebug); //DEBUG
//ns.print(“Chk”,apparatuur,memberInfo.upgrades.indexOf(apparatuur));
//Bovenstaande geeft AWM Sniper Rifle 12, Graphene Armor -1 enz. //DEBUG
//ns.print ("Controleren:", apparatuur); // DEBUG
//Als iemand met een bepaalde rang en geen NIET-HACKING spullen heeft, koop het dan
if ( (memberInfo.upgrades.indexOf(equipment) == -1) && (memberInfo.augmentations.indexOf(equipment) == -1) && ascmem[ij] >= equiprank && equipment != “NUKE Rootkit” && equipment ! = “Soulstealer Rootkit” && apparatuur != “Demon Rootkit” && apparatuur != “Hmap Node” && apparatuur != “Jack the Ripper” && apparatuur != “DataJack” && apparatuur != “Neuralstimulator” && apparatuur != “BitWire ”) {
var cost = wacht runCom1(ns, 'ns.gang.getEquipmentCost(ns.args[0])','getEqCost', [apparatuur]);
if ( (kosten + minCash) < curCash ) {
var gangbuy = wacht runCom1(ns, 'ns.gang.purchaseEquipment(ns.args[0], ns.args[1])','getEqCost', [lid, uitrusting]);
//ns.print ("gangbuy: ” + gangbuy); // DEBUG
if (gangbuy == waar) {
cashSpen = cashSpen + kosten;
ns.print(“👜: ” + uitrusting + ” @” + lid);
curCash=wacht op runCom1(ns, 'ns.getServerMoneyAvailable(ns.args[0])','getSerMon', [“home”]);
}
}
}
}
}
// @@@@@@@@@@ Controleer apparatuur END @@@@@@@@@@@
// Krijg lidvariabelen
var memstr = memberInfo.str; // Kracht
var memdef = memberInfo.def; // Verdediging
var memdex = memberInfo.dex; // Behendigheid
var memagi = memberInfo.agi; // Wendbaarheid
//################################################ ##############
//ASSIGN-taken (reeks "als anders" -instructies, bewerk naar wens)
//█Gewilde status: als het te hoog is, ga dan waakzaam om het te verlagen
if (curResp>minVResp && curPena2b>minVPen && curWant>minVWant && memstr>minVRank) {
var gangtask = "Vigilante Justitie";
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
ns.print(“📱”+ij +”. r0🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//█Rang 1: Als de man geen rang 2 heeft, train dan Combat totdat alle statistieken als 2 zijn gerangschikt
anders als (memstr
var gangtask = "Treingevecht";
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
ns.print(“📱”+ij +”. r1🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//█Rang 3: Indien gerangschikt 1-4, train Combat tot gevechtsstatistieken Geclassificeerd als 4
anders als ( ((memstr
var gangtask = "Treingevecht";
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
ns.print(“📱”+ij +”. r2🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//VOORBEELD van verdere criteria die gemakkelijk kunnen worden ingevoegd met if's
// Rank5: Train Combat tot statistieken gerangschikt 6, en leden 3-11
/* else if ( (memstr 5 && leden.lengte < 5 && maxrank == 5 ){
var gangtask = "Treingevecht";
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
ns.print(ij +”. r3🚶:” + lid + ” >” + gangtask.substring(0,lenCom) );
} */
//█Terrorisme: doen totdat Respect 10 miljoen bereikt (voor ascentiegebruik)
anders als (curResp2 < 10111222) {
var gangtask = "Terrorisme";
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
ns.print(“📱”+ij +”. r3🚶:”+member+” >”+gangtask.substring(0,lenCom) );
}
//█TERRORITY WARFARE: Stel de taak in als de man hoger is dan rang 2, leden minstens 9,
// maakt deel uit van oorlogsteam (warguys) en territorium < 100% veroverd (gangtx)
else if(ascmem[ij]>2 && leden.lengte>9 && (ij>=0 && ij
ganginwar = ganginwar + 1; // Verhoogde teller voor bendes in oorlogsvoering
var gangtask = "Territoriumoorlog";
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
//ns.print ("DEBUG-gebied Gangtx = "+ gangtx); // DEBUG
//ns.print ("DEBUG ganginwar = "+ ganginwar); // DEBUG
ns.print(“📱”+ij +”. 🚶:”+lid+” > “+gangtask.substring(0,lenCom) );
//Controleer oorlogskansen tegen clans
const dowewar=wacht op checkgangwar(ns, warchance);//Warcheck-functie
if (dowwar == waar) {
oorlogvoering = waar;
wacht runCom1(ns, 'ns.gang.setTerritoryWarfare(ns.args[0])','setWar', [true]);
//ns.print ("WARN Oorlogsstatus gewijzigd: "+ oorlogsvoering); //DEBUG
} Else {
wacht runCom1(ns, 'ns.gang.setTerritoryWarfare(ns.args[0])','setWar', [false]);
}
}
//█Trafficking/Illegal Arms: (geld verdienende acties hier!)
//Als we genoeg respect hebben, doe dan een taak om geld te verzamelen
anders als (curResp2 > 10111222) {
var gangtask = "Illegale wapenhandel";
//var gangtask = "Mensenhandel"; // Wijzig dit indien gewenst
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
ns.print(“📱”+ij +”. r4🚶:”+member+” > “+gangtask.substring(0,lenCom) );
}
//█DEFAULT: Als al het andere hierboven faalt, stel de man dan in op de standaardtaak
else {
var gangtask = standaardtaak; // Standaardtaak
wacht runCom1(ns,'ns.gang.setMemberTask(ns.args[0], ns.args[1])','setGnTask', [lid, gangtask]);
ns.print(“📱”+ij +”. 🚶:”+lid+” > “+gangtask.substring(0,lenCom) );
}
// Statistieken en rangschikking (hersenpictogram) van lid afdrukken
//Een vaste lengte van 5 instellen lijkt mooier omdat voorloopnullen de vergelijking gemakkelijker maken
var mstr = ns.nFormaat(memstr, “00000”); // 💪 Kracht (spierpictogram)
var mdef = ns.nFormaat(memdef, “00000”); // 🦴 Verdediging (botemoji)
var mdex = ns.nFormaat (memdex, "00000"); // 👀 Behendigheid (ogen emoji)
var magi = ns.nFormaat(memagi, “00000”); // 🦶 Behendigheid (voetpictogram)
ns.print(” 💪”+mstr+” 🦴”+mdef+” 👀”+mdex+” 🦶”+magi+” 🧠” +ascmem[ij]);
}
// ###### HOOFD VOOR LOOP EINDE #####
Code Deel 3: Hemelvaart + Diversen
if (ascensionCounter != 50) { ascend = true } // Controleer elke 50 lussen // Let op dat we de huidige ranglijst (ascmem[ij]) elke keer moeten controleren
// om geen duplicaties in regelsets tegen te komen
if (stijgen == waar) {
for (laat ij = 0; ij < leden.lengte; ++ij) {
laat lid = leden[ij];
//// Krijg weer lidmaatschapsstatistieken
var memberInfo = wacht op runCom1(ns, 'ns.gang.getMemberInformation(ns.args[0])','getMemInf', [lid]);
var memstr = ledeninfo.str; var memdef = lidInfo.def;
var memdex = memberInfo.dex; var memagi = memberInfo.agi;
/*
//█ Stijg op naar rang 8 [VOORBEELD VAN Custom Ascension Rule]
if (memstr>=rnk8 && ascmem[ij]==7 && maxrank >= 8 ){
ns.gang.ascendMember(lid);
ns.print(“🌟Rang 4>5, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 5; // Stel de rangschikking van de ascensiestatus in op 5
}
*/
//█ Stijg op naar rang 7
if (memstr>=rnk7 && ascmem[ij]==6 && maxrank >=7 ){
wacht op runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [lid]);
ns.print(“🌟Rang 6>7, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 7; // Stel de rangschikking van de ascensiestatus in op 5
}
//█ Stijg op naar rang 6
if (memstr>=rnk6 && ascmem[ij]==5 && maxrank >=6 ){
wacht op runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [lid]);
ns.print(“🌟Rang 5>6, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 6; // Stel de rangschikking van de ascensiestatus in op 4
//telrang2 = telrang2 + 1;
}
//█ Stijg op naar rang 5
if (memstr>=rnk5 && ascmem[ij]==4 && maxrank >=5 ){
wacht op runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [lid]);
ns.print(“🌟Rang 4>5, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 5; // Stel de rangschikking van de ascensiestatus in op 3
}
//█ Stijg op naar rang 4
else if (memstr>=rnk4 && ascmem[ij]==3 && maxrank >= 4 ){
wacht op runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [lid]);
ns.print(“🌟Rang 3>4, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 4; // Stel de rangschikking van de ascensiestatus in op 4
}
//█ Stijg op naar rang 3 om xp te boosten op weg naar rang 4, ongeveer 25 minuten
else if (memstr>=rnk3 && memagi>=rnk3 && ascmem[ij]==2){
wacht op runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [lid]);
ns.print(“🌟Rang 2>3, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 3; // Stel de rangschikking van de ascensiestatus in op 3
}
//█ Stijg op naar rang 2
else if(memstr>=rnk2 && memagi>=rnk2 && ascmem[ij]==1) {
wacht op runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [lid]);
ns.print(“🌟Rang 1>2, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 2; // Stel de rangschikking van de ascensiestatus in op 2
}
//█ Stijg rang 1 vroeg op om xp-winst te 'verhogen', ongeveer 25 minuten
else if (memstr>=rnk1 && memagi>=rnk1 && ascmem[ij]==0){
wacht op runCom1(ns,'ns.gang.ascendMember(ns.args[0])','ascMem', [lid]);
ns.print(“🌟Rang 0>1, ” + lid + ” gestegen! 🌟”);
ascmem[ij] = 1; // Stel de rangschikking van de ascensiestatus in op 1
}
}
}
// @@@@@@@@@ EINDE ASCEND SECTIE @@@@@@@@
lussen++; // Loopteller verhogen
// #### START Schrijf status naar txt-bestand ####
var txtstring = "[";
laat leden3 = wachten op runCom1(ns, 'ns.gang.getMemberNames()','getMemNam');
for (laat ij = 0; ij < leden3.lengte; ++ij) {
var lid = leden3[ij];
var myGang2 = wacht runCom1(ns, 'ns.gang.getMemberInformation(ns.args[0])','getMemInf', [lid]);
txtstring = txtstring + '{\”naam\”:\”' + mijnGang2.naam + '\', ';
txtstring = txtstring + '\”ascmem\”:' + ascmem[ij] + '}';
if (ij!=members3.length-1) {txtstring = txtstring + ','}
}
txtstring = txtstring + ']';
var filewrite = wacht op ns.write(“/Temp/gang-cfg.txt”, txtstring, “w”);
// #### END Schrijf status naar txt-bestand ####
// TOON STATUS
var money = ns.nFormaat(curCash, “0,0.0a”); //Geld in de hand: 💰Cur
var minCash2 = ns.nFormaat(minCash, “0,0.0a”); //Minimum cash niveau: 💰Min
var getGang = wacht runCom1(ns, 'ns.gang.getGangInformation()', 'getGangInfo');
var curResp = ns.nFormat(getGang.respect, “0,0.0a”); // Respect: 🩸Res
var curWant =ns.nFormat(getGang.wantedLevel, "0,0.0a");//Gezocht niveau: 🔥W
var curPena =ns.nFormat(myGang.wantedPenalty,"0.00a");//Strafniveau: W
var curPenaRatio =getGang.wantedLevel/getGang.respect *100;// Strafverhouding
var curPenaRatio2 = ns.nFormat(curPenaRatio, “0.00a”); // Mooier formaat
gangt2 = gangt1; gangt1 = gangt0; gangt0 = gangtx;//Territoriumgeschiedenis toevoegen
gangtx = getGang.territorium; // Krijg de huidige territoriumgeschiedenis
gangt2 = ns.nFormaat(gangt2, “0.00%”); // Converteren naar percentage
gangtx = ns.nFormaat(gangtx, “0.00%”); // Converteren naar percentage
ns.print(“#: “+loops+” :” +buyStuff+” 👜:$” +cashSpen+” 💰Cur $” +geld);
ns.print(“💰Min: $” + minCash2 +” 🩸Res: ” +curResp + ” 🔥W: ” +curWant);
ns.print(“W Pen:” +curPena +”%” +”Wan/Resp:” +curPenaRatio2 +”%”);
ns.print(“🗡🗡:”+warfare+” ✊🗡:”+warguys +” 🥥: “+gangt2 +” > “+ gangtx);
ns.print(“🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴”);//Onderste voettekst
wacht op slaap (slaapvertraging);
//Controleer of bende slechts 3 jongens heeft + te hoog gerangschikt, en reset dan het configuratiebestand
//Dit vangt een bug op als het bendescript om de een of andere reden crasht/beëindigt
if (members3.length < 4 && ascmem[0]>2 && ascmem[1]>2 && ascmem[2]>2) {
const resetconfig = wacht op resetGangFile(ns);
ns.print ("Bende-bestand resetten: ", 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];
}
}
// HOOFD TERWIJL LOOP EINDE
// #########################################
}
Code Deel 4: Functies
functie slaap(ms) {
retourneer nieuwe belofte (oplossen => setTimeout (oplossen, ms));
}// Functie: Controleer kansen op oorlog tegen andere bendes
export asynchrone functie checkgangwar(ns, winchance) {
var gangresult = waar; // Standaard KUNNEN we oorlog voeren
// Bendenamen ter referentie:
// Tetrads, The Syndicate, Sprekers voor de doden
// De zwarte hand, het donkere leger, NiteSec
//const anderegang = ns.gang.getOtherGangInformation(); // DEBUGGEN
//ns.print ("Naam: "+JSON.stringify(othergang ['Tetrads'])); //DEBUG
//ns.print ("Power: "+JSON.stringify(othergang ['Tetrads'].power) ); //DEBUG
//ns.print(“Terro: “+JSON.stringify(othergang['Tetrads'].territory));//DEB
//ns.print(“Clash: “+ns.gang.getChanceToWinClash('Tetrads')); //DEBUG
// Krijg kansen om oorlogen te winnen voor alle andere bendes:
var chantetr = wacht runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [“Tetrads”]);
var chansynd = wacht runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [“Het syndicaat”]);
var chanspea = wacht runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [“Speakers voor de Doden”]);
var chanblac = wacht runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [“The Black Hand”]);
var chandark = wacht runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [“The Dark Army”]);
var channite = wacht runCom1(ns, 'ns.gang.getChanceToWinClash(ns.args[0])','getChanWin', [“NiteSec”]);
//ns.print ("Tetrads %: " + ns.nFormat (chantetr, "0.00%")); //DEBUG
//ns.print ("Syndicate %: " + ns.nFormat (chansynd, "0.00%")); //DEBUG
//ns.print(“Speakers %: ” + ns.nFormat(chanspea, “0.00%”)); //DEBUGGEN
//ns.print ("Black Hand%:" + ns.nFormat (chanblac, "0.00%")); //DEBUG
//ns.print ("Dark Army%: " + ns.nFormat (chandark, "0.00%")); //DEBUG
//ns.print ("NiteSec%:" + ns.nFormat (channite, "0.00%")); //DEBUG
// Controleer of de kansen goed zijn voor oorlogvoering, zo niet, ga dan niet aan de slag
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); //DEBUG
if (gangresultaat == waar) { return true; }
if (gangresultaat == false) { return false; }
}
// Functie: bendebestand resetten
// De inhoud van het nieuwe standaard bende-cfg.txt-bestand is als volgt:
// [{“name”:”0″,”ascmem”:0},{“name”:”1″,”ascmem”:0},{“name”:”2″,”ascmem”:0}]
functie resetGangFile(ns) {
ns.print(“WARN Schrijven van nieuw bendeconfiguratiebestand…”);
const cfgScriptContent = “[{\”naam\”:\”0\”, \”ascmem\”:0},{\”naam\”:\”1\”, \”ascmem\”:0},{ \”naam\”:\”2\”, \”ascmem\”:0}]”;
const cfgScript = "/Temp/gang-cfg.txt";
ns.write(cfgScript, cfgScriptContent, "w");
return true;
}
//================================================ =============================
// Externe SCRIPT RUNNER START (aangepast/verkort door de scripts van ALAIN BRYDEN)
export asynchrone functie runCom1(ns, opdracht, bestandsnaam, args = []) {
var voorloper = "gang5-"; // Kan gang-, mes-, etc zijn
var bestandsnaam = "/Temp/" + voorloper + bestandsnaam + ".txt";
var bestandsnaam2 = bestandsnaam + ".js";
//ns.print ("bestandsnaam =", bestandsnaam) // DEBUG
//ns.print ("fileName2 =", bestandsnaam2) // DEBUG
// COMPLEXE SCRIPT
let script = `exporteer asynchrone functie main(ns) {` +
`laat r;probeer{r=JSON.stringify(\n` +
` ${commando}\n` +
`);}catch(e){r=”FOUT: “+(typeof e=='string'?e:e.message||JSON.stringify(e));}\n` +
`const f="${bestandsnaam}"; if(ns.read(f)!==r) wacht op ns.write(f,r,'w') } `;
var oudeInhoud = ns.read(bestandsnaam2);
terwijl (oldContents != script) {
wacht op ns.write (bestandsnaam2, script, "w");
// Wacht tot het script leesbaar lijkt (kan kieskeurig zijn bij schrijven)
var oudeInhoud = ns.read(bestandsnaam2);
}
//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
};
//Voer het script uit!
await ns.exec(fileName2,”home”,1,args[0],args[1],args[2],args[3]);
//wacht op ns.sleep(50);
// We 'proberen' JSON-fouten op te vangen (ze verdwijnen na 1-2 loops)
const fileData = wacht op ns.read(fileName);
proberen {
var fileData2 = JSON.parse(fileData);
} vangst (e) {
console.log('Kan de string niet ontleden.')
}
retourneer bestandData2;
}
// Extern SCRIPT RUNNER EINDE
//================================================ =============================
//Einde van de lijn
Conclusie
Ik zal dit script in de loop van de tijd bijwerken. Ik heb al wat opmerkingen gekregen dat sommige dingen misschien niet optimaal zijn - voel je vrij om commentaar te geven en de code te kannibaliseren voor je eigen scripts en functies!
Proost en ik hoop dat het je (op wat voor manier dan ook) helpt!
Dat is alles wat we hiervoor vandaag delen Bitbrander gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door trofee. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.