mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-17 23:08:36 +02:00
Move entire ns object to top-level
This commit is contained in:
@@ -2,6 +2,8 @@ import { getRamCost } from "./RamCostGenerator";
|
|||||||
import type { WorkerScript } from "./WorkerScript";
|
import type { WorkerScript } from "./WorkerScript";
|
||||||
import { Player } from "../Player";
|
import { Player } from "../Player";
|
||||||
import { helpers } from "./NetscriptHelpers";
|
import { helpers } from "./NetscriptHelpers";
|
||||||
|
import { ScriptArg } from "./ScriptArg";
|
||||||
|
import { NSEnums } from "src/ScriptEditor/NetscriptDefinitions";
|
||||||
|
|
||||||
type ExternalFunction = (...args: unknown[]) => unknown;
|
type ExternalFunction = (...args: unknown[]) => unknown;
|
||||||
export type ExternalAPI = {
|
export type ExternalAPI = {
|
||||||
@@ -13,6 +15,10 @@ type InternalFunction<F extends (...args: unknown[]) => unknown> = (ctx: Netscri
|
|||||||
export type InternalAPI<API> = {
|
export type InternalAPI<API> = {
|
||||||
[Property in keyof API]: API[Property] extends ExternalFunction
|
[Property in keyof API]: API[Property] extends ExternalFunction
|
||||||
? InternalFunction<API[Property]>
|
? InternalFunction<API[Property]>
|
||||||
|
: API[Property] extends NSEnums
|
||||||
|
? NSEnums
|
||||||
|
: API[Property] extends ScriptArg[]
|
||||||
|
? ScriptArg[]
|
||||||
: API[Property] extends object
|
: API[Property] extends object
|
||||||
? InternalAPI<API[Property]>
|
? InternalAPI<API[Property]>
|
||||||
: never;
|
: never;
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ import { IPlayer } from "../PersonObjects/IPlayer";
|
|||||||
import { FormulaGang } from "../Gang/formulas/formulas";
|
import { FormulaGang } from "../Gang/formulas/formulas";
|
||||||
import { GangMember } from "../Gang/GangMember";
|
import { GangMember } from "../Gang/GangMember";
|
||||||
import { GangMemberTask } from "../Gang/GangMemberTask";
|
import { GangMemberTask } from "../Gang/GangMemberTask";
|
||||||
|
import { RunningScript } from "../Script/RunningScript";
|
||||||
|
import { toNative } from "../NetscriptFunctions/toNative";
|
||||||
|
|
||||||
//Helpers that are not specific to use in WorkerScripts/NetscriptContexts should be in src/utils/helpers instead
|
//Helpers that are not specific to use in WorkerScripts/NetscriptContexts should be in src/utils/helpers instead
|
||||||
|
|
||||||
@@ -34,6 +36,7 @@ export const helpers = {
|
|||||||
string,
|
string,
|
||||||
number,
|
number,
|
||||||
scriptArgs,
|
scriptArgs,
|
||||||
|
argsToString,
|
||||||
isScriptErrorMessage,
|
isScriptErrorMessage,
|
||||||
//Error checking and generation
|
//Error checking and generation
|
||||||
makeRuntimeRejectMsg,
|
makeRuntimeRejectMsg,
|
||||||
@@ -56,6 +59,7 @@ export const helpers = {
|
|||||||
gangMember,
|
gangMember,
|
||||||
gangTask,
|
gangTask,
|
||||||
log,
|
log,
|
||||||
|
getRunningScriptByArgs,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ScriptIdentifier = //This was previously in INetscriptHelper.ts, may move to its own file or a generic types file.
|
export type ScriptIdentifier = //This was previously in INetscriptHelper.ts, may move to its own file or a generic types file.
|
||||||
@@ -66,12 +70,14 @@ export type ScriptIdentifier = //This was previously in INetscriptHelper.ts, ma
|
|||||||
args: ScriptArg[];
|
args: ScriptArg[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** If v is a number or string, returns the string representation. Error for other non-strings. */
|
||||||
function string(ctx: NetscriptContext, argName: string, v: unknown): string {
|
function string(ctx: NetscriptContext, argName: string, v: unknown): string {
|
||||||
if (typeof v === "string") return v;
|
if (typeof v === "string") return v;
|
||||||
if (typeof v === "number") return v + ""; // cast to string;
|
if (typeof v === "number") return v + ""; // cast to string;
|
||||||
throw makeRuntimeErrorMsg(ctx, `'${argName}' should be a string.`);
|
throw makeRuntimeErrorMsg(ctx, `'${argName}' should be a string.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Validates v as non-NaN number, or as a string representation of a number, and returns that number. Error on NaN or non-number. */
|
||||||
function number(ctx: NetscriptContext, argName: string, v: unknown): number {
|
function number(ctx: NetscriptContext, argName: string, v: unknown): number {
|
||||||
if (typeof v === "string") {
|
if (typeof v === "string") {
|
||||||
const x = parseFloat(v);
|
const x = parseFloat(v);
|
||||||
@@ -83,11 +89,13 @@ function number(ctx: NetscriptContext, argName: string, v: unknown): number {
|
|||||||
throw makeRuntimeErrorMsg(ctx, `'${argName}' should be a number.`);
|
throw makeRuntimeErrorMsg(ctx, `'${argName}' should be a number.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Validates args as a ScriptArg[]. Throws an error if it is not. */
|
||||||
function scriptArgs(ctx: NetscriptContext, args: unknown) {
|
function scriptArgs(ctx: NetscriptContext, args: unknown) {
|
||||||
if (!isScriptArgs(args)) throw makeRuntimeErrorMsg(ctx, "'args' is not an array of script args");
|
if (!isScriptArgs(args)) throw makeRuntimeErrorMsg(ctx, "'args' is not an array of script args");
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Determines if the given msg string is an error created by makeRuntimeRejectMsg. */
|
||||||
function isScriptErrorMessage(msg: string): boolean {
|
function isScriptErrorMessage(msg: string): boolean {
|
||||||
if (!isString(msg)) {
|
if (!isString(msg)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -96,6 +104,26 @@ function isScriptErrorMessage(msg: string): boolean {
|
|||||||
return splitMsg.length == 4;
|
return splitMsg.length == 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Used to convert multiple arguments for tprint or print into a single string. */
|
||||||
|
function argsToString(args: unknown[]): string {
|
||||||
|
let out = "";
|
||||||
|
for (let arg of args) {
|
||||||
|
if (arg === null) {
|
||||||
|
out += "null";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (arg === undefined) {
|
||||||
|
out += "undefined";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
arg = toNative(arg);
|
||||||
|
out += typeof arg === "object" ? JSON.stringify(arg) : `${arg}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Creates an error message string containing hostname, scriptname, and the error message msg */
|
||||||
function makeRuntimeRejectMsg(workerScript: WorkerScript, msg: string): string {
|
function makeRuntimeRejectMsg(workerScript: WorkerScript, msg: string): string {
|
||||||
for (const scriptUrl of workerScript.scriptRef.dependencies) {
|
for (const scriptUrl of workerScript.scriptRef.dependencies) {
|
||||||
msg = msg.replace(new RegExp(scriptUrl.url, "g"), scriptUrl.filename);
|
msg = msg.replace(new RegExp(scriptUrl.url, "g"), scriptUrl.filename);
|
||||||
@@ -104,6 +132,7 @@ function makeRuntimeRejectMsg(workerScript: WorkerScript, msg: string): string {
|
|||||||
return "|DELIMITER|" + workerScript.hostname + "|DELIMITER|" + workerScript.name + "|DELIMITER|" + msg;
|
return "|DELIMITER|" + workerScript.hostname + "|DELIMITER|" + workerScript.name + "|DELIMITER|" + msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Creates an error message string with a stack trace. */
|
||||||
function makeRuntimeErrorMsg(ctx: NetscriptContext, msg: string): string {
|
function makeRuntimeErrorMsg(ctx: NetscriptContext, msg: string): string {
|
||||||
const errstack = new Error().stack;
|
const errstack = new Error().stack;
|
||||||
if (errstack === undefined) throw new Error("how did we not throw an error?");
|
if (errstack === undefined) throw new Error("how did we not throw an error?");
|
||||||
@@ -174,6 +203,7 @@ function makeRuntimeErrorMsg(ctx: NetscriptContext, msg: string): string {
|
|||||||
return makeRuntimeRejectMsg(workerScript, rejectMsg);
|
return makeRuntimeRejectMsg(workerScript, rejectMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Validate requested number of threads for h/g/w options */
|
||||||
function resolveNetscriptRequestedThreads(ctx: NetscriptContext, requestedThreads?: number): number {
|
function resolveNetscriptRequestedThreads(ctx: NetscriptContext, requestedThreads?: number): number {
|
||||||
const threads = ctx.workerScript.scriptRef.threads;
|
const threads = ctx.workerScript.scriptRef.threads;
|
||||||
if (!requestedThreads) {
|
if (!requestedThreads) {
|
||||||
@@ -195,6 +225,7 @@ function resolveNetscriptRequestedThreads(ctx: NetscriptContext, requestedThread
|
|||||||
return requestedThreadsAsInt;
|
return requestedThreadsAsInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Validate singularity access by throwing an error if the player does not have access. */
|
||||||
function checkSingularityAccess(ctx: NetscriptContext): void {
|
function checkSingularityAccess(ctx: NetscriptContext): void {
|
||||||
if (Player.bitNodeN !== 4 && Player.sourceFileLvl(4) === 0) {
|
if (Player.bitNodeN !== 4 && Player.sourceFileLvl(4) === 0) {
|
||||||
throw makeRuntimeErrorMsg(
|
throw makeRuntimeErrorMsg(
|
||||||
@@ -205,6 +236,7 @@ function checkSingularityAccess(ctx: NetscriptContext): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Create an error if a script is dead or if concurrent ns function calls are made */
|
||||||
function checkEnvFlags(ctx: NetscriptContext): void {
|
function checkEnvFlags(ctx: NetscriptContext): void {
|
||||||
const ws = ctx.workerScript;
|
const ws = ctx.workerScript;
|
||||||
if (ws.env.stopFlag) throw new ScriptDeath(ws);
|
if (ws.env.stopFlag) throw new ScriptDeath(ws);
|
||||||
@@ -503,3 +535,42 @@ function gangTask(ctx: NetscriptContext, t: unknown): GangMemberTask {
|
|||||||
function log(ctx: NetscriptContext, message: () => string) {
|
function log(ctx: NetscriptContext, message: () => string) {
|
||||||
ctx.workerScript.log(ctx.functionPath, message);
|
ctx.workerScript.log(ctx.functionPath, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches for and returns the RunningScript object for the specified script.
|
||||||
|
* If the 'fn' argument is not specified, this returns the current RunningScript.
|
||||||
|
* @param {string} fn - Filename of script
|
||||||
|
* @param {string} hostname - Hostname/ip of the server on which the script resides
|
||||||
|
* @param {any[]} scriptArgs - Running script's arguments
|
||||||
|
* @returns {RunningScript}
|
||||||
|
* Running script identified by the parameters, or null if no such script
|
||||||
|
* exists, or the current running script if the first argument 'fn'
|
||||||
|
* is not specified.
|
||||||
|
*/
|
||||||
|
function getRunningScriptByArgs(
|
||||||
|
ctx: NetscriptContext,
|
||||||
|
fn: string,
|
||||||
|
hostname: string,
|
||||||
|
scriptArgs: ScriptArg[],
|
||||||
|
): RunningScript | null {
|
||||||
|
if (!Array.isArray(scriptArgs)) {
|
||||||
|
throw helpers.makeRuntimeRejectMsg(
|
||||||
|
ctx.workerScript,
|
||||||
|
`Invalid scriptArgs argument passed into getRunningScript() from ${ctx.function}(). ` +
|
||||||
|
`This is probably a bug. Please report to game developer`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fn != null && typeof fn === "string") {
|
||||||
|
// Get Logs of another script
|
||||||
|
if (hostname == null) {
|
||||||
|
hostname = ctx.workerScript.hostname;
|
||||||
|
}
|
||||||
|
const server = helpers.getServer(ctx, hostname);
|
||||||
|
|
||||||
|
return findRunningScript(fn, scriptArgs, server);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no arguments are specified, return the current RunningScript
|
||||||
|
return ctx.workerScript.scriptRef;
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,4 @@
|
|||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
import { Player as player } from "../Player";
|
||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
|
||||||
import { Bladeburner } from "../Bladeburner/Bladeburner";
|
import { Bladeburner } from "../Bladeburner/Bladeburner";
|
||||||
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
|
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
|
||||||
import { Bladeburner as INetscriptBladeburner, BladeburnerCurAction } from "../ScriptEditor/NetscriptDefinitions";
|
import { Bladeburner as INetscriptBladeburner, BladeburnerCurAction } from "../ScriptEditor/NetscriptDefinitions";
|
||||||
@@ -8,7 +7,7 @@ import { InternalAPI, NetscriptContext } from "src/Netscript/APIWrapper";
|
|||||||
import { BlackOperation } from "../Bladeburner/BlackOperation";
|
import { BlackOperation } from "../Bladeburner/BlackOperation";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript): InternalAPI<INetscriptBladeburner> {
|
export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
|
||||||
const checkBladeburnerAccess = function (ctx: NetscriptContext, skipjoined = false): void {
|
const checkBladeburnerAccess = function (ctx: NetscriptContext, skipjoined = false): void {
|
||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Must have joined bladeburner");
|
if (bladeburner === null) throw new Error("Must have joined bladeburner");
|
||||||
@@ -102,7 +101,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
try {
|
try {
|
||||||
return bladeburner.startActionNetscriptFn(player, type, name, workerScript);
|
return bladeburner.startActionNetscriptFn(player, type, name, ctx.workerScript);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
||||||
}
|
}
|
||||||
@@ -200,7 +199,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
try {
|
try {
|
||||||
return bladeburner.getActionCountRemainingNetscriptFn(type, name, workerScript);
|
return bladeburner.getActionCountRemainingNetscriptFn(type, name, ctx.workerScript);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
||||||
}
|
}
|
||||||
@@ -275,7 +274,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
try {
|
try {
|
||||||
return bladeburner.getSkillLevelNetscriptFn(skillName, workerScript);
|
return bladeburner.getSkillLevelNetscriptFn(skillName, ctx.workerScript);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
||||||
}
|
}
|
||||||
@@ -289,7 +288,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
try {
|
try {
|
||||||
return bladeburner.getSkillUpgradeCostNetscriptFn(skillName, count, workerScript);
|
return bladeburner.getSkillUpgradeCostNetscriptFn(skillName, count, ctx.workerScript);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
||||||
}
|
}
|
||||||
@@ -303,7 +302,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
try {
|
try {
|
||||||
return bladeburner.upgradeSkillNetscriptFn(skillName, count, workerScript);
|
return bladeburner.upgradeSkillNetscriptFn(skillName, count, ctx.workerScript);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
||||||
}
|
}
|
||||||
@@ -317,7 +316,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
try {
|
try {
|
||||||
return bladeburner.getTeamSizeNetscriptFn(type, name, workerScript);
|
return bladeburner.getTeamSizeNetscriptFn(type, name, ctx.workerScript);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
||||||
}
|
}
|
||||||
@@ -332,7 +331,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
try {
|
try {
|
||||||
return bladeburner.setTeamSizeNetscriptFn(type, name, size, workerScript);
|
return bladeburner.setTeamSizeNetscriptFn(type, name, size, ctx.workerScript);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
throw helpers.makeRuntimeErrorMsg(ctx, String(e));
|
||||||
}
|
}
|
||||||
@@ -394,7 +393,7 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
checkBladeburnerAccess(ctx, true);
|
checkBladeburnerAccess(ctx, true);
|
||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
return bladeburner.joinBladeburnerFactionNetscriptFn(workerScript);
|
return bladeburner.joinBladeburnerFactionNetscriptFn(ctx.workerScript);
|
||||||
},
|
},
|
||||||
joinBladeburnerDivision: (ctx: NetscriptContext) => (): boolean => {
|
joinBladeburnerDivision: (ctx: NetscriptContext) => (): boolean => {
|
||||||
if (player.bitNodeN === 7 || player.sourceFileLvl(7) > 0) {
|
if (player.bitNodeN === 7 || player.sourceFileLvl(7) > 0) {
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
import { Player as player } from "../Player";
|
||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
|
||||||
import { is2DArray } from "../utils/helpers/is2DArray";
|
import { is2DArray } from "../utils/helpers/is2DArray";
|
||||||
import { CodingContract } from "../CodingContracts";
|
import { CodingContract } from "../CodingContracts";
|
||||||
import { CodingAttemptOptions, CodingContract as ICodingContract } from "../ScriptEditor/NetscriptDefinitions";
|
import { CodingAttemptOptions, CodingContract as ICodingContract } from "../ScriptEditor/NetscriptDefinitions";
|
||||||
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptCodingContract(player: IPlayer, workerScript: WorkerScript): InternalAPI<ICodingContract> {
|
export function NetscriptCodingContract(): InternalAPI<ICodingContract> {
|
||||||
const getCodingContract = function (
|
const getCodingContract = function (
|
||||||
ctx: NetscriptContext,
|
ctx: NetscriptContext,
|
||||||
func: string,
|
func: string,
|
||||||
@@ -28,7 +27,7 @@ export function NetscriptCodingContract(player: IPlayer, workerScript: WorkerScr
|
|||||||
(
|
(
|
||||||
answer: unknown,
|
answer: unknown,
|
||||||
_filename: unknown,
|
_filename: unknown,
|
||||||
_hostname: unknown = workerScript.hostname,
|
_hostname: unknown = ctx.workerScript.hostname,
|
||||||
{ returnReward }: CodingAttemptOptions = { returnReward: false },
|
{ returnReward }: CodingAttemptOptions = { returnReward: false },
|
||||||
): boolean | string => {
|
): boolean | string => {
|
||||||
const filename = helpers.string(ctx, "filename", _filename);
|
const filename = helpers.string(ctx, "filename", _filename);
|
||||||
@@ -78,7 +77,7 @@ export function NetscriptCodingContract(player: IPlayer, workerScript: WorkerScr
|
|||||||
},
|
},
|
||||||
getContractType:
|
getContractType:
|
||||||
(ctx: NetscriptContext) =>
|
(ctx: NetscriptContext) =>
|
||||||
(_filename: unknown, _hostname: unknown = workerScript.hostname): string => {
|
(_filename: unknown, _hostname: unknown = ctx.workerScript.hostname): string => {
|
||||||
const filename = helpers.string(ctx, "filename", _filename);
|
const filename = helpers.string(ctx, "filename", _filename);
|
||||||
const hostname = helpers.string(ctx, "hostname", _hostname);
|
const hostname = helpers.string(ctx, "hostname", _hostname);
|
||||||
const contract = getCodingContract(ctx, "getContractType", hostname, filename);
|
const contract = getCodingContract(ctx, "getContractType", hostname, filename);
|
||||||
@@ -86,7 +85,7 @@ export function NetscriptCodingContract(player: IPlayer, workerScript: WorkerScr
|
|||||||
},
|
},
|
||||||
getData:
|
getData:
|
||||||
(ctx: NetscriptContext) =>
|
(ctx: NetscriptContext) =>
|
||||||
(_filename: unknown, _hostname: unknown = workerScript.hostname): unknown => {
|
(_filename: unknown, _hostname: unknown = ctx.workerScript.hostname): unknown => {
|
||||||
const filename = helpers.string(ctx, "filename", _filename);
|
const filename = helpers.string(ctx, "filename", _filename);
|
||||||
const hostname = helpers.string(ctx, "hostname", _hostname);
|
const hostname = helpers.string(ctx, "hostname", _hostname);
|
||||||
const contract = getCodingContract(ctx, "getData", hostname, filename);
|
const contract = getCodingContract(ctx, "getData", hostname, filename);
|
||||||
@@ -109,7 +108,7 @@ export function NetscriptCodingContract(player: IPlayer, workerScript: WorkerScr
|
|||||||
},
|
},
|
||||||
getDescription:
|
getDescription:
|
||||||
(ctx: NetscriptContext) =>
|
(ctx: NetscriptContext) =>
|
||||||
(_filename: unknown, _hostname: unknown = workerScript.hostname): string => {
|
(_filename: unknown, _hostname: unknown = ctx.workerScript.hostname): string => {
|
||||||
const filename = helpers.string(ctx, "filename", _filename);
|
const filename = helpers.string(ctx, "filename", _filename);
|
||||||
const hostname = helpers.string(ctx, "hostname", _hostname);
|
const hostname = helpers.string(ctx, "hostname", _hostname);
|
||||||
const contract = getCodingContract(ctx, "getDescription", hostname, filename);
|
const contract = getCodingContract(ctx, "getDescription", hostname, filename);
|
||||||
@@ -117,7 +116,7 @@ export function NetscriptCodingContract(player: IPlayer, workerScript: WorkerScr
|
|||||||
},
|
},
|
||||||
getNumTriesRemaining:
|
getNumTriesRemaining:
|
||||||
(ctx: NetscriptContext) =>
|
(ctx: NetscriptContext) =>
|
||||||
(_filename: unknown, _hostname: unknown = workerScript.hostname): number => {
|
(_filename: unknown, _hostname: unknown = ctx.workerScript.hostname): number => {
|
||||||
const filename = helpers.string(ctx, "filename", _filename);
|
const filename = helpers.string(ctx, "filename", _filename);
|
||||||
const hostname = helpers.string(ctx, "hostname", _hostname);
|
const hostname = helpers.string(ctx, "hostname", _hostname);
|
||||||
const contract = getCodingContract(ctx, "getNumTriesRemaining", hostname, filename);
|
const contract = getCodingContract(ctx, "getNumTriesRemaining", hostname, filename);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
|
|
||||||
import { OfficeSpace } from "../Corporation/OfficeSpace";
|
import { OfficeSpace } from "../Corporation/OfficeSpace";
|
||||||
import { Employee } from "../Corporation/Employee";
|
import { Employee } from "../Corporation/Employee";
|
||||||
@@ -68,7 +68,7 @@ import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
|
|||||||
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptCorporation(player: IPlayer): InternalAPI<NSCorporation> {
|
export function NetscriptCorporation(): InternalAPI<NSCorporation> {
|
||||||
function createCorporation(corporationName: string, selfFund = true): boolean {
|
function createCorporation(corporationName: string, selfFund = true): boolean {
|
||||||
if (!player.canAccessCorporation() || player.hasCorporation()) return false;
|
if (!player.canAccessCorporation() || player.hasCorporation()) return false;
|
||||||
if (!corporationName) return false;
|
if (!corporationName) return false;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
import { Exploit } from "../Exploits/Exploit";
|
import { Exploit } from "../Exploits/Exploit";
|
||||||
import * as bcrypt from "bcryptjs";
|
import * as bcrypt from "bcryptjs";
|
||||||
import { Apr1Events as devMenu } from "../ui/Apr1";
|
import { Apr1Events as devMenu } from "../ui/Apr1";
|
||||||
@@ -16,7 +16,7 @@ export interface INetscriptExtra {
|
|||||||
rainbow(guess: string): void;
|
rainbow(guess: string): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function NetscriptExtra(player: IPlayer): InternalAPI<INetscriptExtra> {
|
export function NetscriptExtra(): InternalAPI<INetscriptExtra> {
|
||||||
return {
|
return {
|
||||||
heart: {
|
heart: {
|
||||||
// Easter egg function
|
// Easter egg function
|
||||||
|
|||||||
@@ -1,41 +1,42 @@
|
|||||||
import { toNative } from "./toNative";
|
import { toNative } from "./toNative";
|
||||||
import libarg from "arg";
|
import libarg from "arg";
|
||||||
import { ScriptArg } from "../Netscript/ScriptArg";
|
import { ScriptArg } from "../Netscript/ScriptArg";
|
||||||
|
import { NetscriptContext } from "../Netscript/APIWrapper";
|
||||||
|
|
||||||
type FlagType = StringConstructor | NumberConstructor | BooleanConstructor | StringConstructor[];
|
type FlagType = StringConstructor | NumberConstructor | BooleanConstructor | StringConstructor[];
|
||||||
type FlagsRet = { [key: string]: ScriptArg };
|
type FlagsRet = { [key: string]: ScriptArg };
|
||||||
export function Flags(vargs: string[]): () => (data: unknown) => FlagsRet {
|
export function Flags(ctx: NetscriptContext | string[]): (data: unknown) => FlagsRet {
|
||||||
return (/* ctx: NetscriptContext */) =>
|
const vargs = Array.isArray(ctx) ? ctx : ctx.workerScript.args;
|
||||||
(schema: unknown): FlagsRet => {
|
return (schema: unknown): FlagsRet => {
|
||||||
schema = toNative(schema);
|
schema = toNative(schema);
|
||||||
if (!Array.isArray(schema)) throw new Error("flags schema passed in is invalid.");
|
if (!Array.isArray(schema)) throw new Error("flags schema passed in is invalid.");
|
||||||
const args: {
|
const args: {
|
||||||
[key: string]: FlagType;
|
[key: string]: FlagType;
|
||||||
} = {};
|
} = {};
|
||||||
|
|
||||||
for (const d of schema) {
|
for (const d of schema) {
|
||||||
let t: FlagType = String;
|
let t: FlagType = String;
|
||||||
if (typeof d[1] === "number") {
|
if (typeof d[1] === "number") {
|
||||||
t = Number;
|
t = Number;
|
||||||
} else if (typeof d[1] === "boolean") {
|
} else if (typeof d[1] === "boolean") {
|
||||||
t = Boolean;
|
t = Boolean;
|
||||||
} else if (Array.isArray(d[1])) {
|
} else if (Array.isArray(d[1])) {
|
||||||
t = [String];
|
t = [String];
|
||||||
}
|
|
||||||
const numDashes = d[0].length > 1 ? 2 : 1;
|
|
||||||
args["-".repeat(numDashes) + d[0]] = t;
|
|
||||||
}
|
}
|
||||||
const ret: FlagsRet = libarg(args, { argv: vargs });
|
const numDashes = d[0].length > 1 ? 2 : 1;
|
||||||
for (const d of schema) {
|
args["-".repeat(numDashes) + d[0]] = t;
|
||||||
if (!ret.hasOwnProperty("--" + d[0]) || !ret.hasOwnProperty("-" + d[0])) ret[d[0]] = d[1];
|
}
|
||||||
}
|
const ret: FlagsRet = libarg(args, { argv: vargs });
|
||||||
for (const key of Object.keys(ret)) {
|
for (const d of schema) {
|
||||||
if (!key.startsWith("-")) continue;
|
if (!ret.hasOwnProperty("--" + d[0]) || !ret.hasOwnProperty("-" + d[0])) ret[d[0]] = d[1];
|
||||||
const value = ret[key];
|
}
|
||||||
delete ret[key];
|
for (const key of Object.keys(ret)) {
|
||||||
const numDashes = key.length === 2 ? 1 : 2;
|
if (!key.startsWith("-")) continue;
|
||||||
ret[key.slice(numDashes)] = value;
|
const value = ret[key];
|
||||||
}
|
delete ret[key];
|
||||||
return ret;
|
const numDashes = key.length === 2 ? 1 : 2;
|
||||||
};
|
ret[key.slice(numDashes)] = value;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
import { calculateServerGrowth } from "../Server/formulas/grow";
|
import { calculateServerGrowth } from "../Server/formulas/grow";
|
||||||
import {
|
import {
|
||||||
calculateMoneyGainRate,
|
calculateMoneyGainRate,
|
||||||
@@ -44,7 +44,7 @@ import { repFromDonation } from "../Faction/formulas/donation";
|
|||||||
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptFormulas(player: IPlayer): InternalAPI<IFormulas> {
|
export function NetscriptFormulas(): InternalAPI<IFormulas> {
|
||||||
const checkFormulasAccess = function (ctx: NetscriptContext): void {
|
const checkFormulasAccess = function (ctx: NetscriptContext): void {
|
||||||
if (!player.hasProgram(Programs.Formulas.name)) {
|
if (!player.hasProgram(Programs.Formulas.name)) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, `Requires Formulas.exe to run.`);
|
throw helpers.makeRuntimeErrorMsg(ctx, `Requires Formulas.exe to run.`);
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import { FactionNames } from "../Faction/data/FactionNames";
|
import { FactionNames } from "../Faction/data/FactionNames";
|
||||||
import { GangConstants } from "../Gang/data/Constants";
|
import { GangConstants } from "../Gang/data/Constants";
|
||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
import { Gang } from "../Gang/Gang";
|
import { Gang } from "../Gang/Gang";
|
||||||
import { AllGangs } from "../Gang/AllGangs";
|
import { AllGangs } from "../Gang/AllGangs";
|
||||||
import { GangMemberTasks } from "../Gang/GangMemberTasks";
|
import { GangMemberTasks } from "../Gang/GangMemberTasks";
|
||||||
import { GangMemberUpgrades } from "../Gang/GangMemberUpgrades";
|
import { GangMemberUpgrades } from "../Gang/GangMemberUpgrades";
|
||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
|
||||||
import { GangMember } from "../Gang/GangMember";
|
import { GangMember } from "../Gang/GangMember";
|
||||||
import { GangMemberTask } from "../Gang/GangMemberTask";
|
import { GangMemberTask } from "../Gang/GangMemberTask";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
@@ -22,7 +21,7 @@ import {
|
|||||||
} from "../ScriptEditor/NetscriptDefinitions";
|
} from "../ScriptEditor/NetscriptDefinitions";
|
||||||
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
||||||
|
|
||||||
export function NetscriptGang(player: IPlayer, workerScript: WorkerScript): InternalAPI<IGang> {
|
export function NetscriptGang(): InternalAPI<IGang> {
|
||||||
const checkGangApiAccess = function (ctx: NetscriptContext): void {
|
const checkGangApiAccess = function (ctx: NetscriptContext): void {
|
||||||
const gang = player.gang;
|
const gang = player.gang;
|
||||||
if (gang === null) throw new Error("Must have joined gang");
|
if (gang === null) throw new Error("Must have joined gang");
|
||||||
@@ -170,9 +169,9 @@ export function NetscriptGang(player: IPlayer, workerScript: WorkerScript): Inte
|
|||||||
if (gang === null) throw new Error("Should not be called without Gang");
|
if (gang === null) throw new Error("Should not be called without Gang");
|
||||||
const recruited = gang.recruitMember(memberName);
|
const recruited = gang.recruitMember(memberName);
|
||||||
if (recruited) {
|
if (recruited) {
|
||||||
workerScript.log("gang.recruitMember", () => `Successfully recruited Gang Member '${memberName}'`);
|
ctx.workerScript.log("gang.recruitMember", () => `Successfully recruited Gang Member '${memberName}'`);
|
||||||
} else {
|
} else {
|
||||||
workerScript.log("gang.recruitMember", () => `Failed to recruit Gang Member '${memberName}'`);
|
ctx.workerScript.log("gang.recruitMember", () => `Failed to recruit Gang Member '${memberName}'`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return recruited;
|
return recruited;
|
||||||
@@ -195,7 +194,7 @@ export function NetscriptGang(player: IPlayer, workerScript: WorkerScript): Inte
|
|||||||
const gang = player.gang;
|
const gang = player.gang;
|
||||||
if (gang === null) throw new Error("Should not be called without Gang");
|
if (gang === null) throw new Error("Should not be called without Gang");
|
||||||
if (!gang.getAllTaskNames().includes(taskName)) {
|
if (!gang.getAllTaskNames().includes(taskName)) {
|
||||||
workerScript.log(
|
ctx.workerScript.log(
|
||||||
"gang.setMemberTask",
|
"gang.setMemberTask",
|
||||||
() =>
|
() =>
|
||||||
`Failed to assign Gang Member '${memberName}' to Invalid task '${taskName}'. '${memberName}' is now Unassigned`,
|
`Failed to assign Gang Member '${memberName}' to Invalid task '${taskName}'. '${memberName}' is now Unassigned`,
|
||||||
@@ -204,12 +203,12 @@ export function NetscriptGang(player: IPlayer, workerScript: WorkerScript): Inte
|
|||||||
}
|
}
|
||||||
const success = member.assignToTask(taskName);
|
const success = member.assignToTask(taskName);
|
||||||
if (success) {
|
if (success) {
|
||||||
workerScript.log(
|
ctx.workerScript.log(
|
||||||
"gang.setMemberTask",
|
"gang.setMemberTask",
|
||||||
() => `Successfully assigned Gang Member '${memberName}' to '${taskName}' task`,
|
() => `Successfully assigned Gang Member '${memberName}' to '${taskName}' task`,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
workerScript.log(
|
ctx.workerScript.log(
|
||||||
"gang.setMemberTask",
|
"gang.setMemberTask",
|
||||||
() =>
|
() =>
|
||||||
`Failed to assign Gang Member '${memberName}' to '${taskName}' task. '${memberName}' is now Unassigned`,
|
`Failed to assign Gang Member '${memberName}' to '${taskName}' task. '${memberName}' is now Unassigned`,
|
||||||
@@ -277,9 +276,9 @@ export function NetscriptGang(player: IPlayer, workerScript: WorkerScript): Inte
|
|||||||
if (!equipment) return false;
|
if (!equipment) return false;
|
||||||
const res = member.buyUpgrade(equipment, player, gang);
|
const res = member.buyUpgrade(equipment, player, gang);
|
||||||
if (res) {
|
if (res) {
|
||||||
workerScript.log("gang.purchaseEquipment", () => `Purchased '${equipName}' for Gang member '${memberName}'`);
|
ctx.workerScript.log("gang.purchaseEquipment", () => `Purchased '${equipName}' for Gang member '${memberName}'`);
|
||||||
} else {
|
} else {
|
||||||
workerScript.log(
|
ctx.workerScript.log(
|
||||||
"gang.purchaseEquipment",
|
"gang.purchaseEquipment",
|
||||||
() => `Failed to purchase '${equipName}' for Gang member '${memberName}'`,
|
() => `Failed to purchase '${equipName}' for Gang member '${memberName}'`,
|
||||||
);
|
);
|
||||||
@@ -296,7 +295,7 @@ export function NetscriptGang(player: IPlayer, workerScript: WorkerScript): Inte
|
|||||||
if (gang === null) throw new Error("Should not be called without Gang");
|
if (gang === null) throw new Error("Should not be called without Gang");
|
||||||
const member = getGangMember(ctx, memberName);
|
const member = getGangMember(ctx, memberName);
|
||||||
if (!member.canAscend()) return;
|
if (!member.canAscend()) return;
|
||||||
return gang.ascendMember(member, workerScript);
|
return gang.ascendMember(member, ctx.workerScript);
|
||||||
},
|
},
|
||||||
getAscensionResult:
|
getAscensionResult:
|
||||||
(ctx: NetscriptContext) =>
|
(ctx: NetscriptContext) =>
|
||||||
@@ -321,10 +320,10 @@ export function NetscriptGang(player: IPlayer, workerScript: WorkerScript): Inte
|
|||||||
if (gang === null) throw new Error("Should not be called without Gang");
|
if (gang === null) throw new Error("Should not be called without Gang");
|
||||||
if (engage) {
|
if (engage) {
|
||||||
gang.territoryWarfareEngaged = true;
|
gang.territoryWarfareEngaged = true;
|
||||||
workerScript.log("gang.setTerritoryWarfare", () => "Engaging in Gang Territory Warfare");
|
ctx.workerScript.log("gang.setTerritoryWarfare", () => "Engaging in Gang Territory Warfare");
|
||||||
} else {
|
} else {
|
||||||
gang.territoryWarfareEngaged = false;
|
gang.territoryWarfareEngaged = false;
|
||||||
workerScript.log("gang.setTerritoryWarfare", () => "Disengaging in Gang Territory Warfare");
|
ctx.workerScript.log("gang.setTerritoryWarfare", () => "Disengaging in Gang Territory Warfare");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getChanceToWinClash:
|
getChanceToWinClash:
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ import { hasAugmentationPrereqs } from "../Faction/FactionHelpers";
|
|||||||
import { CityName } from "../Locations/data/CityNames";
|
import { CityName } from "../Locations/data/CityNames";
|
||||||
import { GraftableAugmentation } from "../PersonObjects/Grafting/GraftableAugmentation";
|
import { GraftableAugmentation } from "../PersonObjects/Grafting/GraftableAugmentation";
|
||||||
import { getGraftingAvailableAugs, calculateGraftingTimeWithBonus } from "../PersonObjects/Grafting/GraftingHelpers";
|
import { getGraftingAvailableAugs, calculateGraftingTimeWithBonus } from "../PersonObjects/Grafting/GraftingHelpers";
|
||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
import { Grafting as IGrafting } from "../ScriptEditor/NetscriptDefinitions";
|
import { Grafting as IGrafting } from "../ScriptEditor/NetscriptDefinitions";
|
||||||
import { Router } from "../ui/GameRoot";
|
import { Router } from "../ui/GameRoot";
|
||||||
import { GraftingWork } from "../Work/GraftingWork";
|
import { GraftingWork } from "../Work/GraftingWork";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptGrafting(player: IPlayer): InternalAPI<IGrafting> {
|
export function NetscriptGrafting(): InternalAPI<IGrafting> {
|
||||||
const checkGraftingAPIAccess = (ctx: NetscriptContext): void => {
|
const checkGraftingAPIAccess = (ctx: NetscriptContext): void => {
|
||||||
if (!player.canAccessGrafting()) {
|
if (!player.canAccessGrafting()) {
|
||||||
throw helpers.makeRuntimeErrorMsg(
|
throw helpers.makeRuntimeErrorMsg(
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
|
||||||
import { HacknetServerConstants } from "../Hacknet/data/Constants";
|
import { HacknetServerConstants } from "../Hacknet/data/Constants";
|
||||||
import {
|
import {
|
||||||
getCostOfNextHacknetNode,
|
getCostOfNextHacknetNode,
|
||||||
@@ -23,7 +22,7 @@ import { Hacknet as IHacknet, NodeStats } from "../ScriptEditor/NetscriptDefinit
|
|||||||
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptHacknet(player: IPlayer, workerScript: WorkerScript): InternalAPI<IHacknet> {
|
export function NetscriptHacknet(): InternalAPI<IHacknet> {
|
||||||
// Utility function to get Hacknet Node object
|
// Utility function to get Hacknet Node object
|
||||||
const getHacknetNode = function (ctx: NetscriptContext, i: number): HacknetNode | HacknetServer {
|
const getHacknetNode = function (ctx: NetscriptContext, i: number): HacknetNode | HacknetServer {
|
||||||
if (i < 0 || i >= player.hacknetNodes.length) {
|
if (i < 0 || i >= player.hacknetNodes.length) {
|
||||||
@@ -128,7 +127,7 @@ export function NetscriptHacknet(player: IPlayer, workerScript: WorkerScript): I
|
|||||||
}
|
}
|
||||||
const node = getHacknetNode(ctx, i);
|
const node = getHacknetNode(ctx, i);
|
||||||
if (!(node instanceof HacknetServer)) {
|
if (!(node instanceof HacknetServer)) {
|
||||||
workerScript.log("hacknet.upgradeCache", () => "Can only be called on hacknet servers");
|
helpers.log(ctx, () => "Can only be called on hacknet servers");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const res = purchaseCacheUpgrade(player, node, n);
|
const res = purchaseCacheUpgrade(player, node, n);
|
||||||
@@ -171,7 +170,7 @@ export function NetscriptHacknet(player: IPlayer, workerScript: WorkerScript): I
|
|||||||
}
|
}
|
||||||
const node = getHacknetNode(ctx, i);
|
const node = getHacknetNode(ctx, i);
|
||||||
if (!(node instanceof HacknetServer)) {
|
if (!(node instanceof HacknetServer)) {
|
||||||
workerScript.log("hacknet.getCacheUpgradeCost", () => "Can only be called on hacknet servers");
|
helpers.log(ctx, () => "Can only be called on hacknet servers");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return node.calculateCacheUpgradeCost(n);
|
return node.calculateCacheUpgradeCost(n);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Infiltration as IInfiltration,
|
Infiltration as IInfiltration,
|
||||||
@@ -20,7 +20,7 @@ import { checkEnum } from "../utils/helpers/checkEnum";
|
|||||||
import { LocationName } from "../Locations/data/LocationNames";
|
import { LocationName } from "../Locations/data/LocationNames";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptInfiltration(player: IPlayer): InternalAPI<IInfiltration> {
|
export function NetscriptInfiltration(): InternalAPI<IInfiltration> {
|
||||||
const getLocationsWithInfiltrations = Object.values(Locations).filter(
|
const getLocationsWithInfiltrations = Object.values(Locations).filter(
|
||||||
(location: Location) => location.infiltrationData,
|
(location: Location) => location.infiltrationData,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
import { Player as player} from "../Player";
|
||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
|
||||||
import { purchaseAugmentation, joinFaction, getFactionAugmentationsFiltered } from "../Faction/FactionHelpers";
|
import { purchaseAugmentation, joinFaction, getFactionAugmentationsFiltered } from "../Faction/FactionHelpers";
|
||||||
import { startWorkerScript } from "../NetscriptWorker";
|
import { startWorkerScript } from "../NetscriptWorker";
|
||||||
import { Augmentation } from "../Augmentation/Augmentation";
|
import { Augmentation } from "../Augmentation/Augmentation";
|
||||||
@@ -54,7 +53,7 @@ import { FactionWork } from "../Work/FactionWork";
|
|||||||
import { FactionWorkType } from "../Work/data/FactionWorkType";
|
import { FactionWorkType } from "../Work/data/FactionWorkType";
|
||||||
import { CompanyWork } from "../Work/CompanyWork";
|
import { CompanyWork } from "../Work/CompanyWork";
|
||||||
|
|
||||||
export function NetscriptSingularity(player: IPlayer, workerScript: WorkerScript): InternalAPI<ISingularity> {
|
export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||||
const getAugmentation = function (ctx: NetscriptContext, name: string): Augmentation {
|
const getAugmentation = function (ctx: NetscriptContext, name: string): Augmentation {
|
||||||
if (!augmentationExists(name)) {
|
if (!augmentationExists(name)) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid augmentation: '${name}'`);
|
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid augmentation: '${name}'`);
|
||||||
@@ -235,9 +234,9 @@ export function NetscriptSingularity(player: IPlayer, workerScript: WorkerScript
|
|||||||
runAfterReset(cbScript);
|
runAfterReset(cbScript);
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
// Prevent workerScript from "finishing execution naturally"
|
// Prevent ctx.workerScript from "finishing execution naturally"
|
||||||
workerScript.running = false;
|
ctx.workerScript.running = false;
|
||||||
killWorkerScript(workerScript);
|
killWorkerScript(ctx.workerScript);
|
||||||
},
|
},
|
||||||
installAugmentations: (ctx: NetscriptContext) =>
|
installAugmentations: (ctx: NetscriptContext) =>
|
||||||
function (_cbScript: unknown = ""): boolean {
|
function (_cbScript: unknown = ""): boolean {
|
||||||
@@ -255,8 +254,8 @@ export function NetscriptSingularity(player: IPlayer, workerScript: WorkerScript
|
|||||||
runAfterReset(cbScript);
|
runAfterReset(cbScript);
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
workerScript.running = false; // Prevent workerScript from "finishing execution naturally"
|
ctx.workerScript.running = false; // Prevent ctx.workerScript from "finishing execution naturally"
|
||||||
killWorkerScript(workerScript);
|
killWorkerScript(ctx.workerScript);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1179,7 +1178,7 @@ export function NetscriptSingularity(player: IPlayer, workerScript: WorkerScript
|
|||||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid crime: '${crimeRoughName}'`);
|
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid crime: '${crimeRoughName}'`);
|
||||||
}
|
}
|
||||||
helpers.log(ctx, () => `Attempting to commit ${crime.name}...`);
|
helpers.log(ctx, () => `Attempting to commit ${crime.name}...`);
|
||||||
const crimeTime = crime.commit(player, 1, workerScript);
|
const crimeTime = crime.commit(player, 1, ctx.workerScript);
|
||||||
if (focus) {
|
if (focus) {
|
||||||
player.startFocusing();
|
player.startFocusing();
|
||||||
Router.toWork();
|
Router.toWork();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
import { findSleevePurchasableAugs } from "../PersonObjects/Sleeve/SleeveHelpers";
|
import { findSleevePurchasableAugs } from "../PersonObjects/Sleeve/SleeveHelpers";
|
||||||
import { StaticAugmentations } from "../Augmentation/StaticAugmentations";
|
import { StaticAugmentations } from "../Augmentation/StaticAugmentations";
|
||||||
import { CityName } from "../Locations/data/CityNames";
|
import { CityName } from "../Locations/data/CityNames";
|
||||||
@@ -19,7 +19,7 @@ import { isSleeveFactionWork } from "../PersonObjects/Sleeve/Work/SleeveFactionW
|
|||||||
import { isSleeveCompanyWork } from "../PersonObjects/Sleeve/Work/SleeveCompanyWork";
|
import { isSleeveCompanyWork } from "../PersonObjects/Sleeve/Work/SleeveCompanyWork";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptSleeve(player: IPlayer): InternalAPI<ISleeve> {
|
export function NetscriptSleeve(): InternalAPI<ISleeve> {
|
||||||
const checkSleeveAPIAccess = function (ctx: NetscriptContext): void {
|
const checkSleeveAPIAccess = function (ctx: NetscriptContext): void {
|
||||||
if (player.bitNodeN !== 10 && !player.sourceFileLvl(10)) {
|
if (player.bitNodeN !== 10 && !player.sourceFileLvl(10)) {
|
||||||
throw helpers.makeRuntimeErrorMsg(
|
throw helpers.makeRuntimeErrorMsg(
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
import { Player as player } from "../Player";
|
||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
|
||||||
|
|
||||||
import { staneksGift } from "../CotMG/Helper";
|
import { staneksGift } from "../CotMG/Helper";
|
||||||
import { Fragments, FragmentById } from "../CotMG/Fragment";
|
import { Fragments, FragmentById } from "../CotMG/Fragment";
|
||||||
@@ -18,7 +17,7 @@ import { joinFaction } from "../Faction/FactionHelpers";
|
|||||||
import { Factions } from "../Faction/Factions";
|
import { Factions } from "../Faction/Factions";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptStanek(player: IPlayer, workerScript: WorkerScript): InternalAPI<IStanek> {
|
export function NetscriptStanek(): InternalAPI<IStanek> {
|
||||||
function checkStanekAPIAccess(ctx: NetscriptContext): void {
|
function checkStanekAPIAccess(ctx: NetscriptContext): void {
|
||||||
if (!player.hasAugmentation(AugmentationNames.StaneksGift1, true)) {
|
if (!player.hasAugmentation(AugmentationNames.StaneksGift1, true)) {
|
||||||
throw helpers.makeRuntimeErrorMsg(ctx, "Stanek's Gift is not installed");
|
throw helpers.makeRuntimeErrorMsg(ctx, "Stanek's Gift is not installed");
|
||||||
@@ -54,7 +53,7 @@ export function NetscriptStanek(player: IPlayer, workerScript: WorkerScript): In
|
|||||||
//Charge the fragment
|
//Charge the fragment
|
||||||
const time = staneksGift.inBonus() ? 200 : 1000;
|
const time = staneksGift.inBonus() ? 200 : 1000;
|
||||||
return helpers.netscriptDelay(ctx, time).then(function () {
|
return helpers.netscriptDelay(ctx, time).then(function () {
|
||||||
staneksGift.charge(player, fragment, workerScript.scriptRef.threads);
|
staneksGift.charge(player, fragment, ctx.workerScript.scriptRef.threads);
|
||||||
helpers.log(ctx, () => `Charged fragment with ${ctx.workerScript.scriptRef.threads} threads.`);
|
helpers.log(ctx, () => `Charged fragment with ${ctx.workerScript.scriptRef.threads} threads.`);
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
import { Player as player } from "../Player";
|
||||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
|
||||||
import { buyStock, sellStock, shortStock, sellShort } from "../StockMarket/BuyingAndSelling";
|
import { buyStock, sellStock, shortStock, sellShort } from "../StockMarket/BuyingAndSelling";
|
||||||
import { StockMarket, SymbolToStockMap, placeOrder, cancelOrder, initStockMarketFn } from "../StockMarket/StockMarket";
|
import { StockMarket, SymbolToStockMap, placeOrder, cancelOrder, initStockMarketFn } from "../StockMarket/StockMarket";
|
||||||
import { getBuyTransactionCost, getSellTransactionGain } from "../StockMarket/StockMarketHelpers";
|
import { getBuyTransactionCost, getSellTransactionGain } from "../StockMarket/StockMarketHelpers";
|
||||||
@@ -17,7 +16,7 @@ import { StockOrder, TIX } from "../ScriptEditor/NetscriptDefinitions";
|
|||||||
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
||||||
import { helpers } from "../Netscript/NetscriptHelpers";
|
import { helpers } from "../Netscript/NetscriptHelpers";
|
||||||
|
|
||||||
export function NetscriptStockMarket(player: IPlayer, workerScript: WorkerScript): InternalAPI<TIX> {
|
export function NetscriptStockMarket(): InternalAPI<TIX> {
|
||||||
/**
|
/**
|
||||||
* Checks if the player has TIX API access. Throws an error if the player does not
|
* Checks if the player has TIX API access. Throws an error if the player does not
|
||||||
*/
|
*/
|
||||||
@@ -164,7 +163,7 @@ export function NetscriptStockMarket(player: IPlayer, workerScript: WorkerScript
|
|||||||
const shares = helpers.number(ctx, "shares", _shares);
|
const shares = helpers.number(ctx, "shares", _shares);
|
||||||
checkTixApiAccess(ctx);
|
checkTixApiAccess(ctx);
|
||||||
const stock = getStockFromSymbol(ctx, symbol);
|
const stock = getStockFromSymbol(ctx, symbol);
|
||||||
const res = buyStock(stock, shares, workerScript, {});
|
const res = buyStock(stock, shares, ctx.workerScript, {});
|
||||||
return res ? stock.getAskPrice() : 0;
|
return res ? stock.getAskPrice() : 0;
|
||||||
},
|
},
|
||||||
sellStock:
|
sellStock:
|
||||||
@@ -174,7 +173,7 @@ export function NetscriptStockMarket(player: IPlayer, workerScript: WorkerScript
|
|||||||
const shares = helpers.number(ctx, "shares", _shares);
|
const shares = helpers.number(ctx, "shares", _shares);
|
||||||
checkTixApiAccess(ctx);
|
checkTixApiAccess(ctx);
|
||||||
const stock = getStockFromSymbol(ctx, symbol);
|
const stock = getStockFromSymbol(ctx, symbol);
|
||||||
const res = sellStock(stock, shares, workerScript, {});
|
const res = sellStock(stock, shares, ctx.workerScript, {});
|
||||||
|
|
||||||
return res ? stock.getBidPrice() : 0;
|
return res ? stock.getBidPrice() : 0;
|
||||||
},
|
},
|
||||||
@@ -193,7 +192,7 @@ export function NetscriptStockMarket(player: IPlayer, workerScript: WorkerScript
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const stock = getStockFromSymbol(ctx, symbol);
|
const stock = getStockFromSymbol(ctx, symbol);
|
||||||
const res = shortStock(stock, shares, workerScript, {});
|
const res = shortStock(stock, shares, ctx.workerScript, {});
|
||||||
|
|
||||||
return res ? stock.getBidPrice() : 0;
|
return res ? stock.getBidPrice() : 0;
|
||||||
},
|
},
|
||||||
@@ -212,7 +211,7 @@ export function NetscriptStockMarket(player: IPlayer, workerScript: WorkerScript
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const stock = getStockFromSymbol(ctx, symbol);
|
const stock = getStockFromSymbol(ctx, symbol);
|
||||||
const res = sellShort(stock, shares, workerScript, {});
|
const res = sellShort(stock, shares, ctx.workerScript, {});
|
||||||
|
|
||||||
return res ? stock.getAskPrice() : 0;
|
return res ? stock.getAskPrice() : 0;
|
||||||
},
|
},
|
||||||
@@ -259,7 +258,7 @@ export function NetscriptStockMarket(player: IPlayer, workerScript: WorkerScript
|
|||||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid position type: ${pos}`);
|
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid position type: ${pos}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return placeOrder(stock, shares, price, orderType, orderPos, workerScript);
|
return placeOrder(stock, shares, price, orderType, orderPos, ctx.workerScript);
|
||||||
},
|
},
|
||||||
cancelOrder:
|
cancelOrder:
|
||||||
(ctx: NetscriptContext) =>
|
(ctx: NetscriptContext) =>
|
||||||
@@ -315,7 +314,7 @@ export function NetscriptStockMarket(player: IPlayer, workerScript: WorkerScript
|
|||||||
type: orderType,
|
type: orderType,
|
||||||
pos: orderPos,
|
pos: orderPos,
|
||||||
};
|
};
|
||||||
return cancelOrder(params, workerScript);
|
return cancelOrder(params, ctx.workerScript);
|
||||||
},
|
},
|
||||||
getOrders: (ctx: NetscriptContext) => (): StockOrder => {
|
getOrders: (ctx: NetscriptContext) => (): StockOrder => {
|
||||||
checkTixApiAccess(ctx);
|
checkTixApiAccess(ctx);
|
||||||
|
|||||||
@@ -309,7 +309,7 @@ export async function determineAllPossibilitiesForTabCompletion(
|
|||||||
return "--" + f[0];
|
return "--" + f[0];
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
return flagFunc()(schema);
|
return flagFunc(schema);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user