This commit is contained in:
Olivier Gagnon
2022-01-04 22:21:44 -05:00
parent faf8389bef
commit 925bed4430
8 changed files with 64 additions and 17 deletions

14
dist/vendor.bundle.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -111,7 +111,7 @@ export const CONSTANTS: {
TotalNumBitNodes: number; TotalNumBitNodes: number;
LatestUpdate: string; LatestUpdate: string;
} = { } = {
VersionString: "1.2.0", VersionString: "1.3.0",
VersionNumber: 9, VersionNumber: 9,
// Speed (in ms) at which the main loop is updated // Speed (in ms) at which the main loop is updated

View File

@@ -205,6 +205,7 @@ export const RamCosts: IMap<any> = {
prompt: 0, prompt: 0,
wget: 0, wget: 0,
getFavorToDonate: RamCostConstants.ScriptGetFavorToDonate, getFavorToDonate: RamCostConstants.ScriptGetFavorToDonate,
getPlayer: RamCostConstants.ScriptSingularityFn1RamCost / 4,
// Singularity Functions // Singularity Functions
universityCourse: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost), universityCourse: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost),
@@ -219,7 +220,6 @@ export const RamCosts: IMap<any> = {
installBackdoor: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost), installBackdoor: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost),
getStats: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4), getStats: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4),
getCharacterInformation: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4), getCharacterInformation: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4),
getPlayer: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4),
hospitalize: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4), hospitalize: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4),
isBusy: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4), isBusy: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 4),
stopAction: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 2), stopAction: SF4Cost(RamCostConstants.ScriptSingularityFn1RamCost / 2),

View File

@@ -302,12 +302,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
return makeRuntimeRejectMsg(workerScript, rejectMsg); return makeRuntimeRejectMsg(workerScript, rejectMsg);
}; };
const checkSingularityAccess = function (func: any, n: any): void { const checkSingularityAccess = function (func: string): void {
if (Player.bitNodeN !== 4) { if (Player.bitNodeN !== 4) {
if (SourceFileFlags[4] < n) { if (Player.sourceFileLvl(4) === 0) {
throw makeRuntimeErrorMsg( throw makeRuntimeErrorMsg(
func, func,
`This singularity function requires Source-File 4-${n} to run. A power up you obtain later in the game. It will be very obvious when and how you can obtain it.`, `This singularity function requires Source-File 4 to run. A power up you obtain later in the game. It will be very obvious when and how you can obtain it.`,
); );
} }
} }
@@ -1224,7 +1224,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
} }
// Create new script if it does not already exist // Create new script if it does not already exist
const newScript = new Script(scriptname); const newScript = new Script(Player, scriptname);
newScript.code = sourceScript.code; newScript.code = sourceScript.code;
newScript.ramUsage = sourceScript.ramUsage; newScript.ramUsage = sourceScript.ramUsage;
newScript.server = destServer.hostname; newScript.server = destServer.hostname;

View File

@@ -7,6 +7,6 @@ export interface INetscriptHelper {
number(funcName: string, argName: string, v: any): number; number(funcName: string, argName: string, v: any): number;
boolean(v: any): boolean; boolean(v: any): boolean;
getServer(ip: any, fn: any): BaseServer; getServer(ip: any, fn: any): BaseServer;
checkSingularityAccess(func: string, n: number): void; checkSingularityAccess(func: string): void;
hack(hostname: string, manual: boolean): Promise<number>; hack(hostname: string, manual: boolean): Promise<number>;
} }

View File

