From 954874cdebd6928bf9fccf351e9ec08d417f8520 Mon Sep 17 00:00:00 2001 From: tinion Date: Mon, 19 Aug 2024 23:34:30 +0200 Subject: [PATCH 1/5] Remove effective duplicate application of player multipliers when Training in Bladeburner. Fix stat gain discrepancy in terminal. --- src/Bladeburner/Bladeburner.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Bladeburner/Bladeburner.ts b/src/Bladeburner/Bladeburner.ts index 76b041e3a..43a1f3243 100644 --- a/src/Bladeburner/Bladeburner.ts +++ b/src/Bladeburner/Bladeburner.ts @@ -1074,11 +1074,11 @@ export class Bladeburner { switch (action.name) { case BladeburnerGeneralActionName.Training: { this.stamina -= 0.5 * BladeburnerConstants.BaseStaminaLoss; - const strExpGain = 30 * person.mults.strength_exp, - defExpGain = 30 * person.mults.defense_exp, - dexExpGain = 30 * person.mults.dexterity_exp, - agiExpGain = 30 * person.mults.agility_exp, - staminaGain = 0.04 * this.getSkillMult(BladeburnerMultName.Stamina); + const strExpGain = 30, + defExpGain = 30, + dexExpGain = 30, + agiExpGain = 30, + staminaGain = 0.04; retValue.strExp = strExpGain; retValue.defExp = defExpGain; retValue.dexExp = dexExpGain; @@ -1088,15 +1088,17 @@ export class Bladeburner { this.log( `${person.whoAmI()}: ` + "Training completed. Gained: " + - formatExp(strExpGain) + + formatExp(strExpGain * person.mults.strength_exp) + " str exp, " + - formatExp(defExpGain) + + formatExp(defExpGain * person.mults.defense_exp) + " def exp, " + - formatExp(dexExpGain) + + formatExp(dexExpGain * person.mults.dexterity_exp) + " dex exp, " + - formatExp(agiExpGain) + + formatExp(agiExpGain * person.mults.agility_exp) + " agi exp, " + - formatBigNumber(staminaGain) + + formatBigNumber( + staminaGain * this.getSkillMult(BladeburnerMultName.Stamina) * person.mults.bladeburner_max_stamina, + ) + " max stamina.", ); } From bbf4bab67ee4d5678f3a5d7254c852342548ac01 Mon Sep 17 00:00:00 2001 From: tinion Date: Wed, 21 Aug 2024 14:51:37 +0200 Subject: [PATCH 2/5] Bladeburner Training: Explicitly indicate EXP gain prediction in logging --- src/Bladeburner/Bladeburner.ts | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/Bladeburner/Bladeburner.ts b/src/Bladeburner/Bladeburner.ts index 43a1f3243..bf107ba52 100644 --- a/src/Bladeburner/Bladeburner.ts +++ b/src/Bladeburner/Bladeburner.ts @@ -38,7 +38,7 @@ import { formatTime } from "../utils/helpers/formatTime"; import { joinFaction } from "../Faction/FactionHelpers"; import { isSleeveInfiltrateWork } from "../PersonObjects/Sleeve/Work/SleeveInfiltrateWork"; import { isSleeveSupportWork } from "../PersonObjects/Sleeve/Work/SleeveSupportWork"; -import { WorkStats, newWorkStats } from "../Work/WorkStats"; +import { WorkStats, newWorkStats, multWorkStats } from "../Work/WorkStats"; import { getEnumHelper } from "../utils/EnumHelper"; import { PartialRecord, createEnumKeyedRecord, getRecordEntries } from "../Types/Record"; import { createContracts, loadContractsData } from "./data/Contracts"; @@ -1084,22 +1084,21 @@ export class Bladeburner { retValue.dexExp = dexExpGain; retValue.agiExp = agiExpGain; this.staminaBonus += staminaGain; + + // retValue contains the base EXP gains. + // Multiply by player EXP multipliers to predict the effective gain. + const effectiveGainPrediction = multWorkStats(retValue, person.mults); + // Predict effective stamina gain after applying Skill and Augmentation multipliers. + let effectiveStaminaGainPrediction = staminaGain * this.getSkillMult(BladeburnerMultName.Stamina); + effectiveStaminaGainPrediction *= person.mults.bladeburner_max_stamina; if (this.logging.general) { this.log( - `${person.whoAmI()}: ` + - "Training completed. Gained: " + - formatExp(strExpGain * person.mults.strength_exp) + - " str exp, " + - formatExp(defExpGain * person.mults.defense_exp) + - " def exp, " + - formatExp(dexExpGain * person.mults.dexterity_exp) + - " dex exp, " + - formatExp(agiExpGain * person.mults.agility_exp) + - " agi exp, " + - formatBigNumber( - staminaGain * this.getSkillMult(BladeburnerMultName.Stamina) * person.mults.bladeburner_max_stamina, - ) + - " max stamina.", + `${person.whoAmI()}: Training completed. Gained: ` + + `${formatExp(effectiveGainPrediction.strExp)} str exp, ` + + `${formatExp(effectiveGainPrediction.defExp)} def exp, ` + + `${formatExp(effectiveGainPrediction.dexExp)} dex exp, ` + + `${formatExp(effectiveGainPrediction.agiExp)} agi exp, ` + + `${formatBigNumber(effectiveStaminaGainPrediction)} max stamina.`, ); } break; From 72c3d177e209fcc2db370ffb0c17263ab77b69e5 Mon Sep 17 00:00:00 2001 From: tinion Date: Wed, 21 Aug 2024 15:32:01 +0200 Subject: [PATCH 3/5] Bladeburner Field Analysis: Remove effective duplicate application of player multipliers #1607 --- src/Bladeburner/Bladeburner.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Bladeburner/Bladeburner.ts b/src/Bladeburner/Bladeburner.ts index bf107ba52..1df87a85c 100644 --- a/src/Bladeburner/Bladeburner.ts +++ b/src/Bladeburner/Bladeburner.ts @@ -1086,7 +1086,7 @@ export class Bladeburner { this.staminaBonus += staminaGain; // retValue contains the base EXP gains. - // Multiply by player EXP multipliers to predict the effective gain. + // Multiply by person EXP multipliers to predict the effective gain. const effectiveGainPrediction = multWorkStats(retValue, person.mults); // Predict effective stamina gain after applying Skill and Augmentation multipliers. let effectiveStaminaGainPrediction = staminaGain * this.getSkillMult(BladeburnerMultName.Stamina); @@ -1113,22 +1113,26 @@ export class Bladeburner { if (isNaN(eff) || eff < 0) { throw new Error("Field Analysis Effectiveness calculated to be NaN or negative"); } - const hackingExpGain = 20 * person.mults.hacking_exp; - const charismaExpGain = 20 * person.mults.charisma_exp; - const rankGain = 0.1 * currentNodeMults.BladeburnerRank; + this.getCurrentCity().improvePopulationEstimateByPercentage( + eff * this.getSkillMult(BladeburnerMultName.SuccessChanceEstimate), + ); + const hackingExpGain = 20; + const charismaExpGain = 20; retValue.hackExp = hackingExpGain; retValue.chaExp = charismaExpGain; retValue.intExp = BladeburnerConstants.BaseIntGain; + const rankGain = 0.1 * currentNodeMults.BladeburnerRank; this.changeRank(person, rankGain); - this.getCurrentCity().improvePopulationEstimateByPercentage( - eff * this.getSkillMult(BladeburnerMultName.SuccessChanceEstimate), - ); + + // retValue contains the base EXP gains. + // Multiply by person EXP multipliers to predict the effective gain. + const effectiveGainPrediction = multWorkStats(retValue, person.mults); if (this.logging.general) { this.log( `${person.whoAmI()}: ` + `Field analysis completed. Gained ${formatBigNumber(rankGain)} rank, ` + - `${formatExp(hackingExpGain)} hacking exp, and ` + - `${formatExp(charismaExpGain)} charisma exp.`, + `${formatExp(effectiveGainPrediction.hackExp)} hacking exp, and ` + + `${formatExp(effectiveGainPrediction.chaExp)} charisma exp.`, ); } break; From 893dd8aebeb61d72b046b65e1779181a24e781df Mon Sep 17 00:00:00 2001 From: tinion Date: Wed, 21 Aug 2024 15:39:25 +0200 Subject: [PATCH 4/5] Bladeburner: Relocate EXP Gain Prediction Closer to Logging (#1607) --- src/Bladeburner/Bladeburner.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Bladeburner/Bladeburner.ts b/src/Bladeburner/Bladeburner.ts index 1df87a85c..8e64743be 100644 --- a/src/Bladeburner/Bladeburner.ts +++ b/src/Bladeburner/Bladeburner.ts @@ -1085,13 +1085,13 @@ export class Bladeburner { retValue.agiExp = agiExpGain; this.staminaBonus += staminaGain; - // retValue contains the base EXP gains. - // Multiply by person EXP multipliers to predict the effective gain. - const effectiveGainPrediction = multWorkStats(retValue, person.mults); - // Predict effective stamina gain after applying Skill and Augmentation multipliers. - let effectiveStaminaGainPrediction = staminaGain * this.getSkillMult(BladeburnerMultName.Stamina); - effectiveStaminaGainPrediction *= person.mults.bladeburner_max_stamina; if (this.logging.general) { + // retValue contains the base EXP gains. + // Multiply by person EXP multipliers to predict the effective gain. + const effectiveGainPrediction = multWorkStats(retValue, person.mults); + // Predict effective stamina gain after applying Skill and Augmentation multipliers. + let effectiveStaminaGainPrediction = staminaGain * this.getSkillMult(BladeburnerMultName.Stamina); + effectiveStaminaGainPrediction *= person.mults.bladeburner_max_stamina; this.log( `${person.whoAmI()}: Training completed. Gained: ` + `${formatExp(effectiveGainPrediction.strExp)} str exp, ` + @@ -1124,10 +1124,10 @@ export class Bladeburner { const rankGain = 0.1 * currentNodeMults.BladeburnerRank; this.changeRank(person, rankGain); - // retValue contains the base EXP gains. - // Multiply by person EXP multipliers to predict the effective gain. - const effectiveGainPrediction = multWorkStats(retValue, person.mults); if (this.logging.general) { + // retValue contains the base EXP gains. + // Multiply by person EXP multipliers to predict the effective gain. + const effectiveGainPrediction = multWorkStats(retValue, person.mults); this.log( `${person.whoAmI()}: ` + `Field analysis completed. Gained ${formatBigNumber(rankGain)} rank, ` + From bc1449a261898a057a2b91b5464f8e007cca8606 Mon Sep 17 00:00:00 2001 From: tinion Date: Wed, 21 Aug 2024 17:16:24 +0200 Subject: [PATCH 5/5] Bladeburner Max Stamina: Restore Balance by Changing CyberEdge Effect to Linear 5% from Previous Quadratic 2% (#1607) --- src/Bladeburner/data/Skills.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Bladeburner/data/Skills.ts b/src/Bladeburner/data/Skills.ts index 2dbcdf77f..01d3ec3bb 100644 --- a/src/Bladeburner/data/Skills.ts +++ b/src/Bladeburner/data/Skills.ts @@ -83,10 +83,10 @@ export const Skills: Record = { }), [BladeburnerSkillName.CybersEdge]: new Skill({ name: BladeburnerSkillName.CybersEdge, - desc: "Each level of this skill increases your max stamina by 2%", + desc: "Each level of this skill increases your max stamina by 5%", baseCost: 1, costInc: 3, - mults: { [BladeburnerMultName.Stamina]: 2 }, + mults: { [BladeburnerMultName.Stamina]: 5 }, }), [BladeburnerSkillName.HandsOfMidas]: new Skill({ name: BladeburnerSkillName.HandsOfMidas,