下载客户端

中级自动农场+模块

2026-02-15 13:00:10
发布在Bitburner
转载

AI智能总结导读

这是《中级自动农场+模块》V3版本的黑客游戏自动农场脚本,为高级版,代码更简洁收益更高,模块已预装。脚本为即插即用型,运行时会在主目录自动生成或覆盖3个文件,无模块运行需14.8GB内存,带模块需20.05GB,可自动管理服务器进行黑客、生长、削弱操作,还支持黑客网和玩家服务器管理模块,适合游戏玩家学习或自动刷取收益。

May no longer work, but could be useful for study? Here we go again, V3 has arrived! Hello once more, today I bring you a better chunk of code! 100% plug and play, but put it in a .ns file instead of .script, create in and run from home This guide has less documentation, but much higher gains than the last Let me know if there is any issue you can see, or any way to improve it further :) NOTICE: It will automatically create/overwrite 3 files in the home directory called "weak.script", "grow.script" and "hack.script" and uses 14.8GB to run without modules, 20.05GB with Server RAM utilisation may temporarily be low when weakening, this is intended Also it takes a while to warm up the wallets before the farming can start - Advanced Update - Rewrote the code to be cleaner and to work better, gains increased further Leaving old code here so that people can move up from the basic if they're studying it Old modules will work only with intermediate version, advanced has them preinstalled Improved Intermediate Code - Modules Preinstalled /** @param {NS} ns**/ export async function main(ns) { ns.disableLog('ALL'); //Welcome to the Auto Farm part 2: Electric Boogaloo - Advanced Edition //This script is a little more complicated to explain easily, it dedicates high RAM servers to attack high profit servers //This is also set and forget, your EXEs and hacking level are reacquired each second, so new servers are added without needing to reboot it //Well I hope this brings you ideas, knowledge and or profits :D var files = ['grow.script', 'weak.script', 'hack.script']; await ns.write(files[0], 'grow(args[0])', 'w'); await ns.write(files[1], 'weaken(args[0])', 'w'); await ns.write(files[2], 'hack(args[0])', 'w'); var exclude = [''] //Servers names that won't be used as hosts or deleted var servers; var hosts; var targets; var exes; var tarIndex; var loop; var hType; var tmp; var act; var netManager = false; var serverManager = false; var cycle = [0, '▄', '█', '▀', '█']; if (false) { brutessh(); ftpcrack(); relaysmtp(); httpworm(); sqlinject() } const checkM = (c, d) => eval(c < ns.getPlayer().money / d) const arraySort = (arr) => arr.sort((a, b) => b[0] - a[0]) function str(s) { if (s.length > 14) { return s.substring(0, 14) + '...' } else { return s } } function info(t, s) { if (t == 'MM') { return ns.getServerMaxMoney(s) } if (t == 'MA') { return ns.getServerMoneyAvailable(s) } if (t == 'MR') { return ns.getServerMaxRam(s) } if (t == 'UR') { return ns.getServerUsedRam(s) } if (t == 'NPR') { return ns.getServerNumPortsRequired(s) } if (t == 'RHL') { return ns.getServerRequiredHackingLevel(s) } if (t == 'SL') { return ns.getServerSecurityLevel(s) } if (t == 'MSL') { return ns.getServerMinSecurityLevel(s) } } async function scanExes() { for (let hack of ['brutessh', 'ftpcrack', 'relaysmtp', 'sqlinject', 'httpworm']) { if (ns.fileExists(hack + '.exe')) { exes.push(hack) } } } function log() { if (cycle[0] >= 4) { cycle[0] = 0 }; cycle[0]++; ns.clearLog(); ns.print('╔═══╦════════════════════════════════════╗') tmp = targets.slice(0, 12) ns.print(`║ ${cycle[cycle[0]]} ║ HIGH PROFIT BALANCE ║`) for (let t of tmp) { ns.print(`║ ${act[t[1]]} ║ ${str(t[1])}` + `${ns.nFormat(info('MA', t[1]), '0a')} / ${ns.nFormat(info('MM', t[1]), '0a')} : ${ns.nFormat(info('MA', t[1]) / info('MM', t[1]), '0%')} ║`.padStart(36 - str(t[1]).length)) } ns.print('╠═══╩════════════════════════════════════╝') ns.print(`║ EXE ${exes.length}/5 ║ HOSTS ${hosts.length} ║ TARGETS ${targets.length}`) ns.print('╠═════════════════════════════════════════') if (netManager || serverManager) { tmp = '║ MANAGER' if (netManager) { tmp += ' ║ HN-Nodes ' + ns.hacknet.numNodes() } if (serverManager) { tmp += ' ║ P-Servers ' + ns.getPurchasedServers().length } ns.print(tmp + ' n╠═════════════════════════════════════════') } } async function scanServers(host, current) {//Combined scan and check for (let server of ns.scan(current)) { if ((ns.getPurchasedServers().includes(server) || info('NPR', server) <= exes.length) && host != server) { if (!ns.getPurchasedServers().includes(server)) { for (let hack of exes) { ns[hack](server) }; ns.nuke(server) } if (info('MM', server) != 0 && info('RHL', server) <= ns.getHackingLevel() && info('MSL', server) < 100) { targets.push([Math.floor(info('MM', server) / info('MSL', server)), server]); targets = arraySort(targets) } if (info('MR', server) > 4 && !exclude.includes(server)) { hosts.push([info('MR', server), server]); hosts = arraySort(hosts) } servers.push(server) await ns.scp(files, 'home', server) await scanServers(current, server) } } } async function hackAll() {//Dedicates high RAM servers to high value ones for (let host of hosts) { if (tarIndex > targets.length - 1) { tarIndex = 0; loop = true }; let target = targets[tarIndex][1]; function fRam() { return info('MR', host[1]) - info('UR', host[1]) } if (info('MA', target) < info('MM', target) * .80) { hType = 0 } else if (info('SL', target) > info('MSL', target) + 5 || loop) { hType = 1; if (fRam() / info('MR', host[1]) > .13 && fRam() > 4) { tmp = Math.floor(fRam() / 1.75); if (tmp > 0) { ns.exec(files[1], host[1], tmp, target) } } } else { hType = 2; for (let h of hosts) { if (ns.isRunning(files[2], h[1], target) && h[1] != host[1]) { hType = 0; break } } if (hType == 2 && !ns.scriptRunning(files[2], host[1])) { if (fRam() < 2) { ns.killall(host[1]) } tmp = [1, Math.floor(fRam() / 1.7)]; while (ns.hackAnalyze(target) * tmp[0] < .7 && tmp[0] < tmp[1]) { tmp[0]++ } ns.exec(files[2], host[1], tmp[0], target) } } if ((hType == 0 || hType == 2) && fRam() > 3.9) { tmp = [Math.ceil(info('MR', host[1]) / 1.75 * .14), Math.floor(info('MR', host[1]) / 1.75 * .79)] if (tmp[1] > 0 && fRam() / info('MR', host[1]) >= .80) { ns.exec(files[0], host[1], tmp[1], target) } if (tmp[0] > 0 && fRam() / info('MR', host[1]) >= .15) { ns.exec(files[1], host[1], tmp[0], target) } } if (!loop) { if (hType == 0) { act[target] = 'G' }; if (hType == 1) { act[target] = 'W' }; if (hType == 2) { act[target] = 'H' }; } tarIndex++; } } //MODULES BELOW HERE netManager = await ns.prompt('Activate Hacknet Manager?'); async function hnManager() { if (checkM(ns.hacknet.getPurchaseNodeCost(), 20)) { ns.hacknet.purchaseNode() } for (let i = 0; i < ns.hacknet.numNodes(); i++) { for (let part of ['Level', 'Ram', 'Core']) { if (checkM(ns.hacknet['get' + part + 'UpgradeCost'](i), 20)) { ns.hacknet['upgrade' + part](i); } } } } serverManager = await ns.prompt('Activate Player Server Manager?'); async function pServerManager() { let ram = 0; let ramList = [8]; for (let num of ramList) { if (num <= 1048576 && checkM(ns.getPurchasedServerCost(num), 20)) { ramList.push(num * 2); ram = num; } else { break }; } function buyServer(r) { ns.purchaseServer('SERVER-' + ns.nFormat(r * 1000000000, '0.0b'), r) } if (ns.getPurchasedServers().length < 25 && ram > 0) { buyServer(ram) } for (let i = ns.getPurchasedServers().length - 1; i >= 0; i--) { tmp = ns.getPurchasedServers()[i] if (info('MR', tmp) < ram && checkM(ns.getPurchasedServerCost(ram), 20) && !exclude.includes(tmp)) { ns.killall(tmp); ns.deleteServer(tmp); buyServer(ram); } } } //MODULES ABOVE HERE ns.tail() while (true) {//Keeps everything running once per second servers = []; targets = []; hosts = [[Math.max(info('MR', 'home') - 50, 0), 'home']]; exes = [] tarIndex = 0; loop = false; act = {} await scanExes() await scanServers('', 'home') await hackAll() if (netManager) { await hnManager() } if (serverManager) { await pServerManager() } log() await ns.asleep(1000) }} Old - Intermediate Code /** @param {NS} ns**/ export async function main(ns) { ns.disableLog("ALL"); //Visual clarity //Welcome to the Auto Farm part 2: Electric Boogaloo //This script is a little more complicated to explain easily, it dedicates high RAM servers to attack high profit servers //This is also set and forget, your EXEs and hacking level are reacquired each second, so new servers are added without needing to reboot it //Well I hope this brings you ideas, knowledge and or profits :D var files = ["grow.script", "weak.script", "hack.script"];//I advise against modifying the scripts await ns.write(files[0], "grow(args)", "w"); await ns.write(files[1], "weaken(args)", "w"); await ns.write(files[2], "hack(args)", "w"); var serverList; var targetList; var hostList; var exes; var temp; var netManager = false; var serverManager = false; var cycle = [0, "▄", "█", "▀", "█"]; var latest = [["-", "-"], ["-", "-"], ["-", "-"]]; if (false) { brutessh(); ftpcrack(); relaysmtp(); httpworm(); sqlinject() } //Avoid RAM cost bypass error var pServers = await ns.prompt("Use player servers as hosts?"); async function scanExes() { exes = ["BruteSSH", "FTPCrack", "relaySMTP", "SQLInject", "HTTPWorm"]; for (let i = 0; i <= exes.length - 1; i++) { if (!ns.fileExists(exes[i] + ".exe")) { exes.splice(i, 1); i-- } }//Removes EXEs you don't have } function str(s) { if (s.length > 14) { return s.substring(0, 14) + "..." } else { return s } }//Truncate long strings function checkM(c, d) { return eval(c < ns.getPlayer().money / d) } function arraySort(array) { return array.sort(function (a, b) { return b[0] - a[0] }) }//Sorts nested arrays function logBalance(server) {//For balance in display return [ns.nFormat(ns.getServerMoneyAvailable(server), '0a')] + " / " + [ns.nFormat(ns.getServerMaxMoney(server), '0a')] + " : " + ns.nFormat(ns.getServerMoneyAvailable(server) / ns.getServerMaxMoney(server), '0%') } async function log() {//The display if (cycle[0] >= 4) { cycle[0] = 0 }; cycle[0]++;//Bounce ns.clearLog(); ns.print("╔═══╦═╣ HOST ╠════════════════╣ TARGET ╠═╗"); ns.print("║ G ║ " + str(latest[0][0]) + str(latest[0][1]).padStart(34 - str(latest[0][0]).length) + " ║") ns.print("║ W ║ " + str(latest[1][0]) + str(latest[1][1]).padStart(34 - str(latest[1][0]).length) + " ║") ns.print("║ H ║ " + str(latest[2][0]) + str(latest[2][1]).padStart(34 - str(latest[2][0]).length) + " ║") ns.print("║ " + cycle[cycle[0]] + " ╠════════════════════════════════════╣") if (targetList.length < 6) { ns.print("╚═══╝ ║") } else { ns.print("╠═══╝ Priority Servers Balance ║") for (let i = 0; i < 6; i++) { temp = targetList[i][1]; ns.print("║ > " + temp + logBalance(temp).padStart(36 - temp.length) + " ║") } ns.print("╠════════════════════════════════════════╝") ns.print("║ EXE " + exes.length + "/5 ║ HOSTS " + hostList.length + " ║ TARGETS " + targetList.length) ns.print("╠═════════════════════════════════════════") if (netManager) { ns.print("╠═════════╣ Managing " + ns.hacknet.numNodes() + " Hacknet Nodes") } if (serverManager) { ns.print("╠═════════╣ Managing " + ns.getPurchasedServers().length + " Player Servers") } } } async function scanServers() {//Finds all servers serverList = ns.scan("home"); let serverCount = [serverList.length, 0]; let depth = 0; let checked = 0; let scanIndex = 0; while (scanIndex <= serverCount[depth] - 1) { let results = ns.scan(serverList[checked]); checked++; for (let i = 0; i <= results.length - 1; i++) { if (results[i] != "home" && !serverList.includes(results[i])) { serverList.push(results[i]); serverCount[depth + 1]++ } } if (scanIndex == serverCount[depth] - 1) { scanIndex = 0; depth++; serverCount.push(0) } else { scanIndex++ }; } } async function checkServers() {//Sorts servers into lists based on RAM and money: hostList and targetList targetList = []; hostList = [[ns.getServerMaxRam("home"), "home"]]; for (let i = 0; i <= serverList.length - 1; i++) { let cTarget = serverList[i]; if (ns.getServerMaxMoney(cTarget) > 0 || ns.getServerMaxRam(cTarget) > 0) { temp = ns.getPurchasedServers().includes(cTarget) if ((ns.getServerNumPortsRequired(cTarget) <= exes.length && !temp) || (temp && pServers)) { if (!temp) { for (let i = 0; i <= exes.length - 1; i++) { ns[exes[i].toLowerCase()](cTarget) }//Runs all EXEs you have ns.nuke(cTarget);//Ghandi.jpeg } temp = [Math.floor(ns.getServerMaxMoney(cTarget) / ns.getServerMinSecurityLevel(cTarget)), cTarget]; if (ns.getServerMaxMoney(cTarget) != 0 && ns.getServerRequiredHackingLevel(cTarget) <= ns.getHackingLevel() && ns.getServerMinSecurityLevel(cTarget) < 100) { targetList.push(temp); targetList = arraySort(targetList); } temp = [ns.getServerMaxRam(cTarget), cTarget]; if (ns.getServerMaxRam(cTarget) > 4) { hostList.push(temp); hostList = arraySort(hostList) } await ns.scp(files, "home", cTarget); } } } } async function hackAll() {//Dedicates high RAM servers to high value ones let tarIndex = 0; let loop = false; let hType; let threads; let freeRam; for (let i = 0; i <= hostList.length - 1; i++) { if (tarIndex > targetList.length - 1) { tarIndex = 0; loop = true }; let hHost = hostList[i][1]; let hTarget = targetList[tarIndex][1]; async function fRam() { let f = ns.getServerMaxRam(hHost) - ns.getServerUsedRam(hHost) if (hHost == "home") { freeRam = Math.max(f - 50, 0) } else { freeRam = f } } fRam(); if (ns.getServerMoneyAvailable(hTarget) < ns.getServerMaxMoney(hTarget) * .80) { hType = 0 } else if (ns.getServerSecurityLevel(hTarget) > ns.getServerMinSecurityLevel(hTarget) + 5 || loop) { hType = 1 } else { hType = 2 } threads = Math.floor(freeRam / ns.getScriptRam(files[hType])); if (hType == 2 && !ns.scriptRunning(files[2], hHost)) { temp = true; for (let i = 0; i < hostList.length; i++) { if (ns.isRunning(files[2], hostList[i][1], hTarget) && hostList[i][1] != hHost) { temp = false } } if (temp) { ns.scriptKill(files[0], hHost); ns.scriptKill(files[1], hHost); fRam(); threads = Math.floor(freeRam / ns.getScriptRam(files[hType])); while (parseFloat(ns.hackAnalyze(hTarget)) * threads > .5) { threads-- } } else { hType = 0 } } if (hType == 0 && freeRam > 4) { ns.exec(files[1], hHost, Math.ceil(0.17 * threads), hTarget); threads = Math.floor(0.83 * threads) } if (freeRam > 4) { ns.exec(files[hType], hHost, threads, hTarget); latest[hType][0] = hHost; latest[hType][1] = hTarget; } fRam(); if ((hType == 0 || hType == 1) && freeRam / ns.getServerMaxRam(hHost) > .5) { ns.scriptKill(files[0], hHost); ns.scriptKill(files[1], hHost) } tarIndex++ } } //Put modules below here //But above here ns.tail() while (true) {//Keeps everything running once per second await scanExes() await scanServers() await checkServers() await hackAll() if (netManager) { await hnManager() } if (serverManager) { await pServerManager() } await log() await ns.asleep(1000) } } Old - Modules Copy n paste these snippets of code down the bottom of the script, where it says to, and they'll work once you start/restart the script If you want to deactivate an active module while the script is running, simply kill and run again from the script log window to have the options re displayed Hacknet Manager Purchases and upgrades hacknet nodes, buys something if the cost of the upgrade is less than 1/20 of your money netManager = await ns.prompt("Activate Hacknet Manager?"); async function hnManager() { let mode = ["Level", "Ram", "Core"] if (checkM(ns.hacknet.getPurchaseNodeCost(), 20)) { ns.hacknet.purchaseNode() } for (let i = 0; i < ns.hacknet.numNodes(); i++) { for (let n = 0; n < 3; n++) { if (checkM(ns.hacknet["get" + mode[n] + "UpgradeCost"](i), 20)) { ns.hacknet["upgrade" + mode[n]](i); } } } } Player Server Manager Purchases and "upgrades" (deletes and re buys) player servers, will buy the highest amount of RAM it can with 1/20 of your money serverManager = await ns.prompt("Auto buy and upgrade player servers?"); async function pServerManager() { let canAfford = 0; let ram = [8]; for (let i = 0; ram[i] < 1048576; i++) { ram.push(ram[i] * 2) } for (let i = 0; checkM(ns.getPurchasedServerCost(ram[i]), 20) && i < ram.length; i++) { canAfford = ram[i] } if (ns.getPurchasedServers().length < 25 && canAfford > 0) { ns.purchaseServer("SERVER-" + ns.nFormat(canAfford * 1000000000, "0.0b"), canAfford) } for (let i = ns.getPurchasedServers().length - 1; i >= 0; i--) { temp = ns.getPurchasedServers()[i] if (ns.getServerMaxRam(temp) < canAfford && checkM(ns.getPurchasedServerCost(canAfford), 20)) { ns.killall(temp); ns.deleteServer(temp); ns.purchaseServer("SERVER-" + ns.nFormat(canAfford * 1000000000, "0.0b"), canAfford); } } }

评论

共0条评论
face
inputImg
相关阅读
最新更新

最新更新

  • Bitburner 新手合约指南 — A short guide and simple working scripts for solving Bitburner Coding Contracts.…
  • Bitburner 新手脚本指南 — 这是我为《网络黑客》创建/找到的中级脚本集合。它们基于我之前指南中的许多脚本。 查找元数据 元数据基本上是无法通过数据库或数学函数推导的数据。我构建了一个元数据…
  • 为HUD(平视显示器)添加自定义数据 — 使用内置的隐藏钩子和少量脚本自定义你的状态显示界面。 探索发现 本游戏鼓励你超越用户界面和文档进行探索。你可以检查文档对象模型,甚至查看源代码本身。当你开始跳出…
  • 我的《网络骇客》新手笔记、批处理脚本与部署方案 — Useful for beginners, this guide provides: -The Tutorial Commands in order -Cont…
  • 派系与强化 — I asked for this. ㅤ * acquired only from this faction, grafting and certain gang…
  • 基础黑客网络管理器 — 一个用于管理你的黑客网络的基础代码,同时尽量避免花费过多资金 使用方法: 创建一个.js文件或.ns文件,这两种都可以,.script文件使用不同的标准,所以不…
  • 实用脚本【备份】 — I need some place to keep my very useful scripts. Feel free to copy them! Some o…
  • 简易黑客网络管理器 — 一个简单的黑客网络管理器,可高效为你购买所有黑客网络升级。 设置步骤: 1. 创建一个.js文件并粘贴以下代码 2. 输入命令:nano nameOfYourF…
  • 一些实用的别名 — 早期游戏中的一些实用别名 别名 正如游戏内帮助所述,别名功能允许用一个字符串替换另一个单词。游戏还提供了示例:alias "nuke=run NUKE.exe"…
  • 《比特燃烧者》新手黑客指南 — A short & comprehensive guide including simple working scripts for beginning…