mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-23 22:52:29 +01:00
(feat) optional threads argument to netscript functions hack, weaken, grow
This commit is contained in:
parent
585e1ac7aa
commit
44c26165f4
@ -155,6 +155,21 @@ export function makeRuntimeRejectMsg(workerScript, msg, exp=null) {
|
|||||||
return "|"+workerScript.serverIp+"|"+workerScript.name+"|" + msg + lineNum;
|
return "|"+workerScript.serverIp+"|"+workerScript.name+"|" + msg + lineNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function resolveNetscriptRequestedThreads(workerScript, functionName, requestedThreads) {
|
||||||
|
const threads = workerScript.scriptRef.threads;
|
||||||
|
if (!requestedThreads) {
|
||||||
|
return isNaN(threads) || threads < 1 ? 1 : threads;
|
||||||
|
}
|
||||||
|
const requestedThreadsAsInt = requestedThreads|0;
|
||||||
|
if (isNaN(requestedThreads) || requestedThreadsAsInt < 1) {
|
||||||
|
throw makeRuntimeRejectMsg(workerScript, `Invalid thread count passed to ${functionName}: ${requestedThreads}. Threads must be a positive number.`);
|
||||||
|
}
|
||||||
|
if (requestedThreads > threads) {
|
||||||
|
throw makeRuntimeRejectMsg(workerScript, `Too many threads requested by ${functionName}. Requested: ${requestedThreads}. Has: ${threads}.`);
|
||||||
|
}
|
||||||
|
return requestedThreadsAsInt;
|
||||||
|
}
|
||||||
|
|
||||||
//Run a script from inside a script using run() command
|
//Run a script from inside a script using run() command
|
||||||
export function runScriptFromScript(server, scriptname, args, workerScript, threads=1) {
|
export function runScriptFromScript(server, scriptname, args, workerScript, threads=1) {
|
||||||
//Check if the script is already running
|
//Check if the script is already running
|
||||||
|
@ -113,7 +113,8 @@ import {
|
|||||||
import {
|
import {
|
||||||
makeRuntimeRejectMsg,
|
makeRuntimeRejectMsg,
|
||||||
netscriptDelay,
|
netscriptDelay,
|
||||||
runScriptFromScript
|
resolveNetscriptRequestedThreads,
|
||||||
|
runScriptFromScript,
|
||||||
} from "./NetscriptEvaluator";
|
} from "./NetscriptEvaluator";
|
||||||
import { NetscriptPort } from "./NetscriptPort";
|
import { NetscriptPort } from "./NetscriptPort";
|
||||||
import { SleeveTaskType } from "./PersonObjects/Sleeve/SleeveTaskTypesEnum";
|
import { SleeveTaskType } from "./PersonObjects/Sleeve/SleeveTaskTypesEnum";
|
||||||
@ -467,7 +468,7 @@ function NetscriptFunctions(workerScript) {
|
|||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
},
|
},
|
||||||
hack : function(ip){
|
hack : function(ip, { threads: requestedThreads } = {}){
|
||||||
if (workerScript.checkingRam) {
|
if (workerScript.checkingRam) {
|
||||||
return updateStaticRam("hack", CONSTANTS.ScriptHackRamCost);
|
return updateStaticRam("hack", CONSTANTS.ScriptHackRamCost);
|
||||||
}
|
}
|
||||||
@ -475,8 +476,7 @@ function NetscriptFunctions(workerScript) {
|
|||||||
if (ip === undefined) {
|
if (ip === undefined) {
|
||||||
throw makeRuntimeRejectMsg(workerScript, "Hack() call has incorrect number of arguments. Takes 1 argument");
|
throw makeRuntimeRejectMsg(workerScript, "Hack() call has incorrect number of arguments. Takes 1 argument");
|
||||||
}
|
}
|
||||||
var threads = workerScript.scriptRef.threads;
|
var threads = resolveNetscriptRequestedThreads(workerScript, "hack", requestedThreads);
|
||||||
if (isNaN(threads) || threads < 1) {threads = 1;}
|
|
||||||
var server = getServer(ip);
|
var server = getServer(ip);
|
||||||
if (server == null) {
|
if (server == null) {
|
||||||
workerScript.scriptRef.log("hack() error. Invalid IP or hostname passed in: " + ip + ". Stopping...");
|
workerScript.scriptRef.log("hack() error. Invalid IP or hostname passed in: " + ip + ". Stopping...");
|
||||||
@ -597,13 +597,12 @@ function NetscriptFunctions(workerScript) {
|
|||||||
return Promise.resolve(true);
|
return Promise.resolve(true);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
grow : function(ip){
|
grow : function(ip, { threads: requestedThreads } = {}){
|
||||||
if (workerScript.checkingRam) {
|
if (workerScript.checkingRam) {
|
||||||
return updateStaticRam("grow", CONSTANTS.ScriptGrowRamCost);
|
return updateStaticRam("grow", CONSTANTS.ScriptGrowRamCost);
|
||||||
}
|
}
|
||||||
updateDynamicRam("grow", CONSTANTS.ScriptGrowRamCost);
|
updateDynamicRam("grow", CONSTANTS.ScriptGrowRamCost);
|
||||||
var threads = workerScript.scriptRef.threads;
|
var threads = resolveNetscriptRequestedThreads(workerScript, "grow", requestedThreads);
|
||||||
if (isNaN(threads) || threads < 1) {threads = 1;}
|
|
||||||
if (ip === undefined) {
|
if (ip === undefined) {
|
||||||
throw makeRuntimeRejectMsg(workerScript, "grow() call has incorrect number of arguments. Takes 1 argument");
|
throw makeRuntimeRejectMsg(workerScript, "grow() call has incorrect number of arguments. Takes 1 argument");
|
||||||
}
|
}
|
||||||
@ -659,13 +658,12 @@ function NetscriptFunctions(workerScript) {
|
|||||||
|
|
||||||
return numCycleForGrowth(server, Number(growth), Player);
|
return numCycleForGrowth(server, Number(growth), Player);
|
||||||
},
|
},
|
||||||
weaken : function(ip) {
|
weaken : function(ip, { threads: requestedThreads } = {}) {
|
||||||
if (workerScript.checkingRam) {
|
if (workerScript.checkingRam) {
|
||||||
return updateStaticRam("weaken", CONSTANTS.ScriptWeakenRamCost);
|
return updateStaticRam("weaken", CONSTANTS.ScriptWeakenRamCost);
|
||||||
}
|
}
|
||||||
updateDynamicRam("weaken", CONSTANTS.ScriptWeakenRamCost);
|
updateDynamicRam("weaken", CONSTANTS.ScriptWeakenRamCost);
|
||||||
var threads = workerScript.scriptRef.threads;
|
var threads = resolveNetscriptRequestedThreads(workerScript, "weaken", requestedThreads)
|
||||||
if (isNaN(threads) || threads < 1) {threads = 1;}
|
|
||||||
if (ip === undefined) {
|
if (ip === undefined) {
|
||||||
throw makeRuntimeRejectMsg(workerScript, "weaken() call has incorrect number of arguments. Takes 1 argument");
|
throw makeRuntimeRejectMsg(workerScript, "weaken() call has incorrect number of arguments. Takes 1 argument");
|
||||||
}
|
}
|
||||||
|
@ -219,9 +219,17 @@ function startNetscript1Script(workerScript) {
|
|||||||
name === "prompt" || name === "run" || name === "exec") {
|
name === "prompt" || name === "run" || name === "exec") {
|
||||||
let tempWrapper = function() {
|
let tempWrapper = function() {
|
||||||
let fnArgs = [];
|
let fnArgs = [];
|
||||||
|
|
||||||
|
//All of the Object/array elements are in JSInterpreter format, so
|
||||||
|
//we have to convert them back to native format to pass them to these fns
|
||||||
for (let i = 0; i < arguments.length-1; ++i) {
|
for (let i = 0; i < arguments.length-1; ++i) {
|
||||||
|
if (typeof arguments[i] === 'object' || arguments[i].constructor === Array) {
|
||||||
|
fnArgs.push(int.pseudoToNative(arguments[i]));
|
||||||
|
} else {
|
||||||
fnArgs.push(arguments[i]);
|
fnArgs.push(arguments[i]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
console.log(fnArgs);
|
||||||
let cb = arguments[arguments.length-1];
|
let cb = arguments[arguments.length-1];
|
||||||
let fnPromise = entry.apply(null, fnArgs);
|
let fnPromise = entry.apply(null, fnArgs);
|
||||||
fnPromise.then(function(res) {
|
fnPromise.then(function(res) {
|
||||||
|
Loading…
Reference in New Issue
Block a user