The3vilM0nk3y

superShare.js

Apr 26th, 2022
869
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. let doLog = true;
  4. let logLevel = 1;
  5.  
  6. //-----GUI SETTINGS-----//
  7.  
  8. let doGUI = true;
  9. let showKarma = true;
  10. let showScriptIncome = true;
  11. let showScriptExp = true;
  12. let showHacknetIncome = true;
  13.  
  14. const doc = globalThis['document'];
  15. const hook0 = doc.getElementById('overview-extra-hook-0');
  16. const hook1 = doc.getElementById('overview-extra-hook-1');
  17. /** @param {NS} ns */
  18. async function updateGUI(ns) {
  19.     try {
  20.         const headers = [];
  21.         const values = [];
  22.         if (showKarma) {
  23.             headers.push("Karma");
  24.             values.push(ns.heart.break().toPrecision(5));
  25.         }
  26.         if (showScriptIncome) {
  27.             let income = ns.getScriptIncome();
  28.             headers.push("Script $   ");
  29.             values.push(ns.nFormat(income[1], "(0.00 a)") + "/s");
  30.         }
  31.         if (showScriptExp) {
  32.             let exp = ns.getScriptExpGain();
  33.             headers.push("Script EXP  ");
  34.             values.push(ns.nFormat(exp, "(0.00 a)") + "/s");
  35.         }
  36.         if (showHacknetIncome) {
  37.             let hnIncome = 0;
  38.             for (let i = 0; i < ns.hacknet.numNodes(); i++) {
  39.                 hnIncome += ns.hacknet.getNodeStats(i).production;
  40.             }
  41.             headers.push("Hacknet $  ");
  42.             values.push(ns.nFormat(hnIncome, "(0.00 a)") + "/s");
  43.         }
  44.         hook0.innerText = headers.join(" \n");
  45.         hook1.innerText = values.join(" \n");
  46.  
  47.     } catch (err) {
  48.         ns.print("Error updating the GUI! - " + String(err));
  49.     }
  50.  
  51. }
  52. /** @param {NS} ns @param {Server} server @param {Player} player*/
  53. export async function main(ns) {
  54.     //get server names
  55.     let host = ns.getHostname();
  56.     //define scripts
  57.     let shareScript = "/tools/share.js";
  58.     if (!ns.fileExists(shareScript)){
  59.         var url = "https://pastebin.com/raw.php?i=";
  60.  
  61.         let success = await ns.wget(url + "svaqzAc0", shareScript);
  62.         if (!success) {
  63.            
  64.         }
  65.     }
  66.     //get ram amounts for all scripts.
  67.     let runningScripts = ["scanForCCT.js", "/tools/superShare.js" ];
  68.     //GB of RAM to keep free on home server for running scripts
  69.     var constantRam = 4;
  70.     for (let s of runningScripts) constantRam += ns.getScriptRam(s);
  71.     var sharescriptRam = ns.getScriptRam(shareScript);
  72.     var maxRam = (ns.getServerMaxRam(host) - constantRam);
  73.     let homeThreads = 0;
  74.     //Get a list of all servers
  75.     let filters = ["MyServer-"];
  76.     let useExact = false;
  77.  
  78.     let usableServers = [];
  79.     //Gather max hive memory and threads, starting with home values.
  80.     let maxMemory = maxRam;
  81.     let maxThreads = homeThreads;
  82.     //filter the list of servers by usability
  83.     async function getUsableServers() {
  84.         let servers = await helpers.getAllServers(ns, filters, useExact);
  85.         maxRam = 0;
  86.         maxMemory = 0;
  87.         maxThreads = 0;
  88.         let list = [];
  89.         //list.push([host, homeThreadsHack, homeThreadsGrow, homeThreadsWeaken]);
  90.         for (let server of servers) {
  91.             if (!ns.hasRootAccess(server)) { await dropImmunity(ns, server); }
  92.             //only use those with root
  93.             if (ns.hasRootAccess(server)) {
  94.                 if (!ns.fileExists(shareScript, server)) {
  95.                     await ns.scp(shareScript, server);
  96.                     ns.tprint("Moving files to ", server)
  97.                 }
  98.  
  99.                 let mem = ns.getServerMaxRam(server);
  100.                 if (server == host) mem = mem - constantRam;
  101.                 let thr = Math.floor(mem / sharescriptRam);
  102.                 //only add servers to the list if they can handle at least one thread.
  103.                 if (thr > 0) {
  104.                     //add memory and threads to max pools
  105.                     maxMemory += mem;
  106.                     //maxThreads += thr;
  107.                     maxThreads += thr;
  108.                     //add to array of usable servers
  109.                     list.push([server, thr]);
  110.                 }
  111.             }
  112.         }
  113.         return helpers.sortArray(list, [[1, 1]]);
  114.     }
  115.     usableServers = await getUsableServers();
  116.     ns.tprint("Hive Mind Participants - ", usableServers);
  117.     ns.tprint("Max Threads Capable -" + maxThreads);
  118.     //sort the usable servers by the most possible threads, highest being first.
  119.     while (true) {
  120.         for (let s of usableServers) {
  121.             let server = s[0];
  122.             if (!ns.scriptRunning(shareScript, server)) {
  123.                 let used = 0;
  124.                 if (server == host) used = constantRam;
  125.                 let threads = Math.floor((ns.getServerMaxRam(server) - ns.getServerUsedRam(server) - used) / sharescriptRam);
  126.                 if (threads > 0) {
  127.                     ns.exec(shareScript, server, threads, performance.now());
  128.                 }
  129.             }
  130.             await ns.sleep(5);
  131.         }
  132.         await ns.sleep(1000);
  133.         usableServers = await getUsableServers();
  134.         if (doGUI) await updateGUI(ns);
  135.     }
  136. }
  137.  
  138. //Takes an array of actions
  139. //An action is defined as - [threadCount, command, timeToFinish, target, executionTime, scriptRam]
  140. let lastActionID = 0;
  141. /** @param {NS} ns */
  142. function batchSplit(ns, actions, servers, batchServers = [], deb = false) {
  143.  
  144.     let actionID = lastActionID;
  145.     for (let action of actions) {
  146.         let remainingThreads = action[0];
  147.         let command = action[1];
  148.         let timeToFinish = action[2];
  149.         let target = action[3];
  150.         let executionTime = action[4];
  151.         let scriptRam = action[5];
  152.         lastActionID++;
  153.         for (let tserver of servers) {
  154.             let server = tserver[0];
  155.             let freeThreads = Math.floor((ns.getServerMaxRam(server) - ns.getServerUsedRam(server)) / ns.getScriptRam(command));
  156.             for (let bServer of batchServers) {
  157.                 if (bServer[0] == server) {
  158.                     freeThreads -= bServer[1];
  159.                 }
  160.             }
  161.             if (deb) ns.tprint(server, " - ", freeThreads);
  162.             if (freeThreads > 0) {
  163.                 if (remainingThreads > freeThreads) {
  164.                     batchServers.push([server, freeThreads, command, target, timeToFinish, executionTime, actionID++]);
  165.                     remainingThreads -= freeThreads;
  166.                 } else {
  167.                     batchServers.push([server, remainingThreads, command, target, timeToFinish, executionTime, actionID++]);
  168.                     remainingThreads = 0;
  169.                     break;
  170.                 }
  171.             }
  172.  
  173.             if (remainingThreads == 0) {
  174.                 break;
  175.             }
  176.         }
  177.         if (remainingThreads > 0) {
  178.             //ns.tprint("Unable to batch - ", action, batchServers);
  179.             return [false, action, "Batch too large for the network", remainingThreads, batchServers];
  180.         }
  181.  
  182.     }
  183.     return [true, batchServers, "Batched Actions Successfully"];
  184. }
  185. //["n00dles",4,"/newserver/grow.js","joesguns",13529012.076642979,20249.87664293067,0]
  186. //target, timeToFinish, executionTime, actionID
  187. /** @param {NS} ns */
  188. async function executeBatch(ns, batch, batchDelay = 0) {
  189.     //ns.tprint(batch);
  190.     for (let batchOrder of batch[1]) {                       //target  ttf             execution time   id
  191.         //ns.tprint(batchOrder[0], " ordering - ",batchOrder[1] );
  192.         ns.exec(batchOrder[2], batchOrder[0], batchOrder[1], batchOrder[3], batchOrder[4], batchOrder[5], batchOrder[6]);
  193.     }
  194. }
  195.  
  196. export function autocomplete(data, args) {
  197.     return [...data.servers];
  198. }
  199.  
  200. /** @param {NS} ns */
  201. async function log(ns, s, level) {
  202.     if (doLog && level <= logLevel) ns.tprint(s);
  203. }
  204. /** @param {NS} ns */
  205. async function dropImmunity(ns, server) {
  206.     // If we have the BruteSSH.exe program, use it to open the SSH Port
  207.     // on the target server
  208.     let portLevel = 0;
  209.     if (ns.fileExists("BruteSSH.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  210.         log(ns, "Attempting BruteSSH on " + server, 2);
  211.         ns.brutessh(server);
  212.         portLevel++;
  213.     }
  214.     if (ns.fileExists("FTPCrack.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  215.         log(ns, "Attempting FTPCrack on " + server, 2);
  216.         ns.ftpcrack(server);
  217.         portLevel++;
  218.     }
  219.     if (ns.fileExists("relaySMTP.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  220.         log(ns, "Attempting relaySMTP on " + server, 2);
  221.         ns.relaysmtp(server);
  222.         portLevel++;
  223.     }
  224.     if (ns.fileExists("HTTPWorm.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  225.         log(ns, "Attempting HTTPWorm on " + server, 2);
  226.         ns.httpworm(server);
  227.         portLevel++;
  228.     }
  229.     if (ns.fileExists("SQLInject.exe", "home") && !ns.hasRootAccess(server) && ns.getServerNumPortsRequired(server) > portLevel) {
  230.         log(ns, "Attempting SQLInject on " + server, 2);
  231.         ns.sqlinject(server);
  232.         portLevel++;
  233.     }
  234.  
  235.  
  236.     // Get root access to target server
  237.     if (!ns.hasRootAccess(server)) {
  238.         if (ns.getServerNumPortsRequired(server) <= portLevel) {
  239.             ns.nuke(server);
  240.             if (ns.hasRootAccess(server)) {
  241.                 log(ns, "Gained root access to " + server, 1);
  242.             }
  243.         }
  244.         else log(ns, "Not enough open ports for " + server + " to run NUKE.exe", 2);
  245.     }
  246. }
Advertisement
Add Comment
Please, Sign In to add comment