@@ -93,6 +93,7 @@ export function NetscriptSingularity(
return { return {
getOwnedAugmentations: function (purchased: any = false): any { getOwnedAugmentations: function (purchased: any = false): any {
helper.updateDynamicRam("getOwnedAugmentations", getRamCost(player, "getOwnedAugmentations")); helper.updateDynamicRam("getOwnedAugmentations", getRamCost(player, "getOwnedAugmentations"));
helper.checkSingularityAccess("getOwnedAugmentations");
const res = []; const res = [];
for (let i = 0; i < player.augmentations.length; ++i) { for (let i = 0; i < player.augmentations.length; ++i) {
res.push(player.augmentations[i].name); res.push(player.augmentations[i].name);
@@ -106,6 +107,7 @@ export function NetscriptSingularity(
}, },
getAugmentationsFromFaction: function (facname: any): any { getAugmentationsFromFaction: function (facname: any): any {
helper.updateDynamicRam("getAugmentationsFromFaction", getRamCost(player, "getAugmentationsFromFaction")); helper.updateDynamicRam("getAugmentationsFromFaction", getRamCost(player, "getAugmentationsFromFaction"));
helper.checkSingularityAccess("getAugmentationsFromFaction");
const faction = getFaction("getAugmentationsFromFaction", facname); const faction = getFaction("getAugmentationsFromFaction", facname);
// If player has a gang with this faction, return all augmentations. // If player has a gang with this faction, return all augmentations.
@@ -127,31 +129,37 @@ export function NetscriptSingularity(
}, },
getAugmentationCost: function (name: any): any { getAugmentationCost: function (name: any): any {
helper.updateDynamicRam("getAugmentationCost", getRamCost(player, "getAugmentationCost")); helper.updateDynamicRam("getAugmentationCost", getRamCost(player, "getAugmentationCost"));
helper.checkSingularityAccess("getAugmentationCost");
const aug = getAugmentation("getAugmentationCost", name); const aug = getAugmentation("getAugmentationCost", name);
return [aug.baseRepRequirement, aug.baseCost]; return [aug.baseRepRequirement, aug.baseCost];
}, },
getAugmentationPrereq: function (name: any): any { getAugmentationPrereq: function (name: any): any {
helper.updateDynamicRam("getAugmentationPrereq", getRamCost(player, "getAugmentationPrereq")); helper.updateDynamicRam("getAugmentationPrereq", getRamCost(player, "getAugmentationPrereq"));
helper.checkSingularityAccess("getAugmentationPrereq");
const aug = getAugmentation("getAugmentationPrereq", name); const aug = getAugmentation("getAugmentationPrereq", name);
return aug.prereqs.slice(); return aug.prereqs.slice();
}, },
getAugmentationPrice: function (name: any): any { getAugmentationPrice: function (name: any): any {
helper.updateDynamicRam("getAugmentationPrice", getRamCost(player, "getAugmentationPrice")); helper.updateDynamicRam("getAugmentationPrice", getRamCost(player, "getAugmentationPrice"));
helper.checkSingularityAccess("getAugmentationPrice");
const aug = getAugmentation("getAugmentationPrice", name); const aug = getAugmentation("getAugmentationPrice", name);
return aug.baseCost; return aug.baseCost;
}, },
getAugmentationRepReq: function (name: any): any { getAugmentationRepReq: function (name: any): any {
helper.updateDynamicRam("getAugmentationRepReq", getRamCost(player, "getAugmentationRepReq")); helper.updateDynamicRam("getAugmentationRepReq", getRamCost(player, "getAugmentationRepReq"));
helper.checkSingularityAccess("getAugmentationRepReq");
const aug = getAugmentation("getAugmentationRepReq", name); const aug = getAugmentation("getAugmentationRepReq", name);
return aug.baseRepRequirement; return aug.baseRepRequirement;
}, },
getAugmentationStats: function (name: any): any { getAugmentationStats: function (name: any): any {
helper.updateDynamicRam("getAugmentationStats", getRamCost(player, "getAugmentationStats")); helper.updateDynamicRam("getAugmentationStats", getRamCost(player, "getAugmentationStats"));
helper.checkSingularityAccess("getAugmentationStats");
const aug = getAugmentation("getAugmentationStats", name); const aug = getAugmentation("getAugmentationStats", name);
return Object.assign({}, aug.mults); return Object.assign({}, aug.mults);
}, },
purchaseAugmentation: function (faction: any, name: any): any { purchaseAugmentation: function (faction: any, name: any): any {
helper.updateDynamicRam("purchaseAugmentation", getRamCost(player, "purchaseAugmentation")); helper.updateDynamicRam("purchaseAugmentation", getRamCost(player, "purchaseAugmentation"));
helper.checkSingularityAccess("purchaseAugmentation");
const fac = getFaction("purchaseAugmentation", faction); const fac = getFaction("purchaseAugmentation", faction);
const aug = getAugmentation("purchaseAugmentation", name); const aug = getAugmentation("purchaseAugmentation", name);
@@ -207,6 +215,7 @@ export function NetscriptSingularity(
}, },
softReset: function (cbScript: any): any { softReset: function (cbScript: any): any {
helper.updateDynamicRam("softReset", getRamCost(player, "softReset")); helper.updateDynamicRam("softReset", getRamCost(player, "softReset"));
helper.checkSingularityAccess("softReset");
workerScript.log("softReset", () => "Soft resetting. This will cause this script to be killed"); workerScript.log("softReset", () => "Soft resetting. This will cause this script to be killed");
setTimeout(() => { setTimeout(() => {
@@ -220,6 +229,7 @@ export function NetscriptSingularity(
}, },
installAugmentations: function (cbScript: any): any { installAugmentations: function (cbScript: any): any {
helper.updateDynamicRam("installAugmentations", getRamCost(player, "installAugmentations")); helper.updateDynamicRam("installAugmentations", getRamCost(player, "installAugmentations"));
helper.checkSingularityAccess("installAugmentations");
if (player.queuedAugmentations.length === 0) { if (player.queuedAugmentations.length === 0) {
workerScript.log("installAugmentations", () => "You do not have any Augmentations to be installed."); workerScript.log("installAugmentations", () => "You do not have any Augmentations to be installed.");
@@ -241,6 +251,7 @@ export function NetscriptSingularity(
goToLocation: function (locationName: any): boolean { goToLocation: function (locationName: any): boolean {
helper.updateDynamicRam("goToLocation", getRamCost(player, "goToLocation")); helper.updateDynamicRam("goToLocation", getRamCost(player, "goToLocation"));
helper.checkSingularityAccess("goToLocation");
const location = Object.values(Locations).find((l) => l.name === locationName); const location = Object.values(Locations).find((l) => l.name === locationName);
if (!location) { if (!location) {
workerScript.log("goToLocation", () => `No location named ${locationName}`); workerScript.log("goToLocation", () => `No location named ${locationName}`);
@@ -256,6 +267,7 @@ export function NetscriptSingularity(
}, },
universityCourse: function (universityName: any, className: any): any { universityCourse: function (universityName: any, className: any): any {
helper.updateDynamicRam("universityCourse", getRamCost(player, "universityCourse")); helper.updateDynamicRam("universityCourse", getRamCost(player, "universityCourse"));
helper.checkSingularityAccess("universityCourse");
if (player.isWorking) { if (player.isWorking) {
const txt = player.singularityStopWork(); const txt = player.singularityStopWork();
workerScript.log("universityCourse", () => txt); workerScript.log("universityCourse", () => txt);
@@ -335,6 +347,7 @@ export function NetscriptSingularity(
gymWorkout: function (gymName: any, stat: any): any { gymWorkout: function (gymName: any, stat: any): any {
helper.updateDynamicRam("gymWorkout", getRamCost(player, "gymWorkout")); helper.updateDynamicRam("gymWorkout", getRamCost(player, "gymWorkout"));
helper.checkSingularityAccess("gymWorkout");
if (player.isWorking) { if (player.isWorking) {
const txt = player.singularityStopWork(); const txt = player.singularityStopWork();
workerScript.log("gymWorkout", () => txt); workerScript.log("gymWorkout", () => txt);
@@ -433,6 +446,7 @@ export function NetscriptSingularity(
travelToCity: function (cityname: any): any { travelToCity: function (cityname: any): any {
helper.updateDynamicRam("travelToCity", getRamCost(player, "travelToCity")); helper.updateDynamicRam("travelToCity", getRamCost(player, "travelToCity"));
helper.checkSingularityAccess("travelToCity");
switch (cityname) { switch (cityname) {
case CityName.Aevum: case CityName.Aevum:
@@ -457,6 +471,7 @@ export function NetscriptSingularity(
purchaseTor: function (): any { purchaseTor: function (): any {
helper.updateDynamicRam("purchaseTor", getRamCost(player, "purchaseTor")); helper.updateDynamicRam("purchaseTor", getRamCost(player, "purchaseTor"));
helper.checkSingularityAccess("purchaseTor");
if (player.hasTorRouter()) { if (player.hasTorRouter()) {
workerScript.log("purchaseTor", () => "You already have a TOR router!"); workerScript.log("purchaseTor", () => "You already have a TOR router!");
@@ -488,6 +503,7 @@ export function NetscriptSingularity(
}, },
purchaseProgram: function (programName: any): any { purchaseProgram: function (programName: any): any {
helper.updateDynamicRam("purchaseProgram", getRamCost(player, "purchaseProgram")); helper.updateDynamicRam("purchaseProgram", getRamCost(player, "purchaseProgram"));
helper.checkSingularityAccess("purchaseProgram");
if (!player.hasTorRouter()) { if (!player.hasTorRouter()) {
workerScript.log("purchaseProgram", () => "You do not have the TOR router."); workerScript.log("purchaseProgram", () => "You do not have the TOR router.");
@@ -526,10 +542,12 @@ export function NetscriptSingularity(
}, },
getCurrentServer: function (): any { getCurrentServer: function (): any {
helper.updateDynamicRam("getCurrentServer", getRamCost(player, "getCurrentServer")); helper.updateDynamicRam("getCurrentServer", getRamCost(player, "getCurrentServer"));
helper.checkSingularityAccess("getCurrentServer");
return player.getCurrentServer().hostname; return player.getCurrentServer().hostname;
}, },
connect: function (hostname: any): any { connect: function (hostname: any): any {
helper.updateDynamicRam("connect", getRamCost(player, "connect")); helper.updateDynamicRam("connect", getRamCost(player, "connect"));
helper.checkSingularityAccess("connect");
if (!hostname) { if (!hostname) {
throw helper.makeRuntimeErrorMsg("connect", `Invalid hostname: '${hostname}'`); throw helper.makeRuntimeErrorMsg("connect", `Invalid hostname: '${hostname}'`);
} }
@@ -564,11 +582,13 @@ export function NetscriptSingularity(
}, },
manualHack: function (): any { manualHack: function (): any {
helper.updateDynamicRam("manualHack", getRamCost(player, "manualHack")); helper.updateDynamicRam("manualHack", getRamCost(player, "manualHack"));
helper.checkSingularityAccess("manualHack");
const server = player.getCurrentServer(); const server = player.getCurrentServer();
return helper.hack(server.hostname, true); return helper.hack(server.hostname, true);
}, },
installBackdoor: function (): any { installBackdoor: function (): any {
helper.updateDynamicRam("installBackdoor", getRamCost(player, "installBackdoor")); helper.updateDynamicRam("installBackdoor", getRamCost(player, "installBackdoor"));
helper.checkSingularityAccess("installBackdoor");
const baseserver = player.getCurrentServer(); const baseserver = player.getCurrentServer();
if (!(baseserver instanceof Server)) { if (!(baseserver instanceof Server)) {
workerScript.log("installBackdoor", () => "cannot backdoor this kind of server"); workerScript.log("installBackdoor", () => "cannot backdoor this kind of server");
@@ -604,11 +624,13 @@ export function NetscriptSingularity(
}, },
isFocused: function (): boolean { isFocused: function (): boolean {
helper.updateDynamicRam("isFocused", getRamCost(player, "isFocused")); helper.updateDynamicRam("isFocused", getRamCost(player, "isFocused"));
helper.checkSingularityAccess("isFocused");
return player.focus; return player.focus;
}, },
setFocus: function (afocus: any): boolean { setFocus: function (afocus: any): boolean {
const focus = helper.boolean(afocus); const focus = helper.boolean(afocus);
helper.updateDynamicRam("setFocus", getRamCost(player, "setFocus")); helper.updateDynamicRam("setFocus", getRamCost(player, "setFocus"));
helper.checkSingularityAccess("setFocus");
if (!player.isWorking) { if (!player.isWorking) {
throw helper.makeRuntimeErrorMsg("setFocus", "Not currently working"); throw helper.makeRuntimeErrorMsg("setFocus", "Not currently working");
} }
@@ -634,6 +656,7 @@ export function NetscriptSingularity(
}, },
getStats: function (): any { getStats: function (): any {
helper.updateDynamicRam("getStats", getRamCost(player, "getStats")); helper.updateDynamicRam("getStats", getRamCost(player, "getStats"));
helper.checkSingularityAccess("getStats");
workerScript.log("getStats", () => `getStats is deprecated, please use getplayer`); workerScript.log("getStats", () => `getStats is deprecated, please use getplayer`);
return { return {
@@ -648,6 +671,7 @@ export function NetscriptSingularity(
}, },
getCharacterInformation: function (): any { getCharacterInformation: function (): any {
helper.updateDynamicRam("getCharacterInformation", getRamCost(player, "getCharacterInformation")); helper.updateDynamicRam("getCharacterInformation", getRamCost(player, "getCharacterInformation"));
helper.checkSingularityAccess("getCharacterInformation");
workerScript.log("getCharacterInformation", () => `getCharacterInformation is deprecated, please use getplayer`); workerScript.log("getCharacterInformation", () => `getCharacterInformation is deprecated, please use getplayer`);
return { return {
@@ -695,6 +719,7 @@ export function NetscriptSingularity(
}, },
hospitalize: function (): any { hospitalize: function (): any {
helper.updateDynamicRam("hospitalize", getRamCost(player, "hospitalize")); helper.updateDynamicRam("hospitalize", getRamCost(player, "hospitalize"));
helper.checkSingularityAccess("hospitalize");
if (player.isWorking || Router.page() === Page.Infiltration || Router.page() === Page.BitVerse) { if (player.isWorking || Router.page() === Page.Infiltration || Router.page() === Page.BitVerse) {
workerScript.log("hospitalize", () => "Cannot go to the hospital because the player is busy."); workerScript.log("hospitalize", () => "Cannot go to the hospital because the player is busy.");
return; return;
@@ -703,10 +728,12 @@ export function NetscriptSingularity(
}, },
isBusy: function (): any { isBusy: function (): any {
helper.updateDynamicRam("isBusy", getRamCost(player, "isBusy")); helper.updateDynamicRam("isBusy", getRamCost(player, "isBusy"));
helper.checkSingularityAccess("isBusy");
return player.isWorking || Router.page() === Page.Infiltration || Router.page() === Page.BitVerse; return player.isWorking || Router.page() === Page.Infiltration || Router.page() === Page.BitVerse;
}, },
stopAction: function (): any { stopAction: function (): any {
helper.updateDynamicRam("stopAction", getRamCost(player, "stopAction")); helper.updateDynamicRam("stopAction", getRamCost(player, "stopAction"));
helper.checkSingularityAccess("stopAction");
if (player.isWorking) { if (player.isWorking) {
if (player.focus) { if (player.focus) {
Router.toTerminal(); Router.toTerminal();
@@ -719,6 +746,7 @@ export function NetscriptSingularity(
}, },
upgradeHomeCores: function (): any { upgradeHomeCores: function (): any {
helper.updateDynamicRam("upgradeHomeCores", getRamCost(player, "upgradeHomeCores")); helper.updateDynamicRam("upgradeHomeCores", getRamCost(player, "upgradeHomeCores"));
helper.checkSingularityAccess("upgradeHomeCores");
// Check if we're at max cores // Check if we're at max cores
const homeComputer = player.getHomeComputer(); const homeComputer = player.getHomeComputer();
@@ -748,11 +776,13 @@ export function NetscriptSingularity(
}, },
getUpgradeHomeCoresCost: function (): any { getUpgradeHomeCoresCost: function (): any {
helper.updateDynamicRam("getUpgradeHomeCoresCost", getRamCost(player, "getUpgradeHomeCoresCost")); helper.updateDynamicRam("getUpgradeHomeCoresCost", getRamCost(player, "getUpgradeHomeCoresCost"));
helper.checkSingularityAccess("getUpgradeHomeCoresCost");
return player.getUpgradeHomeCoresCost(); return player.getUpgradeHomeCoresCost();
}, },
upgradeHomeRam: function (): any { upgradeHomeRam: function (): any {
helper.updateDynamicRam("upgradeHomeRam", getRamCost(player, "upgradeHomeRam")); helper.updateDynamicRam("upgradeHomeRam", getRamCost(player, "upgradeHomeRam"));
helper.checkSingularityAccess("upgradeHomeRam");
// Check if we're at max RAM // Check if we're at max RAM
const homeComputer = player.getHomeComputer(); const homeComputer = player.getHomeComputer();
@@ -785,11 +815,13 @@ export function NetscriptSingularity(
}, },
getUpgradeHomeRamCost: function (): any { getUpgradeHomeRamCost: function (): any {
helper.updateDynamicRam("getUpgradeHomeRamCost", getRamCost(player, "getUpgradeHomeRamCost")); helper.updateDynamicRam("getUpgradeHomeRamCost", getRamCost(player, "getUpgradeHomeRamCost"));
helper.checkSingularityAccess("getUpgradeHomeRamCost");
return player.getUpgradeHomeRamCost(); return player.getUpgradeHomeRamCost();
}, },
workForCompany: function (companyName: any, focus = true): any { workForCompany: function (companyName: any, focus = true): any {
helper.updateDynamicRam("workForCompany", getRamCost(player, "workForCompany")); helper.updateDynamicRam("workForCompany", getRamCost(player, "workForCompany"));
helper.checkSingularityAccess("workForCompany");
// Sanitize input // Sanitize input
if (companyName == null) { if (companyName == null) {
@@ -843,6 +875,7 @@ export function NetscriptSingularity(
}, },
applyToCompany: function (companyName: any, field: any): any { applyToCompany: function (companyName: any, field: any): any {
helper.updateDynamicRam("applyToCompany", getRamCost(player, "applyToCompany")); helper.updateDynamicRam("applyToCompany", getRamCost(player, "applyToCompany"));
helper.checkSingularityAccess("applyToCompany");
getCompany("applyToCompany", companyName); getCompany("applyToCompany", companyName);
player.location = companyName; player.location = companyName;
@@ -912,26 +945,31 @@ export function NetscriptSingularity(
}, },
getCompanyRep: function (companyName: any): any { getCompanyRep: function (companyName: any): any {
helper.updateDynamicRam("getCompanyRep", getRamCost(player, "getCompanyRep")); helper.updateDynamicRam("getCompanyRep", getRamCost(player, "getCompanyRep"));
helper.checkSingularityAccess("getCompanyRep");
const company = getCompany("getCompanyRep", companyName); const company = getCompany("getCompanyRep", companyName);
return company.playerReputation; return company.playerReputation;
}, },
getCompanyFavor: function (companyName: any): any { getCompanyFavor: function (companyName: any): any {
helper.updateDynamicRam("getCompanyFavor", getRamCost(player, "getCompanyFavor")); helper.updateDynamicRam("getCompanyFavor", getRamCost(player, "getCompanyFavor"));
helper.checkSingularityAccess("getCompanyFavor");
const company = getCompany("getCompanyFavor", companyName); const company = getCompany("getCompanyFavor", companyName);
return company.favor; return company.favor;
}, },
getCompanyFavorGain: function (companyName: any): any { getCompanyFavorGain: function (companyName: any): any {
helper.updateDynamicRam("getCompanyFavorGain", getRamCost(player, "getCompanyFavorGain")); helper.updateDynamicRam("getCompanyFavorGain", getRamCost(player, "getCompanyFavorGain"));
helper.checkSingularityAccess("getCompanyFavorGain");
const company = getCompany("getCompanyFavorGain", companyName); const company = getCompany("getCompanyFavorGain", companyName);
return company.getFavorGain(); return company.getFavorGain();
}, },
checkFactionInvitations: function (): any { checkFactionInvitations: function (): any {
helper.updateDynamicRam("checkFactionInvitations", getRamCost(player, "checkFactionInvitations")); helper.updateDynamicRam("checkFactionInvitations", getRamCost(player, "checkFactionInvitations"));
helper.checkSingularityAccess("checkFactionInvitations");
// Make a copy of player.factionInvitations // Make a copy of player.factionInvitations
return player.factionInvitations.slice(); return player.factionInvitations.slice();
}, },
joinFaction: function (name: any): any { joinFaction: function (name: any): any {
helper.updateDynamicRam("joinFaction", getRamCost(player, "joinFaction")); helper.updateDynamicRam("joinFaction", getRamCost(player, "joinFaction"));
helper.checkSingularityAccess("joinFaction");
getFaction("joinFaction", name); getFaction("joinFaction", name);
if (!player.factionInvitations.includes(name)) { if (!player.factionInvitations.includes(name)) {
@@ -954,6 +992,7 @@ export function NetscriptSingularity(
}, },
workForFaction: function (name: any, type: any, focus = true): any { workForFaction: function (name: any, type: any, focus = true): any {
helper.updateDynamicRam("workForFaction", getRamCost(player, "workForFaction")); helper.updateDynamicRam("workForFaction", getRamCost(player, "workForFaction"));
helper.checkSingularityAccess("workForFaction");
getFaction("workForFaction", name); getFaction("workForFaction", name);
// if the player is in a gang and the target faction is any of the gang faction, fail // if the player is in a gang and the target faction is any of the gang faction, fail
@@ -1116,21 +1155,25 @@ export function NetscriptSingularity(
}, },
getFactionRep: function (name: any): any { getFactionRep: function (name: any): any {
helper.updateDynamicRam("getFactionRep", getRamCost(player, "getFactionRep")); helper.updateDynamicRam("getFactionRep", getRamCost(player, "getFactionRep"));
helper.checkSingularityAccess("getFactionRep");
const faction = getFaction("getFactionRep", name); const faction = getFaction("getFactionRep", name);
return faction.playerReputation; return faction.playerReputation;
}, },
getFactionFavor: function (name: any): any { getFactionFavor: function (name: any): any {
helper.updateDynamicRam("getFactionFavor", getRamCost(player, "getFactionFavor")); helper.updateDynamicRam("getFactionFavor", getRamCost(player, "getFactionFavor"));
helper.checkSingularityAccess("getFactionFavor");
const faction = getFaction("getFactionFavor", name); const faction = getFaction("getFactionFavor", name);
return faction.favor; return faction.favor;
}, },
getFactionFavorGain: function (name: any): any { getFactionFavorGain: function (name: any): any {
helper.updateDynamicRam("getFactionFavorGain", getRamCost(player, "getFactionFavorGain")); helper.updateDynamicRam("getFactionFavorGain", getRamCost(player, "getFactionFavorGain"));
helper.checkSingularityAccess("getFactionFavorGain");
const faction = getFaction("getFactionFavorGain", name); const faction = getFaction("getFactionFavorGain", name);
return faction.getFavorGain(); return faction.getFavorGain();
}, },
donateToFaction: function (name: any, amt: any): any { donateToFaction: function (name: any, amt: any): any {
helper.updateDynamicRam("donateToFaction", getRamCost(player, "donateToFaction")); helper.updateDynamicRam("donateToFaction", getRamCost(player, "donateToFaction"));
helper.checkSingularityAccess("donateToFaction");
const faction = getFaction("donateToFaction", name); const faction = getFaction("donateToFaction", name);
if (typeof amt !== "number" || amt <= 0) { if (typeof amt !== "number" || amt <= 0) {
@@ -1167,6 +1210,7 @@ export function NetscriptSingularity(
}, },
createProgram: function (name: any): any { createProgram: function (name: any): any {
helper.updateDynamicRam("createProgram", getRamCost(player, "createProgram")); helper.updateDynamicRam("createProgram", getRamCost(player, "createProgram"));
helper.checkSingularityAccess("createProgram");
if (player.isWorking) { if (player.isWorking) {
const txt = player.singularityStopWork(); const txt = player.singularityStopWork();
@@ -1207,6 +1251,7 @@ export function NetscriptSingularity(
}, },
commitCrime: function (crimeRoughName: any): any { commitCrime: function (crimeRoughName: any): any {
helper.updateDynamicRam("commitCrime", getRamCost(player, "commitCrime")); helper.updateDynamicRam("commitCrime", getRamCost(player, "commitCrime"));
helper.checkSingularityAccess("commitCrime");
if (player.isWorking) { if (player.isWorking) {
const txt = player.singularityStopWork(); const txt = player.singularityStopWork();
@@ -1226,6 +1271,7 @@ export function NetscriptSingularity(
}, },
getCrimeChance: function (crimeRoughName: any): any { getCrimeChance: function (crimeRoughName: any): any {
helper.updateDynamicRam("getCrimeChance", getRamCost(player, "getCrimeChance")); helper.updateDynamicRam("getCrimeChance", getRamCost(player, "getCrimeChance"));
helper.checkSingularityAccess("getCrimeChance");
const crime = findCrime(crimeRoughName.toLowerCase()); const crime = findCrime(crimeRoughName.toLowerCase());
if (crime == null) { if (crime == null) {
@@ -1236,6 +1282,7 @@ export function NetscriptSingularity(
}, },
getCrimeStats: function (crimeRoughName: any): any { getCrimeStats: function (crimeRoughName: any): any {
helper.updateDynamicRam("getCrimeStats", getRamCost(player, "getCrimeStats")); helper.updateDynamicRam("getCrimeStats", getRamCost(player, "getCrimeStats"));
helper.checkSingularityAccess("getCrimeStats");
const crime = findCrime(crimeRoughName.toLowerCase()); const crime = findCrime(crimeRoughName.toLowerCase());
if (crime == null) { if (crime == null) {