mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-29 20:37:05 +02:00
prettify, sorry for the big ass commit
This commit is contained in:
@@ -5,71 +5,71 @@
|
||||
import { IMap } from "../types";
|
||||
|
||||
export class Environment {
|
||||
/**
|
||||
* Parent environment. Used to implement "scope"
|
||||
*/
|
||||
parent: Environment | null = null;
|
||||
/**
|
||||
* Parent environment. Used to implement "scope"
|
||||
*/
|
||||
parent: Environment | null = null;
|
||||
|
||||
/**
|
||||
* Whether or not the script that uses this Environment should stop running
|
||||
*/
|
||||
stopFlag = false;
|
||||
/**
|
||||
* Whether or not the script that uses this Environment should stop running
|
||||
*/
|
||||
stopFlag = false;
|
||||
|
||||
/**
|
||||
* Environment variables (currently only Netscript functions)
|
||||
*/
|
||||
vars: IMap<any> = {};
|
||||
/**
|
||||
* Environment variables (currently only Netscript functions)
|
||||
*/
|
||||
vars: IMap<any> = {};
|
||||
|
||||
constructor(parent: Environment | null) {
|
||||
if (parent instanceof Environment) {
|
||||
this.vars = Object.assign({}, parent.vars);
|
||||
}
|
||||
|
||||
this.parent = parent;
|
||||
constructor(parent: Environment | null) {
|
||||
if (parent instanceof Environment) {
|
||||
this.vars = Object.assign({}, parent.vars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the scope where the variable with the given name is defined
|
||||
*/
|
||||
lookup(name: string): Environment | null {
|
||||
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
||||
let scope: Environment | null = this;
|
||||
while (scope) {
|
||||
if (Object.prototype.hasOwnProperty.call(scope.vars, name)) {
|
||||
return scope;
|
||||
}
|
||||
scope = scope.parent;
|
||||
}
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
return null;
|
||||
/**
|
||||
* Finds the scope where the variable with the given name is defined
|
||||
*/
|
||||
lookup(name: string): Environment | null {
|
||||
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
||||
let scope: Environment | null = this;
|
||||
while (scope) {
|
||||
if (Object.prototype.hasOwnProperty.call(scope.vars, name)) {
|
||||
return scope;
|
||||
}
|
||||
scope = scope.parent;
|
||||
}
|
||||
|
||||
//Get the current value of a variable
|
||||
get(name: string): any {
|
||||
if (name in this.vars) {
|
||||
return this.vars[name];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
throw new Error(`Undefined variable ${name}`);
|
||||
//Get the current value of a variable
|
||||
get(name: string): any {
|
||||
if (name in this.vars) {
|
||||
return this.vars[name];
|
||||
}
|
||||
|
||||
//Sets the value of a variable in any scope
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
set(name: string, value: any): any {
|
||||
const scope = this.lookup(name);
|
||||
throw new Error(`Undefined variable ${name}`);
|
||||
}
|
||||
|
||||
//If scope has a value, then this variable is already set in a higher scope, so
|
||||
//set is there. Otherwise, create a new variable in the local scope
|
||||
if (scope !== null) {
|
||||
return scope.vars[name] = value;
|
||||
} else {
|
||||
return this.vars[name] = value;
|
||||
}
|
||||
}
|
||||
//Sets the value of a variable in any scope
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
set(name: string, value: any): any {
|
||||
const scope = this.lookup(name);
|
||||
|
||||
//Creates (or overwrites) a variable in the current scope
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
def(name: string, value: any): any {
|
||||
return this.vars[name] = value;
|
||||
//If scope has a value, then this variable is already set in a higher scope, so
|
||||
//set is there. Otherwise, create a new variable in the local scope
|
||||
if (scope !== null) {
|
||||
return (scope.vars[name] = value);
|
||||
} else {
|
||||
return (this.vars[name] = value);
|
||||
}
|
||||
}
|
||||
|
||||
//Creates (or overwrites) a variable in the current scope
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
def(name: string, value: any): any {
|
||||
return (this.vars[name] = value);
|
||||
}
|
||||
}
|
||||
|
||||
+26
-26
@@ -6,37 +6,37 @@ let pidCounter = 1;
|
||||
* Find and return the next availble PID for a script
|
||||
*/
|
||||
export function generateNextPid(): number {
|
||||
let tempCounter = pidCounter;
|
||||
let tempCounter = pidCounter;
|
||||
|
||||
// Cap the number of search iterations at some arbitrary value to avoid
|
||||
// infinite loops. We'll assume that players wont have 1mil+ running scripts
|
||||
let found = false;
|
||||
for (let i = 0; i < 1e6;) {
|
||||
if (!workerScripts.has(tempCounter + i)) {
|
||||
found = true;
|
||||
tempCounter = tempCounter + i;
|
||||
break;
|
||||
}
|
||||
|
||||
if (i === Number.MAX_SAFE_INTEGER - 1) {
|
||||
i = 1;
|
||||
} else {
|
||||
++i;
|
||||
}
|
||||
// Cap the number of search iterations at some arbitrary value to avoid
|
||||
// infinite loops. We'll assume that players wont have 1mil+ running scripts
|
||||
let found = false;
|
||||
for (let i = 0; i < 1e6; ) {
|
||||
if (!workerScripts.has(tempCounter + i)) {
|
||||
found = true;
|
||||
tempCounter = tempCounter + i;
|
||||
break;
|
||||
}
|
||||
|
||||
if (found) {
|
||||
pidCounter = tempCounter + 1;
|
||||
if (pidCounter >= Number.MAX_SAFE_INTEGER) {
|
||||
pidCounter = 1;
|
||||
}
|
||||
|
||||
return tempCounter;
|
||||
if (i === Number.MAX_SAFE_INTEGER - 1) {
|
||||
i = 1;
|
||||
} else {
|
||||
return -1;
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
if (found) {
|
||||
pidCounter = tempCounter + 1;
|
||||
if (pidCounter >= Number.MAX_SAFE_INTEGER) {
|
||||
pidCounter = 1;
|
||||
}
|
||||
|
||||
return tempCounter;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
export function resetPidCounter(): void {
|
||||
pidCounter = 1;
|
||||
}
|
||||
pidCounter = 1;
|
||||
}
|
||||
|
||||
+343
-325
@@ -4,349 +4,367 @@ import { IMap } from "../types";
|
||||
|
||||
// RAM costs for Netscript functions
|
||||
export const RamCostConstants: IMap<number> = {
|
||||
ScriptBaseRamCost: 1.6,
|
||||
ScriptDomRamCost: 25,
|
||||
ScriptHackRamCost: 0.1,
|
||||
ScriptHackAnalyzeRamCost: 1,
|
||||
ScriptGrowRamCost: 0.15,
|
||||
ScriptGrowthAnalyzeRamCost: 1,
|
||||
ScriptWeakenRamCost: 0.15,
|
||||
ScriptScanRamCost: 0.2,
|
||||
ScriptPortProgramRamCost: 0.05,
|
||||
ScriptRunRamCost: 1.0,
|
||||
ScriptExecRamCost: 1.3,
|
||||
ScriptSpawnRamCost: 2.0,
|
||||
ScriptScpRamCost: 0.6,
|
||||
ScriptKillRamCost: 0.5,
|
||||
ScriptHasRootAccessRamCost: 0.05,
|
||||
ScriptGetHostnameRamCost: 0.05,
|
||||
ScriptGetHackingLevelRamCost: 0.05,
|
||||
ScriptGetMultipliersRamCost: 4.0,
|
||||
ScriptGetServerRamCost: 0.1,
|
||||
ScriptGetServerMaxRam: 0.05,
|
||||
ScriptGetServerUsedRam: 0.05,
|
||||
ScriptFileExistsRamCost: 0.1,
|
||||
ScriptIsRunningRamCost: 0.1,
|
||||
ScriptHacknetNodesRamCost: 4.0,
|
||||
ScriptHNUpgLevelRamCost: 0.4,
|
||||
ScriptHNUpgRamRamCost: 0.6,
|
||||
ScriptHNUpgCoreRamCost: 0.8,
|
||||
ScriptGetStockRamCost: 2.0,
|
||||
ScriptBuySellStockRamCost: 2.5,
|
||||
ScriptGetPurchaseServerRamCost: 0.25,
|
||||
ScriptPurchaseServerRamCost: 2.25,
|
||||
ScriptGetPurchasedServerLimit: 0.05,
|
||||
ScriptGetPurchasedServerMaxRam: 0.05,
|
||||
ScriptRoundRamCost: 0.05,
|
||||
ScriptReadWriteRamCost: 1.0,
|
||||
ScriptArbScriptRamCost: 1.0,
|
||||
ScriptGetScriptRamCost: 0.1,
|
||||
ScriptGetRunningScriptRamCost: 0.3,
|
||||
ScriptGetHackTimeRamCost: 0.05,
|
||||
ScriptGetFavorToDonate: 0.10,
|
||||
ScriptCodingContractBaseRamCost: 10,
|
||||
ScriptSleeveBaseRamCost: 4,
|
||||
ScriptBaseRamCost: 1.6,
|
||||
ScriptDomRamCost: 25,
|
||||
ScriptHackRamCost: 0.1,
|
||||
ScriptHackAnalyzeRamCost: 1,
|
||||
ScriptGrowRamCost: 0.15,
|
||||
ScriptGrowthAnalyzeRamCost: 1,
|
||||
ScriptWeakenRamCost: 0.15,
|
||||
ScriptScanRamCost: 0.2,
|
||||
ScriptPortProgramRamCost: 0.05,
|
||||
ScriptRunRamCost: 1.0,
|
||||
ScriptExecRamCost: 1.3,
|
||||
ScriptSpawnRamCost: 2.0,
|
||||
ScriptScpRamCost: 0.6,
|
||||
ScriptKillRamCost: 0.5,
|
||||
ScriptHasRootAccessRamCost: 0.05,
|
||||
ScriptGetHostnameRamCost: 0.05,
|
||||
ScriptGetHackingLevelRamCost: 0.05,
|
||||
ScriptGetMultipliersRamCost: 4.0,
|
||||
ScriptGetServerRamCost: 0.1,
|
||||
ScriptGetServerMaxRam: 0.05,
|
||||
ScriptGetServerUsedRam: 0.05,
|
||||
ScriptFileExistsRamCost: 0.1,
|
||||
ScriptIsRunningRamCost: 0.1,
|
||||
ScriptHacknetNodesRamCost: 4.0,
|
||||
ScriptHNUpgLevelRamCost: 0.4,
|
||||
ScriptHNUpgRamRamCost: 0.6,
|
||||
ScriptHNUpgCoreRamCost: 0.8,
|
||||
ScriptGetStockRamCost: 2.0,
|
||||
ScriptBuySellStockRamCost: 2.5,
|
||||
ScriptGetPurchaseServerRamCost: 0.25,
|
||||
ScriptPurchaseServerRamCost: 2.25,
|
||||
ScriptGetPurchasedServerLimit: 0.05,
|
||||
ScriptGetPurchasedServerMaxRam: 0.05,
|
||||
ScriptRoundRamCost: 0.05,
|
||||
ScriptReadWriteRamCost: 1.0,
|
||||
ScriptArbScriptRamCost: 1.0,
|
||||
ScriptGetScriptRamCost: 0.1,
|
||||
ScriptGetRunningScriptRamCost: 0.3,
|
||||
ScriptGetHackTimeRamCost: 0.05,
|
||||
ScriptGetFavorToDonate: 0.1,
|
||||
ScriptCodingContractBaseRamCost: 10,
|
||||
ScriptSleeveBaseRamCost: 4,
|
||||
|
||||
ScriptSingularityFn1RamCost: 2,
|
||||
ScriptSingularityFn2RamCost: 3,
|
||||
ScriptSingularityFn3RamCost: 5,
|
||||
ScriptSingularityFn1RamCost: 2,
|
||||
ScriptSingularityFn2RamCost: 3,
|
||||
ScriptSingularityFn3RamCost: 5,
|
||||
|
||||
ScriptGangApiBaseRamCost: 4,
|
||||
ScriptGangApiBaseRamCost: 4,
|
||||
|
||||
ScriptBladeburnerApiBaseRamCost: 4,
|
||||
}
|
||||
ScriptBladeburnerApiBaseRamCost: 4,
|
||||
};
|
||||
|
||||
export const RamCosts: IMap<any> = {
|
||||
hacknet: {
|
||||
numNodes: () => 0,
|
||||
purchaseNode: () => 0,
|
||||
getPurchaseNodeCost: () => 0,
|
||||
getNodeStats: () => 0,
|
||||
upgradeLevel: () => 0,
|
||||
upgradeRam: () => 0,
|
||||
upgradeCore: () => 0,
|
||||
upgradeCache: () => 0,
|
||||
getLevelUpgradeCost: () => 0,
|
||||
getRamUpgradeCost: () => 0,
|
||||
getCoreUpgradeCost: () => 0,
|
||||
getCacheUpgradeCost: () => 0,
|
||||
numHashes: () => 0,
|
||||
hashCost: () => 0,
|
||||
spendHashes: () => 0,
|
||||
},
|
||||
sprintf: () => 0,
|
||||
vsprintf: () => 0,
|
||||
scan: () => RamCostConstants.ScriptScanRamCost,
|
||||
hack: () => RamCostConstants.ScriptHackRamCost,
|
||||
hackAnalyzeThreads: () => RamCostConstants.ScriptHackAnalyzeRamCost,
|
||||
hackAnalyzePercent: () => RamCostConstants.ScriptHackAnalyzeRamCost,
|
||||
hackChance: () => RamCostConstants.ScriptHackAnalyzeRamCost,
|
||||
sleep: () => 0,
|
||||
grow: () => RamCostConstants.ScriptGrowRamCost,
|
||||
growthAnalyze: () => RamCostConstants.ScriptGrowthAnalyzeRamCost,
|
||||
weaken: () => RamCostConstants.ScriptWeakenRamCost,
|
||||
print: () => 0,
|
||||
tprint: () => 0,
|
||||
clearLog: () => 0,
|
||||
disableLog: () => 0,
|
||||
enableLog: () => 0,
|
||||
isLogEnabled: () => 0,
|
||||
getScriptLogs: () => 0,
|
||||
nuke: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
brutessh: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
ftpcrack: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
relaysmtp: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
httpworm: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
sqlinject: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
run: () => RamCostConstants.ScriptRunRamCost,
|
||||
exec: () => RamCostConstants.ScriptExecRamCost,
|
||||
spawn: () => RamCostConstants.ScriptSpawnRamCost,
|
||||
kill: () => RamCostConstants.ScriptKillRamCost,
|
||||
killall: () => RamCostConstants.ScriptKillRamCost,
|
||||
exit: () => 0,
|
||||
scp: () => RamCostConstants.ScriptScpRamCost,
|
||||
ls: () => RamCostConstants.ScriptScanRamCost,
|
||||
ps: () => RamCostConstants.ScriptScanRamCost,
|
||||
hasRootAccess: () => RamCostConstants.ScriptHasRootAccessRamCost,
|
||||
getIp: () => RamCostConstants.ScriptGetHostnameRamCost,
|
||||
getHostname: () => RamCostConstants.ScriptGetHostnameRamCost,
|
||||
getHackingLevel: () => RamCostConstants.ScriptGetHackingLevelRamCost,
|
||||
getHackingMultipliers: () => RamCostConstants.ScriptGetMultipliersRamCost,
|
||||
getHacknetMultipliers: () => RamCostConstants.ScriptGetMultipliersRamCost,
|
||||
getBitNodeMultipliers: () => RamCostConstants.ScriptGetMultipliersRamCost,
|
||||
getServer: () => RamCostConstants.ScriptGetMultipliersRamCost / 2,
|
||||
getServerMoneyAvailable: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerSecurityLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerBaseSecurityLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerMinSecurityLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerRequiredHackingLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerMaxMoney: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerGrowth: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerNumPortsRequired: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerRam: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerMaxRam: () => RamCostConstants.ScriptGetServerMaxRam,
|
||||
getServerUsedRam: () => RamCostConstants.ScriptGetServerUsedRam,
|
||||
serverExists: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
fileExists: () => RamCostConstants.ScriptFileExistsRamCost,
|
||||
isRunning: () => RamCostConstants.ScriptIsRunningRamCost,
|
||||
getStockSymbols: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockPrice: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockAskPrice: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockBidPrice: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockPosition: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockMaxShares: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockPurchaseCost: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockSaleGain: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
buyStock: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
sellStock: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
shortStock: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
sellShort: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
placeOrder: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
cancelOrder: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getOrders: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getStockVolatility: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getStockForecast: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
purchase4SMarketData: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
purchase4SMarketDataTixApi: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getPurchasedServerLimit: () => RamCostConstants.ScriptGetPurchasedServerLimit,
|
||||
getPurchasedServerMaxRam: () => RamCostConstants.ScriptGetPurchasedServerMaxRam,
|
||||
getPurchasedServerCost: () => RamCostConstants.ScriptGetPurchaseServerRamCost,
|
||||
purchaseServer: () => RamCostConstants.ScriptPurchaseServerRamCost,
|
||||
deleteServer: () => RamCostConstants.ScriptPurchaseServerRamCost,
|
||||
getPurchasedServers: () => RamCostConstants.ScriptPurchaseServerRamCost,
|
||||
write: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
tryWrite: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
read: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
peek: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
clear: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
getPortHandle: () => RamCostConstants.ScriptReadWriteRamCost * 10,
|
||||
rm: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
scriptRunning: () => RamCostConstants.ScriptArbScriptRamCost,
|
||||
scriptKill: () => RamCostConstants.ScriptArbScriptRamCost,
|
||||
getScriptName: () => 0,
|
||||
getScriptRam: () => RamCostConstants.ScriptGetScriptRamCost,
|
||||
getHackTime: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
getGrowTime: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
getWeakenTime: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
getScriptIncome: () => RamCostConstants.ScriptGetScriptRamCost,
|
||||
getScriptExpGain: () => RamCostConstants.ScriptGetScriptRamCost,
|
||||
getRunningScript: () => RamCostConstants.ScriptGetRunningScriptRamCost,
|
||||
nFormat: () => 0,
|
||||
getTimeSinceLastAug: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
prompt: () => 0,
|
||||
wget: () => 0,
|
||||
getFavorToDonate: () => RamCostConstants.ScriptGetFavorToDonate,
|
||||
hacknet: {
|
||||
numNodes: () => 0,
|
||||
purchaseNode: () => 0,
|
||||
getPurchaseNodeCost: () => 0,
|
||||
getNodeStats: () => 0,
|
||||
upgradeLevel: () => 0,
|
||||
upgradeRam: () => 0,
|
||||
upgradeCore: () => 0,
|
||||
upgradeCache: () => 0,
|
||||
getLevelUpgradeCost: () => 0,
|
||||
getRamUpgradeCost: () => 0,
|
||||
getCoreUpgradeCost: () => 0,
|
||||
getCacheUpgradeCost: () => 0,
|
||||
numHashes: () => 0,
|
||||
hashCost: () => 0,
|
||||
spendHashes: () => 0,
|
||||
},
|
||||
sprintf: () => 0,
|
||||
vsprintf: () => 0,
|
||||
scan: () => RamCostConstants.ScriptScanRamCost,
|
||||
hack: () => RamCostConstants.ScriptHackRamCost,
|
||||
hackAnalyzeThreads: () => RamCostConstants.ScriptHackAnalyzeRamCost,
|
||||
hackAnalyzePercent: () => RamCostConstants.ScriptHackAnalyzeRamCost,
|
||||
hackChance: () => RamCostConstants.ScriptHackAnalyzeRamCost,
|
||||
sleep: () => 0,
|
||||
grow: () => RamCostConstants.ScriptGrowRamCost,
|
||||
growthAnalyze: () => RamCostConstants.ScriptGrowthAnalyzeRamCost,
|
||||
weaken: () => RamCostConstants.ScriptWeakenRamCost,
|
||||
print: () => 0,
|
||||
tprint: () => 0,
|
||||
clearLog: () => 0,
|
||||
disableLog: () => 0,
|
||||
enableLog: () => 0,
|
||||
isLogEnabled: () => 0,
|
||||
getScriptLogs: () => 0,
|
||||
nuke: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
brutessh: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
ftpcrack: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
relaysmtp: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
httpworm: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
sqlinject: () => RamCostConstants.ScriptPortProgramRamCost,
|
||||
run: () => RamCostConstants.ScriptRunRamCost,
|
||||
exec: () => RamCostConstants.ScriptExecRamCost,
|
||||
spawn: () => RamCostConstants.ScriptSpawnRamCost,
|
||||
kill: () => RamCostConstants.ScriptKillRamCost,
|
||||
killall: () => RamCostConstants.ScriptKillRamCost,
|
||||
exit: () => 0,
|
||||
scp: () => RamCostConstants.ScriptScpRamCost,
|
||||
ls: () => RamCostConstants.ScriptScanRamCost,
|
||||
ps: () => RamCostConstants.ScriptScanRamCost,
|
||||
hasRootAccess: () => RamCostConstants.ScriptHasRootAccessRamCost,
|
||||
getIp: () => RamCostConstants.ScriptGetHostnameRamCost,
|
||||
getHostname: () => RamCostConstants.ScriptGetHostnameRamCost,
|
||||
getHackingLevel: () => RamCostConstants.ScriptGetHackingLevelRamCost,
|
||||
getHackingMultipliers: () => RamCostConstants.ScriptGetMultipliersRamCost,
|
||||
getHacknetMultipliers: () => RamCostConstants.ScriptGetMultipliersRamCost,
|
||||
getBitNodeMultipliers: () => RamCostConstants.ScriptGetMultipliersRamCost,
|
||||
getServer: () => RamCostConstants.ScriptGetMultipliersRamCost / 2,
|
||||
getServerMoneyAvailable: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerSecurityLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerBaseSecurityLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerMinSecurityLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerRequiredHackingLevel: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerMaxMoney: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerGrowth: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerNumPortsRequired: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerRam: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
getServerMaxRam: () => RamCostConstants.ScriptGetServerMaxRam,
|
||||
getServerUsedRam: () => RamCostConstants.ScriptGetServerUsedRam,
|
||||
serverExists: () => RamCostConstants.ScriptGetServerRamCost,
|
||||
fileExists: () => RamCostConstants.ScriptFileExistsRamCost,
|
||||
isRunning: () => RamCostConstants.ScriptIsRunningRamCost,
|
||||
getStockSymbols: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockPrice: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockAskPrice: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockBidPrice: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockPosition: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockMaxShares: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockPurchaseCost: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
getStockSaleGain: () => RamCostConstants.ScriptGetStockRamCost,
|
||||
buyStock: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
sellStock: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
shortStock: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
sellShort: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
placeOrder: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
cancelOrder: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getOrders: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getStockVolatility: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getStockForecast: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
purchase4SMarketData: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
purchase4SMarketDataTixApi: () => RamCostConstants.ScriptBuySellStockRamCost,
|
||||
getPurchasedServerLimit: () => RamCostConstants.ScriptGetPurchasedServerLimit,
|
||||
getPurchasedServerMaxRam: () =>
|
||||
RamCostConstants.ScriptGetPurchasedServerMaxRam,
|
||||
getPurchasedServerCost: () => RamCostConstants.ScriptGetPurchaseServerRamCost,
|
||||
purchaseServer: () => RamCostConstants.ScriptPurchaseServerRamCost,
|
||||
deleteServer: () => RamCostConstants.ScriptPurchaseServerRamCost,
|
||||
getPurchasedServers: () => RamCostConstants.ScriptPurchaseServerRamCost,
|
||||
write: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
tryWrite: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
read: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
peek: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
clear: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
getPortHandle: () => RamCostConstants.ScriptReadWriteRamCost * 10,
|
||||
rm: () => RamCostConstants.ScriptReadWriteRamCost,
|
||||
scriptRunning: () => RamCostConstants.ScriptArbScriptRamCost,
|
||||
scriptKill: () => RamCostConstants.ScriptArbScriptRamCost,
|
||||
getScriptName: () => 0,
|
||||
getScriptRam: () => RamCostConstants.ScriptGetScriptRamCost,
|
||||
getHackTime: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
getGrowTime: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
getWeakenTime: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
getScriptIncome: () => RamCostConstants.ScriptGetScriptRamCost,
|
||||
getScriptExpGain: () => RamCostConstants.ScriptGetScriptRamCost,
|
||||
getRunningScript: () => RamCostConstants.ScriptGetRunningScriptRamCost,
|
||||
nFormat: () => 0,
|
||||
getTimeSinceLastAug: () => RamCostConstants.ScriptGetHackTimeRamCost,
|
||||
prompt: () => 0,
|
||||
wget: () => 0,
|
||||
getFavorToDonate: () => RamCostConstants.ScriptGetFavorToDonate,
|
||||
|
||||
// Singularity Functions
|
||||
universityCourse: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
gymWorkout: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
travelToCity: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
purchaseTor: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
purchaseProgram: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
getCurrentServer: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
connect: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
manualHack: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
installBackdoor: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
getStats: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
getCharacterInformation: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
getPlayer: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
hospitalize: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
isBusy: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
stopAction: () => RamCostConstants.ScriptSingularityFn1RamCost / 2,
|
||||
upgradeHomeRam: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
getUpgradeHomeRamCost: () => RamCostConstants.ScriptSingularityFn2RamCost / 2,
|
||||
workForCompany: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
applyToCompany: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
getCompanyRep: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getCompanyFavor: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getCompanyFavorGain: () => RamCostConstants.ScriptSingularityFn2RamCost / 4,
|
||||
checkFactionInvitations: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
joinFaction: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
workForFaction: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
getFactionRep: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getFactionFavor: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getFactionFavorGain: () => RamCostConstants.ScriptSingularityFn2RamCost / 4,
|
||||
donateToFaction: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
createProgram: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
commitCrime: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getCrimeChance: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getCrimeStats: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getOwnedAugmentations: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getOwnedSourceFiles: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationsFromFaction: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationPrereq: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationCost: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationStats: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
purchaseAugmentation: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
softReset: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
installAugmentations: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
// Singularity Functions
|
||||
universityCourse: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
gymWorkout: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
travelToCity: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
purchaseTor: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
purchaseProgram: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
getCurrentServer: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
connect: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
manualHack: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
installBackdoor: () => RamCostConstants.ScriptSingularityFn1RamCost,
|
||||
getStats: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
getCharacterInformation: () =>
|
||||
RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
getPlayer: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
hospitalize: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
isBusy: () => RamCostConstants.ScriptSingularityFn1RamCost / 4,
|
||||
stopAction: () => RamCostConstants.ScriptSingularityFn1RamCost / 2,
|
||||
upgradeHomeRam: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
getUpgradeHomeRamCost: () => RamCostConstants.ScriptSingularityFn2RamCost / 2,
|
||||
workForCompany: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
applyToCompany: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
getCompanyRep: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getCompanyFavor: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getCompanyFavorGain: () => RamCostConstants.ScriptSingularityFn2RamCost / 4,
|
||||
checkFactionInvitations: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
joinFaction: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
workForFaction: () => RamCostConstants.ScriptSingularityFn2RamCost,
|
||||
getFactionRep: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getFactionFavor: () => RamCostConstants.ScriptSingularityFn2RamCost / 3,
|
||||
getFactionFavorGain: () => RamCostConstants.ScriptSingularityFn2RamCost / 4,
|
||||
donateToFaction: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
createProgram: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
commitCrime: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getCrimeChance: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getCrimeStats: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getOwnedAugmentations: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getOwnedSourceFiles: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationsFromFaction: () =>
|
||||
RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationPrereq: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationCost: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
getAugmentationStats: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
purchaseAugmentation: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
softReset: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
installAugmentations: () => RamCostConstants.ScriptSingularityFn3RamCost,
|
||||
|
||||
// Gang API
|
||||
gang : {
|
||||
createGang: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
inGang: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getMemberNames: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getGangInformation: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getOtherGangInformation: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getMemberInformation: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
canRecruitMember: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
recruitMember: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getTaskNames: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getTaskStats: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
setMemberTask: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getEquipmentNames: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getEquipmentCost: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getEquipmentType: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getEquipmentStats: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
purchaseEquipment: () => RamCostConstants.ScriptGangApiBaseRamCost,
|
||||
ascendMember: () => RamCostConstants.ScriptGangApiBaseRamCost,
|
||||
setTerritoryWarfare: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getChanceToWinClash: () => RamCostConstants.ScriptGangApiBaseRamCost,
|
||||
getBonusTime: () => 0,
|
||||
},
|
||||
// Gang API
|
||||
gang: {
|
||||
createGang: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
inGang: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getMemberNames: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getGangInformation: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getOtherGangInformation: () =>
|
||||
RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getMemberInformation: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
canRecruitMember: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
recruitMember: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getTaskNames: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getTaskStats: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
setMemberTask: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getEquipmentNames: () => RamCostConstants.ScriptGangApiBaseRamCost / 4,
|
||||
getEquipmentCost: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getEquipmentType: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getEquipmentStats: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
purchaseEquipment: () => RamCostConstants.ScriptGangApiBaseRamCost,
|
||||
ascendMember: () => RamCostConstants.ScriptGangApiBaseRamCost,
|
||||
setTerritoryWarfare: () => RamCostConstants.ScriptGangApiBaseRamCost / 2,
|
||||
getChanceToWinClash: () => RamCostConstants.ScriptGangApiBaseRamCost,
|
||||
getBonusTime: () => 0,
|
||||
},
|
||||
|
||||
// Bladeburner API
|
||||
bladeburner : {
|
||||
getContractNames: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getOperationNames: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getBlackOpNames: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getBlackOpRank: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 2,
|
||||
getGeneralActionNames: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getSkillNames: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
startAction: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
stopBladeburnerAction: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 2,
|
||||
getCurrentAction: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 4,
|
||||
getActionTime: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionEstimatedSuccessChance: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionRepGain: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionCountRemaining: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionMaxLevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionCurrentLevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionAutolevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
setActionAutolevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
setActionLevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getRank: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getSkillPoints: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getSkillLevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getSkillUpgradeCost: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
upgradeSkill: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getTeamSize: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
setTeamSize: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCityEstimatedPopulation: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCityEstimatedCommunities: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCityChaos: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCity: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
switchCity: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getStamina: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
joinBladeburnerFaction: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
joinBladeburnerDivision: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getBonusTime: () => 0,
|
||||
},
|
||||
// Bladeburner API
|
||||
bladeburner: {
|
||||
getContractNames: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getOperationNames: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getBlackOpNames: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getBlackOpRank: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 2,
|
||||
getGeneralActionNames: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
getSkillNames: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost / 10,
|
||||
startAction: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
stopBladeburnerAction: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost / 2,
|
||||
getCurrentAction: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost / 4,
|
||||
getActionTime: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionEstimatedSuccessChance: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionRepGain: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionCountRemaining: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionMaxLevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionCurrentLevel: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getActionAutolevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
setActionAutolevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
setActionLevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getRank: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getSkillPoints: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getSkillLevel: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getSkillUpgradeCost: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
upgradeSkill: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getTeamSize: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
setTeamSize: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCityEstimatedPopulation: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCityEstimatedCommunities: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCityChaos: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getCity: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
switchCity: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getStamina: () => RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
joinBladeburnerFaction: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
joinBladeburnerDivision: () =>
|
||||
RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||
getBonusTime: () => 0,
|
||||
},
|
||||
|
||||
// Coding Contract API
|
||||
codingcontract : {
|
||||
attempt: () => RamCostConstants.ScriptCodingContractBaseRamCost,
|
||||
getContractType: () => RamCostConstants.ScriptCodingContractBaseRamCost / 2,
|
||||
getData: () => RamCostConstants.ScriptCodingContractBaseRamCost / 2,
|
||||
getDescription: () => RamCostConstants.ScriptCodingContractBaseRamCost / 2,
|
||||
getNumTriesRemaining: () => RamCostConstants.ScriptCodingContractBaseRamCost / 5,
|
||||
},
|
||||
// Coding Contract API
|
||||
codingcontract: {
|
||||
attempt: () => RamCostConstants.ScriptCodingContractBaseRamCost,
|
||||
getContractType: () => RamCostConstants.ScriptCodingContractBaseRamCost / 2,
|
||||
getData: () => RamCostConstants.ScriptCodingContractBaseRamCost / 2,
|
||||
getDescription: () => RamCostConstants.ScriptCodingContractBaseRamCost / 2,
|
||||
getNumTriesRemaining: () =>
|
||||
RamCostConstants.ScriptCodingContractBaseRamCost / 5,
|
||||
},
|
||||
|
||||
// Duplicate Sleeve API
|
||||
sleeve : {
|
||||
getNumSleeves: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToShockRecovery: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToSynchronize: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToCommitCrime: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToUniversityCourse: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
travel: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToCompanyWork: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToFactionWork: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToGymWorkout: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getSleeveStats: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getTask: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getInformation: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getSleeveAugmentations: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getSleevePurchasableAugs: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
purchaseSleeveAug: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
},
|
||||
// Duplicate Sleeve API
|
||||
sleeve: {
|
||||
getNumSleeves: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToShockRecovery: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToSynchronize: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToCommitCrime: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToUniversityCourse: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
travel: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToCompanyWork: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToFactionWork: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
setToGymWorkout: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getSleeveStats: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getTask: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getInformation: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getSleeveAugmentations: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
getSleevePurchasableAugs: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
purchaseSleeveAug: () => RamCostConstants.ScriptSleeveBaseRamCost,
|
||||
},
|
||||
|
||||
heart: {
|
||||
// Easter egg function
|
||||
break : () => 0,
|
||||
},
|
||||
}
|
||||
heart: {
|
||||
// Easter egg function
|
||||
break: () => 0,
|
||||
},
|
||||
};
|
||||
|
||||
export function getRamCost(...args: string[]): number {
|
||||
if (args.length === 0) {
|
||||
console.warn(`No arguments passed to getRamCost()`);
|
||||
return 0;
|
||||
}
|
||||
if (args.length === 0) {
|
||||
console.warn(`No arguments passed to getRamCost()`);
|
||||
return 0;
|
||||
}
|
||||
|
||||
let curr = RamCosts[args[0]];
|
||||
for (let i = 1; i < args.length; ++i) {
|
||||
if (curr == null) {
|
||||
console.warn(`Invalid function passed to getRamCost: ${args}`);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const currType = typeof curr;
|
||||
if (currType === "function" || currType === "number") {
|
||||
break;
|
||||
}
|
||||
|
||||
curr = curr[args[i]];
|
||||
let curr = RamCosts[args[0]];
|
||||
for (let i = 1; i < args.length; ++i) {
|
||||
if (curr == null) {
|
||||
console.warn(`Invalid function passed to getRamCost: ${args}`);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const currType = typeof curr;
|
||||
if (currType === "function") {
|
||||
return curr();
|
||||
if (currType === "function" || currType === "number") {
|
||||
break;
|
||||
}
|
||||
|
||||
if (currType === "number") {
|
||||
return curr;
|
||||
}
|
||||
curr = curr[args[i]];
|
||||
}
|
||||
|
||||
console.warn(`Unexpected type (${currType}) for value [${args}]`);
|
||||
return 0;
|
||||
const currType = typeof curr;
|
||||
if (currType === "function") {
|
||||
return curr();
|
||||
}
|
||||
|
||||
if (currType === "number") {
|
||||
return curr;
|
||||
}
|
||||
|
||||
console.warn(`Unexpected type (${currType}) for value [${args}]`);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+170
-157
@@ -16,193 +16,206 @@ import { BaseServer } from "../Server/BaseServer";
|
||||
import { IMap } from "../types";
|
||||
|
||||
export class WorkerScript {
|
||||
/**
|
||||
* Script's arguments
|
||||
*/
|
||||
args: any[];
|
||||
/**
|
||||
* Script's arguments
|
||||
*/
|
||||
args: any[];
|
||||
|
||||
/**
|
||||
* Copy of the script's code
|
||||
*/
|
||||
code = "";
|
||||
/**
|
||||
* Copy of the script's code
|
||||
*/
|
||||
code = "";
|
||||
|
||||
/**
|
||||
* Holds the timeoutID (numeric value) for whenever this script is blocked by a
|
||||
* timed Netscript function. i.e. Holds the return value of setTimeout()
|
||||
*/
|
||||
delay: number | null = null;
|
||||
/**
|
||||
* Holds the timeoutID (numeric value) for whenever this script is blocked by a
|
||||
* timed Netscript function. i.e. Holds the return value of setTimeout()
|
||||
*/
|
||||
delay: number | null = null;
|
||||
|
||||
/**
|
||||
* Holds the Promise resolve() function for when the script is "blocked" by an async op
|
||||
*/
|
||||
delayResolve?: () => void;
|
||||
/**
|
||||
* Holds the Promise resolve() function for when the script is "blocked" by an async op
|
||||
*/
|
||||
delayResolve?: () => void;
|
||||
|
||||
/**
|
||||
* Stores names of all functions that have logging disabled
|
||||
*/
|
||||
disableLogs: IMap<string> = {};
|
||||
/**
|
||||
* Stores names of all functions that have logging disabled
|
||||
*/
|
||||
disableLogs: IMap<string> = {};
|
||||
|
||||
/**
|
||||
* Used for dynamic RAM calculation. Stores names of all functions that have
|
||||
* already been checked by this script.
|
||||
* TODO: Could probably just combine this with loadedFns?
|
||||
*/
|
||||
dynamicLoadedFns: IMap<string> = {};
|
||||
/**
|
||||
* Used for dynamic RAM calculation. Stores names of all functions that have
|
||||
* already been checked by this script.
|
||||
* TODO: Could probably just combine this with loadedFns?
|
||||
*/
|
||||
dynamicLoadedFns: IMap<string> = {};
|
||||
|
||||
/**
|
||||
* Tracks dynamic RAM usage
|
||||
*/
|
||||
dynamicRamUsage: number = RamCostConstants.ScriptBaseRamCost;
|
||||
/**
|
||||
* Tracks dynamic RAM usage
|
||||
*/
|
||||
dynamicRamUsage: number = RamCostConstants.ScriptBaseRamCost;
|
||||
|
||||
/**
|
||||
* Netscript Environment for this script
|
||||
*/
|
||||
env: Environment;
|
||||
/**
|
||||
* Netscript Environment for this script
|
||||
*/
|
||||
env: Environment;
|
||||
|
||||
/**
|
||||
* Status message in case of script error. Currently unused I think
|
||||
*/
|
||||
errorMessage = "";
|
||||
/**
|
||||
* Status message in case of script error. Currently unused I think
|
||||
*/
|
||||
errorMessage = "";
|
||||
|
||||
/**
|
||||
* Used for static RAM calculation. Stores names of all functions that have
|
||||
* already been checked by this script
|
||||
*/
|
||||
loadedFns: IMap<string> = {};
|
||||
/**
|
||||
* Used for static RAM calculation. Stores names of all functions that have
|
||||
* already been checked by this script
|
||||
*/
|
||||
loadedFns: IMap<string> = {};
|
||||
|
||||
/**
|
||||
* Filename of script
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* Filename of script
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* Script's output/return value. Currently not used or implemented
|
||||
*/
|
||||
output = "";
|
||||
/**
|
||||
* Script's output/return value. Currently not used or implemented
|
||||
*/
|
||||
output = "";
|
||||
|
||||
/**
|
||||
* Process ID. Must be an integer. Used for efficient script
|
||||
* killing and removal.
|
||||
*/
|
||||
pid: number;
|
||||
/**
|
||||
* Process ID. Must be an integer. Used for efficient script
|
||||
* killing and removal.
|
||||
*/
|
||||
pid: number;
|
||||
|
||||
/**
|
||||
* Script's Static RAM usage. Equivalent to underlying script's RAM usage
|
||||
*/
|
||||
ramUsage = 0;
|
||||
/**
|
||||
* Script's Static RAM usage. Equivalent to underlying script's RAM usage
|
||||
*/
|
||||
ramUsage = 0;
|
||||
|
||||
/**
|
||||
* Whether or not this workerScript is currently running
|
||||
*/
|
||||
running = false;
|
||||
/**
|
||||
* Whether or not this workerScript is currently running
|
||||
*/
|
||||
running = false;
|
||||
|
||||
/**
|
||||
* Reference to underlying RunningScript object
|
||||
*/
|
||||
scriptRef: RunningScript;
|
||||
/**
|
||||
* Reference to underlying RunningScript object
|
||||
*/
|
||||
scriptRef: RunningScript;
|
||||
|
||||
/**
|
||||
* IP Address on which this script is running
|
||||
*/
|
||||
serverIp: string;
|
||||
/**
|
||||
* IP Address on which this script is running
|
||||
*/
|
||||
serverIp: string;
|
||||
|
||||
constructor(runningScriptObj: RunningScript, pid: number, nsFuncsGenerator?: (ws: WorkerScript) => any) {
|
||||
this.name = runningScriptObj.filename;
|
||||
this.serverIp = runningScriptObj.server;
|
||||
constructor(
|
||||
runningScriptObj: RunningScript,
|
||||
pid: number,
|
||||
nsFuncsGenerator?: (ws: WorkerScript) => any,
|
||||
) {
|
||||
this.name = runningScriptObj.filename;
|
||||
this.serverIp = runningScriptObj.server;
|
||||
|
||||
const sanitizedPid = Math.round(pid);
|
||||
if (typeof sanitizedPid !== "number" || isNaN(sanitizedPid)) {
|
||||
throw new Error(`Invalid PID when constructing WorkerScript: ${pid}`);
|
||||
}
|
||||
this.pid = sanitizedPid;
|
||||
runningScriptObj.pid = sanitizedPid;
|
||||
const sanitizedPid = Math.round(pid);
|
||||
if (typeof sanitizedPid !== "number" || isNaN(sanitizedPid)) {
|
||||
throw new Error(`Invalid PID when constructing WorkerScript: ${pid}`);
|
||||
}
|
||||
this.pid = sanitizedPid;
|
||||
runningScriptObj.pid = sanitizedPid;
|
||||
|
||||
// Get the underlying script's code
|
||||
const server = AllServers[this.serverIp];
|
||||
if (server == null) {
|
||||
throw new Error(`WorkerScript constructed with invalid server ip: ${this.serverIp}`);
|
||||
}
|
||||
let found = false;
|
||||
for (let i = 0; i < server.scripts.length; ++i) {
|
||||
if (server.scripts[i].filename === this.name) {
|
||||
found = true;
|
||||
this.code = server.scripts[i].code;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
throw new Error(`WorkerScript constructed with invalid script filename: ${this.name}`);
|
||||
}
|
||||
|
||||
this.env = new Environment(null);
|
||||
if (typeof nsFuncsGenerator === "function") {
|
||||
this.env.vars = nsFuncsGenerator(this);
|
||||
}
|
||||
this.env.set("args", runningScriptObj.args.slice());
|
||||
|
||||
this.scriptRef = runningScriptObj;
|
||||
this.args = runningScriptObj.args.slice();
|
||||
// Get the underlying script's code
|
||||
const server = AllServers[this.serverIp];
|
||||
if (server == null) {
|
||||
throw new Error(
|
||||
`WorkerScript constructed with invalid server ip: ${this.serverIp}`,
|
||||
);
|
||||
}
|
||||
let found = false;
|
||||
for (let i = 0; i < server.scripts.length; ++i) {
|
||||
if (server.scripts[i].filename === this.name) {
|
||||
found = true;
|
||||
this.code = server.scripts[i].code;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
throw new Error(
|
||||
`WorkerScript constructed with invalid script filename: ${this.name}`,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Server on which this script is running
|
||||
*/
|
||||
getServer(): BaseServer {
|
||||
const server = AllServers[this.serverIp];
|
||||
if(server == null) throw new Error(`Script ${this.name} pid ${this.pid} is running on non-existent server?`);
|
||||
return server;
|
||||
this.env = new Environment(null);
|
||||
if (typeof nsFuncsGenerator === "function") {
|
||||
this.env.vars = nsFuncsGenerator(this);
|
||||
}
|
||||
this.env.set("args", runningScriptObj.args.slice());
|
||||
|
||||
this.scriptRef = runningScriptObj;
|
||||
this.args = runningScriptObj.args.slice();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Server on which this script is running
|
||||
*/
|
||||
getServer(): BaseServer {
|
||||
const server = AllServers[this.serverIp];
|
||||
if (server == null)
|
||||
throw new Error(
|
||||
`Script ${this.name} pid ${this.pid} is running on non-existent server?`,
|
||||
);
|
||||
return server;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Script object for the underlying script.
|
||||
* Returns null if it cannot be found (which would be a bug)
|
||||
*/
|
||||
getScript(): Script | null {
|
||||
const server = this.getServer();
|
||||
for (let i = 0; i < server.scripts.length; ++i) {
|
||||
if (server.scripts[i].filename === this.name) {
|
||||
return server.scripts[i];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Script object for the underlying script.
|
||||
* Returns null if it cannot be found (which would be a bug)
|
||||
*/
|
||||
getScript(): Script | null {
|
||||
const server = this.getServer();
|
||||
for (let i = 0; i < server.scripts.length; ++i) {
|
||||
if (server.scripts[i].filename === this.name) {
|
||||
return server.scripts[i];
|
||||
}
|
||||
}
|
||||
console.error(
|
||||
"Failed to find underlying Script object in WorkerScript.getScript(). This probably means somethings wrong",
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
console.error("Failed to find underlying Script object in WorkerScript.getScript(). This probably means somethings wrong");
|
||||
return null;
|
||||
/**
|
||||
* Returns the script with the specified filename on the specified server,
|
||||
* or null if it cannot be found
|
||||
*/
|
||||
getScriptOnServer(fn: string, server: BaseServer): Script | null {
|
||||
if (server == null) {
|
||||
server = this.getServer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the script with the specified filename on the specified server,
|
||||
* or null if it cannot be found
|
||||
*/
|
||||
getScriptOnServer(fn: string, server: BaseServer): Script | null {
|
||||
if (server == null) {
|
||||
server = this.getServer();
|
||||
}
|
||||
|
||||
for (let i = 0; i < server.scripts.length; ++i) {
|
||||
if (server.scripts[i].filename === fn) {
|
||||
return server.scripts[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
for (let i = 0; i < server.scripts.length; ++i) {
|
||||
if (server.scripts[i].filename === fn) {
|
||||
return server.scripts[i];
|
||||
}
|
||||
}
|
||||
|
||||
shouldLog(fn: string): boolean {
|
||||
return (this.disableLogs[fn] == null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
log(func: string, txt: string): void {
|
||||
if(this.shouldLog(func)) {
|
||||
if(func && txt){
|
||||
this.scriptRef.log(`${func}: ${txt}`);
|
||||
} else if(func) {
|
||||
this.scriptRef.log(func);
|
||||
} else {
|
||||
this.scriptRef.log(txt);
|
||||
}
|
||||
}
|
||||
}
|
||||
shouldLog(fn: string): boolean {
|
||||
return this.disableLogs[fn] == null;
|
||||
}
|
||||
|
||||
print(txt: string): void {
|
||||
log(func: string, txt: string): void {
|
||||
if (this.shouldLog(func)) {
|
||||
if (func && txt) {
|
||||
this.scriptRef.log(`${func}: ${txt}`);
|
||||
} else if (func) {
|
||||
this.scriptRef.log(func);
|
||||
} else {
|
||||
this.scriptRef.log(txt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print(txt: string): void {
|
||||
this.scriptRef.log(txt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,59 +12,74 @@ import { AllServers } from "../Server/AllServers";
|
||||
import { compareArrays } from "../../utils/helpers/compareArrays";
|
||||
import { roundToTwo } from "../../utils/helpers/roundToTwo";
|
||||
|
||||
export function killWorkerScript(runningScriptObj: RunningScript, serverIp: string, rerenderUi: boolean): boolean;
|
||||
export function killWorkerScript(
|
||||
runningScriptObj: RunningScript,
|
||||
serverIp: string,
|
||||
rerenderUi: boolean,
|
||||
): boolean;
|
||||
export function killWorkerScript(workerScript: WorkerScript): boolean;
|
||||
export function killWorkerScript(pid: number): boolean;
|
||||
export function killWorkerScript(script: RunningScript | WorkerScript | number, serverIp?: string, rerenderUi?: boolean): boolean {
|
||||
if (rerenderUi == null || typeof rerenderUi !== "boolean") {
|
||||
rerenderUi = true;
|
||||
export function killWorkerScript(
|
||||
script: RunningScript | WorkerScript | number,
|
||||
serverIp?: string,
|
||||
rerenderUi?: boolean,
|
||||
): boolean {
|
||||
if (rerenderUi == null || typeof rerenderUi !== "boolean") {
|
||||
rerenderUi = true;
|
||||
}
|
||||
|
||||
if (script instanceof WorkerScript) {
|
||||
stopAndCleanUpWorkerScript(script);
|
||||
|
||||
return true;
|
||||
} else if (script instanceof RunningScript && typeof serverIp === "string") {
|
||||
// Try to kill by PID
|
||||
const res = killWorkerScriptByPid(script.pid, rerenderUi);
|
||||
if (res) {
|
||||
return res;
|
||||
}
|
||||
|
||||
if (script instanceof WorkerScript) {
|
||||
stopAndCleanUpWorkerScript(script);
|
||||
|
||||
return true;
|
||||
} else if (script instanceof RunningScript && typeof serverIp === "string") {
|
||||
// Try to kill by PID
|
||||
const res = killWorkerScriptByPid(script.pid, rerenderUi);
|
||||
if (res) { return res; }
|
||||
|
||||
// If for some reason that doesn't work, we'll try the old way
|
||||
for (const ws of workerScripts.values()) {
|
||||
if (ws.name == script.filename && ws.serverIp == serverIp &&
|
||||
compareArrays(ws.args, script.args)) {
|
||||
|
||||
stopAndCleanUpWorkerScript(ws, rerenderUi);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
} else if (typeof script === "number") {
|
||||
return killWorkerScriptByPid(script, rerenderUi);
|
||||
} else {
|
||||
console.error(`killWorkerScript() called with invalid argument:`);
|
||||
console.error(script);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function killWorkerScriptByPid(pid: number, rerenderUi=true): boolean {
|
||||
const ws = workerScripts.get(pid);
|
||||
if (ws instanceof WorkerScript) {
|
||||
// If for some reason that doesn't work, we'll try the old way
|
||||
for (const ws of workerScripts.values()) {
|
||||
if (
|
||||
ws.name == script.filename &&
|
||||
ws.serverIp == serverIp &&
|
||||
compareArrays(ws.args, script.args)
|
||||
) {
|
||||
stopAndCleanUpWorkerScript(ws, rerenderUi);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
} else if (typeof script === "number") {
|
||||
return killWorkerScriptByPid(script, rerenderUi);
|
||||
} else {
|
||||
console.error(`killWorkerScript() called with invalid argument:`);
|
||||
console.error(script);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function stopAndCleanUpWorkerScript(workerScript: WorkerScript, rerenderUi=true): void {
|
||||
workerScript.env.stopFlag = true;
|
||||
killNetscriptDelay(workerScript);
|
||||
removeWorkerScript(workerScript, rerenderUi);
|
||||
function killWorkerScriptByPid(pid: number, rerenderUi = true): boolean {
|
||||
const ws = workerScripts.get(pid);
|
||||
if (ws instanceof WorkerScript) {
|
||||
stopAndCleanUpWorkerScript(ws, rerenderUi);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function stopAndCleanUpWorkerScript(
|
||||
workerScript: WorkerScript,
|
||||
rerenderUi = true,
|
||||
): void {
|
||||
workerScript.env.stopFlag = true;
|
||||
killNetscriptDelay(workerScript);
|
||||
removeWorkerScript(workerScript, rerenderUi);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -74,49 +89,61 @@ function stopAndCleanUpWorkerScript(workerScript: WorkerScript, rerenderUi=true)
|
||||
* @param {WorkerScript | number} - Identifier for WorkerScript. Either the object itself, or
|
||||
* its index in the global workerScripts array
|
||||
*/
|
||||
function removeWorkerScript(workerScript: WorkerScript, rerenderUi=true): void {
|
||||
if (workerScript instanceof WorkerScript) {
|
||||
const ip = workerScript.serverIp;
|
||||
const name = workerScript.name;
|
||||
function removeWorkerScript(
|
||||
workerScript: WorkerScript,
|
||||
rerenderUi = true,
|
||||
): void {
|
||||
if (workerScript instanceof WorkerScript) {
|
||||
const ip = workerScript.serverIp;
|
||||
const name = workerScript.name;
|
||||
|
||||
// Get the server on which the script runs
|
||||
const server = AllServers[ip];
|
||||
if (server == null) {
|
||||
console.error(`Could not find server on which this script is running: ${ip}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Recalculate ram used on that server
|
||||
server.ramUsed = roundToTwo(server.ramUsed - workerScript.ramUsage);
|
||||
if (server.ramUsed < 0) {
|
||||
console.warn(`Server (${server.hostname}) RAM usage went negative (if it's due to floating pt imprecision, it's okay): ${server.ramUsed}`);
|
||||
server.ramUsed = 0;
|
||||
}
|
||||
|
||||
// Delete the RunningScript object from that server
|
||||
for (let i = 0; i < server.runningScripts.length; ++i) {
|
||||
const runningScript = server.runningScripts[i];
|
||||
if (runningScript.filename === name && compareArrays(runningScript.args, workerScript.args)) {
|
||||
server.runningScripts.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Delete script from global pool (workerScripts)
|
||||
const res = workerScripts.delete(workerScript.pid);
|
||||
if (!res) {
|
||||
console.warn(`removeWorkerScript() called with WorkerScript that wasn't in the global map:`);
|
||||
console.warn(workerScript);
|
||||
}
|
||||
|
||||
if (rerenderUi) {
|
||||
WorkerScriptStartStopEventEmitter.emitEvent();
|
||||
}
|
||||
} else {
|
||||
console.error(`Invalid argument passed into removeWorkerScript():`);
|
||||
console.error(workerScript);
|
||||
return;
|
||||
// Get the server on which the script runs
|
||||
const server = AllServers[ip];
|
||||
if (server == null) {
|
||||
console.error(
|
||||
`Could not find server on which this script is running: ${ip}`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Recalculate ram used on that server
|
||||
server.ramUsed = roundToTwo(server.ramUsed - workerScript.ramUsage);
|
||||
if (server.ramUsed < 0) {
|
||||
console.warn(
|
||||
`Server (${server.hostname}) RAM usage went negative (if it's due to floating pt imprecision, it's okay): ${server.ramUsed}`,
|
||||
);
|
||||
server.ramUsed = 0;
|
||||
}
|
||||
|
||||
// Delete the RunningScript object from that server
|
||||
for (let i = 0; i < server.runningScripts.length; ++i) {
|
||||
const runningScript = server.runningScripts[i];
|
||||
if (
|
||||
runningScript.filename === name &&
|
||||
compareArrays(runningScript.args, workerScript.args)
|
||||
) {
|
||||
server.runningScripts.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Delete script from global pool (workerScripts)
|
||||
const res = workerScripts.delete(workerScript.pid);
|
||||
if (!res) {
|
||||
console.warn(
|
||||
`removeWorkerScript() called with WorkerScript that wasn't in the global map:`,
|
||||
);
|
||||
console.warn(workerScript);
|
||||
}
|
||||
|
||||
if (rerenderUi) {
|
||||
WorkerScriptStartStopEventEmitter.emitEvent();
|
||||
}
|
||||
} else {
|
||||
console.error(`Invalid argument passed into removeWorkerScript():`);
|
||||
console.error(workerScript);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -125,12 +152,12 @@ function removeWorkerScript(workerScript: WorkerScript, rerenderUi=true): void {
|
||||
* be killed immediately even if they're in the middle of one of those long operations
|
||||
*/
|
||||
function killNetscriptDelay(workerScript: WorkerScript): void {
|
||||
if (workerScript instanceof WorkerScript) {
|
||||
if (workerScript.delay) {
|
||||
clearTimeout(workerScript.delay);
|
||||
if (workerScript.delayResolve) {
|
||||
workerScript.delayResolve();
|
||||
}
|
||||
}
|
||||
if (workerScript instanceof WorkerScript) {
|
||||
if (workerScript.delay) {
|
||||
clearTimeout(workerScript.delay);
|
||||
if (workerScript.delayResolve) {
|
||||
workerScript.delayResolve();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user