Para aquellos que buscan algo útil aquí. Espero que no lo copie/pegue a ciegas en su juego, sino que descubra algunas ideas nuevas para estructurar su código.
También puedo ver varias habitaciones para mejorar:
- Cree un proceso de supervisor que observe los nuevos nodos disponibles y los destruya por usted, por lo que debe ejecutar algo como `run nuke-all-supervisor.js` solo una vez por instalación de aumentos.
- Otro espacio para mejorar es instalar una puerta trasera. Sin embargo, necesita que progreses un poco en el juego para desbloquear la API requerida.
Uso
ejecutar nuke-all.js
Elimina todos los servidores que tienes para alcanzar el nivel de piratería. Tan simple como parece. No se requiere más atención. La imagen de marca contiene mi primer paso después de instalar los aumentos.
Consumo de memoria
Como puede ver a continuación, el consumo de memoria para este script es inferior a 8G, lo que significa que puede usarlo al principio del juego. Recién ahora he reconocido que la función getPurchasedServers ocupa la mitad de RAM y realmente no la requiere, por lo que puede mejorar el consumo de memoria para sus necesidades.
[inicio ~/]> mem nuke-all.js Este script requiere 4.75 GB de RAM para ejecutarse para 1 hilo(s) 2.25 GB | getPurchasedServers (fn) 1.60 GB | costo base (misceláneo) 200.00MB | escanear (fn) 100.00MB | getServerRequiredHackingLevel (fn) 100.00 MB | getServerNumPortsRequired (fn) 100.00 MB | archivoExiste (fn) 50.00MB | hasRootAccess (fn) 50.00 MB | getHackingLevel (fn) 50.00 MB | arma nuclear (fn) 50.00MB | bruto (fn) 50.00MB | ftpcrack (fn) 50.00MB | relésmtp (fn) 50.00MB | httpgusano (fn) 50.00MB | sqlinject (fn)
Scripts
nuke-all.js – El script ejecutable utiliza funciones de biblioteca para aclarar y simplificar el comportamiento.
importar { adquirirRootAccess, buildNetwork, networkToServerList } from 'utils' /** @param {NS} ns **/ export async function main(ns) { const network = buildNetwork(ns) const networkList = networkToServerList(network) const notNuked = networkList .filter((servidor) => !ns.hasRootAccess(servidor)) for (const host de notNuked) { adquirirRootAccess(ns, host) } ns.toast(`${ns.getScriptName()} done`) }
utils.js – Conjunto de funciones de utilidad/biblioteca
/** * Devuelve la lista de invocables que puede usar para abrir puertos en el servidor especificado. * * @param {NS} ns * @returns {Array.<(servidor: cadena): void>} */ export function getAvailableMethods(ns) { const métodos = [] for (const [método, archivo] de [ [ns .brutessh, 'BruteSSH.exe'], [ns.ftpcrack, 'FTPCrack.exe'], [ns.relaysmtp, 'relaySMTP.exe'], [ns.httpworm, 'HTTPWorm.exe'], [ns.sqlinject , 'SQLInject.exe'] ]) { if (ns.fileExists(archivo)) { métodos.push(método) } } métodos de retorno } /** * Intente obtener acceso raíz al servidor de destino. * * @param {NS} ns * @param {string} nombre del servidor de destino para obtener acceso raíz. * @returns {boolean} ¿El intento fue exitoso o no? */ Función de exportación adquirirRootAccess(ns, destino) { if (!ns.hasRootAccess(objetivo)) { if (ns.getHackingLevel() < ns.getServerRequiredHackingLevel(objetivo)) { ns.print(`ERROR: No hay suficiente nivel de piratería para ${target}`) return false } const métodos = getAvailableMethods(ns); if (methods.length < ns.getServerNumPortsRequired(target)) { ns.print(`ERROR: No hay suficientes métodos de ruptura para ${target}`) return false } for (método const de métodos) { method(target) } ns. nuke(objetivo) } return true } /** * Representación gráfica dirigida simple de una red, que consta de * su nombre y una lista de nodos secundarios. * * @typedef {{name: string, children: NetworkNode[]}} NetworkNode */ /** * Devuelve la representación de la red en forma de gráfico dirigido usando DFS. * El caso más común es que no le importan los nodos de red que puede * no bombardear en este momento. Es por eso que esta función solo devuelve nodos para * que haya alcanzado el nivel de piratería. * * @param {NS} ns * @param {string} name Nombre del nodo/servidor de red con el que estamos trabajando. * @param {string[]} used Lista de nodos que ya hemos procesado. * @returns {NetworkNode} Gráfico dirigido */ export function buildNetwork(ns, name = 'home', used = []) { used.push(name) const node = { name: name, children: [] } const serverList = ns.getPurchasedServers() for (const child of 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 } /** * No es estrictamente necesario que funcione con la red en forma de gráfico. * A veces solo tenemos que saber qué nodos están presentes. Para * esto es esta función: para convertir el formato de la estructura de datos de un * gráfico dirigido a una lista simple de nodos de la red. * * @param {NetworkNode} nodo * @returns {string[]} Lista de todos los servidores en la red. */ export function networkToServerList(node) { const list = [node.name] if (node.children.length) { for (const child of node.children) { list.push(...networkToServerList(child)) } } lista de retorno }
Eso es todo lo que estamos compartiendo hoy para este Quemador de bits guía. Esta guía fue originalmente creada y escrita por koutoftimer. En caso de que no actualicemos esta guía, puede encontrar la última actualización siguiendo este liga.