diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index 5134fd41d..c5bcf067f 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -34,6 +34,7 @@ import { RunningScript } from "./Script/RunningScript"; import { getServerOnNetwork, numCycleForGrowth, + numCycleForGrowthCorrected, processSingleServerGrowth, safetlyCreateUniqueServer, } from "./Server/ServerHelpers"; @@ -633,7 +634,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { if (percentHacked > 0) { // thread count is limited to the maximum number of threads needed - threads = Math.ceil(1 / percentHacked); + threads = Math.min(threads, Math.ceil(1 / percentHacked)); } } @@ -752,9 +753,26 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { return numCycleForGrowth(server, Number(growth), Player, cores); }, - growthAnalyzeSecurity: function (_threads: unknown): number { + growthAnalyzeSecurity: function (_threads: unknown, _hostname?: unknown, _cores?: unknown): number { updateDynamicRam("growthAnalyzeSecurity", getRamCost(Player, "growthAnalyzeSecurity")); - const threads = helper.number("growthAnalyzeSecurity", "threads", _threads); + let threads = helper.number("growthAnalyzeSecurity", "threads", _threads); + if (_hostname) { + const cores = helper.number("growthAnalyzeSecurity", "cores", _cores) || 1; + const hostname = helper.string("growthAnalyzeSecurity", "hostname", _hostname); + const server = safeGetServer(hostname, "growthAnalyzeSecurity"); + + if (!(server instanceof Server)) { + workerScript.log("growthAnalyzeSecurity", () => "Cannot be executed on this server."); + return 0; + } + + const maxThreadsNeeded = Math.ceil( + numCycleForGrowthCorrected(server, server.moneyMax, server.moneyAvailable, Player, cores), + ); + + threads = Math.min(threads, maxThreadsNeeded); + } + return 2 * CONSTANTS.ServerFortifyAmount * threads; }, weaken: async function (_hostname: unknown, { threads: requestedThreads }: BasicHGWOptions = {}): Promise { diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index ea24c261b..271ca9e7a 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -4647,9 +4647,11 @@ export interface NS { * Returns the security increase that would occur if a grow with this many threads happened. * * @param threads - Amount of threads that will be used. + * @param hostname - Optional. Hostname of the target server. The number of threads is limited to the number needed to hack the servers maximum amount of money. + * @param cores - Optional. The number of cores of the server that would run grow. * @returns The security increase. */ - growthAnalyzeSecurity(threads: number): number; + growthAnalyzeSecurity(threads: number, hostname?: string, cores?: number): number; /** * Suspends the script for n milliseconds.