The3vilM0nk3y

myCalc

Apr 23rd, 2022 (edited)
1,029
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import * as helpers from "/apis/helpers.js"
  2. import * as myForms from "/apis/myFormulas.js"
  3. /** @param {NS} ns */
  4. export async function main(ns) {
  5.     let hackScript = "/newserver/hack.js";
  6.     let weakenScript = "/newserver/weaken.js";
  7.     let growScript = "/newserver/grow.js";
  8.     let filterList = ["home", "MyServer", "darkweb"];
  9.     let targetMoneyGainPercent = 0.5;
  10.     let unfilteredList = [];
  11.  
  12.     let servers = await helpers.getAllServers(ns, filterList);
  13.     //ns.tprint(servers);
  14.  
  15.     //let maxRam = ns.getServerMaxRam(ns.getHostname());
  16.     let maxRam = 8192;
  17.     ns.tprint("Getting ratios and more.")
  18.     //for (let target of servers) {
  19.     //  if (ns.hasRootAccess(target)) {
  20.     //      unfilteredList.push(calcRatio(ns, ns.getServer(target), ns.getPlayer()));
  21.     //  }
  22.  
  23.         /*
  24.         //calculate how much money can be made in a hack per batch
  25.         let maxMoney = ns.getServerMaxMoney(target);
  26.         let targetMoneyGain = maxMoney * targetMoneyGainPercent;
  27.         //get ratio of needed hack, weaken, grow, weaken
  28.         let coreCount = ns.getServer(ns.getHostname()).cpuCores;
  29.         let hackThreads = Math.ceil(ns.hackAnalyzeThreads(target, targetMoneyGain));
  30.         let hAnalyze = ns.hackAnalyze(target) * hackThreads;
  31.         let growthThreads = Math.ceil((ns.growthAnalyze(target, 2, coreCount)) * ((maxMoney - (hAnalyze * maxMoney)) / (maxMoney - hAnalyze * maxMoney)));
  32.         let weaken1Threads = Math.ceil(hackThreads / 25);
  33.         let weaken2Threads = Math.ceil(growthThreads / 12.5);
  34.        
  35.         //get total memory used in that ratio
  36.         let scriptMemory = (ns.getScriptRam(hackScript) * hackThreads) +
  37.             (ns.getScriptRam(growScript)* growthThreads) +
  38.             (ns.getScriptRam(weakenScript) * (weaken1Threads + weaken2Threads));
  39.        
  40.         //figure out how many of those we can run with max memory
  41.         let maxBatches = Math.floor(maxRam / scriptMemory);
  42.         //calculate how much time is spent on the batch
  43.         let hackTime = ns.getHackTime(target)
  44.         let growTime = hackTime*3.2
  45.         let weakenTime = hackTime*4
  46.         //create a ratio of money/timeSpent
  47.         let ratio = targetMoneyGain / hackTime * maxBatches;
  48.         let threadsPerBatch = growthThreads + weaken1Threads + weaken2Threads + hackThreads;
  49.         //ns.tprint("    " + target + " - " + targetMoneyGain + " / " + hackTime + " * " + maxBatches + " = " + ratio + " Total threads - " + threadsPerBatch);
  50.         //return [server, ratio, [hackCount, weakenCount, growCount, weakenCount ]]
  51.         if (hackThreads > 0){
  52.             unfilteredList.push([target,ratio,[hackThreads,weaken1Threads, growthThreads, weaken2Threads, maxBatches]]);
  53.         }
  54.         */
  55.     //}
  56.     /*let sortFilter = [[1, 1]];
  57.     let filteredList = await helpers.sortArray(unfilteredList, sortFilter);
  58.     let data = [["Server", "Income /s", "Threads"]]
  59.     for (let s of filteredList) {
  60.         let name = s[0];
  61.         let dividerA = "";
  62.         data.push([name, s[1].toPrecision(5), s[2].toPrecision(5)]);
  63.     }*/
  64.     let sortFilter = [[1,1],[2, 1]];
  65.     let data = getBestValues(sortFilter,ns);
  66.     //ns.tprint(data);
  67.     columnize(ns, data, 2);
  68.     //@param {Formulas} formulas   
  69. }
  70.  
  71. /** @param {NS} ns @param {Server} server @param {Player} player*/
  72. function calcRatio(ns, server, player) {
  73.     let hackThreads = 1;
  74.     let weakenTime = myForms.weakenTime(server, player);
  75.     //get how much money one thread of hack would get us
  76.     let hackPercent = myForms.hackPercent(server, player);
  77.     let moneyStolen = server.moneyMax * hackPercent;
  78.     //figure out how many grow threads it would take to recover
  79.     let growPercent = myForms.growPercent(server, 1, player, 1);
  80.     let moneyGrown = (server.moneyMax - moneyStolen) * growPercent;
  81.     let growthThreads = moneyStolen / moneyGrown;
  82.     //figure out how many weaken Threads are needed.
  83.     let weakenThreads = (hackThreads / 25) + (growthThreads / 1.25);
  84.     let totalThreads = hackThreads + growthThreads + weakenThreads;
  85.     let incomePerSecond = moneyStolen / (weakenTime / 1000) * myForms.hackChance(server, player);
  86.  
  87.     return [server.hostname, incomePerSecond, totalThreads, weakenThreads, growthThreads]
  88.  
  89.  
  90.  
  91. }
  92. //Takes an array of arrays and prints them in columns with spacing in between
  93. //example input Array:
  94. /*
  95.     [
  96.         ["Col A", "Col B"],
  97.         ["Something", 23],
  98.         ["More", 999999],
  99.     ]
  100. */
  101. /** @param {NS} ns @param {Server} server @param {Player} player*/
  102. function columnize(ns, array, spacing) {
  103.     let cols = array[0].length;
  104.     let longest = [];
  105.     //initialize longest for each column as 0
  106.     for (let i = 0; i < cols; i++) {
  107.         longest[i] = 0;
  108.     }
  109.     //ns.tprint(cols);
  110.     for (let s of array) {
  111.         //look for the longest string in each column
  112.         for (let i = 0; i < cols; i++) {
  113.             let entryLength = s[i].toString().length;
  114.             if (entryLength > longest[i]) longest[i] = entryLength;
  115.         }
  116.     }
  117.     //ns.tprint(longest);
  118.     for (let s of array){
  119.         let str = " ";
  120.         for (let i = 0; i < cols; i++) {
  121.             str += s[i].toString();
  122.             //add padding and spacing if not last entry
  123.             if (i < cols - 1){
  124.                 let padding = longest[i] - s[i].toString().length;
  125.                 for (let p = 0; p < padding + spacing; p++){
  126.                     str += " ";
  127.                 }
  128.             }
  129.         }
  130.         ns.tprint(str);
  131.     }
  132. }
  133. /** @param {NS} ns @param {Server} server @param {Player} player*/
  134. function getBestValues(sortArray, ns){
  135.     let servers = ["home"];
  136.     let sInfo = [["Server", "Max Money", "Growth Rate", "Min Security", "Req Hack Level", "Weaken Time"]];
  137.     let serversToScan = ns.scan("home");
  138.     while (serversToScan.length > 0) {
  139.         let server = serversToScan.shift();
  140.         if (!servers.includes(server) && server !== "home") {
  141.             servers.push(server);
  142.             serversToScan = serversToScan.concat(ns.scan(server));
  143.             if (ns.getServerGrowth(server) > 1){
  144.                 sInfo.push([
  145.                     server,
  146.                     ns.nFormat(ns.getServerMaxMoney(server)/2, "(0.00 a)"),
  147.                     ns.getServerGrowth(server),
  148.                     ns.nFormat(ns.getServerMinSecurityLevel(server), "(0.00)"),
  149.                     ns.getServerRequiredHackingLevel(server),
  150.                     ns.tFormat(ns.getHackTime(server) * 4)
  151.                 ]);
  152.             }
  153.         }
  154.     }
  155.     for (let sort of sortArray){
  156.         let sortIndex = sort[0];
  157.         let sortOrder = sort[1];
  158.         sInfo = sInfo.sort((a,b) => (b[sortIndex] - a[sortIndex]) * sortOrder);
  159.     }
  160.     //sInfo = sInfo.sort((a,b) => b[4] - a[4]);
  161.     //sort by growth
  162.     //sInfo = sInfo.sort((a,b) => a[2] - b[2]);
  163.     return sInfo
  164. }
Add Comment
Please, Sign In to add comment