diff --git a/markdown/bitburner.gangmemberexpgain.agi_exp.md b/markdown/bitburner.gangmemberexpgain.agi_exp.md new file mode 100644 index 000000000..442a5e1ed --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.agi_exp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [agi\_exp](./bitburner.gangmemberexpgain.agi_exp.md) + +## GangMemberExpGain.agi\_exp property + +Agi EXP gain for a member after a given task + +**Signature:** + +```typescript +agi_exp: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.cha_exp.md b/markdown/bitburner.gangmemberexpgain.cha_exp.md new file mode 100644 index 000000000..11a72c4a6 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.cha_exp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [cha\_exp](./bitburner.gangmemberexpgain.cha_exp.md) + +## GangMemberExpGain.cha\_exp property + +Cha EXP gain for a member after a given task + +**Signature:** + +```typescript +cha_exp: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.def_exp.md b/markdown/bitburner.gangmemberexpgain.def_exp.md new file mode 100644 index 000000000..f38222ebd --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.def_exp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [def\_exp](./bitburner.gangmemberexpgain.def_exp.md) + +## GangMemberExpGain.def\_exp property + +Def EXP gain for a member after a given task + +**Signature:** + +```typescript +def_exp: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.dex_exp.md b/markdown/bitburner.gangmemberexpgain.dex_exp.md new file mode 100644 index 000000000..130241b69 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.dex_exp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [dex\_exp](./bitburner.gangmemberexpgain.dex_exp.md) + +## GangMemberExpGain.dex\_exp property + +Dex EXP gain for a member after a given task + +**Signature:** + +```typescript +dex_exp: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.hack_exp.md b/markdown/bitburner.gangmemberexpgain.hack_exp.md new file mode 100644 index 000000000..d730160d7 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.hack_exp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [hack\_exp](./bitburner.gangmemberexpgain.hack_exp.md) + +## GangMemberExpGain.hack\_exp property + +Hack EXP gain for a member after a given task + +**Signature:** + +```typescript +hack_exp: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.md b/markdown/bitburner.gangmemberexpgain.md new file mode 100644 index 000000000..66ab26f1c --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) + +## GangMemberExpGain interface + + +**Signature:** + +```typescript +interface GangMemberExpGain +``` + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [agi\_exp](./bitburner.gangmemberexpgain.agi_exp.md) | | number | Agi EXP gain for a member after a given task | +| [cha\_exp](./bitburner.gangmemberexpgain.cha_exp.md) | | number | Cha EXP gain for a member after a given task | +| [def\_exp](./bitburner.gangmemberexpgain.def_exp.md) | | number | Def EXP gain for a member after a given task | +| [dex\_exp](./bitburner.gangmemberexpgain.dex_exp.md) | | number | Dex EXP gain for a member after a given task | +| [hack\_exp](./bitburner.gangmemberexpgain.hack_exp.md) | | number | Hack EXP gain for a member after a given task | +| [str\_exp](./bitburner.gangmemberexpgain.str_exp.md) | | number | Str EXP gain for a member after a given task | + diff --git a/markdown/bitburner.gangmemberexpgain.str_exp.md b/markdown/bitburner.gangmemberexpgain.str_exp.md new file mode 100644 index 000000000..2134c40c7 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.str_exp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [str\_exp](./bitburner.gangmemberexpgain.str_exp.md) + +## GangMemberExpGain.str\_exp property + +Str EXP gain for a member after a given task + +**Signature:** + +```typescript +str_exp: number; +``` diff --git a/markdown/bitburner.gangmemberinfo.expgain.md b/markdown/bitburner.gangmemberinfo.expgain.md new file mode 100644 index 000000000..a897877a6 --- /dev/null +++ b/markdown/bitburner.gangmemberinfo.expgain.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberInfo](./bitburner.gangmemberinfo.md) > [expGain](./bitburner.gangmemberinfo.expgain.md) + +## GangMemberInfo.expGain property + +Per Cycle Exp object for each stat for this gang member. + +null in the event that the member does not have a given task. + +**Signature:** + +```typescript +expGain: GangMemberExpGain | null; +``` diff --git a/markdown/bitburner.gangmemberinfo.md b/markdown/bitburner.gangmemberinfo.md index da178e872..f4f692a18 100644 --- a/markdown/bitburner.gangmemberinfo.md +++ b/markdown/bitburner.gangmemberinfo.md @@ -37,6 +37,7 @@ interface GangMemberInfo | [dex\_mult](./bitburner.gangmemberinfo.dex_mult.md) | | number | Dexterity multiplier from equipment | | [dex](./bitburner.gangmemberinfo.dex.md) | | number | Dexterity skill level | | [earnedRespect](./bitburner.gangmemberinfo.earnedrespect.md) | | number | Amount of Respect earned by member since they last Ascended | +| [expGain](./bitburner.gangmemberinfo.expgain.md) | | [GangMemberExpGain](./bitburner.gangmemberexpgain.md) \| null |
Per Cycle Exp object for each stat for this gang member.
null in the event that the member does not have a given task.
| | [hack\_asc\_mult](./bitburner.gangmemberinfo.hack_asc_mult.md) | | number | Hack multiplier from ascensions | | [hack\_asc\_points](./bitburner.gangmemberinfo.hack_asc_points.md) | | number | Total Hack Ascension points accumulated | | [hack\_exp](./bitburner.gangmemberinfo.hack_exp.md) | | number | Current hack experience | diff --git a/markdown/bitburner.md b/markdown/bitburner.md index db82c7eb9..f5e91d9dc 100644 --- a/markdown/bitburner.md +++ b/markdown/bitburner.md @@ -79,6 +79,7 @@ | [GangFormulas](./bitburner.gangformulas.md) | Gang formulas | | [GangGenInfo](./bitburner.ganggeninfo.md) | Gang general info. | | [GangMemberAscension](./bitburner.gangmemberascension.md) | | +| [GangMemberExpGain](./bitburner.gangmemberexpgain.md) | | | [GangMemberInfo](./bitburner.gangmemberinfo.md) | | | [GangMemberInstall](./bitburner.gangmemberinstall.md) | | | [GangOtherInfoObject](./bitburner.gangotherinfoobject.md) | | diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 1879f40b8..7bd0a768d 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -14,6 +14,7 @@ import { calculateAscensionMult, calculateAscensionPointsGain, } from "./formulas/formulas"; +import { GangMemberExpGain } from "@nsdefs"; interface IMults { hack: number; @@ -147,43 +148,80 @@ export class GangMember { }; } - gainExperience(numCycles = 1): void { + // Calculate our gain for each stat based on each modifier of member + // if no task is assigned to that member we return null, other wise we + // return an object containing our per-cycle gains for each stat. + calculateExpGain(numCycles = 1): GangMemberExpGain | null { const task = this.getTask(); - if (task === GangMemberTasks.Unassigned) return; + if (task === GangMemberTasks.Unassigned) return null; + + const expValues = { + hack_exp: 0, + str_exp: 0, + def_exp: 0, + dex_exp: 0, + agi_exp: 0, + cha_exp: 0, + }; + const difficultyMult = Math.pow(task.difficulty, 0.9); const difficultyPerCycles = difficultyMult * numCycles; const weightDivisor = 1500; const expMult = this.expMult(); - this.hack_exp += + + expValues.hack_exp += (task.hackWeight / weightDivisor) * difficultyPerCycles * expMult.hack * this.calculateAscensionMult(this.hack_asc_points); - this.str_exp += + + expValues.str_exp += (task.strWeight / weightDivisor) * difficultyPerCycles * expMult.str * this.calculateAscensionMult(this.str_asc_points); - this.def_exp += + + expValues.def_exp += (task.defWeight / weightDivisor) * difficultyPerCycles * expMult.def * this.calculateAscensionMult(this.def_asc_points); - this.dex_exp += + + expValues.dex_exp += (task.dexWeight / weightDivisor) * difficultyPerCycles * expMult.dex * this.calculateAscensionMult(this.dex_asc_points); - this.agi_exp += + + expValues.agi_exp += (task.agiWeight / weightDivisor) * difficultyPerCycles * expMult.agi * this.calculateAscensionMult(this.agi_asc_points); - this.cha_exp += + + expValues.cha_exp += (task.chaWeight / weightDivisor) * difficultyPerCycles * expMult.cha * this.calculateAscensionMult(this.cha_asc_points); + + return expValues; + } + + gainExperience(numCycles: number): void { + // Do the calculations if our function returns null meaning no task is assigned + // then we return otherwise we add our exp gains to our total values + const gains = this.calculateExpGain(numCycles); + if (gains === null) { + return; + } + + this.hack_exp += gains.hack_exp; + this.str_exp += gains.str_exp; + this.def_exp += gains.def_exp; + this.dex_exp += gains.dex_exp; + this.agi_exp += gains.agi_exp; + this.cha_exp += gains.cha_exp; } earnRespect(numCycles = 1, gang: Gang): number { diff --git a/src/NetscriptFunctions/Gang.ts b/src/NetscriptFunctions/Gang.ts index 328e152db..646a5a763 100644 --- a/src/NetscriptFunctions/Gang.ts +++ b/src/NetscriptFunctions/Gang.ts @@ -156,6 +156,7 @@ export function NetscriptGang(): InternalAPI