Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** @param {NS} ns */
- function rankGen(ns, currentName, rank, GrandBoss, Goon, id = -1) {
- let start = ["G", "H", "M", "Pal", "Bar", "Cap", "G", "G", "Mafi", "G", "B"];
- let end = ["n", "d", "k", "za", "ne", "", "d Fella", "mah", "so", "mbah", "ss"];
- let prefixes = ["Big", "Don", "Grand"];
- let currentNameArr = currentName.split(" ");
- let firstName;
- if (currentNameArr.length === 1)
- firstName = currentNameArr[1];
- else
- firstName = currentNameArr[0];
- if (id === -1) {
- let idCount = currentNameArr.pop();
- id = 0;
- if (idCount.includes("Fella")) {
- idCount = currentNameArr.pop();
- }
- if (idCount.includes("Mafi"))
- id--;
- id = idCount.split("").reduce((count, char) => { return char === 'o' ? count + 1 : count; }, id);
- id = `${id}`;
- }
- let total = start.length * (prefixes.length + 1);
- rank = (rank - Goon) * ((total - 0) / (GrandBoss - Goon)) + 0;
- rank = Math.round(rank);
- let superRank = Math.floor(rank / start.length) - 1;
- rank = rank % start.length;
- if (superRank === start.length) {
- superRank = prefixes.length - 1;
- rank = start.length - 1;
- }
- let title = superRank >= 0 ? prefixes[superRank] + " " : '';
- let name = title + firstName + " " + start[rank];
- for (let i = 0; i < id; i++)
- name += 'o';
- name += end[rank];
- return name;
- }
- export async function main(ns) {
- let allowance = ns.args[0] * 1e6;
- let desiredRespect = ns.args[1];
- let lenience = ns.args[3];
- let pigControl = false;
- let GrandBoss = -Infinity;
- let Goon = Infinity;
- let lackies = ns.gang.getMemberNames();
- for (let lackie of lackies) {
- let info = ns.gang.getMemberInformation(lackie);
- let rank = info.agi_asc_mult + info.agi_mult
- + info.def_asc_mult + info.def_mult
- + info.dex_asc_mult + info.dex_mult
- + info.str_asc_mult + info.str_mult
- + info.cha_asc_mult + info.cha_mult
- + info.hack_asc_mult + info.hack_mult;
- GrandBoss = GrandBoss < rank ? rank : GrandBoss;
- GrandBoss = Math.floor(GrandBoss);
- Goon = Goon > rank ? rank : Goon;
- Goon = Math.floor(Goon);
- }
- ns.tprint("GrandBoss is: " + GrandBoss);
- ns.tprint("The dimwit is: " + Goon);
- ns.tprint("These are your lackies: ");
- for (let lackie of lackies) {
- let info = ns.gang.getMemberInformation(lackie);
- let rank = info.agi_asc_mult + info.agi_mult
- + info.def_asc_mult + info.def_mult
- + info.dex_asc_mult + info.dex_mult
- + info.str_asc_mult + info.str_mult
- + info.cha_asc_mult + info.cha_mult
- + info.hack_asc_mult + info.hack_mult;
- GrandBoss = GrandBoss < rank ? rank : GrandBoss;
- GrandBoss = Math.floor(GrandBoss);
- Goon = Goon > rank ? rank : Goon;
- Goon = Math.floor(Goon);
- let newName = rankGen(ns, lackie, rank, GrandBoss, Goon);
- if (newName !== lackie)
- ns.gang.renameMember(lackie, newName);
- ns.tprint(`${newName} | ${rank}`);
- }
- while (true) {
- await ns.gang.nextUpdate();
- while (ns.gang.canRecruitMember()) {
- let name = firstName();
- name = rankGen(ns, name, 0, GrandBoss, Goon, ns.gang.getMemberNames().length);
- ns.gang.recruitMember(name);
- ns.tprint("'recruited' " + name + ", more fresh meat to our cause");
- }
- let doohickeys = ns.gang.getEquipmentNames();
- let lackies = ns.gang.getMemberNames();
- doohickeys = doohickeys.filter(x => ns.gang.getEquipmentCost(x) <= allowance);
- let notUsedLackies = [...lackies];
- let averageHoodlum = determineAverageLackie(ns, lackies);
- let gangInfo = ns.gang.getGangInformation();
- let tasks = ns.gang.getTaskNames();
- let bestTask = determineTask(ns, tasks, averageHoodlum, gangInfo.territory);
- for (let i = 0; i < lackies.length; i++) {
- let lackie = lackies[i];
- buyEquips(ns, lackie, doohickeys);
- let info = unbiasStats(ns.gang.getMemberInformation(lackie), lenience);
- //let info = ns.gang.getMemberInformation(lackie);
- let ascencionInfo = ns.gang.getAscensionResult(lackie);
- if (ascencionInfo !== undefined) {
- let totalAscencionMult = ascencionInfo.agi + ascencionInfo.def + ascencionInfo.dex + ascencionInfo.str + ascencionInfo.cha + ascencionInfo.hack;
- if (totalAscencionMult > 10) {
- ns.tprint(`${lackie} is getting a promotion, lucky!`);
- ns.gang.ascendMember(lackie);
- await ns.gang.nextUpdate();
- buyEquips(ns, lackie, doohickeys);
- await ns.gang.nextUpdate();
- let info = ns.gang.getMemberInformation(lackie);
- let rank = info.agi_asc_mult + info.agi_mult
- + info.def_asc_mult + info.def_mult
- + info.dex_asc_mult + info.dex_mult
- + info.str_asc_mult + info.str_mult
- + info.cha_asc_mult + info.cha_mult
- + info.hack_asc_mult + info.hack_mult;
- GrandBoss = GrandBoss < rank ? rank : GrandBoss;
- GrandBoss = Math.floor(GrandBoss);
- Goon = Goon > rank ? rank : Goon;
- Goon = Math.floor(Goon);
- let newName = rankGen(ns, lackie, rank, GrandBoss, Goon);
- if (newName !== lackie)
- ns.gang.renameMember(lackie, newName)
- ns.tprint(`They now go by: ${newName}! `);
- lackie = newName;
- continue;
- }
- }
- if (info.agi < averageHoodlum.agi || info.def < averageHoodlum.def || info.dex < averageHoodlum.dex || info.str < averageHoodlum.str) {
- ns.gang.setMemberTask(lackie, "Train Combat")
- notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
- continue;
- }
- else if (info.cha < averageHoodlum.cha) {
- ns.gang.setMemberTask(lackie, "Train Charisma")
- notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
- continue;
- }
- else if (info.hack < averageHoodlum.hack) {
- ns.gang.setMemberTask(lackie, "Train Hacking")
- notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
- continue;
- }
- if (gangInfo.respectGainRate * 5 < desiredRespect) {
- ns.gang.setMemberTask(lackie, bestTask)
- notUsedLackies.splice(notUsedLackies.indexOf(lackie), 1);
- }
- else {
- ns.gang.setMemberTask(lackie, "Train Combat")
- }
- await ns.gang.nextUpdate();
- gangInfo = ns.gang.getGangInformation();
- }
- gangInfo = ns.gang.getGangInformation();
- if (gangInfo.wantedLevel > 10 || pigControl) {
- if (pigControl === false) {
- pigControl = true;
- }
- if (gangInfo.wantedLevel === 1) {
- pigControl = false;
- continue;
- }
- for (let lackie of lackies)
- ns.gang.setMemberTask(lackie, "Vigilante Justice");
- continue;
- }
- let goonWarfareToggle = ns.args[2] === 1;
- if (goonWarfareToggle) {
- let ops = ns.gang.getOtherGangInformation();
- let averageOp = 0;
- for (let op in ops) {
- averageOp += op.power;
- }
- averageOp /= ops.length;
- if (gangInfo.power > (averageOp * 1.3)) {
- ns.tprint("They'll be sleeping with the fishes");
- //ns.gang.setTerritoryWarfare(true);
- }
- else
- ns.gang.setTerritoryWarfare(false);
- }
- }
- }
- function buyEquips(ns, lackie, doohickeys) {
- for (let thingmabob of doohickeys) {
- ns.gang.purchaseEquipment(lackie, thingmabob);
- }
- }
- function unbiasStats(info, leniece = 1) {
- info.agi = (info.agi * leniece) / info.agi_asc_mult;
- info.def = (info.def * leniece) / info.def_asc_mult;
- info.dex = (info.dex * leniece) / info.dex_asc_mult;
- info.str = (info.str * leniece) / info.str_asc_mult;
- info.cha = (info.cha * leniece) / info.cha_asc_mult;
- info.hack = (info.hack * leniece) / info.hack_asc_mult;
- return info;
- }
- function determineAverageLackie(ns, lackies) {
- let agi = [], def = [], str = [], dex = [], cha = [], hack = [];
- for (let lackie of lackies) {
- let info = unbiasStats(ns.gang.getMemberInformation(lackie));
- agi.push(info.agi);
- def.push(info.def);
- str.push(info.str);
- dex.push(info.dex);
- cha.push(info.cha);
- hack.push(info.hack);
- }
- let middle = agi.length - 1;
- agi.sort();
- def.sort();
- str.sort();
- dex.sort();
- cha.sort();
- hack.sort();
- let averageFratello = {
- 'agi': agi[middle],
- 'def': def[middle],
- 'str': str[middle],
- 'dex': dex[middle],
- 'cha': cha[middle],
- 'hack': hack[middle]
- }
- return averageFratello;
- }
- function determineTask(ns, tasks, averageRacketeer, territory) {
- let bestTask = tasks
- .map(t => {
- let info = ns.gang.getTaskStats(t);
- return {
- name: t,
- score: info.baseRespect
- * (info.agiWeight * averageRacketeer.agi)
- * (info.dexWeight * averageRacketeer.dex)
- * (info.defWeight * averageRacketeer.def)
- * (info.strWeight * averageRacketeer.str)
- * (info.chaWeight * averageRacketeer.cha)
- * (info.hackWeight * averageRacketeer.hack)
- * (info.territory.respect * territory)
- }
- })
- .sort((a, b) => b.score - a.score)
- .slice(0, 1);
- return bestTask[0].name;
- }
Advertisement
Add Comment
Please, Sign In to add comment