diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx index 0008baf36..e0139fb38 100644 --- a/src/Bladeburner/Bladeburner.tsx +++ b/src/Bladeburner/Bladeburner.tsx @@ -13,7 +13,6 @@ import { Skill } from "./Skill"; import { City } from "./City"; import { Action } from "./Action"; import { Player } from "@player"; -import { createTaskTracker, ITaskTracker } from "../PersonObjects/ITaskTracker"; import { Person } from "../PersonObjects/Person"; import { Router } from "../ui/GameRoot"; import { ConsoleHelpText } from "./data/Help"; @@ -35,6 +34,7 @@ import { FactionNames } from "../Faction/data/FactionNames"; import { KEY } from "../utils/helpers/keyCodes"; import { isSleeveInfiltrateWork } from "../PersonObjects/Sleeve/Work/SleeveInfiltrateWork"; import { isSleeveSupportWork } from "../PersonObjects/Sleeve/Work/SleeveSupportWork"; +import { WorkStats, newWorkStats } from "../Work/WorkStats"; export interface BlackOpsAttempt { error?: string; @@ -983,7 +983,7 @@ export class Bladeburner { * @param action(Action obj) - Derived action class * @param success(bool) - Whether action was successful */ - getActionStats(action: Action, person: Person, success: boolean): ITaskTracker { + getActionStats(action: Action, person: Person, success: boolean): WorkStats { const difficulty = action.getDifficulty(); /** @@ -1002,14 +1002,15 @@ export class Bladeburner { const skillMult = this.skillMultipliers.expGain; return { - hack: unweightedGain * action.weights.hack * skillMult, - str: unweightedGain * action.weights.str * skillMult, - def: unweightedGain * action.weights.def * skillMult, - dex: unweightedGain * action.weights.dex * skillMult, - agi: unweightedGain * action.weights.agi * skillMult, - cha: unweightedGain * action.weights.cha * skillMult, - int: unweightedIntGain * action.weights.int * skillMult, + hackExp: unweightedGain * action.weights.hack * skillMult, + strExp: unweightedGain * action.weights.str * skillMult, + defExp: unweightedGain * action.weights.def * skillMult, + dexExp: unweightedGain * action.weights.dex * skillMult, + agiExp: unweightedGain * action.weights.agi * skillMult, + chaExp: unweightedGain * action.weights.cha * skillMult, + intExp: unweightedIntGain * action.weights.int * skillMult, money: 0, + reputation: 0, }; } @@ -1245,8 +1246,8 @@ export class Bladeburner { } } - completeAction(person: Person, actionIdent: ActionIdentifier, isPlayer = true): ITaskTracker { - let retValue = createTaskTracker(); + completeAction(person: Person, actionIdent: ActionIdentifier, isPlayer = true): WorkStats { + let retValue = newWorkStats(); switch (actionIdent.type) { case ActionTypes["Contract"]: case ActionTypes["Operation"]: { @@ -1446,10 +1447,10 @@ export class Bladeburner { dexExpGain = 30 * person.mults.dexterity_exp, agiExpGain = 30 * person.mults.agility_exp, staminaGain = 0.04 * this.skillMultipliers.stamina; - retValue.str = strExpGain; - retValue.def = defExpGain; - retValue.dex = dexExpGain; - retValue.agi = agiExpGain; + retValue.strExp = strExpGain; + retValue.defExp = defExpGain; + retValue.dexExp = dexExpGain; + retValue.agiExp = agiExpGain; this.staminaBonus += staminaGain; if (this.logging.general) { this.log( @@ -1483,9 +1484,9 @@ export class Bladeburner { const hackingExpGain = 20 * person.mults.hacking_exp; const charismaExpGain = 20 * person.mults.charisma_exp; const rankGain = 0.1 * BitNodeMultipliers.BladeburnerRank; - retValue.hack = hackingExpGain; - retValue.cha = charismaExpGain; - retValue.int = BladeburnerConstants.BaseIntGain; + retValue.hackExp = hackingExpGain; + retValue.chaExp = charismaExpGain; + retValue.intExp = BladeburnerConstants.BaseIntGain; this.changeRank(person, rankGain); this.getCurrentCity().improvePopulationEstimateByPercentage(eff * this.skillMultipliers.successChanceEstimate); if (this.logging.general) { @@ -1503,7 +1504,7 @@ export class Bladeburner { const recruitTime = this.getRecruitmentTime(person) * 1000; if (Math.random() < successChance) { const expGain = 2 * BladeburnerConstants.BaseStatGain * recruitTime; - retValue.cha = expGain; + retValue.chaExp = expGain; ++this.teamSize; if (this.logging.general) { this.log( @@ -1515,7 +1516,7 @@ export class Bladeburner { } } else { const expGain = BladeburnerConstants.BaseStatGain * recruitTime; - retValue.cha = expGain; + retValue.chaExp = expGain; if (this.logging.general) { this.log( `${person.whoAmI()}: ` + diff --git a/src/PersonObjects/ITaskTracker.ts b/src/PersonObjects/ITaskTracker.ts deleted file mode 100644 index f6acc8799..000000000 --- a/src/PersonObjects/ITaskTracker.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Interface that defines a generic object used to track experience/money -// earnings for tasks -export interface ITaskTracker { - hack: number; - str: number; - def: number; - dex: number; - agi: number; - cha: number; - int: number; - money: number; -} - -export function createTaskTracker(): ITaskTracker { - return { - hack: 0, - str: 0, - def: 0, - dex: 0, - agi: 0, - cha: 0, - int: 0, - money: 0, - }; -} diff --git a/src/PersonObjects/PersonMethods.ts b/src/PersonObjects/PersonMethods.ts index 1e753ae8b..2866c7da4 100644 --- a/src/PersonObjects/PersonMethods.ts +++ b/src/PersonObjects/PersonMethods.ts @@ -2,7 +2,7 @@ import { Person } from "./Person"; import { calculateSkill } from "./formulas/skill"; import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers"; import { Player } from "@player"; -import { ITaskTracker } from "./ITaskTracker"; +import { WorkStats } from "../ScriptEditor/NetscriptDefinitions"; export function gainHackingExp(this: Person, exp: number): void { if (isNaN(exp)) { @@ -113,14 +113,14 @@ export function gainIntelligenceExp(this: Person, exp: number): void { this.skills.intelligence = Math.floor(this.calculateSkill(this.exp.intelligence, 1)); } } -export function gainStats(this: Person, retValue: ITaskTracker): void { - this.gainHackingExp(retValue.hack * this.mults.hacking_exp); - this.gainStrengthExp(retValue.str * this.mults.strength_exp); - this.gainDefenseExp(retValue.def * this.mults.defense_exp); - this.gainDexterityExp(retValue.dex * this.mults.dexterity_exp); - this.gainAgilityExp(retValue.agi * this.mults.agility_exp); - this.gainCharismaExp(retValue.cha * this.mults.charisma_exp); - this.gainIntelligenceExp(retValue.int); +export function gainStats(this: Person, retValue: WorkStats): void { + this.gainHackingExp(retValue.hackExp * this.mults.hacking_exp); + this.gainStrengthExp(retValue.strExp * this.mults.strength_exp); + this.gainDefenseExp(retValue.defExp * this.mults.defense_exp); + this.gainDexterityExp(retValue.dexExp * this.mults.dexterity_exp); + this.gainAgilityExp(retValue.agiExp * this.mults.agility_exp); + this.gainCharismaExp(retValue.chaExp * this.mults.charisma_exp); + this.gainIntelligenceExp(retValue.intExp); } //Given a string expression like "str" or "strength", returns the given stat diff --git a/src/PersonObjects/Sleeve/Work/SleeveBladeburnerWork.ts b/src/PersonObjects/Sleeve/Work/SleeveBladeburnerWork.ts index 27fb09697..349016bee 100644 --- a/src/PersonObjects/Sleeve/Work/SleeveBladeburnerWork.ts +++ b/src/PersonObjects/Sleeve/Work/SleeveBladeburnerWork.ts @@ -61,8 +61,10 @@ export class SleeveBladeburnerWork extends Work { if (!exp) throw new Error(`Somehow there was no exp for action ${this.actionType} ${this.actionName}`); applySleeveGains(sleeve, exp, 1); } - Player.gainMoney(retValue.money, "sleeves"); - Player.gainStats(retValue); + + if (this.actionType === "Contracts") { + applySleeveGains(sleeve, retValue, 1); + } this.cyclesWorked -= this.cyclesNeeded(sleeve); } return 0;