2021-03-31 06:45:21 +02:00
|
|
|
import { CONSTANTS } from "../../Constants";
|
|
|
|
import { Server } from "../Server";
|
|
|
|
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
|
|
|
|
import { IPlayer } from "../../PersonObjects/IPlayer";
|
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
export function calculateServerGrowth(
|
|
|
|
server: Server,
|
|
|
|
threads: number,
|
|
|
|
p: IPlayer,
|
|
|
|
cores = 1,
|
|
|
|
): number {
|
|
|
|
const numServerGrowthCycles = Math.max(Math.floor(threads), 0);
|
2021-03-31 06:45:21 +02:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
//Get adjusted growth rate, which accounts for server security
|
|
|
|
const growthRate = CONSTANTS.ServerBaseGrowthRate;
|
|
|
|
let adjGrowthRate = 1 + (growthRate - 1) / server.hackDifficulty;
|
|
|
|
if (adjGrowthRate > CONSTANTS.ServerMaxGrowthRate) {
|
|
|
|
adjGrowthRate = CONSTANTS.ServerMaxGrowthRate;
|
|
|
|
}
|
2021-03-31 06:45:21 +02:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
//Calculate adjusted server growth rate based on parameters
|
|
|
|
const serverGrowthPercentage = server.serverGrowth / 100;
|
|
|
|
const numServerGrowthCyclesAdjusted =
|
|
|
|
numServerGrowthCycles *
|
|
|
|
serverGrowthPercentage *
|
|
|
|
BitNodeMultipliers.ServerGrowthRate;
|
2021-03-31 06:45:21 +02:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
//Apply serverGrowth for the calculated number of growth cycles
|
|
|
|
const coreBonus = 1 + (cores - 1) / 16;
|
|
|
|
return Math.pow(
|
|
|
|
adjGrowthRate,
|
|
|
|
numServerGrowthCyclesAdjusted * p.hacking_grow_mult * coreBonus,
|
|
|
|
);
|
|
|
|
}
|