Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //args{show servers|show prompts,plant miners|(re)start miner farm|local mining threads}
- //"Hammer": weaken, "Balloon": grow, "shovel" hack
- //returns[rootedServers,allServers]
- /** @param {NS} ns **/
- /** @param {Server} serv**/
- function CanHack(ns, serv) {
- if (serv.requiredHackingSkill > ns.getHackingLevel()) return false;
- var p = serv.numOpenPortsRequired;
- if ((p >= 1) && !ns.fileExists("BruteSSH.exe", "home")) return false;
- if ((p >= 2) && !ns.fileExists("FTPCrack.exe", "home")) return false;
- if ((p >= 3) && !ns.fileExists("RelaySMTP.exe", "home")) return false;
- if ((p >= 4) && !ns.fileExists("HTTPWorm.exe", "home")) return false;
- if ((p >= 5) && !ns.fileExists("SQLInject.exe", "home")) return false;
- return true;
- }
- /** @param {NS} ns **/
- /** @param {Server} serv**/
- function HackItOut(ns, serv) {
- if (!CanHack(ns, serv) || serv.hasAdminRights) return false;
- var p = serv.numOpenPortsRequired;
- if (p >= 1) ns.brutessh(serv.hostname);
- if (p >= 2) ns.ftpcrack(serv.hostname);
- if (p >= 3) ns.relaysmtp(serv.hostname);
- if (p >= 4) ns.httpworm(serv.hostname);
- if (p == 5) ns.sqlinject(serv.hostname);
- ns.nuke(serv.hostname);
- servDict.set(serv.hostname, ns.getServer(serv.hostname));
- return true;
- }
- /** @param {NS} ns **/
- /** @param {Server} serv**/
- function ListLocks(ns, serv) {
- var ret = "";
- var lv = (serv.requiredHackingSkill - ns.getHackingLevel())
- ret += (lv >= 0) ? "Lv+" + (lv) : "Lv" + (lv);
- var p = serv.numOpenPortsRequired;
- if (p >= 1) ret += ":SSH";
- if (p >= 2) ret += ":FTP";
- if (p >= 3) ret += ":SMTP";
- if (p >= 4) ret += ":HTTP";
- if (p == 5) ret += ":SQL";
- return ret;
- }
- var FactSevrs = new Map();
- FactSevrs.set("CSEC", "CyberSec");
- FactSevrs.set("I.I.I.I", "The Black Hand");
- FactSevrs.set("avmnite-02h", "NiteSec");
- /** @param {NS} ns **/
- /** @param {Server} serv**/
- /**@param {number} fromhome*/
- function printServer(ns, serv, fromhome = 0) {
- var msg = "";
- if (fromhome) for (let i = 0; i < fromhome; i++)msg += "-";
- msg += serv.hostname + ": ";
- if (serv.purchasedByPlayer) msg += "Player Server.";
- else if (FactSevrs.has(serv.hostname) && ns.getPlayer().factions.includes(FactSevrs.get(serv.hostname))) msg += "Member";
- else if (ns.isRunning("localminer.ns", serv.hostname, serv.hostname)) msg += "Mining (X" + Math.floor(serv.maxRam / ns.getScriptRam("localminer.ns", serv.hostname)) + ")";
- else if (serv.hasAdminRights) msg += (serv.maxRam == 0) ? "Rooted. 0GB" : "Rooted.";
- else msg += HackItOut(ns, serv) ? "Now Rooted." : ListLocks(ns, serv);
- msg += serv.moneyMax > 0 ? "\t$" + serv.moneyAvailable.toFixed(2) + ":" + serv.moneyMax.toFixed(2) + "(" + ((serv.moneyAvailable / serv.moneyMax) * 100).toFixed(2) + "%)" : "\t$0";
- msg += "\t" + serv.ip;
- if (serv.organizationName) msg += "\tProperty of " + serv.organizationName;
- ns.tprint(msg);
- }
- /** @param {NS} ns **/
- /** @param {Server} serv**/
- async function CopyThatFloppy(ns, serv) {
- for (var f of ns.ls(serv.hostname)) {
- if (f.includes(".cct")) if (ns.args[0] & 2) ns.tprint(f + " found at " + serv.hostname);
- if (!ns.fileExists(f, "home") && f.includes(".lit")) {
- if (ns.args[0] & 2) ns.tprint("stealing " + f + " from " + serv.hostname);
- await ns.scp(f, serv.hostname, "home");
- }
- }
- }
- var servDict = new Map();
- /** @param {NS} ns **/
- /** @param {string} name**/
- /**@param {boolean} doPrint*/
- /**@param {number} fromhome*/
- async function scanEmAll(ns, name = "home", doPrint = true, fromhome = 0) {
- if (!servDict.has(name)) {
- var serv = ns.getServer(name);
- servDict.set(name, serv);
- if (doPrint) {
- printServer(ns, serv, fromhome);
- }
- else if (!serv.purchasedByPlayer && !serv.hasAdminRights) HackItOut(ns, serv);
- if (!serv.purchasedByPlayer) await CopyThatFloppy(ns, serv);
- for (let i of ns.scan(name)) await scanEmAll(ns, i, doPrint, fromhome + 1);
- }
- }
- /** @param {NS} ns **/
- export async function main(ns) {
- servDict.clear();
- await scanEmAll(ns, "home", ns.args[0] & 1, 0);
- if (ns.args[1] & 1) {
- if (ns.args[0] & 2) ns.tprint("attempting to plant miners.");
- for (var serv of servDict.values()) {
- if (!serv.purchasedByPlayer && !serv.hasAdminRights) HackItOut(ns, serv);
- if (!serv.purchasedByPlayer && serv.hasAdminRights && serv.moneyMax > 0 && serv.maxRam > 0 && !ns.isRunning("localminer.ns", serv.hostname, serv.hostname)) {
- ns.killall(serv.hostname);
- //ns.rm("localminer.ns", serv.hostname);
- await ns.scp("localminer.ns", "home", serv.hostname);
- var t = Math.floor(serv.maxRam / ns.getScriptRam("localminer.ns", serv.hostname));
- if (t <= 0) if (ns.args[0] & 2) ns.tprint("cannot plant miner in " + serv.hostname + ". for some reason.");
- else {
- ns.exec("localminer.ns", serv.hostname, t, serv.hostname);
- if (ns.args[0] & 2) ns.tprint(serv.hostname + " running local miner. (" + t + " threads.)");
- }
- }
- else if (!serv.purchasedByPlayer && serv.hasAdminRights && serv.moneyMax > 0 && serv.maxRam == 0 && !ns.isRunning("localminer.ns", "home", serv.hostname)) {
- var t = (ns.args[1] & ~3) ? ns.args[1] & ~3 : 20;
- ns.exec("localminer.ns", "home", t, serv.hostname);
- if (ns.args[0] & 2) ns.tprint(serv.hostname + " has 0GB. running miner locally. (" + t + " threads.)");
- }
- }
- }
- var count = [0, servDict.size]
- for (var serv of servDict.values()) if (serv.hasAdminRights) count[0]++;
- if (ns.args[1] & 2 && servDict.has("Hammer") && servDict.has("Balloon") && servDict.has("Shovel")) {
- var t0 = 0;
- for (var serv of servDict.values()) if (serv.hasAdminRights && !serv.purchasedByPlayer && serv.moneyMax > 0) t0++;
- if (!ns.fileExists("hammer.ns", "Hammer")) await ns.scp("hammer.ns", "home", "Hammer");
- if (!ns.fileExists("balloon.ns", "Balloon")) await ns.scp("balloon.ns", "home", "Balloon");
- if (!ns.fileExists("shovel.ns", "Shovel")) await ns.scp("shovel.ns", "home", "Shovel");
- var t1 = Math.floor(servDict.get("Hammer").maxRam / (ns.getScriptRam("hammer.ns", "Hammer") * t0));
- var t2 = Math.floor(servDict.get("Balloon").maxRam / (ns.getScriptRam("balloon.ns", "Balloon") * t0));
- var t3 = Math.floor(servDict.get("Shovel").maxRam / (ns.getScriptRam("shovel.ns", "Shovel") * t0));
- ns.killall("Hammer");
- ns.killall("Balloon");
- ns.killall("Shovel");
- for (var serv of servDict.values()) if (serv.hasAdminRights && !serv.purchasedByPlayer && serv.moneyMax > 0) {
- if (ns.args[0] & 2) ns.tprint(serv.hostname + " added to mining farm. (" + t1 + ":" + t2 + ":" + t3 + " threads.)");
- ns.exec("hammer.ns", "Hammer", t1, serv.hostname);
- ns.exec("balloon.ns", "Balloon", t2, serv.hostname);
- ns.exec("shovel.ns", "Shovel", t3, serv.hostname);
- }
- }
- return count;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement