Voor degenen die hier iets nuttigs zoeken. Ik hoop dat je het niet blindelings in je spel kopieert/plakt, maar dat je een paar nieuwe ideeën ontdekt om je code te structureren.
Ook zie ik verschillende kamers voor verbeteringen:
- Creëer een supervisorproces dat zal kijken naar nieuwe beschikbare nodes en deze voor je vernietigt, dus je hoeft iets als `run nuke-all-supervisor.js` slechts één keer per installatie van augments uit te voeren.
- Een andere ruimte voor verbetering is het installeren van een achterdeur. Je moet echter een beetje verder komen in het spel om de vereiste API te ontgrendelen.
Gebruik
voer nuke-all.js uit
Vernietigt alle servers die je hebt om te voldoen aan het hackniveau. Zo simpel als het lijkt. Verdere aandacht is niet nodig. Branding image bevat mijn allereerste stap na het installeren van augments.
Geheugenconsumptie
Zoals je hieronder kunt zien, is het geheugenverbruik voor dit script lager dan 8G, wat betekent dat je het in het vroege spel kunt gebruiken. Ik heb nu pas ingezien dat de functie getPurchasedServers de helft van het RAM-geheugen in beslag neemt en het niet echt nodig heeft, dus u kunt het geheugenverbruik voor uw behoeften verbeteren.
[home ~/]> mem nuke-all.js Dit script vereist 4.75 GB RAM voor 1 thread(s) 2.25 GB | getPurchasedServers (fn) 1.60 GB | basiskosten (diverse) 200.00 MB | scannen (fn) 100.00MB | getServerRequiredHackingLevel (fn) 100.00MB | getServerNumPortsRequired (fn) 100.00MB | bestandBestaat (fn) 50.00MB | hasRootAccess (fn) 50.00MB | getHackingLevel (fn) 50.00MB | nuke (fn) 50.00MB | brutessh (fn) 50.00MB | ftpcrack (fn) 50.00MB | relaysmtp (fn) 50.00MB | httpworm (fn) 50.00MB | sqlinject (fn)
Scripts
nuke-all.js – Uitvoerbaar script gebruikt bibliotheekfuncties om gedrag te verduidelijken en te vereenvoudigen.
import { acquireRootAccess, buildNetwork, networkToServerList } from 'utils' /** @param {NS} ns **/ export async function main (ns) { const network = buildNetwork (ns) const networkList = networkToServerList (network) const notNuked = networkList .filter((server) => !ns.hasRootAccess(server)) for (const host of notNuked) { acquireRootAccess(ns, host) } ns.toast(`${ns.getScriptName()} done`) }
utils.js – Set van hulpprogramma's/bibliotheekfuncties
/** * Retourneert een lijst met callables die u kunt gebruiken om poorten op de opgegeven server te openen. * * @param {NS} ns * @returns {Array.<(server: string): void>} */ exportfunctie getAvailableMethods(ns) { const methods = [] for (const [method, file] of [ [ns .brutessh, 'BruteSSH.exe'], [ns.ftpcrack, 'FTPCrack.exe'], [ns.relaysmtp, 'relaySMTP.exe'], [ns.httpworm, 'HTTPWorm.exe'], [ns.sqlinject , 'SQLInject.exe'] ]) { if (ns.fileExists(bestand)) {methoden.push(methode) } } retourmethoden } /** * Probeer roottoegang tot de doelserver te verkrijgen. * * @param {NS} ns * @param {string} doelservernaam om roottoegang te krijgen. * @returns {boolean} Was de poging succesvol of niet. */ exportfunctie acquireRootAccess(ns, target) {if (!ns.hasRootAccess(target)) {if (ns.getHackingLevel() <ns.getServerRequiredHackingLevel(target)) { ns.print(`ERROR: onvoldoende hackingniveau voor ${target}`) return false } const methods = getAvailableMethods(ns); if (methods.length < ns.getServerNumPortsRequired(target)) { ns.print(`ERROR: Onvoldoende breaking-methoden voor ${target}`) return false } for (const method of methods) { method(target) } ns. nuke(target) } return true } /** * Eenvoudige gerichte grafische weergave van een netwerk, dat bestaat uit * zijn naam en lijst met onderliggende knooppunten. * * @typedef {{name: string, children: NetworkNode[]}} NetworkNode */ /** * Retourneert netwerkrepresentatie in de vorm van een gerichte grafiek met behulp van DFS. * Het meest voorkomende geval is dat u niet geeft om netwerkknooppunten die u * nu niet kunt vernietigen. Dat is de reden waarom deze functie alleen nodes retourneert waarvoor * u voldoet aan het hacking-niveau. * * @param {NS} ns * @param {string} name Naam van de netwerknode/server waarmee we werken. * @param {string[]} gebruikt Lijst met knooppunten die we al hebben verwerkt. * @returns {NetworkNode} Gerichte grafiek */ exportfunctie buildNetwork(ns, name = 'home', used = []) { used.push(name) const node = { name: name, children: [] } const serverList = ns.getPurchasedServers() for (const kind van ns.scan(node.name)) { if (ns.getServerRequiredHackingLevel(child) <= ns.getHackingLevel() && !used.includes(child) && !serverList.includes(child) ) ) { node.children.push(buildNetwork(ns, child, used)) } } return node } /** * Het is niet strikt vereist om met het netwerk te werken in de vorm van een grafiek. * Soms moeten we gewoon weten welke knooppunten aanwezig zijn. Dit is waar * deze functie voor is: om het gegevensstructuurformaat te converteren van een gerichte * grafiek naar een gewone lijst met netwerkknooppunten. * * @param {NetworkNode} node * @returns {string[]} Lijst met alle servers in het netwerk. */ exportfunctie networkToServerList(node) { const list = [node.name] if (node.children.length) { for (const child of node.children) { list.push(...networkToServerList(child)) } } retourlijst }
Dat is alles wat we hiervoor vandaag delen Bitbrander gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door koutvantimer. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.