Guest User

AyeBoss

a guest
Aug 4th, 2025
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 8.51 KB | Source Code | 0 0
  1. /** @param {NS} ns */
  2. function rankGen(ns, currentName, rank, GrandBoss, Goon, id = -1) {
  3.     let start = ["G", "H", "M", "Pal", "Bar", "Cap", "G", "G", "Mafi", "G", "B"];
  4.     let end = ["n", "d", "k", "za", "ne", "", "d Fella", "mah", "so", "mbah", "ss"];
  5.     let prefixes = ["Big", "Don", "Grand"];
  6.     let currentNameArr = currentName.split(" ");
  7.  
  8.     let firstName;
  9.     if (currentNameArr.length === 1)
  10.         firstName = currentNameArr[1];
  11.     else
  12.         firstName = currentNameArr[0];
  13.  
  14.     if (id === -1) {
  15.         let idCount = currentNameArr.pop();
  16.         id = 0;
  17.         if (idCount.includes("Fella")) {
  18.             idCount = currentNameArr.pop();
  19.         }
  20.         if (idCount.includes("Mafi"))
  21.             id--;
  22.         id = idCount.split("").reduce((count, char) => { return char === 'o' ? count + 1 : count; }, id);
  23.         id = `${id}`;
  24.     }
  25.  
  26.     let total = start.length * (prefixes.length + 1);
  27.     rank = (rank - Goon) * ((total - 0) / (GrandBoss - Goon)) + 0;
  28.     rank = Math.round(rank);
  29.     let superRank = Math.floor(rank / start.length) - 1;
  30.     rank = rank % start.length;
  31.     if (superRank === start.length) {
  32.         superRank = prefixes.length - 1;
  33.         rank = start.length - 1;
  34.     }
  35.  
  36.     let title = superRank >= 0 ? prefixes[superRank] + " " : '';
  37.     let name = title + firstName + " " + start[rank];
  38.     for (let i = 0; i < id; i++)
  39.         name += 'o';
  40.     name += end[rank];
  41.     return name;
  42. }
  43.  
  44. export async function main(ns) {
  45.     let allowance = ns.args[0] * 1e6;
  46.     let desiredRespect = ns.args[1];
  47.     let lenience = ns.args[3];
  48.     let pigControl = false;
  49.     let GrandBoss = -Infinity;
  50.     let Goon = Infinity;
  51.  
  52.     let lackies = ns.gang.getMemberNames();
  53.     for (let lackie of lackies) {
  54.         let info = ns.gang.getMemberInformation(lackie);
  55.         let rank = info.agi_asc_mult + info.agi_mult
  56.             + info.def_asc_mult + info.def_mult
  57.             + info.dex_asc_mult + info.dex_mult
  58.             + info.str_asc_mult + info.str_mult
  59.             + info.cha_asc_mult + info.cha_mult
  60.             + info.hack_asc_mult + info.hack_mult;
  61.         GrandBoss = GrandBoss < rank ? rank : GrandBoss;
  62.         GrandBoss = Math.floor(GrandBoss);
  63.         Goon = Goon > rank ? rank : Goon;
  64.         Goon = Math.floor(Goon);
  65.     }
  66.     ns.tprint("GrandBoss is: " + GrandBoss);
  67.     ns.tprint("The dimwit is: " + Goon);
  68.     ns.tprint("These are your lackies: ");
  69.     for (let lackie of lackies) {
  70.         let info = ns.gang.getMemberInformation(lackie);
  71.         let rank = info.agi_asc_mult + info.agi_mult
  72.             + info.def_asc_mult + info.def_mult
  73.             + info.dex_asc_mult + info.dex_mult
  74.             + info.str_asc_mult + info.str_mult
  75.             + info.cha_asc_mult + info.cha_mult
  76.             + info.hack_asc_mult + info.hack_mult;
  77.         GrandBoss = GrandBoss < rank ? rank : GrandBoss;
  78.         GrandBoss = Math.floor(GrandBoss);
  79.         Goon = Goon > rank ? rank : Goon;
  80.         Goon = Math.floor(Goon);
  81.         let newName = rankGen(ns, lackie, rank, GrandBoss, Goon);
  82.         if (newName !== lackie)
  83.             ns.gang.renameMember(lackie, newName);
  84.         ns.tprint(`${newName} | ${rank}`);
  85.     }
  86.  
  87.     while (true) {
  88.         await ns.gang.nextUpdate();
  89.         while (ns.gang.canRecruitMember()) {
  90.             let name = firstName();
  91.             name = rankGen(ns, name, 0, GrandBoss, Goon, ns.gang.getMemberNames().length);
  92.             ns.gang.recruitMember(name);
  93.             ns.tprint("'recruited' " + name + ", more fresh meat to our cause");
  94.         }
  95.  
  96.         let doohickeys = ns.gang.getEquipmentNames();
  97.         let lackies = ns.gang.getMemberNames();
  98.  
  99.         doohickeys = doohickeys.filter(x => ns.gang.getEquipmentCost(x) <= allowance);
  100.  
  101.         let notUsedLackies = [...lackies];
  102.         let averageHoodlum = determineAverageLackie(ns, lackies);
  103.  
  104.         let gangInfo = ns.gang.getGangInformation();
  105.         let tasks = ns.gang.getTaskNames();
  106.         let bestTask = determineTask(ns, tasks, averageHoodlum, gangInfo.territory);
  107.  
  108.         for (let i = 0; i < lackies.length; i++) {
  109.             let lackie = lackies[i];
  110.  
  111.             buyEquips(ns, lackie, doohickeys);
  112.  
  113.             let info = unbiasStats(ns.gang.getMemberInformation(lackie), lenience);
  114.             //let info = ns.gang.getMemberInformation(lackie);
  115.  
  116.             let ascencionInfo = ns.gang.getAscensionResult(lackie);
  117.             if (ascencionInfo !== undefined) {
  118.                 let totalAscencionMult = ascencionInfo.agi + ascencionInfo.def + ascencionInfo.dex + ascencionInfo.str + ascencionInfo.cha + ascencionInfo.hack;
  119.                 if (totalAscencionMult > 10) {
  120.                     ns.tprint(`${lackie} is getting a promotion, lucky!`);
  121.                     ns.gang.ascendMember(lackie);
  122.  
  123.                     await ns.gang.nextUpdate();
  124.                     buyEquips(ns, lackie, doohickeys);
  125.                     await ns.gang.nextUpdate();
  126.  
  127.                     let info = ns.gang.getMemberInformation(lackie);
  128.                     let rank = info.agi_asc_mult + info.agi_mult
  129.                         + info.def_asc_mult + info.def_mult
  130.                         + info.dex_asc_mult + info.dex_mult
  131.                         + info.str_asc_mult + info.str_mult
  132.                         + info.cha_asc_mult + info.cha_mult
  133.                         + info.hack_asc_mult + info.hack_mult;
  134.                     GrandBoss = GrandBoss < rank ? rank : GrandBoss;
  135.                     GrandBoss = Math.floor(GrandBoss);
  136.                     Goon = Goon > rank ? rank : Goon;
  137.                     Goon = Math.floor(Goon);
  138.                     let newName = rankGen(ns, lackie, rank, GrandBoss, Goon);
  139.                     if (newName !== lackie)
  140.                         ns.gang.renameMember(lackie, newName)
  141.  
  142.                     ns.tprint(`They now go by: ${newName}! `);
  143.                     lackie = newName;
  144.                     continue;
  145.                 }
  146.             }
  147.  
  148.             if (info.agi < averageHoodlum.agi || info.def < averageHoodlum.def || info.dex < averageHoodlum.dex || info.str < averageHoodlum.str) {
  149.                 ns.gang.setMemberTask(lackie, "Train Combat")
  150.                 notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
  151.                 continue;
  152.             }
  153.             else if (info.cha < averageHoodlum.cha) {
  154.                 ns.gang.setMemberTask(lackie, "Train Charisma")
  155.                 notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
  156.                 continue;
  157.             }
  158.             else if (info.hack < averageHoodlum.hack) {
  159.                 ns.gang.setMemberTask(lackie, "Train Hacking")
  160.                 notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
  161.                 continue;
  162.             }
  163.  
  164.             if (gangInfo.respectGainRate * 5 < desiredRespect) {
  165.                 ns.gang.setMemberTask(lackie, bestTask)
  166.                 notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
  167.             }
  168.             else {
  169.                 ns.gang.setMemberTask(lackie, "Train Combat")
  170.             }
  171.             await ns.gang.nextUpdate();
  172.             gangInfo = ns.gang.getGangInformation();
  173.         }
  174.         gangInfo = ns.gang.getGangInformation();
  175.  
  176.         if (gangInfo.wantedLevel > 10 || pigControl) {
  177.             if (pigControl === false) {
  178.                 pigControl = true;
  179.             }
  180.             if (gangInfo.wantedLevel === 1) {
  181.                 pigControl = false;
  182.                 continue;
  183.             }
  184.  
  185.             for (let lackie of lackies)
  186.                 ns.gang.setMemberTask(lackie, "Vigilante Justice");
  187.             continue;
  188.         }
  189.  
  190.         let goonWarfareToggle = ns.args[2] === 1;
  191.         if (goonWarfareToggle) {
  192.             let ops = ns.gang.getOtherGangInformation();
  193.             let averageOp = 0;
  194.             for (let op in ops) {
  195.                 averageOp += op.power;
  196.             }
  197.             averageOp /= ops.length;
  198.             if (gangInfo.power > (averageOp * 1.3)) {
  199.                 ns.tprint("They'll be sleeping with the fishes");
  200.                 //ns.gang.setTerritoryWarfare(true);
  201.             }
  202.             else
  203.                 ns.gang.setTerritoryWarfare(false);
  204.         }
  205.     }
  206. }
  207.  
  208. function buyEquips(ns, lackie, doohickeys) {
  209.     for (let thingmabob of doohickeys) {
  210.         ns.gang.purchaseEquipment(lackie, thingmabob);
  211.     }
  212. }
  213.  
  214. function unbiasStats(info, leniece = 1) {
  215.     info.agi = (info.agi * leniece) / info.agi_asc_mult;
  216.     info.def = (info.def * leniece) / info.def_asc_mult;
  217.     info.dex = (info.dex * leniece) / info.dex_asc_mult;
  218.     info.str = (info.str * leniece) / info.str_asc_mult;
  219.     info.cha = (info.cha * leniece) / info.cha_asc_mult;
  220.     info.hack = (info.hack * leniece) / info.hack_asc_mult;
  221.     return info;
  222. }
  223.  
  224. function determineAverageLackie(ns, lackies) {
  225.     let agi = [], def = [], str = [], dex = [], cha = [], hack = [];
  226.     for (let lackie of lackies) {
  227.         let info = unbiasStats(ns.gang.getMemberInformation(lackie));
  228.         agi.push(info.agi);
  229.         def.push(info.def);
  230.         str.push(info.str);
  231.         dex.push(info.dex);
  232.         cha.push(info.cha);
  233.         hack.push(info.hack);
  234.     }
  235.     let middle = agi.length - 1;
  236.     agi.sort();
  237.     def.sort();
  238.     str.sort();
  239.     dex.sort();
  240.     cha.sort();
  241.     hack.sort();
  242.     let averageFratello = {
  243.         'agi': agi[middle],
  244.         'def': def[middle],
  245.         'str': str[middle],
  246.         'dex': dex[middle],
  247.         'cha': cha[middle],
  248.         'hack': hack[middle]
  249.     }
  250.     return averageFratello;
  251. }
  252.  
  253. function determineTask(ns, tasks, averageRacketeer, territory) {
  254.     let bestTask = tasks
  255.         .map(t => {
  256.             let info = ns.gang.getTaskStats(t);
  257.             return {
  258.                 name: t,
  259.                 score: info.baseRespect
  260.                     * (info.agiWeight * averageRacketeer.agi)
  261.                     * (info.dexWeight * averageRacketeer.dex)
  262.                     * (info.defWeight * averageRacketeer.def)
  263.                     * (info.strWeight * averageRacketeer.str)
  264.                     * (info.chaWeight * averageRacketeer.cha)
  265.                     * (info.hackWeight * averageRacketeer.hack)
  266.                     * (info.territory.respect * territory)
  267.             }
  268.         })
  269.         .sort((a, b) => b.score - a.score)
  270.         .slice(0, 1);
  271.     return bestTask[0].name;
  272. }
  273.  
  274.  
Advertisement
Add Comment
Please, Sign In to add comment