Advertisement
Guest User

Untitled

a guest
Jun 20th, 2023
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.06 KB | None | 0 0
  1. /** @param {NS} ns */
  2. export async function main(ns) {
  3. var allservers = ['home'];
  4. var servers = [];
  5. var ramInfo = [];
  6. const maintarget = ns.args[0];
  7.  
  8. var maxMoney = ns.getServerMaxMoney(maintarget);
  9. var minSecurity = ns.getServerMinSecurityLevel(maintarget);
  10. var requiredLevel = ns.getServerRequiredHackingLevel(maintarget);
  11.  
  12. const moneythresh = 0.8;
  13. const securitythresh = 1.5;
  14. var usableservers = getallusableservers();
  15. for (let i = 0; i < usableservers.length / 2; i++) {
  16. servers.push(usableservers[2 * i]);
  17. ramInfo.push(usableservers[2 * i + 1]);
  18. }
  19. attackallservers(allservers);
  20.  
  21. if (targetinfo[3] < ns.getHackingLevel()) {
  22. while (true) {
  23. let hacktime = ns.getHackTime(maintarget);
  24. let growtime = ns.getGrowTime(maintarget);
  25. let weakentime = ns.getWeakenTime(maintarget);
  26. let currentmoneypercent =
  27. ns.getServerMoneyAvailable(maintarget) / targetinfo[1];
  28. let securitylevel =
  29. ns.getServerSecurityLevel(maintarget) / targetinfo[2];
  30. if (securitylevel > securitythresh) {
  31. var targetservers = [];
  32. var targetramusage = [];
  33. var weakenScriptRam = ns.getScriptRam('weaken.js', 'home');
  34. var neededweakenthreads = Math.ceil(
  35. (securitylevel - targetinfo[2]) / ns.weakenAnalyze(1)
  36. );
  37. var threadsPerServer = findram(
  38. neededweakenthreads,
  39. weakenScriptRam
  40. );
  41. for (let i = 0; i < threadsPerServer.length / 2; i++) {
  42. targetservers.push(threadsPerServer[2 * i]);
  43. targetramusage.push(threadsPerServer[2 * i + 1]);
  44. }
  45. ns.print('trying to run script on ' + targetservers, 'INFO');
  46. for (let i = 0; i < targetservers.length; i++) {
  47. ns.scp('weaken.js', targetservers[i], 'home');
  48. ns.exec(
  49. 'weaken.js',
  50. targetservers[i],
  51. targetramusage[i],
  52. maintarget
  53. );
  54. ns.print('running weaken.js on ' + targetservers[i]);
  55. }
  56. ns.print('waiting for weaken');
  57. await ns.sleep(weakentime);
  58. } else if (currentmoneypercent <= moneythresh) {
  59. var targetservers = [];
  60. var targetramusage = [];
  61. var growthScriptRam = ns.getScriptRam('grow.js', 'home');
  62. var neededgrowththreads = Math.ceil(
  63. ns.growthAnalyze(maintarget, 1.25)
  64. );
  65. var threadsPerServer = findram(
  66. neededgrowththreads,
  67. growthScriptRam
  68. );
  69. for (let i = 0; i < threadsPerServer.length / 2; i++) {
  70. targetservers.push(threadsPerServer[2 * i]);
  71. targetramusage.push(threadsPerServer[2 * i + 1]);
  72. }
  73. ns.print('trying to run script on ' + targetservers, 'INFO');
  74. for (let i = 0; i < targetservers.length; i++) {
  75. ns.scp('grow.js', targetservers[i], 'home');
  76. ns.exec(
  77. 'grow.js',
  78. targetservers[i],
  79. targetramusage[i],
  80. maintarget
  81. );
  82. ns.print('running grow.js on ' + targetservers[i]);
  83. }
  84. ns.print('waiting for growth');
  85. await ns.sleep(growtime);
  86. } else {
  87. var targetservers = [];
  88. var targetramusage = [];
  89. var hackScriptRam = ns.getScriptRam('hack.js', 'home');
  90. var neededhackthreads = Math.ceil(
  91. moneythresh / ns.hackAnalyze(maintarget)
  92. );
  93. var threadsPerServer = findram(
  94. neededhackthreads,
  95. hackScriptRam
  96. );
  97. for (let i = 0; i < threadsPerServer.length / 2; i++) {
  98. targetservers.push(threadsPerServer[2 * i]);
  99. targetramusage.push(threadsPerServer[2 * i + 1]);
  100. }
  101. ns.print('trying to run script on ' + targetservers, 'INFO');
  102. for (let i = 0; i < targetservers.length; i++) {
  103. await ns.scp('hack.js', targetservers[i], 'home');
  104. await ns.exec(
  105. 'hack.js',
  106. targetservers[i],
  107. targetramusage[i],
  108. maintarget
  109. );
  110. ns.print('running hack.js on ' + targetservers[i]);
  111. }
  112. ns.print('waiting for hack');
  113. await ns.sleep(hacktime);
  114. }
  115. await ns.sleep(550);
  116. }
  117. }
  118.  
  119. function findram(threadsneeded, scriptram) {
  120. var threadsStillNeeded = Math.ceil(threadsneeded);
  121. }
  122. function getallusableservers() {
  123. // ============= TRY SOMETHING LIKE THIS INSTEAD :) =============
  124.  
  125. // let homeInfo = {
  126. // name: 'home',
  127. // maxRam: ns.getServerMaxRam('home').
  128. // ...put as many values in this object as you need
  129. // }
  130. // serverlist.push(homeInfo);
  131. var serverlist = ['home'];
  132. for (let i = 0; i < 20; i++) {
  133. // You don't have access to the allservers variable here (pass it as a variable to this function if you need it)
  134. for (const server of allservers) {
  135. const connections = ns.scan(server);
  136. for (const connection of connections) {
  137. if (
  138. !serverlist.includes(connection) &&
  139. ns.getServerMaxRam(connection) > 2 &&
  140. connection != 'darkweb' &&
  141. connection != 'home' &&
  142. !connection.contains('pserv-') && // this will exclude all servers that have 'pserv-' in the name at all
  143. ns.hasRootAccess(connection)
  144. ) {
  145. // 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.
  146. /* let connectionInfo = {
  147. name: connection,
  148. maxRam: ns.getServerMaxRam(connection),
  149. }
  150. serverlist.push(connectionInfo);
  151.  
  152. if you use that pattern, the array will look like this
  153. [{name: 'home', maxRam: '1024'}, {name: 'n00dles', maxRam: '16'}, etc...]
  154.  
  155. instead of
  156.  
  157. ['home', 1024, 'n00dles', 16, etc...]
  158. */
  159. serverlist.push(connection);
  160. serverlist.push(ns.getServerMaxRam(connection));
  161. //ns.toast(connection + " added to server list.");
  162. }
  163. if (!allservers.includes(connection)) {
  164. allservers.push(connection);
  165. }
  166. }
  167. }
  168. }
  169.  
  170. //This takes the last item in the 'serverlist' array and puts it at the beginning,
  171. serverlist.push(serverlist.shift());
  172. // Then does it again
  173. serverlist.push(serverlist.shift());
  174. //Do you know why you're doing this, or if you need to?
  175.  
  176. // This is the same as just saying:
  177. // return serverlist;
  178. return [...serverlist];
  179. // Using '...' (the spread operator) basically takes everything in the value after it,
  180. // and spreads them out into individual values (read this):
  181. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
  182. }
  183. async function attackallservers(targetlist) {
  184. for (let i = 0; i < targetlist.length - 1; i++) {
  185. if (targetlist[i] != 'home' && targetlist[i] != 'darkweb')
  186. attack(targetlist[i]);
  187. }
  188. }
  189. async function attack(server) {
  190. var hacktoolnum = 0; //count and use hack tools owned if you don't have root
  191. if (!ns.hasRootAccess(server)) {
  192. ns.print('Opening ports on ' + server);
  193. if (ns.fileExists('BruteSSH.exe', 'home')) {
  194. ns.brutessh(server);
  195. hacktoolnum++;
  196. }
  197. if (ns.fileExists('FTPCrack.exe', 'home')) {
  198. ns.ftpcrack(server);
  199. hacktoolnum++;
  200. }
  201. if (ns.fileExists('relaySMTP.exe', 'home')) {
  202. ns.relaysmtp(server);
  203. hacktoolnum++;
  204. }
  205. if (ns.fileExists('HTTPWorm.exe', 'home')) {
  206. ns.httpworm(server);
  207. hacktoolnum++;
  208. }
  209. if (ns.fileExists('SQLInject.exe', 'home')) {
  210. ns.sqlinject(server);
  211. hacktoolnum++;
  212. }
  213. }
  214. if (
  215. ns.getServerNumPortsRequired(server) <= hacktoolnum &&
  216. !ns.hasRootAccess(server)
  217. ) {
  218. ns.print('nuking ' + server);
  219. ns.nuke(server);
  220. }
  221. if (!ns.hasRootAccess(server)) {
  222. ns.print('unable to gain root to ' + server, 'error');
  223. }
  224. }
  225. }
  226.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement