import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers"; import { HacknetNodeConstants } from "../data/Constants"; export function calculateMoneyGainRate( level: number, ram: number, cores: number, mult: number, ): number { const gainPerLevel = HacknetNodeConstants.MoneyGainPerLevel; const levelMult = level * gainPerLevel; const ramMult = Math.pow(1.035, ram - 1); const coresMult = (cores + 5) / 6; return ( levelMult * ramMult * coresMult * mult * BitNodeMultipliers.HacknetNodeMoney ); } export function calculateLevelUpgradeCost( startingLevel: number, extraLevels = 1, costMult = 1, ): number { const sanitizedLevels = Math.round(extraLevels); if (isNaN(sanitizedLevels) || sanitizedLevels < 1) { return 0; } if (startingLevel >= HacknetNodeConstants.MaxLevel) { return Infinity; } const mult = HacknetNodeConstants.UpgradeLevelMult; let totalMultiplier = 0; let currLevel = startingLevel; for (let i = 0; i < sanitizedLevels; ++i) { totalMultiplier += HacknetNodeConstants.LevelBaseCost * Math.pow(mult, currLevel); ++currLevel; } return (HacknetNodeConstants.BaseCost / 2) * totalMultiplier * costMult; } export function calculateRamUpgradeCost( startingRam: number, extraLevels = 1, costMult = 1, ): number { const sanitizedLevels = Math.round(extraLevels); if (isNaN(sanitizedLevels) || sanitizedLevels < 1) { return 0; } if (startingRam >= HacknetNodeConstants.MaxRam) { return Infinity; } let totalCost = 0; let numUpgrades = Math.round(Math.log2(startingRam)); let currentRam = startingRam; for (let i = 0; i < sanitizedLevels; ++i) { const baseCost = currentRam * HacknetNodeConstants.RamBaseCost; const mult = Math.pow(HacknetNodeConstants.UpgradeRamMult, numUpgrades); totalCost += baseCost * mult; currentRam *= 2; ++numUpgrades; } totalCost *= costMult; return totalCost; } export function calculateCoreUpgradeCost( startingCore: number, extraLevels = 1, costMult = 1, ): number { const sanitizedCores = Math.round(extraLevels); if (isNaN(sanitizedCores) || sanitizedCores < 1) { return 0; } if (startingCore >= HacknetNodeConstants.MaxCores) { return Infinity; } const coreBaseCost = HacknetNodeConstants.CoreBaseCost; const mult = HacknetNodeConstants.UpgradeCoreMult; let totalCost = 0; let currentCores = startingCore; for (let i = 0; i < sanitizedCores; ++i) { totalCost += coreBaseCost * Math.pow(mult, currentCores - 1); ++currentCores; } totalCost *= costMult; return totalCost; } export function calculateNodeCost(n: number, mult = 1): number { if (n <= 0) { return 0; } return ( HacknetNodeConstants.BaseCost * Math.pow(HacknetNodeConstants.PurchaseNextMult, n - 1) * mult ); }