Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** @param {NS} ns */
- export async function main(ns) {
- var allservers = ['home'];
- var servers = [];
- var ramInfo = [];
- const maintarget = ns.args[0];
- var maxMoney = ns.getServerMaxMoney(maintarget);
- var minSecurity = ns.getServerMinSecurityLevel(maintarget);
- var requiredLevel = ns.getServerRequiredHackingLevel(maintarget);
- const moneythresh = 0.8;
- const securitythresh = 1.5;
- var usableservers = getallusableservers();
- for (let i = 0; i < usableservers.length / 2; i++) {
- servers.push(usableservers[2 * i]);
- ramInfo.push(usableservers[2 * i + 1]);
- }
- attackallservers(allservers);
- if (targetinfo[3] < ns.getHackingLevel()) {
- while (true) {
- let hacktime = ns.getHackTime(maintarget);
- let growtime = ns.getGrowTime(maintarget);
- let weakentime = ns.getWeakenTime(maintarget);
- let currentmoneypercent =
- ns.getServerMoneyAvailable(maintarget) / targetinfo[1];
- let securitylevel =
- ns.getServerSecurityLevel(maintarget) / targetinfo[2];
- if (securitylevel > securitythresh) {
- var targetservers = [];
- var targetramusage = [];
- var weakenScriptRam = ns.getScriptRam('weaken.js', 'home');
- var neededweakenthreads = Math.ceil(
- (securitylevel - targetinfo[2]) / ns.weakenAnalyze(1)
- );
- var threadsPerServer = findram(
- neededweakenthreads,
- weakenScriptRam
- );
- for (let i = 0; i < threadsPerServer.length / 2; i++) {
- targetservers.push(threadsPerServer[2 * i]);
- targetramusage.push(threadsPerServer[2 * i + 1]);
- }
- ns.print('trying to run script on ' + targetservers, 'INFO');
- for (let i = 0; i < targetservers.length; i++) {
- ns.scp('weaken.js', targetservers[i], 'home');
- ns.exec(
- 'weaken.js',
- targetservers[i],
- targetramusage[i],
- maintarget
- );
- ns.print('running weaken.js on ' + targetservers[i]);
- }
- ns.print('waiting for weaken');
- await ns.sleep(weakentime);
- } else if (currentmoneypercent <= moneythresh) {
- var targetservers = [];
- var targetramusage = [];
- var growthScriptRam = ns.getScriptRam('grow.js', 'home');
- var neededgrowththreads = Math.ceil(
- ns.growthAnalyze(maintarget, 1.25)
- );
- var threadsPerServer = findram(
- neededgrowththreads,
- growthScriptRam
- );
- for (let i = 0; i < threadsPerServer.length / 2; i++) {
- targetservers.push(threadsPerServer[2 * i]);
- targetramusage.push(threadsPerServer[2 * i + 1]);
- }
- ns.print('trying to run script on ' + targetservers, 'INFO');
- for (let i = 0; i < targetservers.length; i++) {
- ns.scp('grow.js', targetservers[i], 'home');
- ns.exec(
- 'grow.js',
- targetservers[i],
- targetramusage[i],
- maintarget
- );
- ns.print('running grow.js on ' + targetservers[i]);
- }
- ns.print('waiting for growth');
- await ns.sleep(growtime);
- } else {
- var targetservers = [];
- var targetramusage = [];
- var hackScriptRam = ns.getScriptRam('hack.js', 'home');
- var neededhackthreads = Math.ceil(
- moneythresh / ns.hackAnalyze(maintarget)
- );
- var threadsPerServer = findram(
- neededhackthreads,
- hackScriptRam
- );
- for (let i = 0; i < threadsPerServer.length / 2; i++) {
- targetservers.push(threadsPerServer[2 * i]);
- targetramusage.push(threadsPerServer[2 * i + 1]);
- }
- ns.print('trying to run script on ' + targetservers, 'INFO');
- for (let i = 0; i < targetservers.length; i++) {
- await ns.scp('hack.js', targetservers[i], 'home');
- await ns.exec(
- 'hack.js',
- targetservers[i],
- targetramusage[i],
- maintarget
- );
- ns.print('running hack.js on ' + targetservers[i]);
- }
- ns.print('waiting for hack');
- await ns.sleep(hacktime);
- }
- await ns.sleep(550);
- }
- }
- function findram(threadsneeded, scriptram) {
- var threadsStillNeeded = Math.ceil(threadsneeded);
- }
- function getallusableservers() {
- // ============= TRY SOMETHING LIKE THIS INSTEAD :) =============
- // let homeInfo = {
- // name: 'home',
- // maxRam: ns.getServerMaxRam('home').
- // ...put as many values in this object as you need
- // }
- // serverlist.push(homeInfo);
- var serverlist = ['home'];
- for (let i = 0; i < 20; i++) {
- // You don't have access to the allservers variable here (pass it as a variable to this function if you need it)
- for (const server of allservers) {
- const connections = ns.scan(server);
- for (const connection of connections) {
- if (
- !serverlist.includes(connection) &&
- ns.getServerMaxRam(connection) > 2 &&
- connection != 'darkweb' &&
- connection != 'home' &&
- !connection.contains('pserv-') && // this will exclude all servers that have 'pserv-' in the name at all
- ns.hasRootAccess(connection)
- ) {
- // This array will have a name, then a number, then a name, then a number... that's why I would consider using an object here.
- /* let connectionInfo = {
- name: connection,
- maxRam: ns.getServerMaxRam(connection),
- }
- serverlist.push(connectionInfo);
- if you use that pattern, the array will look like this
- [{name: 'home', maxRam: '1024'}, {name: 'n00dles', maxRam: '16'}, etc...]
- instead of
- ['home', 1024, 'n00dles', 16, etc...]
- */
- serverlist.push(connection);
- serverlist.push(ns.getServerMaxRam(connection));
- //ns.toast(connection + " added to server list.");
- }
- if (!allservers.includes(connection)) {
- allservers.push(connection);
- }
- }
- }
- }
- //This takes the last item in the 'serverlist' array and puts it at the beginning,
- serverlist.push(serverlist.shift());
- // Then does it again
- serverlist.push(serverlist.shift());
- //Do you know why you're doing this, or if you need to?
- // This is the same as just saying:
- // return serverlist;
- return [...serverlist];
- // Using '...' (the spread operator) basically takes everything in the value after it,
- // and spreads them out into individual values (read this):
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
- }
- async function attackallservers(targetlist) {
- for (let i = 0; i < targetlist.length - 1; i++) {
- if (targetlist[i] != 'home' && targetlist[i] != 'darkweb')
- attack(targetlist[i]);
- }
- }
- async function attack(server) {
- var hacktoolnum = 0; //count and use hack tools owned if you don't have root
- if (!ns.hasRootAccess(server)) {
- ns.print('Opening ports on ' + server);
- if (ns.fileExists('BruteSSH.exe', 'home')) {
- ns.brutessh(server);
- hacktoolnum++;
- }
- if (ns.fileExists('FTPCrack.exe', 'home')) {
- ns.ftpcrack(server);
- hacktoolnum++;
- }
- if (ns.fileExists('relaySMTP.exe', 'home')) {
- ns.relaysmtp(server);
- hacktoolnum++;
- }
- if (ns.fileExists('HTTPWorm.exe', 'home')) {
- ns.httpworm(server);
- hacktoolnum++;
- }
- if (ns.fileExists('SQLInject.exe', 'home')) {
- ns.sqlinject(server);
- hacktoolnum++;
- }
- }
- if (
- ns.getServerNumPortsRequired(server) <= hacktoolnum &&
- !ns.hasRootAccess(server)
- ) {
- ns.print('nuking ' + server);
- ns.nuke(server);
- }
- if (!ns.hasRootAccess(server)) {
- ns.print('unable to gain root to ' + server, 'error');
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement