bitburner-src/src/NetscriptFunctions/Formulas.ts

182 lines
7.8 KiB
TypeScript
Raw Normal View History

2021-10-14 09:22:02 +02:00
import { INetscriptHelper } from "./INetscriptHelper";
import { WorkerScript } from "../Netscript/WorkerScript";
import { IPlayer } from "../PersonObjects/IPlayer";
import { calculateServerGrowth } from "../Server/formulas/grow";
import {
calculateMoneyGainRate,
calculateLevelUpgradeCost,
calculateRamUpgradeCost,
calculateCoreUpgradeCost,
calculateNodeCost,
} from "../Hacknet/formulas/HacknetNodes";
import {
calculateHashGainRate as HScalculateHashGainRate,
calculateLevelUpgradeCost as HScalculateLevelUpgradeCost,
calculateRamUpgradeCost as HScalculateRamUpgradeCost,
calculateCoreUpgradeCost as HScalculateCoreUpgradeCost,
calculateCacheUpgradeCost as HScalculateCacheUpgradeCost,
calculateServerCost as HScalculateServerCost,
} from "../Hacknet/formulas/HacknetServers";
import { HacknetNodeConstants, HacknetServerConstants } from "../Hacknet/data/Constants";
import { calculateSkill, calculateExp } from "../PersonObjects/formulas/skill";
import {
calculateHackingChance,
calculateHackingExpGain,
calculatePercentMoneyHacked,
calculateHackingTime,
calculateGrowTime,
calculateWeakenTime,
} from "../Hacking";
2021-10-28 05:41:47 +02:00
import { Programs } from "../Programs/Programs";
2021-10-14 09:22:02 +02:00
export interface INetscriptFormulas {
basic: {
calculateSkill(exp: any, mult?: any): any;
calculateExp(skill: any, mult?: any): any;
hackChance(server: any, player: any): any;
hackExp(server: any, player: any): any;
hackPercent(server: any, player: any): any;
growPercent(server: any, threads: any, player: any, cores?: any): any;
hackTime(server: any, player: any): any;
growTime(server: any, player: any): any;
weakenTime(server: any, player: any): any;
};
hacknetNodes: {
moneyGainRate(level: any, ram: any, cores: any, mult?: any): any;
levelUpgradeCost(startingLevel: any, extraLevels?: any, costMult?: any): any;
ramUpgradeCost(startingRam: any, extraLevels?: any, costMult?: any): any;
coreUpgradeCost(startingCore: any, extraCores?: any, costMult?: any): any;
hacknetNodeCost(n: any, mult: any): any;
constants(): any;
};
hacknetServers: {
hashGainRate(level: any, ramUsed: any, maxRam: any, cores: any, mult?: any): any;
levelUpgradeCost(startingLevel: any, extraLevels?: any, costMult?: any): any;
ramUpgradeCost(startingRam: any, extraLevels?: any, costMult?: any): any;
coreUpgradeCost(startingCore: any, extraCores?: any, costMult?: any): any;
cacheUpgradeCost(startingCache: any, extraCache?: any): any;
hashUpgradeCost(upgName: any, level: any): any;
hacknetServerCost(n: any, mult: any): any;
constants(): any;
};
}
export function NetscriptFormulas(
player: IPlayer,
workerScript: WorkerScript,
helper: INetscriptHelper,
): INetscriptFormulas {
2021-10-28 05:41:47 +02:00
const checkFormulasAccess = function (func: string): void {
if (!player.hasProgram(Programs.Formulas.name)) {
throw helper.makeRuntimeErrorMsg(`formulas.${func}`, `Requires Formulas.exe to run.`);
2021-10-14 09:22:02 +02:00
}
};
return {
basic: {
calculateSkill: function (exp: any, mult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.calculateSkill");
2021-10-14 09:22:02 +02:00
return calculateSkill(exp, mult);
},
calculateExp: function (skill: any, mult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.calculateExp");
2021-10-14 09:22:02 +02:00
return calculateExp(skill, mult);
},
hackChance: function (server: any, player: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.hackChance");
2021-10-14 09:22:02 +02:00
return calculateHackingChance(server, player);
},
hackExp: function (server: any, player: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.hackExp");
2021-10-14 09:22:02 +02:00
return calculateHackingExpGain(server, player);
},
hackPercent: function (server: any, player: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.hackPercent");
2021-10-14 09:22:02 +02:00
return calculatePercentMoneyHacked(server, player);
},
growPercent: function (server: any, threads: any, player: any, cores: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.growPercent");
2021-10-14 09:22:02 +02:00
return calculateServerGrowth(server, threads, player, cores);
},
hackTime: function (server: any, player: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.hackTime");
2021-10-14 09:22:02 +02:00
return calculateHackingTime(server, player);
},
growTime: function (server: any, player: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.growTime");
2021-10-14 09:22:02 +02:00
return calculateGrowTime(server, player);
},
weakenTime: function (server: any, player: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("basic.weakenTime");
2021-10-14 09:22:02 +02:00
return calculateWeakenTime(server, player);
},
},
hacknetNodes: {
moneyGainRate: function (level: any, ram: any, cores: any, mult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetNodes.moneyGainRate");
2021-10-14 09:22:02 +02:00
return calculateMoneyGainRate(level, ram, cores, mult);
},
levelUpgradeCost: function (startingLevel: any, extraLevels: any = 1, costMult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetNodes.levelUpgradeCost");
2021-10-14 09:22:02 +02:00
return calculateLevelUpgradeCost(startingLevel, extraLevels, costMult);
},
ramUpgradeCost: function (startingRam: any, extraLevels: any = 1, costMult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetNodes.ramUpgradeCost");
2021-10-14 09:22:02 +02:00
return calculateRamUpgradeCost(startingRam, extraLevels, costMult);
},
coreUpgradeCost: function (startingCore: any, extraCores: any = 1, costMult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetNodes.coreUpgradeCost");
2021-10-14 09:22:02 +02:00
return calculateCoreUpgradeCost(startingCore, extraCores, costMult);
},
hacknetNodeCost: function (n: any, mult: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetNodes.hacknetNodeCost");
2021-10-14 09:22:02 +02:00
return calculateNodeCost(n, mult);
},
constants: function (): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetNodes.constants");
2021-10-14 09:22:02 +02:00
return Object.assign({}, HacknetNodeConstants);
},
},
hacknetServers: {
hashGainRate: function (level: any, ramUsed: any, maxRam: any, cores: any, mult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.hashGainRate");
2021-10-14 09:22:02 +02:00
return HScalculateHashGainRate(level, ramUsed, maxRam, cores, mult);
},
levelUpgradeCost: function (startingLevel: any, extraLevels: any = 1, costMult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.levelUpgradeCost");
2021-10-14 09:22:02 +02:00
return HScalculateLevelUpgradeCost(startingLevel, extraLevels, costMult);
},
ramUpgradeCost: function (startingRam: any, extraLevels: any = 1, costMult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.ramUpgradeCost");
2021-10-14 09:22:02 +02:00
return HScalculateRamUpgradeCost(startingRam, extraLevels, costMult);
},
coreUpgradeCost: function (startingCore: any, extraCores: any = 1, costMult: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.coreUpgradeCost");
2021-10-14 09:22:02 +02:00
return HScalculateCoreUpgradeCost(startingCore, extraCores, costMult);
},
cacheUpgradeCost: function (startingCache: any, extraCache: any = 1): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.cacheUpgradeCost");
2021-10-14 09:22:02 +02:00
return HScalculateCacheUpgradeCost(startingCache, extraCache);
},
hashUpgradeCost: function (upgName: any, level: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.hashUpgradeCost");
2021-10-14 09:22:02 +02:00
const upg = player.hashManager.getUpgrade(upgName);
if (!upg) {
throw helper.makeRuntimeErrorMsg(
"formulas.hacknetServers.calculateHashUpgradeCost",
`Invalid Hash Upgrade: ${upgName}`,
);
}
return upg.getCost(level);
},
hacknetServerCost: function (n: any, mult: any): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.hacknetServerCost");
2021-10-14 09:22:02 +02:00
return HScalculateServerCost(n, mult);
},
constants: function (): any {
2021-10-28 05:41:47 +02:00
checkFormulasAccess("hacknetServers.constants");
2021-10-14 09:22:02 +02:00
return Object.assign({}, HacknetServerConstants);
},
},
};
}