diff --git a/src/Constants.ts b/src/Constants.ts index 353eaf8e6..9fcb0a9d1 100644 --- a/src/Constants.ts +++ b/src/Constants.ts @@ -124,7 +124,7 @@ export const CONSTANTS: { // NeuroFlux Governor Augmentation cost multiplier NeuroFluxGovernorLevelMult: 1.14, - NumNetscriptPorts: 20, + NumNetscriptPorts: Infinity, // Server-related constants HomeComputerMaxRam: 1073741824, // 2 ^ 30 diff --git a/src/Netscript/NetscriptHelpers.ts b/src/Netscript/NetscriptHelpers.ts index e420c226d..0cfa2db1b 100644 --- a/src/Netscript/NetscriptHelpers.ts +++ b/src/Netscript/NetscriptHelpers.ts @@ -20,7 +20,7 @@ import { convertTimeMsToTimeElapsedString } from "../utils/StringHelperFunctions import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers"; import { CONSTANTS } from "../Constants"; import { influenceStockThroughServerHack } from "../StockMarket/PlayerInfluencing"; -import { IPort } from "../NetscriptPort"; +import { IPort, NetscriptPort } from "../NetscriptPort"; import { NetscriptPorts } from "../NetscriptWorker"; import { IPlayer } from "../PersonObjects/IPlayer"; import { FormulaGang } from "../Gang/formulas/formulas"; @@ -492,10 +492,16 @@ function getValidPort(ctx: NetscriptContext, port: number): IPort { `Trying to use an invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`, ); } - const iport = NetscriptPorts[port - 1]; + let iport = NetscriptPorts.get(port); if (iport == null || !(iport instanceof Object)) { - throw makeRuntimeErrorMsg(ctx, `Could not find port: ${port}. This is a bug. Report to dev.`); + NetscriptPorts.set(port, NetscriptPort()); } + // Try again. + iport = NetscriptPorts.get(port); + if (iport == null || !(iport instanceof Object)) { + throw helpers.makeRuntimeErrorMsg(ctx, `Could not find port: ${port}. This is a bug. Report to dev.`); + } + return iport; } @@ -607,7 +613,7 @@ function getRunningScriptByArgs( throw helpers.makeRuntimeRejectMsg( ctx.workerScript, `Invalid scriptArgs argument passed into getRunningScript() from ${ctx.function}(). ` + - `This is probably a bug. Please report to game developer`, + `This is probably a bug. Please report to game developer`, ); } diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index 96952422f..91c43a637 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -54,7 +54,7 @@ import { NetscriptCorporation } from "./NetscriptFunctions/Corporation"; import { NetscriptFormulas } from "./NetscriptFunctions/Formulas"; import { NetscriptStockMarket } from "./NetscriptFunctions/StockMarket"; import { NetscriptGrafting } from "./NetscriptFunctions/Grafting"; -import { IPort } from "./NetscriptPort"; +import { NetscriptPort, IPort } from "./NetscriptPort"; import { NS, Player as INetscriptPlayer, @@ -1533,7 +1533,12 @@ const base: InternalAPI = { `Invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`, ); } - const iport = NetscriptPorts[port - 1]; + let iport = NetscriptPorts.get(port); + if (iport == null || !(iport instanceof Object)) { + NetscriptPorts.set(port, NetscriptPort()); + } + // Try again. + iport = NetscriptPorts.get(port); if (iport == null || !(iport instanceof Object)) { throw helpers.makeRuntimeErrorMsg(ctx, `Could not find port: ${port}. This is a bug. Report to dev.`); } diff --git a/src/NetscriptWorker.ts b/src/NetscriptWorker.ts index 6dc79dd0c..c59e64ff9 100644 --- a/src/NetscriptWorker.ts +++ b/src/NetscriptWorker.ts @@ -13,7 +13,7 @@ import { CONSTANTS } from "./Constants"; import { Interpreter } from "./ThirdParty/JSInterpreter"; import { NetscriptFunctions } from "./NetscriptFunctions"; import { executeJSScript, Node } from "./NetscriptJSEvaluator"; -import { NetscriptPort, IPort } from "./NetscriptPort"; +import { IPort } from "./NetscriptPort"; import { RunningScript } from "./Script/RunningScript"; import { getRamUsageFromRunningScript } from "./Script/RunningScriptHelpers"; import { scriptCalculateOfflineProduction } from "./Script/ScriptHelpers"; @@ -38,17 +38,15 @@ import { ScriptArg } from "./Netscript/ScriptArg"; import { helpers } from "./Netscript/NetscriptHelpers"; // Netscript Ports are instantiated here -export const NetscriptPorts: IPort[] = []; -for (let i = 0; i < CONSTANTS.NumNetscriptPorts; ++i) { - NetscriptPorts.push(NetscriptPort()); -} +export const NetscriptPorts: Map = new Map(); export function prestigeWorkerScripts(): void { for (const ws of workerScripts.values()) { ws.env.stopFlag = true; killWorkerScript(ws); } - for (const port of NetscriptPorts) { + + for (const [__, port] of NetscriptPorts.entries()) { port.clear(); }