Merge pull request #4229 from borisflagell/wxsQDSSQF

SLEEVE: Fix #4194 Bladeburner Contract in Sleeve were not giving proper reward.
This commit is contained in:
hydroflame 2022-10-12 23:54:15 -04:00 committed by GitHub
commit 14914eb190
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 56 deletions

@ -13,7 +13,6 @@ import { Skill } from "./Skill";
import { City } from "./City"; import { City } from "./City";
import { Action } from "./Action"; import { Action } from "./Action";
import { Player } from "@player"; import { Player } from "@player";
import { createTaskTracker, ITaskTracker } from "../PersonObjects/ITaskTracker";
import { Person } from "../PersonObjects/Person"; import { Person } from "../PersonObjects/Person";
import { Router } from "../ui/GameRoot"; import { Router } from "../ui/GameRoot";
import { ConsoleHelpText } from "./data/Help"; import { ConsoleHelpText } from "./data/Help";
@ -35,6 +34,7 @@ import { FactionNames } from "../Faction/data/FactionNames";
import { KEY } from "../utils/helpers/keyCodes"; import { KEY } from "../utils/helpers/keyCodes";
import { isSleeveInfiltrateWork } from "../PersonObjects/Sleeve/Work/SleeveInfiltrateWork"; import { isSleeveInfiltrateWork } from "../PersonObjects/Sleeve/Work/SleeveInfiltrateWork";
import { isSleeveSupportWork } from "../PersonObjects/Sleeve/Work/SleeveSupportWork"; import { isSleeveSupportWork } from "../PersonObjects/Sleeve/Work/SleeveSupportWork";
import { WorkStats, newWorkStats } from "../Work/WorkStats";
export interface BlackOpsAttempt { export interface BlackOpsAttempt {
error?: string; error?: string;
@ -983,7 +983,7 @@ export class Bladeburner {
* @param action(Action obj) - Derived action class * @param action(Action obj) - Derived action class
* @param success(bool) - Whether action was successful * @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(); const difficulty = action.getDifficulty();
/** /**
@ -1002,14 +1002,15 @@ export class Bladeburner {
const skillMult = this.skillMultipliers.expGain; const skillMult = this.skillMultipliers.expGain;
return { return {
hack: unweightedGain * action.weights.hack * skillMult, hackExp: unweightedGain * action.weights.hack * skillMult,
str: unweightedGain * action.weights.str * skillMult, strExp: unweightedGain * action.weights.str * skillMult,
def: unweightedGain * action.weights.def * skillMult, defExp: unweightedGain * action.weights.def * skillMult,
dex: unweightedGain * action.weights.dex * skillMult, dexExp: unweightedGain * action.weights.dex * skillMult,
agi: unweightedGain * action.weights.agi * skillMult, agiExp: unweightedGain * action.weights.agi * skillMult,
cha: unweightedGain * action.weights.cha * skillMult, chaExp: unweightedGain * action.weights.cha * skillMult,
int: unweightedIntGain * action.weights.int * skillMult, intExp: unweightedIntGain * action.weights.int * skillMult,
money: 0, money: 0,
reputation: 0,
}; };
} }
@ -1245,8 +1246,8 @@ export class Bladeburner {
} }
} }
completeAction(person: Person, actionIdent: ActionIdentifier, isPlayer = true): ITaskTracker { completeAction(person: Person, actionIdent: ActionIdentifier, isPlayer = true): WorkStats {
let retValue = createTaskTracker(); let retValue = newWorkStats();
switch (actionIdent.type) { switch (actionIdent.type) {
case ActionTypes["Contract"]: case ActionTypes["Contract"]:
case ActionTypes["Operation"]: { case ActionTypes["Operation"]: {
@ -1446,10 +1447,10 @@ export class Bladeburner {
dexExpGain = 30 * person.mults.dexterity_exp, dexExpGain = 30 * person.mults.dexterity_exp,
agiExpGain = 30 * person.mults.agility_exp, agiExpGain = 30 * person.mults.agility_exp,
staminaGain = 0.04 * this.skillMultipliers.stamina; staminaGain = 0.04 * this.skillMultipliers.stamina;
retValue.str = strExpGain; retValue.strExp = strExpGain;
retValue.def = defExpGain; retValue.defExp = defExpGain;
retValue.dex = dexExpGain; retValue.dexExp = dexExpGain;
retValue.agi = agiExpGain; retValue.agiExp = agiExpGain;
this.staminaBonus += staminaGain; this.staminaBonus += staminaGain;
if (this.logging.general) { if (this.logging.general) {
this.log( this.log(
@ -1483,9 +1484,9 @@ export class Bladeburner {
const hackingExpGain = 20 * person.mults.hacking_exp; const hackingExpGain = 20 * person.mults.hacking_exp;
const charismaExpGain = 20 * person.mults.charisma_exp; const charismaExpGain = 20 * person.mults.charisma_exp;
const rankGain = 0.1 * BitNodeMultipliers.BladeburnerRank; const rankGain = 0.1 * BitNodeMultipliers.BladeburnerRank;
retValue.hack = hackingExpGain; retValue.hackExp = hackingExpGain;
retValue.cha = charismaExpGain; retValue.chaExp = charismaExpGain;
retValue.int = BladeburnerConstants.BaseIntGain; retValue.intExp = BladeburnerConstants.BaseIntGain;
this.changeRank(person, rankGain); this.changeRank(person, rankGain);
this.getCurrentCity().improvePopulationEstimateByPercentage(eff * this.skillMultipliers.successChanceEstimate); this.getCurrentCity().improvePopulationEstimateByPercentage(eff * this.skillMultipliers.successChanceEstimate);
if (this.logging.general) { if (this.logging.general) {
@ -1503,7 +1504,7 @@ export class Bladeburner {
const recruitTime = this.getRecruitmentTime(person) * 1000; const recruitTime = this.getRecruitmentTime(person) * 1000;
if (Math.random() < successChance) { if (Math.random() < successChance) {
const expGain = 2 * BladeburnerConstants.BaseStatGain * recruitTime; const expGain = 2 * BladeburnerConstants.BaseStatGain * recruitTime;
retValue.cha = expGain; retValue.chaExp = expGain;
++this.teamSize; ++this.teamSize;
if (this.logging.general) { if (this.logging.general) {
this.log( this.log(
@ -1515,7 +1516,7 @@ export class Bladeburner {
} }
} else { } else {
const expGain = BladeburnerConstants.BaseStatGain * recruitTime; const expGain = BladeburnerConstants.BaseStatGain * recruitTime;
retValue.cha = expGain; retValue.chaExp = expGain;
if (this.logging.general) { if (this.logging.general) {
this.log( this.log(
`${person.whoAmI()}: ` + `${person.whoAmI()}: ` +

@ -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,
};
}

@ -2,7 +2,7 @@ import { Person } from "./Person";
import { calculateSkill } from "./formulas/skill"; import { calculateSkill } from "./formulas/skill";
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers"; import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
import { Player } from "@player"; import { Player } from "@player";
import { ITaskTracker } from "./ITaskTracker"; import { WorkStats } from "../ScriptEditor/NetscriptDefinitions";
export function gainHackingExp(this: Person, exp: number): void { export function gainHackingExp(this: Person, exp: number): void {
if (isNaN(exp)) { 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)); this.skills.intelligence = Math.floor(this.calculateSkill(this.exp.intelligence, 1));
} }
} }
export function gainStats(this: Person, retValue: ITaskTracker): void { export function gainStats(this: Person, retValue: WorkStats): void {
this.gainHackingExp(retValue.hack * this.mults.hacking_exp); this.gainHackingExp(retValue.hackExp * this.mults.hacking_exp);
this.gainStrengthExp(retValue.str * this.mults.strength_exp); this.gainStrengthExp(retValue.strExp * this.mults.strength_exp);
this.gainDefenseExp(retValue.def * this.mults.defense_exp); this.gainDefenseExp(retValue.defExp * this.mults.defense_exp);
this.gainDexterityExp(retValue.dex * this.mults.dexterity_exp); this.gainDexterityExp(retValue.dexExp * this.mults.dexterity_exp);
this.gainAgilityExp(retValue.agi * this.mults.agility_exp); this.gainAgilityExp(retValue.agiExp * this.mults.agility_exp);
this.gainCharismaExp(retValue.cha * this.mults.charisma_exp); this.gainCharismaExp(retValue.chaExp * this.mults.charisma_exp);
this.gainIntelligenceExp(retValue.int); this.gainIntelligenceExp(retValue.intExp);
} }
//Given a string expression like "str" or "strength", returns the given stat //Given a string expression like "str" or "strength", returns the given stat

@ -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}`); if (!exp) throw new Error(`Somehow there was no exp for action ${this.actionType} ${this.actionName}`);
applySleeveGains(sleeve, exp, 1); 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); this.cyclesWorked -= this.cyclesNeeded(sleeve);
} }
return 0; return 0;