diff --git a/src/CotMG/IStaneksGift.ts b/src/CotMG/IStaneksGift.ts
index a5a6c8912..9dbc2c329 100644
--- a/src/CotMG/IStaneksGift.ts
+++ b/src/CotMG/IStaneksGift.ts
@@ -1,14 +1,13 @@
import { ActiveFragment } from "./ActiveFragment";
import { Fragment } from "./Fragment";
-import { IPlayer } from "../PersonObjects/IPlayer";
export interface IStaneksGift {
storedCycles: number;
fragments: ActiveFragment[];
width(): number;
height(): number;
- charge(player: IPlayer, fragment: ActiveFragment, threads: number): void;
- process(p: IPlayer, n: number): void;
+ charge(fragment: ActiveFragment, threads: number): void;
+ process(n: number): void;
effect(fragment: ActiveFragment): number;
canPlace(x: number, y: number, rotation: number, fragment: Fragment): boolean;
place(x: number, y: number, rotation: number, fragment: Fragment): boolean;
diff --git a/src/CotMG/StaneksGift.ts b/src/CotMG/StaneksGift.ts
index 81425ed1f..2943eee4c 100644
--- a/src/CotMG/StaneksGift.ts
+++ b/src/CotMG/StaneksGift.ts
@@ -3,7 +3,6 @@ import { Fragment } from "./Fragment";
import { ActiveFragment } from "./ActiveFragment";
import { FragmentType } from "./FragmentType";
import { IStaneksGift } from "./IStaneksGift";
-import { IPlayer } from "../PersonObjects/IPlayer";
import { Factions } from "../Faction/Factions";
import { CalculateEffect } from "./formulas/effect";
import { StaneksGiftEvents } from "./StaneksGiftEvents";
@@ -30,7 +29,7 @@ export class StaneksGift implements IStaneksGift {
return Math.max(3, Math.min(Math.floor(this.baseSize() / 2 + 0.6), StanekConstants.MaxSize));
}
- charge(player: IPlayer, af: ActiveFragment, threads: number): void {
+ charge(af: ActiveFragment, threads: number): void {
if (threads > af.highestCharge) {
af.numCharge = (af.highestCharge * af.numCharge) / threads + 1;
af.highestCharge = threads;
@@ -39,19 +38,19 @@ export class StaneksGift implements IStaneksGift {
}
const cotmg = Factions[FactionNames.ChurchOfTheMachineGod];
- cotmg.playerReputation += (player.mults.faction_rep * (Math.pow(threads, 0.95) * (cotmg.favor + 100))) / 1000;
+ cotmg.playerReputation += (Player.mults.faction_rep * (Math.pow(threads, 0.95) * (cotmg.favor + 100))) / 1000;
}
inBonus(): boolean {
return (this.storedCycles * CONSTANTS._idleSpeed) / 1000 > 1;
}
- process(p: IPlayer, numCycles = 1): void {
- if (!p.hasAugmentation(AugmentationNames.StaneksGift1)) return;
+ process(numCycles = 1): void {
+ if (!Player.hasAugmentation(AugmentationNames.StaneksGift1)) return;
this.storedCycles += numCycles;
this.storedCycles -= 10;
this.storedCycles = Math.max(0, this.storedCycles);
- this.updateMults(p);
+ this.updateMults();
StaneksGiftEvents.emit();
}
@@ -210,19 +209,19 @@ export class StaneksGift implements IStaneksGift {
return mults;
}
- updateMults(p: IPlayer): void {
+ updateMults(): void {
// applyEntropy also reapplies all augmentations and source files
// This wraps up the reset nicely
- p.applyEntropy(p.entropy);
+ Player.applyEntropy(Player.entropy);
const mults = this.calculateMults();
- p.mults = mergeMultipliers(p.mults, mults);
- p.updateSkillLevels();
- const zoeAmt = p.sleeves.reduce((n, sleeve) => n + (sleeve.hasAugmentation(AugmentationNames.ZOE) ? 1 : 0), 0);
+ Player.mults = mergeMultipliers(Player.mults, mults);
+ Player.updateSkillLevels();
+ const zoeAmt = Player.sleeves.reduce((n, sleeve) => n + (sleeve.hasAugmentation(AugmentationNames.ZOE) ? 1 : 0), 0);
if (zoeAmt === 0) return;
// Less powerful for each copy.
const scaling = 3 / (zoeAmt + 2);
const sleeveMults = scaleMultipliers(mults, scaling);
- for (const sleeve of p.sleeves) {
+ for (const sleeve of Player.sleeves) {
if (!sleeve.hasAugmentation(AugmentationNames.ZOE)) continue;
sleeve.resetMultipliers();
sleeve.mults = mergeMultipliers(sleeve.mults, sleeveMults);
diff --git a/src/Gang/Gang.ts b/src/Gang/Gang.ts
index 0ca99b964..1e29d2cd8 100644
--- a/src/Gang/Gang.ts
+++ b/src/Gang/Gang.ts
@@ -23,7 +23,7 @@ import { AllGangs } from "./AllGangs";
import { GangMember } from "./GangMember";
import { WorkerScript } from "../Netscript/WorkerScript";
-import { IPlayer } from "../PersonObjects/IPlayer";
+import { Player } from "../Player";
import { PowerMultiplier } from "./data/power";
import { IGang } from "./IGang";
@@ -82,7 +82,7 @@ export class Gang implements IGang {
return AllGangs[this.facName].territory;
}
- process(numCycles = 1, player: IPlayer): void {
+ process(numCycles = 1): void {
const CyclesPerSecond = 1000 / CONSTANTS._idleSpeed;
if (isNaN(numCycles)) {
@@ -95,7 +95,7 @@ export class Gang implements IGang {
const cycles = Math.min(this.storedCycles, 5 * CyclesPerSecond);
try {
- this.processGains(cycles, player);
+ this.processGains(cycles);
this.processExperienceGains(cycles);
this.processTerritoryAndPowerGains(cycles);
this.storedCycles -= cycles;
@@ -104,7 +104,7 @@ export class Gang implements IGang {
}
}
- processGains(numCycles = 1, player: IPlayer): void {
+ processGains(numCycles = 1): void {
// Get gains per cycle
let moneyGains = 0;
let respectGains = 0;
@@ -132,7 +132,7 @@ export class Gang implements IGang {
}
const favorMult = 1 + fac.favor / 100;
- fac.playerReputation += (player.mults.faction_rep * gain * favorMult) / GangConstants.GangRespectToReputationRatio;
+ fac.playerReputation += (Player.mults.faction_rep * gain * favorMult) / GangConstants.GangRespectToReputationRatio;
// Keep track of respect gained per member
for (let i = 0; i < this.members.length; ++i) {
@@ -148,7 +148,7 @@ export class Gang implements IGang {
this.wanted = newWanted;
if (this.wanted < 1) this.wanted = 1;
}
- player.gainMoney(moneyGains * numCycles, "gang");
+ Player.gainMoney(moneyGains * numCycles, "gang");
}
processTerritoryAndPowerGains(numCycles = 1): void {
diff --git a/src/Gang/IGang.ts b/src/Gang/IGang.ts
index 6d6400a19..e2037534d 100644
--- a/src/Gang/IGang.ts
+++ b/src/Gang/IGang.ts
@@ -1,7 +1,6 @@
import { GangMemberUpgrade } from "./GangMemberUpgrade";
import { GangMember } from "./GangMember";
import { WorkerScript } from "../Netscript/WorkerScript";
-import { IPlayer } from "../PersonObjects/IPlayer";
import { IAscensionResult } from "./IAscensionResult";
import { IReviverValue } from "src/utils/JSONReviver";
@@ -28,8 +27,8 @@ export interface IGang {
getPower(): number;
getTerritory(): number;
- process(numCycles: number, player: IPlayer): void;
- processGains(numCycles: number, player: IPlayer): void;
+ process(numCycles: number): void;
+ processGains(numCycles: number): void;
processTerritoryAndPowerGains(numCycles: number): void;
processExperienceGains(numCycles: number): void;
clash(won: boolean): void;
diff --git a/src/Infiltration/formulas/game.ts b/src/Infiltration/formulas/game.ts
index e6ab67a54..7cc6599dd 100644
--- a/src/Infiltration/formulas/game.ts
+++ b/src/Infiltration/formulas/game.ts
@@ -1,30 +1,30 @@
-import { IPlayer } from "../../PersonObjects/IPlayer";
+import { Player } from "../../Player";
import { calculateSkill } from "../../PersonObjects/formulas/skill";
-function calculateRawDiff(player: IPlayer, stats: number, startingDifficulty: number): number {
- const difficulty = startingDifficulty - Math.pow(stats, 0.9) / 250 - player.skills.intelligence / 1600;
+function calculateRawDiff(stats: number, startingDifficulty: number): number {
+ const difficulty = startingDifficulty - Math.pow(stats, 0.9) / 250 - Player.skills.intelligence / 1600;
if (difficulty < 0) return 0;
if (difficulty > 3) return 3;
return difficulty;
}
-export function calculateDifficulty(player: IPlayer, startingSecurityLevel: number): number {
+export function calculateDifficulty(startingSecurityLevel: number): number {
const totalStats =
- player.skills.strength +
- player.skills.defense +
- player.skills.dexterity +
- player.skills.agility +
- player.skills.charisma;
- return calculateRawDiff(player, totalStats, startingSecurityLevel);
+ Player.skills.strength +
+ Player.skills.defense +
+ Player.skills.dexterity +
+ Player.skills.agility +
+ Player.skills.charisma;
+ return calculateRawDiff(totalStats, startingSecurityLevel);
}
-export function calculateReward(player: IPlayer, startingSecurityLevel: number): number {
+export function calculateReward(startingSecurityLevel: number): number {
const xpMult = 10 * 60 * 15;
const total =
- calculateSkill(player.mults.strength_exp * xpMult, player.mults.strength) +
- calculateSkill(player.mults.defense_exp * xpMult, player.mults.defense) +
- calculateSkill(player.mults.agility_exp * xpMult, player.mults.agility) +
- calculateSkill(player.mults.dexterity_exp * xpMult, player.mults.dexterity) +
- calculateSkill(player.mults.charisma_exp * xpMult, player.mults.charisma);
- return calculateRawDiff(player, total, startingSecurityLevel);
+ calculateSkill(Player.mults.strength_exp * xpMult, Player.mults.strength) +
+ calculateSkill(Player.mults.defense_exp * xpMult, Player.mults.defense) +
+ calculateSkill(Player.mults.agility_exp * xpMult, Player.mults.agility) +
+ calculateSkill(Player.mults.dexterity_exp * xpMult, Player.mults.dexterity) +
+ calculateSkill(Player.mults.charisma_exp * xpMult, Player.mults.charisma);
+ return calculateRawDiff(total, startingSecurityLevel);
}
diff --git a/src/Infiltration/formulas/victory.ts b/src/Infiltration/formulas/victory.ts
index bbfbc263b..1aa317d1c 100644
--- a/src/Infiltration/formulas/victory.ts
+++ b/src/Infiltration/formulas/victory.ts
@@ -1,15 +1,10 @@
-import { IPlayer } from "../../PersonObjects/IPlayer";
+import { Player } from "../../Player";
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
import { LocationsMetadata } from "../../Locations/data/LocationsMetadata";
import { AugmentationNames } from "../../Augmentation/data/AugmentationNames";
import { Faction } from "../../Faction/Faction";
-export function calculateSellInformationCashReward(
- player: IPlayer,
- reward: number,
- maxLevel: number,
- difficulty: number,
-): number {
+export function calculateSellInformationCashReward(reward: number, maxLevel: number, difficulty: number): number {
const levelBonus = maxLevel * Math.pow(1.01, maxLevel);
return (
@@ -17,17 +12,12 @@ export function calculateSellInformationCashReward(
Math.pow(difficulty, 3) *
3e3 *
levelBonus *
- (player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 1.5 : 1) *
+ (Player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 1.5 : 1) *
BitNodeMultipliers.InfiltrationMoney
);
}
-export function calculateTradeInformationRepReward(
- player: IPlayer,
- reward: number,
- maxLevel: number,
- difficulty: number,
-): number {
+export function calculateTradeInformationRepReward(reward: number, maxLevel: number, difficulty: number): number {
const levelBonus = maxLevel * Math.pow(1.01, maxLevel);
return (
@@ -35,12 +25,12 @@ export function calculateTradeInformationRepReward(
Math.pow(difficulty, 1.2) *
30 *
levelBonus *
- (player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 1.5 : 1) *
+ (Player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 1.5 : 1) *
BitNodeMultipliers.InfiltrationRep
);
}
-export function calculateInfiltratorsRepReward(player: IPlayer, faction: Faction, difficulty: number): number {
+export function calculateInfiltratorsRepReward(faction: Faction, difficulty: number): number {
const maxStartingSecurityLevel = LocationsMetadata.reduce((acc, data): number => {
const startingSecurityLevel = data.infiltrationData?.startingSecurityLevel || 0;
return acc > startingSecurityLevel ? acc : startingSecurityLevel;
@@ -48,6 +38,6 @@ export function calculateInfiltratorsRepReward(player: IPlayer, faction: Faction
const baseRepGain = (difficulty / maxStartingSecurityLevel) * 5000;
return (
- baseRepGain * (player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 2 : 1) * (1 + faction.favor / 100)
+ baseRepGain * (Player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 2 : 1) * (1 + faction.favor / 100)
);
}
diff --git a/src/Infiltration/ui/InfiltrationRoot.tsx b/src/Infiltration/ui/InfiltrationRoot.tsx
index 30baf09ce..48170d32c 100644
--- a/src/Infiltration/ui/InfiltrationRoot.tsx
+++ b/src/Infiltration/ui/InfiltrationRoot.tsx
@@ -1,7 +1,6 @@
import React, { useState } from "react";
import { Location } from "../../Locations/Location";
import { Router } from "../../ui/GameRoot";
-import { Player } from "../../Player";
import { calculateDifficulty, calculateReward } from "../formulas/game";
import { Game } from "./Game";
import { Intro } from "./Intro";
@@ -14,8 +13,8 @@ export function InfiltrationRoot(props: IProps): React.ReactElement {
if (props.location.infiltrationData === undefined) throw new Error("Trying to do infiltration on invalid location.");
const startingSecurityLevel = props.location.infiltrationData.startingSecurityLevel;
- const difficulty = calculateDifficulty(Player, startingSecurityLevel);
- const reward = calculateReward(Player, startingSecurityLevel);
+ const difficulty = calculateDifficulty(startingSecurityLevel);
+ const reward = calculateReward(startingSecurityLevel);
function cancel(): void {
Router.toCity();
diff --git a/src/Infiltration/ui/Victory.tsx b/src/Infiltration/ui/Victory.tsx
index bafb8f9eb..917708ad9 100644
--- a/src/Infiltration/ui/Victory.tsx
+++ b/src/Infiltration/ui/Victory.tsx
@@ -30,9 +30,9 @@ export function Victory(props: IProps): React.ReactElement {
}
const soa = Factions[FactionNames.ShadowsOfAnarchy];
- const repGain = calculateTradeInformationRepReward(Player, props.Reward, props.MaxLevel, props.StartingDifficulty);
- const moneyGain = calculateSellInformationCashReward(Player, props.Reward, props.MaxLevel, props.StartingDifficulty);
- const infiltrationRepGain = calculateInfiltratorsRepReward(Player, soa, props.StartingDifficulty);
+ const repGain = calculateTradeInformationRepReward(props.Reward, props.MaxLevel, props.StartingDifficulty);
+ const moneyGain = calculateSellInformationCashReward(props.Reward, props.MaxLevel, props.StartingDifficulty);
+ const infiltrationRepGain = calculateInfiltratorsRepReward(soa, props.StartingDifficulty);
const isMemberOfInfiltrators = Player.factions.includes(FactionNames.ShadowsOfAnarchy);
diff --git a/src/Milestones/Milestone.ts b/src/Milestones/Milestone.ts
index dd5c0b7e9..641cabe1f 100644
--- a/src/Milestones/Milestone.ts
+++ b/src/Milestones/Milestone.ts
@@ -1,6 +1,4 @@
-import { IPlayer } from "../PersonObjects/IPlayer";
-
export type Milestone = {
title: string;
- fulfilled: (p: IPlayer) => boolean;
+ fulfilled: () => boolean;
};
diff --git a/src/Milestones/Milestones.ts b/src/Milestones/Milestones.ts
index 24df22411..cf9cb9ad4 100644
--- a/src/Milestones/Milestones.ts
+++ b/src/Milestones/Milestones.ts
@@ -1,16 +1,16 @@
import { Milestone } from "./Milestone";
-import { IPlayer } from "../PersonObjects/IPlayer";
+import { Player } from "../Player";
import { Factions } from "../Faction/Factions";
import { Faction } from "../Faction/Faction";
import { GetServer } from "../Server/AllServers";
import { FactionNames } from "../Faction/data/FactionNames";
import { Server } from "../Server/Server";
-function allFactionAugs(p: IPlayer, f: Faction): boolean {
+function allFactionAugs(f: Faction): boolean {
const factionAugs = f.augmentations.slice().filter((aug) => aug !== "NeuroFlux Governor");
for (const factionAug of factionAugs) {
if (
- !p.augmentations.some((aug) => {
+ !Player.augmentations.some((aug) => {
return aug.name == factionAug;
})
)
@@ -38,63 +38,63 @@ export const Milestones: Milestone[] = [
},
{
title: "Join the faction hinted at in csec-test.msg",
- fulfilled: (p: IPlayer): boolean => {
- return p.factions.includes(FactionNames.CyberSec);
+ fulfilled: (): boolean => {
+ return Player.factions.includes(FactionNames.CyberSec);
},
},
{
title: `Install all the Augmentations from ${FactionNames.CyberSec}`,
- fulfilled: (p: IPlayer): boolean => {
- return allFactionAugs(p, Factions[FactionNames.CyberSec]);
+ fulfilled: (): boolean => {
+ return allFactionAugs(Factions[FactionNames.CyberSec]);
},
},
{
title: "Join the faction hinted at in nitesec-test.msg",
- fulfilled: (p: IPlayer): boolean => {
- return p.factions.includes(FactionNames.NiteSec);
+ fulfilled: (): boolean => {
+ return Player.factions.includes(FactionNames.NiteSec);
},
},
{
title: `Install all the Augmentations from ${FactionNames.NiteSec}`,
- fulfilled: (p: IPlayer): boolean => {
- return allFactionAugs(p, Factions[FactionNames.NiteSec]);
+ fulfilled: (): boolean => {
+ return allFactionAugs(Factions[FactionNames.NiteSec]);
},
},
{
title: "Join the faction hinted at in j3.msg",
- fulfilled: (p: IPlayer): boolean => {
- return p.factions.includes(FactionNames.TheBlackHand);
+ fulfilled: (): boolean => {
+ return Player.factions.includes(FactionNames.TheBlackHand);
},
},
{
title: `Install all the Augmentations from ${FactionNames.TheBlackHand}`,
- fulfilled: (p: IPlayer): boolean => {
- return allFactionAugs(p, Factions[FactionNames.TheBlackHand]);
+ fulfilled: (): boolean => {
+ return allFactionAugs(Factions[FactionNames.TheBlackHand]);
},
},
{
title: "Join the faction hinted at in 19dfj3l1nd.msg",
- fulfilled: (p: IPlayer): boolean => {
- return p.factions.includes(FactionNames.BitRunners);
+ fulfilled: (): boolean => {
+ return Player.factions.includes(FactionNames.BitRunners);
},
},
{
title: `Install all the Augmentations from ${FactionNames.BitRunners}`,
- fulfilled: (p: IPlayer): boolean => {
- return allFactionAugs(p, Factions[FactionNames.BitRunners]);
+ fulfilled: (): boolean => {
+ return allFactionAugs(Factions[FactionNames.BitRunners]);
},
},
{
title: "Complete fl1ght.exe",
- fulfilled: (p: IPlayer): boolean => {
+ fulfilled: (): boolean => {
// technically wrong but whatever
- return p.factions.includes(FactionNames.Daedalus);
+ return Player.factions.includes(FactionNames.Daedalus);
},
},
{
title: `Install the special Augmentation from ${FactionNames.Daedalus}`,
- fulfilled: (p: IPlayer): boolean => {
- return p.augmentations.some((aug) => aug.name == "The Red Pill");
+ fulfilled: (): boolean => {
+ return Player.augmentations.some((aug) => aug.name == "The Red Pill");
},
},
{
diff --git a/src/Milestones/ui/MilestonesRoot.tsx b/src/Milestones/ui/MilestonesRoot.tsx
index 7f12d24ea..911830cb8 100644
--- a/src/Milestones/ui/MilestonesRoot.tsx
+++ b/src/Milestones/ui/MilestonesRoot.tsx
@@ -1,4 +1,3 @@
-import { Player } from "../../Player";
import { Milestones } from "../Milestones";
import { Milestone } from "../Milestone";
import * as React from "react";
@@ -9,7 +8,7 @@ import Box from "@mui/material/Box";
function highestMilestone(milestones: Milestone[]): number {
let n = -1;
for (let i = 0; i < milestones.length; i++) {
- if (milestones[i].fulfilled(Player)) n = i;
+ if (milestones[i].fulfilled()) n = i;
}
return n;
@@ -21,7 +20,7 @@ export function MilestonesRoot(): JSX.Element {
if (i <= n + 1) {
return (
- [{milestone.fulfilled(Player) ? "x" : " "}] {milestone.title}
+ [{milestone.fulfilled() ? "x" : " "}] {milestone.title}
);
}
diff --git a/src/Netscript/NetscriptHelpers.ts b/src/Netscript/NetscriptHelpers.ts
index 3a8c76282..79a2dc2bb 100644
--- a/src/Netscript/NetscriptHelpers.ts
+++ b/src/Netscript/NetscriptHelpers.ts
@@ -21,7 +21,7 @@ import { CONSTANTS } from "../Constants";
import { influenceStockThroughServerHack } from "../StockMarket/PlayerInfluencing";
import { IPort, NetscriptPort } from "../NetscriptPort";
import { NetscriptPorts } from "../NetscriptWorker";
-import { IPlayer } from "../PersonObjects/IPlayer";
+import { IPerson } from "../PersonObjects/IPerson";
import { FormulaGang } from "../Gang/formulas/formulas";
import { GangMember } from "../Gang/GangMember";
import { GangMemberTask } from "../Gang/GangMemberTask";
@@ -498,7 +498,7 @@ function getValidPort(ctx: NetscriptContext, port: number): IPort {
return iport;
}
-function player(ctx: NetscriptContext, p: unknown): IPlayer {
+function player(ctx: NetscriptContext, p: unknown): IPerson {
const fakePlayer = {
hp: undefined,
mults: undefined,
@@ -518,7 +518,7 @@ function player(ctx: NetscriptContext, p: unknown): IPlayer {
entropy: undefined,
};
if (!roughlyIs(fakePlayer, p)) throw makeRuntimeErrorMsg(ctx, `player should be a Player.`, "TYPE");
- return p as IPlayer;
+ return p as IPerson;
}
function server(ctx: NetscriptContext, s: unknown): Server {
diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts
index 62bd40e35..bfdb9a378 100644
--- a/src/NetscriptFunctions.ts
+++ b/src/NetscriptFunctions.ts
@@ -266,7 +266,7 @@ const base: InternalAPI = {
);
return helpers.netscriptDelay(ctx, growTime * 1000).then(function () {
const moneyBefore = server.moneyAvailable <= 0 ? 1 : server.moneyAvailable;
- processSingleServerGrowth(server, threads, Player, host.cpuCores);
+ processSingleServerGrowth(server, threads, host.cpuCores);
const moneyAfter = server.moneyAvailable;
ctx.workerScript.scriptRef.recordGrow(server.hostname, threads);
const expGain = calculateHackingExpGain(server, Player) * threads;
@@ -304,7 +304,7 @@ const base: InternalAPI = {
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid argument: growth must be numeric and >= 1, is ${growth}.`);
}
- return numCycleForGrowth(server, Number(growth), Player, cores);
+ return numCycleForGrowth(server, Number(growth), cores);
},
growthAnalyzeSecurity:
(ctx: NetscriptContext) =>
@@ -321,7 +321,7 @@ const base: InternalAPI = {
}
const maxThreadsNeeded = Math.ceil(
- numCycleForGrowthCorrected(server, server.moneyMax, server.moneyAvailable, Player, cores),
+ numCycleForGrowthCorrected(server, server.moneyMax, server.moneyAvailable, cores),
);
threads = Math.min(threads, maxThreadsNeeded);
diff --git a/src/NetscriptFunctions/Infiltration.ts b/src/NetscriptFunctions/Infiltration.ts
index 51325a4ab..620e5a4bf 100644
--- a/src/NetscriptFunctions/Infiltration.ts
+++ b/src/NetscriptFunctions/Infiltration.ts
@@ -1,5 +1,3 @@
-import { Player as player } from "../Player";
-
import {
Infiltration as IInfiltration,
InfiltrationLocation,
@@ -32,15 +30,15 @@ export function NetscriptInfiltration(): InternalAPI {
if (location.infiltrationData === undefined)
throw helpers.makeRuntimeErrorMsg(ctx, `Location '${location}' does not provide infiltrations.`);
const startingSecurityLevel = location.infiltrationData.startingSecurityLevel;
- const difficulty = calculateDifficulty(player, startingSecurityLevel);
- const reward = calculateReward(player, startingSecurityLevel);
+ const difficulty = calculateDifficulty(startingSecurityLevel);
+ const reward = calculateReward(startingSecurityLevel);
const maxLevel = location.infiltrationData.maxClearanceLevel;
return {
location: JSON.parse(JSON.stringify(location)),
reward: {
- tradeRep: calculateTradeInformationRepReward(player, reward, maxLevel, startingSecurityLevel),
- sellCash: calculateSellInformationCashReward(player, reward, maxLevel, startingSecurityLevel),
- SoARep: calculateInfiltratorsRepReward(player, Factions[FactionNames.ShadowsOfAnarchy], startingSecurityLevel),
+ tradeRep: calculateTradeInformationRepReward(reward, maxLevel, startingSecurityLevel),
+ sellCash: calculateSellInformationCashReward(reward, maxLevel, startingSecurityLevel),
+ SoARep: calculateInfiltratorsRepReward(Factions[FactionNames.ShadowsOfAnarchy], startingSecurityLevel),
},
difficulty: difficulty,
};
diff --git a/src/NetscriptFunctions/Stanek.ts b/src/NetscriptFunctions/Stanek.ts
index f0753b379..84401dd9d 100644
--- a/src/NetscriptFunctions/Stanek.ts
+++ b/src/NetscriptFunctions/Stanek.ts
@@ -53,7 +53,7 @@ export function NetscriptStanek(): InternalAPI {
//Charge the fragment
const time = staneksGift.inBonus() ? 200 : 1000;
return helpers.netscriptDelay(ctx, time).then(function () {
- staneksGift.charge(player, fragment, ctx.workerScript.scriptRef.threads);
+ staneksGift.charge(fragment, ctx.workerScript.scriptRef.threads);
helpers.log(ctx, () => `Charged fragment with ${ctx.workerScript.scriptRef.threads} threads.`);
return Promise.resolve();
});
diff --git a/src/Prestige.ts b/src/Prestige.ts
index 45ea6f26a..1ebbf1789 100755
--- a/src/Prestige.ts
+++ b/src/Prestige.ts
@@ -52,7 +52,7 @@ export function prestigeAugmentation(): void {
// Reset home computer (only the programs) and add to AllServers
AddToAllServers(homeComp);
- prestigeHomeComputer(Player, homeComp);
+ prestigeHomeComputer(homeComp);
if (augmentationExists(AugmentationNames.Neurolink) && Player.hasAugmentation(AugmentationNames.Neurolink, true)) {
homeComp.programs.push(Programs.FTPCrackProgram.name);
@@ -194,7 +194,7 @@ export function prestigeSourceFile(flume: boolean): void {
// Reset home computer (only the programs) and add to AllServers
AddToAllServers(homeComp);
- prestigeHomeComputer(Player, homeComp);
+ prestigeHomeComputer(homeComp);
// Re-create foreign servers
initForeignServers(Player.getHomeComputer());
diff --git a/src/Script/ScriptHelpers.ts b/src/Script/ScriptHelpers.ts
index 078634328..2333786a6 100644
--- a/src/Script/ScriptHelpers.ts
+++ b/src/Script/ScriptHelpers.ts
@@ -43,7 +43,7 @@ export function scriptCalculateOfflineProduction(runningScript: RunningScript):
const host = GetServer(runningScript.server);
if (host === null) throw new Error("getServer of null key?");
if (!(serv instanceof Server)) throw new Error("trying to grow a non-normal server");
- const growth = processSingleServerGrowth(serv, timesGrown, Player, host.cpuCores);
+ const growth = processSingleServerGrowth(serv, timesGrown, host.cpuCores);
runningScript.log(
`'${serv.hostname}' grown by ${numeralWrapper.format(growth * 100 - 100, "0.000000%")} while offline`,
);
diff --git a/src/Server/ServerHelpers.ts b/src/Server/ServerHelpers.ts
index 979ec91a3..8393f1904 100644
--- a/src/Server/ServerHelpers.ts
+++ b/src/Server/ServerHelpers.ts
@@ -5,7 +5,7 @@ import { calculateServerGrowth } from "./formulas/grow";
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
import { CONSTANTS } from "../Constants";
-import { IPlayer } from "../PersonObjects/IPlayer";
+import { Player } from "../Player";
import { Programs } from "../Programs/Programs";
import { LiteratureNames } from "../Literature/data/LiteratureNames";
@@ -48,7 +48,7 @@ export function safetlyCreateUniqueServer(params: IConstructorParams): Server {
* @param p - Reference to Player object
* @returns Number of "growth cycles" needed
*/
-export function numCycleForGrowth(server: Server, growth: number, p: IPlayer, cores = 1): number {
+export function numCycleForGrowth(server: Server, growth: number, cores = 1): number {
let ajdGrowthRate = 1 + (CONSTANTS.ServerBaseGrowthRate - 1) / server.hackDifficulty;
if (ajdGrowthRate > CONSTANTS.ServerMaxGrowthRate) {
ajdGrowthRate = CONSTANTS.ServerMaxGrowthRate;
@@ -60,7 +60,7 @@ export function numCycleForGrowth(server: Server, growth: number, p: IPlayer, co
const cycles =
Math.log(growth) /
(Math.log(ajdGrowthRate) *
- p.mults.hacking_grow *
+ Player.mults.hacking_grow *
serverGrowthPercentage *
BitNodeMultipliers.ServerGrowthRate *
coreBonus);
@@ -68,33 +68,6 @@ export function numCycleForGrowth(server: Server, growth: number, p: IPlayer, co
return cycles;
}
-/**
- * Replacement function for the above function that accounts for the +$1/thread functionality of grow
- * with parameters that are the same (for compatibility), but functionality is slightly different.
- * This function can ONLY be used to calculate the threads needed for a given server in its current state,
- * and so wouldn't be appropriate to use for formulas.exe or ns.growthAnalyze (as those are meant to
- * provide theoretical scenarios, or inverse hack respectively). Players COULD use this function with a
- * custom server object with the correct moneyAvailable and moneyMax amounts, combined with a multiplier
- * correctly calculated to bring the server to a new moneyAvailable (ie, passing in moneyAvailable 300 and x2
- * when you want the number of threads required to grow that particular server from 300 to 600), and this
- * function would pass back the correct number of threads. But the key thing is that it doesn't just
- * inverse/undo a hack (since the amount hacked from/to matters, not just the multiplier).
- * The above is also a rather unnecessarily obtuse way of thinking about it for a formulas.exe type of
- * application, so another function with different parameters is provided for that case below this one.
- * Instead this function is meant to hand-off from the old numCycleForGrowth function to the new one
- * where used internally for pro-rating or the like. Where you have applied a grow and want to determine
- * how many threads were needed for THAT SPECIFIC grow case using a multiplier.
- * Ideally, this function, and the original function above will be depreciated to use the methodology
- * and inputs of the new function below this one. Even for internal cases (it's actually easier to do so).
- * @param server - Server being grown
- * @param growth - How much the server money is expected to be multiplied by (e.g. 1.5 for *1.5 / +50%)
- * @param p - Reference to Player object
- * @returns Number of "growth cycles" needed
- */
-export function numCycleForGrowthTransition(server: Server, growth: number, p: IPlayer, cores = 1): number {
- return numCycleForGrowthCorrected(server, server.moneyAvailable * growth, server.moneyAvailable, p, cores);
-}
-
/**
* This function calculates the number of threads needed to grow a server from one $amount to a higher $amount
* (ie, how many threads to grow this server from $200 to $600 for example). Used primarily for a formulas (or possibly growthAnalyze)
@@ -104,16 +77,10 @@ export function numCycleForGrowthTransition(server: Server, growth: number, p: I
* @param server - Server being grown
* @param targetMoney - How much you want the server grown TO (not by), for instance, to grow from 200 to 600, input 600
* @param startMoney - How much you are growing the server from, for instance, to grow from 200 to 600, input 200
- * @param p - Reference to Player object
+ * @param cores - Number of cores on the host performing grow
* @returns Number of "growth cycles" needed
*/
-export function numCycleForGrowthCorrected(
- server: Server,
- targetMoney: number,
- startMoney: number,
- p: IPlayer,
- cores = 1,
-): number {
+export function numCycleForGrowthCorrected(server: Server, targetMoney: number, startMoney: number, cores = 1): number {
if (startMoney < 0) {
startMoney = 0;
} // servers "can't" have less than 0 dollars on them
@@ -132,7 +99,7 @@ export function numCycleForGrowthCorrected(
const serverGrowthPercentage = server.serverGrowth / 100.0;
const coreMultiplier = 1 + (cores - 1) / 16;
const threadMultiplier =
- serverGrowthPercentage * p.mults.hacking_grow * coreMultiplier * BitNodeMultipliers.ServerGrowthRate;
+ serverGrowthPercentage * Player.mults.hacking_grow * coreMultiplier * BitNodeMultipliers.ServerGrowthRate;
/* To understand what is done below we need to do some math. I hope the explanation is clear enough.
* First of, the names will be shortened for ease of manipulation:
@@ -241,47 +208,9 @@ export function numCycleForGrowthCorrected(
return cca + 1;
}
-/**
- * This function calculates the number of threads needed to grow a server based on a pre-hack money and hackAmt
- * (ie, if you're hacking a server with $1e6 moneyAvail for 60%, this function will tell you how many threads to regrow it
- * A good replacement for the current ns.growthAnalyze if you want players to have more control/responsibility
- * @param server - Server being grown
- * @param hackProp - the proportion of money hacked (total, not per thread, like 0.60 for hacking 60% of available money)
- * @param prehackMoney - how much money the server had before being hacked (like 200000 for hacking a server that had $200000 on it at time of hacking)
- * @param p - Reference to Player object
- * @returns Number of "growth cycles" needed to reverse the described hack
- */
-export function numCycleForGrowthByHackAmt(
- server: Server,
- hackProp: number,
- prehackMoney: number,
- p: IPlayer,
- cores = 1,
-): number {
- if (prehackMoney > server.moneyMax) prehackMoney = server.moneyMax;
- const posthackMoney = Math.floor(prehackMoney * Math.min(1, Math.max(0, 1 - hackProp)));
- return numCycleForGrowthCorrected(server, prehackMoney, posthackMoney, p, cores);
-}
-
-/**
- * This function calculates the number of threads needed to grow a server based on an expected growth multiplier assuming it will max out
- * (ie, if you expect to grow a server by 60% to reach maxMoney, this function will tell you how many threads to grow it)
- * PROBABLY the best replacement for the current ns.growthAnalyze to maintain existing scripts
- * @param server - Server being grown
- * @param growth - How much the server is being grown by, as a multiple in DECIMAL form (e.g. 1.5 rather than 50). Infinity is acceptable.
- * @param p - Reference to Player object
- * @returns Number of "growth cycles" needed
- */
-export function numCycleForGrowthByMultiplier(server: Server, growth: number, p: IPlayer, cores = 1): number {
- if (growth < 1.0) growth = 1.0;
- const targetMoney = server.moneyMax;
- const startingMoney = server.moneyMax / growth;
- return numCycleForGrowthCorrected(server, targetMoney, startingMoney, p, cores);
-}
-
//Applied server growth for a single server. Returns the percentage growth
-export function processSingleServerGrowth(server: Server, threads: number, p: IPlayer, cores = 1): number {
- let serverGrowth = calculateServerGrowth(server, threads, p, cores);
+export function processSingleServerGrowth(server: Server, threads: number, cores = 1): number {
+ let serverGrowth = calculateServerGrowth(server, threads, Player, cores);
if (serverGrowth < 1) {
console.warn("serverGrowth calculated to be less than 1");
serverGrowth = 1;
@@ -303,7 +232,7 @@ export function processSingleServerGrowth(server: Server, threads: number, p: IP
// if there was any growth at all, increase security
if (oldMoneyAvailable !== server.moneyAvailable) {
- let usedCycles = numCycleForGrowthCorrected(server, server.moneyAvailable, oldMoneyAvailable, p, cores);
+ let usedCycles = numCycleForGrowthCorrected(server, server.moneyAvailable, oldMoneyAvailable, cores);
// Growing increases server security twice as much as hacking
usedCycles = Math.min(Math.max(0, Math.ceil(usedCycles)), threads);
server.fortify(2 * CONSTANTS.ServerFortifyAmount * usedCycles);
@@ -311,7 +240,7 @@ export function processSingleServerGrowth(server: Server, threads: number, p: IP
return server.moneyAvailable / oldMoneyAvailable;
}
-export function prestigeHomeComputer(player: IPlayer, homeComp: Server): void {
+export function prestigeHomeComputer(homeComp: Server): void {
const hasBitflume = homeComp.programs.includes(Programs.BitFlume.name);
homeComp.programs.length = 0; //Remove programs
diff --git a/src/Server/formulas/grow.ts b/src/Server/formulas/grow.ts
index 68df5aef3..4ab2fa761 100644
--- a/src/Server/formulas/grow.ts
+++ b/src/Server/formulas/grow.ts
@@ -1,9 +1,9 @@
import { CONSTANTS } from "../../Constants";
import { Server } from "../Server";
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
-import { IPlayer } from "../../PersonObjects/IPlayer";
+import { IPerson } from "../../PersonObjects/IPerson";
-export function calculateServerGrowth(server: Server, threads: number, p: IPlayer, cores = 1): number {
+export function calculateServerGrowth(server: Server, threads: number, p: IPerson, cores = 1): number {
const numServerGrowthCycles = Math.max(Math.floor(threads), 0);
//Get adjusted growth rate, which accounts for server security
diff --git a/src/Terminal/Terminal.ts b/src/Terminal/Terminal.ts
index 4cfe7517e..61c4a259c 100644
--- a/src/Terminal/Terminal.ts
+++ b/src/Terminal/Terminal.ts
@@ -250,7 +250,7 @@ export class Terminal implements ITerminal {
if (!(server instanceof Server)) throw new Error("server should be normal server");
const expGain = calculateHackingExpGain(server, Player);
const oldSec = server.hackDifficulty;
- const growth = processSingleServerGrowth(server, 25, Player, server.cpuCores) - 1;
+ const growth = processSingleServerGrowth(server, 25, server.cpuCores) - 1;
const newSec = server.hackDifficulty;
Player.gainHackingExp(expGain);
diff --git a/src/Terminal/determineAllPossibilitiesForTabCompletion.ts b/src/Terminal/determineAllPossibilitiesForTabCompletion.ts
index 54393f894..d1a1fcd87 100644
--- a/src/Terminal/determineAllPossibilitiesForTabCompletion.ts
+++ b/src/Terminal/determineAllPossibilitiesForTabCompletion.ts
@@ -3,7 +3,7 @@ import { getSubdirectories } from "./DirectoryServerHelpers";
import { Aliases, GlobalAliases, substituteAliases } from "../Alias";
import { DarkWebItems } from "../DarkWeb/DarkWebItems";
-import { IPlayer } from "../PersonObjects/IPlayer";
+import { Player } from "../Player";
import { GetAllServers } from "../Server/AllServers";
import { Server } from "../Server/Server";
import { ParseCommand, ParseCommands } from "./Parser";
@@ -57,7 +57,6 @@ const commands = [
];
export async function determineAllPossibilitiesForTabCompletion(
- p: IPlayer,
input: string,
index: number,
currPath = "",
@@ -65,8 +64,8 @@ export async function determineAllPossibilitiesForTabCompletion(
input = substituteAliases(input);
let allPos: string[] = [];
allPos = allPos.concat(Object.keys(GlobalAliases));
- const currServ = p.getCurrentServer();
- const homeComputer = p.getHomeComputer();
+ const currServ = Player.getCurrentServer();
+ const homeComputer = Player.getHomeComputer();
let parentDirPath = "";
let evaledParentDirPath: string | null = null;
diff --git a/src/Terminal/ui/TerminalInput.tsx b/src/Terminal/ui/TerminalInput.tsx
index 05ba2fa4f..2e9340e55 100644
--- a/src/Terminal/ui/TerminalInput.tsx
+++ b/src/Terminal/ui/TerminalInput.tsx
@@ -222,7 +222,7 @@ export function TerminalInput(): React.ReactElement {
if (index < -1) {
index = 0;
}
- const allPos = await determineAllPossibilitiesForTabCompletion(Player, copy, index, Terminal.cwd());
+ const allPos = await determineAllPossibilitiesForTabCompletion(copy, index, Terminal.cwd());
if (allPos.length == 0) {
return;
}
diff --git a/src/engine.tsx b/src/engine.tsx
index d12e408cf..3c66e2c89 100644
--- a/src/engine.tsx
+++ b/src/engine.tsx
@@ -103,11 +103,11 @@ const Engine: {
// Gang, if applicable
if (Player.inGang() && Player.gang !== null) {
- Player.gang.process(numCycles, Player);
+ Player.gang.process(numCycles);
}
// Staneks gift
- staneksGift.process(Player, numCycles);
+ staneksGift.process(numCycles);
// Corporation
if (Player.corporation instanceof Corporation) {
@@ -330,7 +330,7 @@ const Engine: {
// Gang progress for BitNode 2
const gang = Player.gang;
if (Player.inGang() && gang !== null) {
- gang.process(numCyclesOffline, Player);
+ gang.process(numCyclesOffline);
}
// Corporation offline progress
@@ -343,7 +343,7 @@ const Engine: {
Player.bladeburner.storeCycles(numCyclesOffline);
}
- staneksGift.process(Player, numCyclesOffline);
+ staneksGift.process(numCyclesOffline);
// Sleeves offline progress
for (let i = 0; i < Player.sleeves.length; ++i) {