You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BitBurner技术问题:如何将数组作为参数传递给函数?

BitBurner批量破解脚本:解决spider数组传递及核心逻辑问题

你的核心问题是没有接收spider()的返回值,而且probe函数里根本访问不到spider内部的serversSeen变量。另外probe里还有几个逻辑错误,比如target赋值成数组长度(完全错误)、循环自增逻辑有问题,下面是修正后的完整代码,附关键修改说明:

/** @param {NS} ns**/

export async function main(ns){

// 扫描所有服务器,返回服务器名数组
function spider() { 
    let serversSeen = ['home']
    for (let i=0; i < serversSeen.length; i++) {
        let thisScan = ns.scan(serversSeen[i]);
        for (let j=0; j < thisScan.length; j++) {
            if (serversSeen.indexOf(thisScan[j]) === -1) {
                serversSeen.push(thisScan[j]);
            }
        }
    }
    return serversSeen;
}

// 批量尝试获取服务器root权限
function probe() { 
    // 检查是否拥有对应破解工具
    function can(action) {
        return ns.fileExists(action + ".exe", "home");
    }

    // 关键修改1:接收spider返回的服务器数组
    const servers = spider();
    const rootedTargets = []; // 存储已root的服务器

    // 关键修改2:遍历服务器数组,修正循环逻辑
    for (const target of servers) {
        let ports = 0;

        // 尝试打开所有可用端口
        if (can("BruteSSH")) { ns.brutessh(target); ports++; }
        if (can("FTPCrack")) { ns.ftpcrack(target); ports++; }
        if (can("RelaySMTP")) { ns.relaysmtp(target); ports++; }
        if (can("HTTPWorm")) { ns.httpworm(target); ports++; }
        if (can("SQLInject")) { ns.sqlinject(target); ports++; }

        // 尝试获取root权限
        if (!ns.hasRootAccess(target)) {
            if (ns.getServerNumPortsRequired(target) <= ports) {
                ns.nuke(target);
                rootedTargets.push(target);
            }
        } else {
            // 已root的服务器直接加入列表
            rootedTargets.push(target);
        }
    }

    return rootedTargets; // 返回所有已root的服务器数组
}

// 调用probe函数并输出结果
const rootedServers = probe();
ns.tprint(`已成功获取以下服务器root权限:${rootedServers.join(', ')}`);
}

关键修改点:

  1. 数组传递修正:在probe函数内调用spider()时,将返回值存入servers变量,这样就能拿到所有扫描到的服务器列表。
  2. target变量修正:原来把target赋值成数组长度(serversSeen.length),这会导致破解工具传入数字而非服务器名,现在直接遍历数组拿到每个服务器名。
  3. 循环逻辑优化:改用for...of循环简化遍历代码,避免原代码中只有nuke成功才自增索引导致的无限循环问题。
  4. rootedTargets收集:新增数组存储所有已root的服务器,符合你注释里的需求。

另外你提到的ns.ftpcrack等代码不需要改写,只要传入正确的服务器名字符串即可,现在的代码已经处理好了。

内容的提问来源于stack exchange,提问作者Bobby Pope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:10:27