この基本的な自動農場からインスピレーションを得た, すべてのサーバーを自動化してパフォーマンスを向上させる.
知らせ
ノート: 「自宅」には少なくとも 8.1G が必要です’ サーバ.
「runner.js」を作成する’ ホームサーバー上のファイル, 以下の内容を貼り付けて実行します.
ナノランナー.js
デフォルトでは, このスクリプトは、各サーバーで実行されている他のすべてのサービスを強制終了しません。. 実行することで強制できます
runner.js --kill を実行します
このスクリプトは個人所有のサーバーをすべて使用します. 持っているほど, より効率的になります.
スクリプト
/** @param {NS} ns **/ 非同期関数メインのエクスポート(ns) { ns.disableLog('全て'); ns.enableLog(「印刷」); var オプション = ns.flags([ ['殺す', 間違い], ['ハック', 間違い], ['育つ', 間違い], ['弱める', 間違い], ['待ち時間', 10], ['ヘルプ', 間違い] ]); もし (オプション['ヘルプ']) { ns.tail(); ns.print(`自動スクリプト, オプション: * --殺す: すべてのサーバー上の他のすべてのプロセスを強制終了します * --some-script.js をハックする: ハックスクリプトを some-script.js のものに置き換えます * --some-script.js を成長させる: 成長スクリプトを some-script.js のものに置き換えます * --some-script.js を弱める: 弱化スクリプトを some-script.js のものに置き換えます * --待ち時間 10: 2 つのサーバー間の待機時間 (ミリ秒), よりも高くなければなりません 1 * --ヘルプ: show this message `); 戻る; } // Creating scripts var hack = options['ハック'] || '/temp/hack.js', 成長 = オプション['育つ'] || '/temp/grow.js', 弱体化 = オプション['弱める'] || '/temp/weaken.js'; もし (!オプション['ハック']) { ns.writeを待つ(ハック, ` /** @param {NS} ns **/ 非同期関数メインのエクスポート(ns) { ns.hackを待つ(ns.args[0]); } `, 「わ」); } もし (!オプション['育つ']) { ns.writeを待つ(育つ, ` /** @param {NS} ns **/ 非同期関数メインのエクスポート(ns) { ns.grow を待つ(ns.args[0]); } `, 「わ」); } もし (!オプション['弱める']) { ns.writeを待つ(弱める, ` /** @param {NS} ns **/ 非同期関数メインのエクスポート(ns) { ns.弱くなるまで待つ(ns.args[0]); } `, 「わ」); } // Divs variables declarations var serverList = ns.scan('家'), サーバー数 = [サーバーリストの長さ, 0], ソフトウェア = [0, 0, 0, 0, 0, 0], ソフトウェア数 = 0, スキャンレベル = 2, インデックス = 0, notProxyList = [], プロキシリスト = ['家'], ハッキング可能なもの = [], 栽培可能なもの = [], 弱者 = [], リンクされた, ターゲット, プロキシターゲット, 深さ = 0, チェック済み = 0, ハックタイプ; // Checking softwares if (ns.file存在します(「BruteSSH.exe」)) { ソフトウェア[0] = 1; ソフトウェアカウント++; }; もし (ns.file存在します(「FTPCrack.exe」)) { ソフトウェア[1] = 1; ソフトウェアカウント++; }; もし (ns.file存在します(「リレーSMTP.exe」)) { ソフトウェア[2] = 1; ソフトウェアカウント++; }; もし (ns.file存在します(「HTTPワーム.exe」)) { ソフトウェア[3] = 1; ソフトウェアカウント++; }; もし (ns.file存在します(「SQLInject.exe」)) { ソフトウェア[4] = 1; ソフトウェアカウント++; }; もし (ns.file存在します(「ディープスキャンV1.exe」)) { スキャンレベル += 2; }; もし (ns.file存在します(「ディープスキャンV2.exe」)) { スキャンレベル += 5; }; ns.print('/---/ \---\n- を検索しています- デフォルト --n > ' + サーバーリスト.join('n > ') + 'n>- スキャン制限: L' + [スキャンレベル + 1] + ' -<'); その間 (索引 <= サーバー数[深さ] - 1 && 深さ < スキャンレベル) { リンク = ns.scan(サーバーリスト[チェック済み]); チェック済み++; ために (インデックス = にしてみましょう 0; 索引 <= リンクされた長さ - 1; インデックス++) { ターゲット = リンクされている[索引]; もし (ターゲット !=「家」 && !サーバーリスト.includes(ターゲット)) { サーバーリスト.push(ターゲット); ns.print(「L」 + [深さ + 2] + ' > ' + ターゲット); サーバー数[深さ + 1]++; } } もし (インデックス == サーバー数[深さ] - 1) { インデックス = 0; 深さ++; サーバーカウント.プッシュ(0); } それ以外 { インデックス++; }; } ns.print('/ - - - -/ チェック中 \ - - - -\'); ために (インデックス = にしてみましょう 0; 索引 <=serverList.length - 1; インデックス++) { ターゲット = サーバーリスト[索引]; もし (ns.getPurchasedServers().含まれています(ターゲット)) { ns.scpを待ちます([ハック, 育つ, 弱める], '家', ターゲット); もし (オプション['殺す']) { ns.killall(ターゲット); } proxyList.push(ターゲット); ns.print(' >>> プロキシ ' + ターゲット); } そうでなければ (ns.getServerNumPorts必須(ターゲット) > ソフトウェア数) { ns.print(' >バツ< ソフトウェア ' + ターゲット); } そうでなければ (ns.getServerMaxRam(ターゲット) < 2) { ns.print(' >バツ< RAMがありません」 + ターゲット); } そうでなければ (ns.getHackingLevel() < ns.getServerRequiredHackingLevel(ターゲット)) { ns.print(' >バツ< スキル ' + ターゲット); } それ以外 { もし (ソフトウェア[0]) { ns.ブルーテッシュ(ターゲット); }; もし (ソフトウェア[1]) { ns.ftpcrack(ターゲット); }; もし (ソフトウェア[2]) { ns.relaysmtp(ターゲット); }; もし (ソフトウェア[3]) { ns.httpworm(ターゲット); }; もし (ソフトウェア[4]) { ns.sqlinject(ターゲット); }; ns.核(ターゲット); ns.scpを待ちます([ハック, 育つ, 弱める], '家', ターゲット); もし (オプション['殺す']) { ns.killall(ターゲット); } もし (ns.getServerMoneyAvailable(ターゲット) == 0) { ns.print(' >バツ< お金がない』 + ターゲット); proxyList.push(ターゲット); ns.print(' >>> プロキシ ' + ターゲット); } それ以外 { notProxyList.push(ターゲット); ns.print(' >>> 有効 ' + ターゲット); } } } もし (notProxyList.length > 0) { ns.print('/-----------/ ハッキング \------------\'); その間 (真実) { ハッキング可能なもの = []; 栽培可能なもの = []; 弱者 = []; ために (notProxyList のターゲット) { // ターゲットの優先順位: 弱める, それから成長する, then hack if (ns.getServerSecurityLevel(ターゲット) > ns.getServerMinSecurityLevel(ターゲット) + 5) { hackType = 弱体化; 弱者.push(ターゲット); } そうでなければ (ns.getServerMoneyAvailable(ターゲット) < ns.getServerMaxMoney(ターゲット) * 0.80) { ハックタイプ = 成長; グローアブル.プッシュ(ターゲット); } それ以外 { ハックタイプ = ハック; ハッカブルズ.プッシュ(ターゲット); } もし ((ns.getServerMaxRam(ターゲット) - ns.getServer UsedRam(ターゲット)) > ns.getScriptRam(ハックタイプ)) { ns.exec(ハックタイプ, ターゲット, 数学の床((ns.getServerMaxRam(ターゲット) - ns.getServer UsedRam(ターゲット)) / ns.getScriptRam(ハックタイプ)), ターゲット); ns.print('|||||||||| ' + ハックタイプ + ' --> ' + ターゲット + ' ||||||||||'); } } ために (proxyList のターゲット) { // プロキシの優先順位: ハック, それから成長する, then weaken if (ハッカブル.長さ > 0) { proxyTarget = ハッキング可能なもの[数学の床(数学.ランダム() * ハッカブル.長さ)]; ハックタイプ = ハック; } そうでなければ (成長可能な長さ > 0) { proxyTarget = グローアブル[数学の床(数学.ランダム() * 成長可能な長さ)]; ハックタイプ = 成長; } そうでなければ (弱者.長さ > 0) { proxyTarget = 弱者[数学の床(数学.ランダム() * 弱者.長さ)]; hackType = 弱体化; } もし ((ns.getServerMaxRam(ターゲット) - ns.getServer UsedRam(ターゲット)) > ns.getScriptRam(ハックタイプ)) { ns.exec(ハックタイプ, ターゲット, 数学の床((ns.getServerMaxRam(ターゲット) - ns.getServer UsedRam(ターゲット)) / ns.getScriptRam(ハックタイプ)), プロキシターゲット); ns.print('|||||||||| プロキシ - > ' + ターゲット + ' --> ' + ハックタイプ + ' --> ' + プロキシターゲット + ' ||||||||||'); } } // Await n ms between each servers to avoid issue with the infinite loop await ns.sleep(オプション['待ち時間']); } } それ以外 { ns.print('エラー, 利用可能なサーバーがありません。); } }
高度な使用法
ゲーム内ですべてのオプションを確認できます
runner.js --help を実行します
独自のハックを使用することが許可されています, 育つ, スクリプトを弱める. 各サーバー間の待ち時間をカスタマイズすることもできます。 警告. 常に 1 ミリ秒以上使用するとゲームがフリーズします.
発売現在 2.0.1, scp 関数の最後の 2 つの引数は反転する必要があります. エラーはスローされません, しかし、成長/弱体化/ハッキングのサイクルを実行するためにのみ自宅のコンピューターを使用していることがわかります。.