Для тех, кто ищет что -то полезное здесь. Я надеюсь, что вы не будете слепо копировать/вставить его в свою игру, но узнаете несколько новых идей для структурирования вашего кода.
Также я вижу несколько комнат для улучшений:
- Создайте процесс Supervisor, который будет следить за новыми доступными узлами и подайте их для вас, Таким образом, вам нужно выполнить что-то вроде `запустить nuke-all-supervisor.js` только один раз на установку дополнения.
- Еще одна комната для улучшения - установка Backdoor. Требуется, чтобы вы немного прогрессировали в игре, Чтобы разблокировать требуемый API.
Использование
запустить Nuke-All.js
Объединяет все серверы, которые вы должны встретить, чтобы встретить уровень взлома. Так же просто, как выглядит. Не требуется дальнейшего внимания. Изображение брендинга содержит мой самый первый шаг после установки расширения.
Потребление памяти
Как вы можете видеть ниже, Потребление памяти для этого сценария ниже 8G, Это означает, что вы можете использовать его в ранней игре. Я только сейчас понял, что функция GetPurchedServers занимает половину ОЗУ, и она на самом деле не требует этого, Таким образом, вы можете улучшить потребление памяти для ваших потребностей.
[дом ~/]> mem nuke-all.js
This script requires 4.75GB of RAM to run for 1 нить(с)
2.25ГБ | GetPurchedServers (фн)
1.60ГБ | базовая кабина (Разное)
200.00МБ | сканировать (фн)
100.00МБ | getserverrequiredhackingel (фн)
100.00МБ | getservernumportsrequired (фн)
100.00МБ | файлы (фн)
50.00МБ | Hasrootaccess (фн)
50.00МБ | Gethackingel (фн)
50.00МБ | нук (фн)
50.00МБ | Брутесш (фн)
50.00МБ | ftpcrack (фн)
50.00МБ | RELAYSMTP (фн)
50.00МБ | httpworm (фн)
50.00МБ | sqlinject (фн)
Сценарии
Nuke-All.js – Исполняемый скрипт использует библиотечные функции для уточнения и упрощения поведения.
импорт { Приобретение, Buildnetwork, NetworkToserverList } от «utils» /** @парам {НС} нс **/ экспортировать асинхронную функцию main(нс) { const network = buildnetwork(нс) const networklist = networktoserverlist(сеть) const notnuked = networklist.filter((сервер) => !ns.hasrootaccess(сервер)) для (постоянный хозяин Notnuked) { Приобретение(нс, хозяин) } нс.тост(`${ns.getScriptName()} Готово) }
Utils.js – Набор функций утилиты/библиотеки
/** * Возвращает список Callables, которые вы можете использовать для открытия портов на указанном сервере. * * @парам {НС} нс * @returns {Множество.<(сервер: нить): пустота>} */ Функция экспорта getavaileblemethods(нс) { Const methods = [] для (константа [метод, файл] из [ [ns.brutessh, 'Brutessh.exe'], [ns.ftpcrack, 'Ftpcrack.exe'], [ns.reelaysmtp, 'relaysmtp.exe'], [ns.httpworm, 'Httpworm.exe'], [ns.sqlinject, 'Sqlinject.exe'] ]) { если (NS.FileExists(файл)) { Методы.push(метод) } } Методы возврата } /** * Попробуйте получить доступ к корневому доступу к целевому серверу. * * @парам {НС} нс * @парам {нить} целевое имя сервера, чтобы получить корневой доступ к. * @returns {логический} Была попытка успешной или нет. */ Экспортная функция приобретение(нс, цель) { если (!ns.hasrootaccess(цель)) { если (ns.gethackingel() < ns.getserverrequiredhackinglel(цель)) { нс.принт(`Ошибка: Недостаточно уровня взлома для ${цель}`) вернуть ложь } Methods = getaVailableMethods(нс); если (Методы < ns.getservernumportsrequired(цель)) { нс.принт(`Ошибка: Недостаточно методов нарушения для ${цель}`) вернуть ложь } для (Констант метод методов) { метод(цель) } Ns.wull(цель) } вернуть истину } /** * Простое направленное представление графа сети, который состоит из * это имя и список детских узлов. * * @typedef {{имя: нить, дети: Сетевой подход[]}} Сетевой подход */ /** * Возвращает представление сети в форме направленного графика с использованием DFS. * Наиболее распространенным случаем является то, что вы не заботитесь о сетевых узлах, которые вы можете * не нук прямо сейчас. Вот почему эта функция возвращает только узлы для * Который вы встретите уровень взлома. * * @парам {НС} нс * @парам {нить} Имя имени сетевого узла/сервера, с которым мы работаем. * @парам {нить[]} Используемый список узлов, которые мы уже обработали. * @returns {Сетевой подход} Направленный график */ Экспортная функция Buildnetwork(нс, имя = 'Home', Используется = []) { Используется. Пуш(имя) const node = { имя: имя, дети: [] } const serverlist = ns.getpurchedservers() для (Const Dild of Ns.Scan(node.name)) { если (ns.getserverrequiredhackinglel(ребенок) <= ns.gethackingel() && !Используется. Включает(ребенок) && !Serverlist.includes(ребенок) ) { node.children.push(Buildnetwork(нс, ребенок, использовал)) } } вернуть узел } /** * Это не требуется строго для работы с сетью в форме графика. * Иногда нам просто нужно знать, какие узлы присутствуют. Это что * эта функция для: Для преобразования формата структуры данных из направленного * График в простой список узлов сети. * * @парам {Сетевой подход} узел * @returns {нить[]} Список всех серверов в сети. */ Экспортная функция NetworkToserverList(узел) { const list = [node.name] если (node.children.length) { для (Const Dild of Node.children) { List.push(...NetworkToserverList(ребенок)) } } вернуть список }
Это все, чем мы делимся сегодня для этого. Битбернер гид. Это руководство было первоначально создано и написано Koutoftimer. На случай, если нам не удастся обновить это руководство, вы можете найти последнее обновление, следуя этому связь.