mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-24 07:02:26 +01:00
fix more any
This commit is contained in:
parent
71d8e35bb5
commit
ceb9fa1249
@ -1,13 +1,10 @@
|
|||||||
|
import { NS } from "../ScriptEditor/NetscriptDefinitions";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The environment in which a script runs. The environment holds
|
* The environment in which a script runs. The environment holds
|
||||||
* Netscript functions and arguments for that script.
|
* Netscript functions and arguments for that script.
|
||||||
*/
|
*/
|
||||||
export class Environment {
|
export class Environment {
|
||||||
/**
|
|
||||||
* Parent environment. Used to implement "scope"
|
|
||||||
*/
|
|
||||||
parent: Environment | null = null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether or not the script that uses this Environment should stop running
|
* Whether or not the script that uses this Environment should stop running
|
||||||
*/
|
*/
|
||||||
@ -16,58 +13,5 @@ export class Environment {
|
|||||||
/**
|
/**
|
||||||
* Environment variables (currently only Netscript functions)
|
* Environment variables (currently only Netscript functions)
|
||||||
*/
|
*/
|
||||||
vars: any = {};
|
vars: NS | null = null;
|
||||||
|
|
||||||
constructor(parent: Environment | null) {
|
|
||||||
if (parent instanceof Environment) {
|
|
||||||
this.vars = Object.assign({}, parent.vars);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parent = parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Get the current value of a variable
|
|
||||||
get(name: string): any {
|
|
||||||
if (name in this.vars) {
|
|
||||||
return this.vars[name];
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error(`Undefined variable ${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);
|
|
||||||
|
|
||||||
//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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -142,11 +142,10 @@ export class WorkerScript {
|
|||||||
}
|
}
|
||||||
this.scriptRef = runningScriptObj;
|
this.scriptRef = runningScriptObj;
|
||||||
this.args = runningScriptObj.args.slice();
|
this.args = runningScriptObj.args.slice();
|
||||||
this.env = new Environment(null);
|
this.env = new Environment();
|
||||||
if (typeof nsFuncsGenerator === "function") {
|
if (typeof nsFuncsGenerator === "function") {
|
||||||
this.env.vars = nsFuncsGenerator(this);
|
this.env.vars = nsFuncsGenerator(this);
|
||||||
}
|
}
|
||||||
this.env.set("args", runningScriptObj.args.slice());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -110,7 +110,6 @@ import { CityName } from "./Locations/data/CityNames";
|
|||||||
import { InternalAPI, NetscriptContext, wrapAPI } from "./Netscript/APIWrapper";
|
import { InternalAPI, NetscriptContext, wrapAPI } from "./Netscript/APIWrapper";
|
||||||
import { INetscriptHelper, ScriptIdentifier } from "./NetscriptFunctions/INetscriptHelper";
|
import { INetscriptHelper, ScriptIdentifier } from "./NetscriptFunctions/INetscriptHelper";
|
||||||
import { IPlayer } from "./PersonObjects/IPlayer";
|
import { IPlayer } from "./PersonObjects/IPlayer";
|
||||||
import { PlayerObject } from "./PersonObjects/Player/PlayerObject";
|
|
||||||
import { GangMember } from "./Gang/GangMember";
|
import { GangMember } from "./Gang/GangMember";
|
||||||
import { GangMemberTask } from "./Gang/GangMemberTask";
|
import { GangMemberTask } from "./Gang/GangMemberTask";
|
||||||
import { ScriptArg } from "./Netscript/ScriptArg";
|
import { ScriptArg } from "./Netscript/ScriptArg";
|
||||||
|
@ -84,6 +84,12 @@ export async function executeJSScript(
|
|||||||
`${script.filename} cannot be run because it does not have a main function.`,
|
`${script.filename} cannot be run because it does not have a main function.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (!ns) {
|
||||||
|
throw makeRuntimeRejectMsg(
|
||||||
|
workerScript,
|
||||||
|
`${script.filename} cannot be run because the NS object hasn't been constructed properly.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
return loadedModule.main(ns);
|
return loadedModule.main(ns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,6 +145,7 @@ async function parseOnlyRamCalculate(
|
|||||||
];
|
];
|
||||||
const unresolvedRefs = Object.keys(dependencyMap).filter((s) => s.startsWith(initialModule));
|
const unresolvedRefs = Object.keys(dependencyMap).filter((s) => s.startsWith(initialModule));
|
||||||
const resolvedRefs = new Set();
|
const resolvedRefs = new Set();
|
||||||
|
const loadedFns: Record<string, boolean> = {};
|
||||||
while (unresolvedRefs.length > 0) {
|
while (unresolvedRefs.length > 0) {
|
||||||
const ref = unresolvedRefs.shift();
|
const ref = unresolvedRefs.shift();
|
||||||
if (ref === undefined) throw new Error("ref should not be undefined");
|
if (ref === undefined) throw new Error("ref should not be undefined");
|
||||||
@ -198,53 +199,35 @@ async function parseOnlyRamCalculate(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Only count each function once
|
// Only count each function once
|
||||||
if (workerScript.loadedFns[ref]) {
|
if (loadedFns[ref]) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
|
||||||
workerScript.loadedFns[ref] = true;
|
|
||||||
}
|
}
|
||||||
|
loadedFns[ref] = true;
|
||||||
|
|
||||||
// This accounts for namespaces (Bladeburner, CodingCpntract, etc.)
|
// This accounts for namespaces (Bladeburner, CodingContract, etc.)
|
||||||
let func;
|
const findFunc = (
|
||||||
let refDetail = "n/a";
|
prefix: string,
|
||||||
if (ref in workerScript.env.vars.bladeburner) {
|
obj: object,
|
||||||
func = workerScript.env.vars.bladeburner[ref];
|
ref: string,
|
||||||
refDetail = `bladeburner.${ref}`;
|
): { func: (p: IPlayer) => number | number; refDetail: string } | undefined => {
|
||||||
} else if (ref in workerScript.env.vars.codingcontract) {
|
if (!obj) return;
|
||||||
func = workerScript.env.vars.codingcontract[ref];
|
const elem = Object.entries(obj).find(([key]) => key === ref);
|
||||||
refDetail = `codingcontract.${ref}`;
|
if (elem !== undefined && (typeof elem[1] === "function" || typeof elem[1] === "number")) {
|
||||||
} else if (ref in workerScript.env.vars.stanek) {
|
return { func: elem[1], refDetail: `${prefix}${ref}` };
|
||||||
func = workerScript.env.vars.stanek[ref];
|
}
|
||||||
refDetail = `stanek.${ref}`;
|
for (const [key, value] of Object.entries(obj)) {
|
||||||
} else if (ref in workerScript.env.vars.infiltration) {
|
const found = findFunc(`${key}.`, value, ref);
|
||||||
func = workerScript.env.vars.infiltration[ref];
|
if (found) return found;
|
||||||
refDetail = `infiltration.${ref}`;
|
}
|
||||||
} else if (ref in workerScript.env.vars.gang) {
|
return undefined;
|
||||||
func = workerScript.env.vars.gang[ref];
|
};
|
||||||
refDetail = `gang.${ref}`;
|
|
||||||
} else if (ref in workerScript.env.vars.sleeve) {
|
const details = findFunc("", RamCosts, ref);
|
||||||
func = workerScript.env.vars.sleeve[ref];
|
const fnRam = applyFuncRam(details?.func ?? 0);
|
||||||
refDetail = `sleeve.${ref}`;
|
|
||||||
} else if (ref in workerScript.env.vars.stock) {
|
|
||||||
func = workerScript.env.vars.stock[ref];
|
|
||||||
refDetail = `stock.${ref}`;
|
|
||||||
} else if (ref in workerScript.env.vars.ui) {
|
|
||||||
func = workerScript.env.vars.ui[ref];
|
|
||||||
refDetail = `ui.${ref}`;
|
|
||||||
} else if (ref in workerScript.env.vars.grafting) {
|
|
||||||
func = workerScript.env.vars.grafting[ref];
|
|
||||||
refDetail = `grafting.${ref}`;
|
|
||||||
} else if (ref in workerScript.env.vars.singularity) {
|
|
||||||
func = workerScript.env.vars.singularity[ref];
|
|
||||||
refDetail = `singularity.${ref}`;
|
|
||||||
} else {
|
|
||||||
func = workerScript.env.vars[ref];
|
|
||||||
refDetail = `${ref}`;
|
|
||||||
}
|
|
||||||
const fnRam = applyFuncRam(func);
|
|
||||||
ram += fnRam;
|
ram += fnRam;
|
||||||
detailedCosts.push({ type: "fn", name: refDetail, cost: fnRam });
|
detailedCosts.push({ type: "fn", name: details?.refDetail ?? "", cost: fnRam });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user