【问题标题】:BitBurner: How do I turn my array into an argument, or pass to a seperate function?BitBurner:如何将我的数组转换为参数,或传递给单独的函数?
【发布时间】:2023-01-08 06:18:05
【问题描述】:

我正在构建一个脚本来一次扫描/分发/破解所有服务器。我的问题是我似乎无法弄清楚如何将我的第一个数组(代码中的 spider())传递给我的第二个函数(probe())。我想将第一个数组用作第二个函数中的“目标”变量。我已经离开我的 cmets 来解释我的想法和我一直试图弄清楚的事情。

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

export async function main(ns){

//functions under here to make things pretty
function spider() { //Used to scan all servers
    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]);
            } //Make the array an argument to pass into probe function
        }
    }
    return serversSeen;
}
function probe() { //Used to open all server ports, gain root access, and run distro function
    function can(action) {
        return ns.fileExists(action + ".exe", "home"); //Checks for .exes
    }
    spider();
    for (let x=0; x < serversSeen.length;) {
        let target = serversSeen.length;
        let ports = 0;
        if (can( "BruteSSH" )) { ns.brutessh  (target);  ++ports; } //Opens all ports on server//Rewrite ns.brutessh (etc) to be strings
        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; }

        if (ns.getServerNumPortsRequired(target) <= ports && ns.hasRootAccess(target) == false) {
            ns.nuke(target);
            ++x
            //create an argument of rooted servers (rootedTarget)
        } else {
            if (ns.hasRootAccess(target) == true) {
            //Push any previously/manually rooted targets to the rootedTarget index(argument)
            }
        }
    }
    return ;//Args of targets (rootedTarget)
}

我研究过让我的数组成为一个参数,但我发现的所有内容似乎都假定该数组是预定义的。

我试过在 probe() 函数内部运行 spider() 函数,但这似乎也没有任何作用。

我也相信我必须重写 ns.ftpcrack 等代码行,但现在我一直在寻找一种方法来传递数组。

【问题讨论】:

    标签: javascript arrays function arguments


    【解决方案1】:

    我刚刚看到这篇文章寻找其他东西,发现没有人回复你。您的代码似乎只查看数组的长度,而不是数组的值。如果我正确理解您的意图,它似乎还有您不需要执行的额外步骤。所以,这就是我将如何写你想要做的事情。

    for (let x = 0; x < serversSeen.length; x++) {
        let target = serversSeen[x];
        let ports = 0;
        if (ns.hasRootAccess(target) == false) {
            if (can("BruteSSH")) { ns.brutessh(target); ++ports; } //Opens all ports on server//Rewrite ns.brutessh (etc) to be strings
            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; }
    
            if (ns.getServerNumPortsRequired(target) <= ports) { ns.nuke(target); }
        }
    }
    

    假设您还没有找到答案,我希望这会有所帮助。 :D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 2013-10-31
      • 2013-10-15
      • 2015-06-23
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多