mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-09-23 14:20:56 +02:00
81 lines
3.6 KiB
TypeScript
81 lines
3.6 KiB
TypeScript
import { CONSTANTS } from "../../Constants";
|
|
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
|
|
import { IPlayer } from "../IPlayer";
|
|
|
|
export interface WorkEarnings {
|
|
workMoneyLossRate: number;
|
|
workHackExpGainRate: number;
|
|
workStrExpGainRate: number;
|
|
workDefExpGainRate: number;
|
|
workDexExpGainRate: number;
|
|
workAgiExpGainRate: number;
|
|
workChaExpGainRate: number;
|
|
}
|
|
|
|
export function calculateClassEarnings(player: IPlayer): WorkEarnings {
|
|
const gameCPS = 1000 / CONSTANTS._idleSpeed;
|
|
|
|
//Find cost and exp gain per game cycle
|
|
let cost = 0;
|
|
let hackExp = 0,
|
|
strExp = 0,
|
|
defExp = 0,
|
|
dexExp = 0,
|
|
agiExp = 0,
|
|
chaExp = 0;
|
|
const hashManager = player.hashManager;
|
|
switch (player.className) {
|
|
case CONSTANTS.ClassStudyComputerScience:
|
|
hackExp =
|
|
((CONSTANTS.ClassStudyComputerScienceBaseExp * player.workExpMult) / gameCPS) * hashManager.getStudyMult();
|
|
break;
|
|
case CONSTANTS.ClassDataStructures:
|
|
cost = (CONSTANTS.ClassDataStructuresBaseCost * player.workCostMult) / gameCPS;
|
|
hackExp = ((CONSTANTS.ClassDataStructuresBaseExp * player.workExpMult) / gameCPS) * hashManager.getStudyMult();
|
|
break;
|
|
case CONSTANTS.ClassNetworks:
|
|
cost = (CONSTANTS.ClassNetworksBaseCost * player.workCostMult) / gameCPS;
|
|
hackExp = ((CONSTANTS.ClassNetworksBaseExp * player.workExpMult) / gameCPS) * hashManager.getStudyMult();
|
|
break;
|
|
case CONSTANTS.ClassAlgorithms:
|
|
cost = (CONSTANTS.ClassAlgorithmsBaseCost * player.workCostMult) / gameCPS;
|
|
hackExp = ((CONSTANTS.ClassAlgorithmsBaseExp * player.workExpMult) / gameCPS) * hashManager.getStudyMult();
|
|
break;
|
|
case CONSTANTS.ClassManagement:
|
|
cost = (CONSTANTS.ClassManagementBaseCost * player.workCostMult) / gameCPS;
|
|
chaExp = ((CONSTANTS.ClassManagementBaseExp * player.workExpMult) / gameCPS) * hashManager.getStudyMult();
|
|
break;
|
|
case CONSTANTS.ClassLeadership:
|
|
cost = (CONSTANTS.ClassLeadershipBaseCost * player.workCostMult) / gameCPS;
|
|
chaExp = ((CONSTANTS.ClassLeadershipBaseExp * player.workExpMult) / gameCPS) * hashManager.getStudyMult();
|
|
break;
|
|
case CONSTANTS.ClassGymStrength:
|
|
cost = (CONSTANTS.ClassGymBaseCost * player.workCostMult) / gameCPS;
|
|
strExp = (player.workExpMult / gameCPS) * hashManager.getTrainingMult();
|
|
break;
|
|
case CONSTANTS.ClassGymDefense:
|
|
cost = (CONSTANTS.ClassGymBaseCost * player.workCostMult) / gameCPS;
|
|
defExp = (player.workExpMult / gameCPS) * hashManager.getTrainingMult();
|
|
break;
|
|
case CONSTANTS.ClassGymDexterity:
|
|
cost = (CONSTANTS.ClassGymBaseCost * player.workCostMult) / gameCPS;
|
|
dexExp = (player.workExpMult / gameCPS) * hashManager.getTrainingMult();
|
|
break;
|
|
case CONSTANTS.ClassGymAgility:
|
|
cost = (CONSTANTS.ClassGymBaseCost * player.workCostMult) / gameCPS;
|
|
agiExp = (player.workExpMult / gameCPS) * hashManager.getTrainingMult();
|
|
break;
|
|
default:
|
|
throw new Error("ERR: Invalid/unrecognized class name");
|
|
}
|
|
return {
|
|
workMoneyLossRate: cost,
|
|
workHackExpGainRate: hackExp * player.hacking_exp_mult * BitNodeMultipliers.ClassGymExpGain,
|
|
workStrExpGainRate: strExp * player.strength_exp_mult * BitNodeMultipliers.ClassGymExpGain,
|
|
workDefExpGainRate: defExp * player.defense_exp_mult * BitNodeMultipliers.ClassGymExpGain,
|
|
workDexExpGainRate: dexExp * player.dexterity_exp_mult * BitNodeMultipliers.ClassGymExpGain,
|
|
workAgiExpGainRate: agiExp * player.agility_exp_mult * BitNodeMultipliers.ClassGymExpGain,
|
|
workChaExpGainRate: chaExp * player.charisma_exp_mult * BitNodeMultipliers.ClassGymExpGain,
|
|
};
|
|
}
|