From ca5c33de19cb8566b2a8a33fda7656bff8bc5cd2 Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Sat, 8 Feb 2025 19:10:06 -0800 Subject: [PATCH 01/15] added new api call for experience gain returns list of experience for each stat. --- src/Gang/GangMember.ts | 7 +++++ src/Gang/formulas/formulas.ts | 53 +++++++++++++++++++++++++++++++++++ src/NetscriptFunctions.ts | 1 + 3 files changed, 61 insertions(+) diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 1879f40b85..a455e7a0b6 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -150,35 +150,42 @@ export class GangMember { gainExperience(numCycles = 1): void { const task = this.getTask(); if (task === GangMemberTasks.Unassigned) return; + const difficultyMult = Math.pow(task.difficulty, 0.9); const difficultyPerCycles = difficultyMult * numCycles; const weightDivisor = 1500; const expMult = this.expMult(); + this.hack_exp += (task.hackWeight / weightDivisor) * difficultyPerCycles * expMult.hack * this.calculateAscensionMult(this.hack_asc_points); + this.str_exp += (task.strWeight / weightDivisor) * difficultyPerCycles * expMult.str * this.calculateAscensionMult(this.str_asc_points); + this.def_exp += (task.defWeight / weightDivisor) * difficultyPerCycles * expMult.def * this.calculateAscensionMult(this.def_asc_points); + this.dex_exp += (task.dexWeight / weightDivisor) * difficultyPerCycles * expMult.dex * this.calculateAscensionMult(this.dex_asc_points); + this.agi_exp += (task.agiWeight / weightDivisor) * difficultyPerCycles * expMult.agi * this.calculateAscensionMult(this.agi_asc_points); + this.cha_exp += (task.chaWeight / weightDivisor) * difficultyPerCycles * diff --git a/src/Gang/formulas/formulas.ts b/src/Gang/formulas/formulas.ts index 21e8cd2b60..ec26fec380 100644 --- a/src/Gang/formulas/formulas.ts +++ b/src/Gang/formulas/formulas.ts @@ -1,4 +1,5 @@ import { currentNodeMults } from "../../BitNode/BitNodeMultipliers"; +import { Gang } from "../Gang"; import { GangMember } from "../GangMember"; import { GangMemberTask } from "../GangMemberTask"; @@ -79,3 +80,55 @@ export function calculateAscensionPointsGain(exp: number): number { export function calculateAscensionMult(points: number): number { return Math.max(Math.pow(points / 2000, 0.5), 1); } + +export function calculateGainExperience(numCycles: number , member: GangMember, task: GangMemberTask): number[]{ + let hackExp = 0; + let strExp = 0; + let defExp = 0; + let dexExp = 0; + let agiExp = 0; + let chaExp = 0; + + const difficultyMult = Math.pow(task.difficulty, 0.9); + const difficultyPerCycles = difficultyMult * numCycles; + const weightDivisor = 1500; + const expMult = member.expMult(); + + hackExp += + (task.hackWeight / weightDivisor) * + difficultyPerCycles * + expMult.hack * + member.calculateAscensionMult(member.hack_asc_points); + + strExp += + (task.strWeight / weightDivisor) * + difficultyPerCycles * + expMult.str * + member.calculateAscensionMult(member.str_asc_points); + + defExp += + (task.defWeight / weightDivisor) * + difficultyPerCycles * + expMult.def * + member.calculateAscensionMult(member.def_asc_points); + + dexExp += + (task.dexWeight / weightDivisor) * + difficultyPerCycles * + expMult.dex * + member.calculateAscensionMult(member.dex_asc_points); + + agiExp += + (task.agiWeight / weightDivisor) * + difficultyPerCycles * + expMult.agi * + member.calculateAscensionMult(member.agi_asc_points); + + chaExp += + (task.chaWeight / weightDivisor) * + difficultyPerCycles * + expMult.cha * + member.calculateAscensionMult(member.cha_asc_points); + + return [hackExp, strExp, defExp, agiExp, chaExp]; + } \ No newline at end of file diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index 2f746cbe3d..a9dbb21674 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -112,6 +112,7 @@ import { assertFunctionWithNSContext } from "./Netscript/TypeAssertion"; import { Router } from "./ui/GameRoot"; import { Page } from "./ui/Router"; import { canAccessBitNodeFeature, validBitNodes } from "./BitNode/BitNodeUtils"; +import { calculateGainExperience } from "./Gang/formulas/formulas"; export const enums: NSEnums = { CityName, From f51b075af25ee1eb3e994102f879a574b2491abd Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Sat, 8 Feb 2025 21:23:15 -0800 Subject: [PATCH 02/15] finished api functionality --- src/Gang/formulas/formulas.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Gang/formulas/formulas.ts b/src/Gang/formulas/formulas.ts index ec26fec380..e5a4bebf08 100644 --- a/src/Gang/formulas/formulas.ts +++ b/src/Gang/formulas/formulas.ts @@ -2,6 +2,7 @@ import { currentNodeMults } from "../../BitNode/BitNodeMultipliers"; import { Gang } from "../Gang"; import { GangMember } from "../GangMember"; import { GangMemberTask } from "../GangMemberTask"; +import { GangMemberTasks } from "../GangMemberTasks"; export interface FormulaGang { respect: number; @@ -80,8 +81,16 @@ export function calculateAscensionPointsGain(exp: number): number { export function calculateAscensionMult(points: number): number { return Math.max(Math.pow(points / 2000, 0.5), 1); } - -export function calculateGainExperience(numCycles: number , member: GangMember, task: GangMemberTask): number[]{ + +//FUNCTION RETURNS TOTAL EXP GAINED FOR EACH STAT BASED ON THE PARAMS PROVIDED CYCLES, MEMBER, AND TASK +//RETURNS A LIST OF THOSE TOTAL VALUES IN THIS ORDER [hackExp, strExp, defExp, dexExp, agiExp, chaExp] +//IF THERE ARE NO TASKS ASSIGNED EMPTY ARRAY IS RETURNED +export function calculateGainExperience(numCycles: number , member: GangMember): number[] | string { + const task = member.getTask(); + + if (task === GangMemberTasks.Unassigned) + return "There is no task currently assigned."; + let hackExp = 0; let strExp = 0; let defExp = 0; From 82a8fdea1057a8cfef0b04f91c80b1cf55ddc801 Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Sat, 8 Feb 2025 23:01:44 -0800 Subject: [PATCH 03/15] edited documentation and ran tests/linting --- markdown/bitburner.gang.getgainexperience.md | 31 ++++++++++++++++++++ markdown/bitburner.gang.md | 1 + src/Gang/formulas/formulas.ts | 12 ++++---- src/NetscriptFunctions.ts | 1 - src/ScriptEditor/NetscriptDefinitions.d.ts | 12 ++++++++ 5 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 markdown/bitburner.gang.getgainexperience.md diff --git a/markdown/bitburner.gang.getgainexperience.md b/markdown/bitburner.gang.getgainexperience.md new file mode 100644 index 0000000000..2afa801e7e --- /dev/null +++ b/markdown/bitburner.gang.getgainexperience.md @@ -0,0 +1,31 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [Gang](./bitburner.gang.md) > [getGainExperience](./bitburner.gang.getgainexperience.md) + +## Gang.getGainExperience() method + +returns list of all exp gains per stat based on passed parameters + +**Signature:** + +```typescript +getGainExperience(numCycles: number, member: GangMember): number[] | string +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| numCycles | number | | +| member | GangMember | | + +**Returns:** + +number\[\] \| string + +List of exp gains for each stat based on amount of cycles given List is returned in this exact order \[hackExp, strExp, defExp, dexExp, agiExp, chaExp\] if a gang member is passed with no current tasks assigned will return a string that says that their is no task currently assigned + +## Remarks + +RAM cost: 0 + diff --git a/markdown/bitburner.gang.md b/markdown/bitburner.gang.md index bcaed26593..c4eac8aed0 100644 --- a/markdown/bitburner.gang.md +++ b/markdown/bitburner.gang.md @@ -30,6 +30,7 @@ If you are not in BitNode-2, then you must have Source-File 2 in order to use th | [getEquipmentNames()](./bitburner.gang.getequipmentnames.md) | List equipment names. | | [getEquipmentStats(equipName)](./bitburner.gang.getequipmentstats.md) | Get stats of an equipment. | | [getEquipmentType(equipName)](./bitburner.gang.getequipmenttype.md) | Get type of an equipment. | +| [getGainExperience(numCycles, member)](./bitburner.gang.getgainexperience.md) | returns list of all exp gains per stat based on passed parameters | | [getGangInformation()](./bitburner.gang.getganginformation.md) | Get information about your gang. | | [getInstallResult(memberName)](./bitburner.gang.getinstallresult.md) | Get the effect of an install on ascension multipliers without installing. | | [getMemberInformation(name)](./bitburner.gang.getmemberinformation.md) | Get information about a specific gang member. | diff --git a/src/Gang/formulas/formulas.ts b/src/Gang/formulas/formulas.ts index e5a4bebf08..34ff99819f 100644 --- a/src/Gang/formulas/formulas.ts +++ b/src/Gang/formulas/formulas.ts @@ -1,5 +1,4 @@ import { currentNodeMults } from "../../BitNode/BitNodeMultipliers"; -import { Gang } from "../Gang"; import { GangMember } from "../GangMember"; import { GangMemberTask } from "../GangMemberTask"; import { GangMemberTasks } from "../GangMemberTasks"; @@ -85,12 +84,11 @@ export function calculateAscensionMult(points: number): number { //FUNCTION RETURNS TOTAL EXP GAINED FOR EACH STAT BASED ON THE PARAMS PROVIDED CYCLES, MEMBER, AND TASK //RETURNS A LIST OF THOSE TOTAL VALUES IN THIS ORDER [hackExp, strExp, defExp, dexExp, agiExp, chaExp] //IF THERE ARE NO TASKS ASSIGNED EMPTY ARRAY IS RETURNED -export function calculateGainExperience(numCycles: number , member: GangMember): number[] | string { +export function getGainExperience(numCycles: number, member: GangMember): number[] | string { const task = member.getTask(); - if (task === GangMemberTasks.Unassigned) - return "There is no task currently assigned."; - + if (task === GangMemberTasks.Unassigned) return "There is no task currently assigned."; + let hackExp = 0; let strExp = 0; let defExp = 0; @@ -138,6 +136,6 @@ export function calculateGainExperience(numCycles: number , member: GangMember): difficultyPerCycles * expMult.cha * member.calculateAscensionMult(member.cha_asc_points); - + return [hackExp, strExp, defExp, agiExp, chaExp]; - } \ No newline at end of file +} diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index a9dbb21674..2f746cbe3d 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -112,7 +112,6 @@ import { assertFunctionWithNSContext } from "./Netscript/TypeAssertion"; import { Router } from "./ui/GameRoot"; import { Page } from "./ui/Router"; import { canAccessBitNodeFeature, validBitNodes } from "./BitNode/BitNodeUtils"; -import { calculateGainExperience } from "./Gang/formulas/formulas"; export const enums: NSEnums = { CityName, diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6fde89b9cd..49fbc417f5 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -1,5 +1,7 @@ /** All netscript definitions */ +import { GangMember } from "src/Gang/GangMember"; + /** @public */ interface HP { current: number; @@ -4313,6 +4315,16 @@ export interface Gang { * ``` */ nextUpdate(): Promise; + /** + * returns list of all exp gains per stat based on passed parameters + * @remarks + * RAM cost: 0 + * + *@returns List of exp gains for each stat based on amount of cycles given + *List is returned in this exact order [hackExp, strExp, defExp, dexExp, agiExp, chaExp] + *if a gang member is passed with no current tasks assigned will return a string that says that their is no task currently assigned + */ + getGainExperience(numCycles: number, member: GangMember): number[] | string } /** @public */ From db08b60811b27ecf4db6910d5528a975894e87f2 Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Sun, 9 Feb 2025 20:18:12 -0800 Subject: [PATCH 04/15] adjust api function works as intended --- markdown/bitburner.gang.getgainexperience.md | 31 ----------- markdown/bitburner.gang.md | 1 - markdown/bitburner.gangmemberinfo.expgain.md | 13 +++++ markdown/bitburner.gangmemberinfo.md | 1 + src/Gang/GangMember.ts | 17 +++++- src/Gang/formulas/formulas.ts | 56 +++++++++----------- src/NetscriptFunctions/Gang.ts | 3 +- src/ScriptEditor/NetscriptDefinitions.d.ts | 15 +----- 8 files changed, 59 insertions(+), 78 deletions(-) delete mode 100644 markdown/bitburner.gang.getgainexperience.md create mode 100644 markdown/bitburner.gangmemberinfo.expgain.md diff --git a/markdown/bitburner.gang.getgainexperience.md b/markdown/bitburner.gang.getgainexperience.md deleted file mode 100644 index 2afa801e7e..0000000000 --- a/markdown/bitburner.gang.getgainexperience.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [bitburner](./bitburner.md) > [Gang](./bitburner.gang.md) > [getGainExperience](./bitburner.gang.getgainexperience.md) - -## Gang.getGainExperience() method - -returns list of all exp gains per stat based on passed parameters - -**Signature:** - -```typescript -getGainExperience(numCycles: number, member: GangMember): number[] | string -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| numCycles | number | | -| member | GangMember | | - -**Returns:** - -number\[\] \| string - -List of exp gains for each stat based on amount of cycles given List is returned in this exact order \[hackExp, strExp, defExp, dexExp, agiExp, chaExp\] if a gang member is passed with no current tasks assigned will return a string that says that their is no task currently assigned - -## Remarks - -RAM cost: 0 - diff --git a/markdown/bitburner.gang.md b/markdown/bitburner.gang.md index c4eac8aed0..bcaed26593 100644 --- a/markdown/bitburner.gang.md +++ b/markdown/bitburner.gang.md @@ -30,7 +30,6 @@ If you are not in BitNode-2, then you must have Source-File 2 in order to use th | [getEquipmentNames()](./bitburner.gang.getequipmentnames.md) | List equipment names. | | [getEquipmentStats(equipName)](./bitburner.gang.getequipmentstats.md) | Get stats of an equipment. | | [getEquipmentType(equipName)](./bitburner.gang.getequipmenttype.md) | Get type of an equipment. | -| [getGainExperience(numCycles, member)](./bitburner.gang.getgainexperience.md) | returns list of all exp gains per stat based on passed parameters | | [getGangInformation()](./bitburner.gang.getganginformation.md) | Get information about your gang. | | [getInstallResult(memberName)](./bitburner.gang.getinstallresult.md) | Get the effect of an install on ascension multipliers without installing. | | [getMemberInformation(name)](./bitburner.gang.getmemberinformation.md) | Get information about a specific gang member. | diff --git a/markdown/bitburner.gangmemberinfo.expgain.md b/markdown/bitburner.gangmemberinfo.expgain.md new file mode 100644 index 0000000000..272f927627 --- /dev/null +++ b/markdown/bitburner.gangmemberinfo.expgain.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberInfo](./bitburner.gangmemberinfo.md) > [expGain](./bitburner.gangmemberinfo.expgain.md) + +## GangMemberInfo.expGain property + +PerCycle Exp object for each stat for this gang member + +**Signature:** + +```typescript +expGain: object | undefined; +``` diff --git a/markdown/bitburner.gangmemberinfo.md b/markdown/bitburner.gangmemberinfo.md index da178e872c..81643eea93 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) | | object \| undefined | PerCycle Exp object for each stat for this gang member | | [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/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index a455e7a0b6..427114e964 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -13,6 +13,7 @@ import { calculateWantedLevelGain, calculateAscensionMult, calculateAscensionPointsGain, + calculateMemberExperience, } from "./formulas/formulas"; interface IMults { @@ -146,8 +147,7 @@ export class GangMember { cha: (this.cha_mult - 1) / 4 + 1, }; } - - gainExperience(numCycles = 1): void { + gainExperience(numCycles = 1): number | undefined { const task = this.getTask(); if (task === GangMemberTasks.Unassigned) return; @@ -193,6 +193,19 @@ export class GangMember { this.calculateAscensionMult(this.cha_asc_points); } + //getter for calculating member experience that would occur upon current task completion returns object + //If the member current has no tasks assigned returns udefined. + getMemberExperience(member: GangMember): object | undefined { + const numCycles = 1; + const task = member.getTask(); + if (member === undefined) { + return; + } else if (task === GangMemberTasks.Unassigned) { + return; + } + return calculateMemberExperience(numCycles, member, task); + } + earnRespect(numCycles = 1, gang: Gang): number { const earnedRespect = this.calculateRespectGain(gang) * numCycles; this.earnedRespect += earnedRespect; diff --git a/src/Gang/formulas/formulas.ts b/src/Gang/formulas/formulas.ts index 34ff99819f..3cc684538c 100644 --- a/src/Gang/formulas/formulas.ts +++ b/src/Gang/formulas/formulas.ts @@ -1,7 +1,6 @@ import { currentNodeMults } from "../../BitNode/BitNodeMultipliers"; import { GangMember } from "../GangMember"; import { GangMemberTask } from "../GangMemberTask"; -import { GangMemberTasks } from "../GangMemberTasks"; export interface FormulaGang { respect: number; @@ -73,69 +72,66 @@ export function calculateMoneyGain(gang: FormulaGang, member: GangMember, task: return Math.pow(5 * task.baseMoney * statWeight * territoryMult * respectMult, territoryPenalty); } -export function calculateAscensionPointsGain(exp: number): number { - return Math.max(exp - 1000, 0); -} - -export function calculateAscensionMult(points: number): number { - return Math.max(Math.pow(points / 2000, 0.5), 1); -} - -//FUNCTION RETURNS TOTAL EXP GAINED FOR EACH STAT BASED ON THE PARAMS PROVIDED CYCLES, MEMBER, AND TASK -//RETURNS A LIST OF THOSE TOTAL VALUES IN THIS ORDER [hackExp, strExp, defExp, dexExp, agiExp, chaExp] -//IF THERE ARE NO TASKS ASSIGNED EMPTY ARRAY IS RETURNED -export function getGainExperience(numCycles: number, member: GangMember): number[] | string { - const task = member.getTask(); - - if (task === GangMemberTasks.Unassigned) return "There is no task currently assigned."; - - let hackExp = 0; - let strExp = 0; - let defExp = 0; - let dexExp = 0; - let agiExp = 0; - let chaExp = 0; +//Calculates memberEXP based on member passed and task passed that the member currently has assigned. +//@returns object containing all exp values that would be gain on task compeletion. +export function calculateMemberExperience(numCycles: number, member: GangMember, task: GangMemberTask): object { + const expValues = { + hackEXP: 0, + strEXP: 0, + defEXP: 0, + dexEXP: 0, + agiEXP: 0, + chaEXP: 0, + }; const difficultyMult = Math.pow(task.difficulty, 0.9); const difficultyPerCycles = difficultyMult * numCycles; const weightDivisor = 1500; const expMult = member.expMult(); - hackExp += + expValues.hackEXP += (task.hackWeight / weightDivisor) * difficultyPerCycles * expMult.hack * member.calculateAscensionMult(member.hack_asc_points); - strExp += + expValues.strEXP += (task.strWeight / weightDivisor) * difficultyPerCycles * expMult.str * member.calculateAscensionMult(member.str_asc_points); - defExp += + expValues.defEXP += (task.defWeight / weightDivisor) * difficultyPerCycles * expMult.def * member.calculateAscensionMult(member.def_asc_points); - dexExp += + expValues.dexEXP += (task.dexWeight / weightDivisor) * difficultyPerCycles * expMult.dex * member.calculateAscensionMult(member.dex_asc_points); - agiExp += + expValues.agiEXP += (task.agiWeight / weightDivisor) * difficultyPerCycles * expMult.agi * member.calculateAscensionMult(member.agi_asc_points); - chaExp += + expValues.chaEXP += (task.chaWeight / weightDivisor) * difficultyPerCycles * expMult.cha * member.calculateAscensionMult(member.cha_asc_points); - return [hackExp, strExp, defExp, agiExp, chaExp]; + return expValues; +} + +export function calculateAscensionPointsGain(exp: number): number { + return Math.max(exp - 1000, 0); +} + +export function calculateAscensionMult(points: number): number { + return Math.max(Math.pow(points / 2000, 0.5), 1); } diff --git a/src/NetscriptFunctions/Gang.ts b/src/NetscriptFunctions/Gang.ts index c0995865b3..d3822f161b 100644 --- a/src/NetscriptFunctions/Gang.ts +++ b/src/NetscriptFunctions/Gang.ts @@ -1,6 +1,6 @@ import type { Gang as IGang, EquipmentStats, GangOtherInfoObject } from "@nsdefs"; import type { Gang } from "../Gang/Gang"; -import type { GangMember } from "../Gang/GangMember"; +import { GangMember } from "../Gang/GangMember"; import type { GangMemberTask } from "../Gang/GangMemberTask"; import type { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper"; @@ -156,6 +156,7 @@ export function NetscriptGang(): InternalAPI { respectGain: member.calculateRespectGain(gang), wantedLevelGain: member.calculateWantedLevelGain(gang), moneyGain: member.calculateMoneyGain(gang), + expGain: member.getMemberExperience(member), }; }, canRecruitMember: (ctx) => () => { diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 49fbc417f5..d2f62ad2bf 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -1,7 +1,4 @@ /** All netscript definitions */ - -import { GangMember } from "src/Gang/GangMember"; - /** @public */ interface HP { current: number; @@ -1006,6 +1003,8 @@ interface GangMemberInfo { wantedLevelGain: number; /** Per Cycle Income for this gang member */ moneyGain: number; + /**PerCycle Exp object for each stat for this gang member */ + expGain: object | undefined; } /** @public */ @@ -4315,16 +4314,6 @@ export interface Gang { * ``` */ nextUpdate(): Promise; - /** - * returns list of all exp gains per stat based on passed parameters - * @remarks - * RAM cost: 0 - * - *@returns List of exp gains for each stat based on amount of cycles given - *List is returned in this exact order [hackExp, strExp, defExp, dexExp, agiExp, chaExp] - *if a gang member is passed with no current tasks assigned will return a string that says that their is no task currently assigned - */ - getGainExperience(numCycles: number, member: GangMember): number[] | string } /** @public */ From db8e5dfca744e4246e5352d92f28ffe75137264b Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Mon, 10 Feb 2025 20:02:04 -0800 Subject: [PATCH 05/15] Got rid of unnecessary functions that merely duplicated other functions, Instead refactoredexperience gain function to pass back an object under specified parameters. --- src/Gang/Gang.ts | 2 +- src/Gang/GangMember.ts | 136 +++++++++++++-------- src/Gang/formulas/formulas.ts | 56 --------- src/NetscriptFunctions/Gang.ts | 2 +- src/ScriptEditor/NetscriptDefinitions.d.ts | 19 ++- 5 files changed, 105 insertions(+), 110 deletions(-) diff --git a/src/Gang/Gang.ts b/src/Gang/Gang.ts index c30e4b89b7..3757e6811e 100644 --- a/src/Gang/Gang.ts +++ b/src/Gang/Gang.ts @@ -273,7 +273,7 @@ export class Gang { * @param numCycles The number of cycles to process. */ processExperienceGains(numCycles: number): void { for (const member of this.members) { - member.gainExperience(numCycles); + member.gainExperience(numCycles, null); member.updateSkillLevels(); } } diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 427114e964..40344d049d 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -13,8 +13,8 @@ import { calculateWantedLevelGain, calculateAscensionMult, calculateAscensionPointsGain, - calculateMemberExperience, } from "./formulas/formulas"; +import { GangMemberExpGain } from "@nsdefs"; interface IMults { hack: number; @@ -147,63 +147,99 @@ export class GangMember { cha: (this.cha_mult - 1) / 4 + 1, }; } - gainExperience(numCycles = 1): number | undefined { + gainExperience(numCycles = 1, member: GangMember | null): GangMemberExpGain | null { const task = this.getTask(); - if (task === GangMemberTasks.Unassigned) return; + if (task === GangMemberTasks.Unassigned) return null; const difficultyMult = Math.pow(task.difficulty, 0.9); const difficultyPerCycles = difficultyMult * numCycles; const weightDivisor = 1500; const expMult = this.expMult(); - this.hack_exp += - (task.hackWeight / weightDivisor) * - difficultyPerCycles * - expMult.hack * - this.calculateAscensionMult(this.hack_asc_points); - - this.str_exp += - (task.strWeight / weightDivisor) * - difficultyPerCycles * - expMult.str * - this.calculateAscensionMult(this.str_asc_points); - - this.def_exp += - (task.defWeight / weightDivisor) * - difficultyPerCycles * - expMult.def * - this.calculateAscensionMult(this.def_asc_points); - - this.dex_exp += - (task.dexWeight / weightDivisor) * - difficultyPerCycles * - expMult.dex * - this.calculateAscensionMult(this.dex_asc_points); - - this.agi_exp += - (task.agiWeight / weightDivisor) * - difficultyPerCycles * - expMult.agi * - this.calculateAscensionMult(this.agi_asc_points); - - this.cha_exp += - (task.chaWeight / weightDivisor) * - difficultyPerCycles * - expMult.cha * - this.calculateAscensionMult(this.cha_asc_points); - } - - //getter for calculating member experience that would occur upon current task completion returns object - //If the member current has no tasks assigned returns udefined. - getMemberExperience(member: GangMember): object | undefined { - const numCycles = 1; - const task = member.getTask(); - if (member === undefined) { - return; - } else if (task === GangMemberTasks.Unassigned) { - return; + if (member != null) { + const expValues = { + hackEXP: 0, + strEXP: 0, + defEXP: 0, + dexEXP: 0, + agiEXP: 0, + chaEXP: 0, + }; + + expValues.hackEXP += + (task.hackWeight / weightDivisor) * + difficultyPerCycles * + expMult.hack * + member.calculateAscensionMult(member.hack_asc_points); + + expValues.strEXP += + (task.strWeight / weightDivisor) * + difficultyPerCycles * + expMult.str * + member.calculateAscensionMult(member.str_asc_points); + + expValues.defEXP += + (task.defWeight / weightDivisor) * + difficultyPerCycles * + expMult.def * + member.calculateAscensionMult(member.def_asc_points); + + expValues.dexEXP += + (task.dexWeight / weightDivisor) * + difficultyPerCycles * + expMult.dex * + member.calculateAscensionMult(member.dex_asc_points); + + expValues.agiEXP += + (task.agiWeight / weightDivisor) * + difficultyPerCycles * + expMult.agi * + member.calculateAscensionMult(member.agi_asc_points); + + expValues.chaEXP += + (task.chaWeight / weightDivisor) * + difficultyPerCycles * + expMult.cha * + member.calculateAscensionMult(member.cha_asc_points); + return expValues; + } else { + this.hack_exp += + (task.hackWeight / weightDivisor) * + difficultyPerCycles * + expMult.hack * + this.calculateAscensionMult(this.hack_asc_points); + + this.str_exp += + (task.strWeight / weightDivisor) * + difficultyPerCycles * + expMult.str * + this.calculateAscensionMult(this.str_asc_points); + + this.def_exp += + (task.defWeight / weightDivisor) * + difficultyPerCycles * + expMult.def * + this.calculateAscensionMult(this.def_asc_points); + + this.dex_exp += + (task.dexWeight / weightDivisor) * + difficultyPerCycles * + expMult.dex * + this.calculateAscensionMult(this.dex_asc_points); + + this.agi_exp += + (task.agiWeight / weightDivisor) * + difficultyPerCycles * + expMult.agi * + this.calculateAscensionMult(this.agi_asc_points); + + this.cha_exp += + (task.chaWeight / weightDivisor) * + difficultyPerCycles * + expMult.cha * + this.calculateAscensionMult(this.cha_asc_points); + return null; } - return calculateMemberExperience(numCycles, member, task); } earnRespect(numCycles = 1, gang: Gang): number { diff --git a/src/Gang/formulas/formulas.ts b/src/Gang/formulas/formulas.ts index 3cc684538c..21e8cd2b60 100644 --- a/src/Gang/formulas/formulas.ts +++ b/src/Gang/formulas/formulas.ts @@ -72,62 +72,6 @@ export function calculateMoneyGain(gang: FormulaGang, member: GangMember, task: return Math.pow(5 * task.baseMoney * statWeight * territoryMult * respectMult, territoryPenalty); } -//Calculates memberEXP based on member passed and task passed that the member currently has assigned. -//@returns object containing all exp values that would be gain on task compeletion. -export function calculateMemberExperience(numCycles: number, member: GangMember, task: GangMemberTask): object { - const expValues = { - hackEXP: 0, - strEXP: 0, - defEXP: 0, - dexEXP: 0, - agiEXP: 0, - chaEXP: 0, - }; - - const difficultyMult = Math.pow(task.difficulty, 0.9); - const difficultyPerCycles = difficultyMult * numCycles; - const weightDivisor = 1500; - const expMult = member.expMult(); - - expValues.hackEXP += - (task.hackWeight / weightDivisor) * - difficultyPerCycles * - expMult.hack * - member.calculateAscensionMult(member.hack_asc_points); - - expValues.strEXP += - (task.strWeight / weightDivisor) * - difficultyPerCycles * - expMult.str * - member.calculateAscensionMult(member.str_asc_points); - - expValues.defEXP += - (task.defWeight / weightDivisor) * - difficultyPerCycles * - expMult.def * - member.calculateAscensionMult(member.def_asc_points); - - expValues.dexEXP += - (task.dexWeight / weightDivisor) * - difficultyPerCycles * - expMult.dex * - member.calculateAscensionMult(member.dex_asc_points); - - expValues.agiEXP += - (task.agiWeight / weightDivisor) * - difficultyPerCycles * - expMult.agi * - member.calculateAscensionMult(member.agi_asc_points); - - expValues.chaEXP += - (task.chaWeight / weightDivisor) * - difficultyPerCycles * - expMult.cha * - member.calculateAscensionMult(member.cha_asc_points); - - return expValues; -} - export function calculateAscensionPointsGain(exp: number): number { return Math.max(exp - 1000, 0); } diff --git a/src/NetscriptFunctions/Gang.ts b/src/NetscriptFunctions/Gang.ts index d3822f161b..a3ad8b8fff 100644 --- a/src/NetscriptFunctions/Gang.ts +++ b/src/NetscriptFunctions/Gang.ts @@ -156,7 +156,7 @@ export function NetscriptGang(): InternalAPI { respectGain: member.calculateRespectGain(gang), wantedLevelGain: member.calculateWantedLevelGain(gang), moneyGain: member.calculateMoneyGain(gang), - expGain: member.getMemberExperience(member), + expGain: member.gainExperience(1, member), }; }, canRecruitMember: (ctx) => () => { diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index d2f62ad2bf..3fed18736a 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -917,6 +917,21 @@ interface GangTerritory { /** Wanted gain impact on task scaling */ wanted: number; } +/** @public */ +interface GangMemberExpGain { + /** Hack EXP gain for a member after a given task*/ + hackEXP: number; + /** Str EXP gain for a member after a given task*/ + strEXP: number; + /** Def EXP gain for a member after a given task*/ + defEXP: number; + /** Dex EXP gain for a member after a given task*/ + dexEXP: number; + /** Agi EXP gain for a member after a given task*/ + agiEXP: number; + /** Cha EXP gain for a member after a given task*/ + chaEXP: number; +} /** @public */ interface GangMemberInfo { @@ -1003,8 +1018,8 @@ interface GangMemberInfo { wantedLevelGain: number; /** Per Cycle Income for this gang member */ moneyGain: number; - /**PerCycle Exp object for each stat for this gang member */ - expGain: object | undefined; + /** Per Cycle Exp object for each stat for this gang member */ + expGain: GangMemberExpGain | null; } /** @public */ From 5fba6614ae20865ea5035168f687d59961cfa9de Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Tue, 11 Feb 2025 20:16:35 -0800 Subject: [PATCH 06/15] created a function which only handles calculations of exp for each value of a member returns those values as an object to be handled accordingly --- .../bitburner.gangmemberexpgain.agiexp.md | 13 ++ .../bitburner.gangmemberexpgain.chaexp.md | 13 ++ .../bitburner.gangmemberexpgain.defexp.md | 13 ++ .../bitburner.gangmemberexpgain.dexexp.md | 13 ++ .../bitburner.gangmemberexpgain.hackexp.md | 13 ++ markdown/bitburner.gangmemberexpgain.md | 24 ++++ .../bitburner.gangmemberexpgain.strexp.md | 13 ++ markdown/bitburner.gangmemberinfo.expgain.md | 4 +- markdown/bitburner.gangmemberinfo.md | 2 +- markdown/bitburner.md | 1 + src/Gang/Gang.ts | 2 +- src/Gang/GangMember.ts | 111 ++++-------------- src/Gang/formulas/formulas.ts | 55 +++++++++ src/NetscriptFunctions/Gang.ts | 2 +- src/ScriptEditor/NetscriptDefinitions.d.ts | 4 +- 15 files changed, 187 insertions(+), 96 deletions(-) create mode 100644 markdown/bitburner.gangmemberexpgain.agiexp.md create mode 100644 markdown/bitburner.gangmemberexpgain.chaexp.md create mode 100644 markdown/bitburner.gangmemberexpgain.defexp.md create mode 100644 markdown/bitburner.gangmemberexpgain.dexexp.md create mode 100644 markdown/bitburner.gangmemberexpgain.hackexp.md create mode 100644 markdown/bitburner.gangmemberexpgain.md create mode 100644 markdown/bitburner.gangmemberexpgain.strexp.md diff --git a/markdown/bitburner.gangmemberexpgain.agiexp.md b/markdown/bitburner.gangmemberexpgain.agiexp.md new file mode 100644 index 0000000000..9436a27470 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.agiexp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [agiEXP](./bitburner.gangmemberexpgain.agiexp.md) + +## GangMemberExpGain.agiEXP property + +Agi EXP gain for a member after a given task + +**Signature:** + +```typescript +agiEXP: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.chaexp.md b/markdown/bitburner.gangmemberexpgain.chaexp.md new file mode 100644 index 0000000000..4db0357303 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.chaexp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [chaEXP](./bitburner.gangmemberexpgain.chaexp.md) + +## GangMemberExpGain.chaEXP property + +Cha EXP gain for a member after a given task + +**Signature:** + +```typescript +chaEXP: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.defexp.md b/markdown/bitburner.gangmemberexpgain.defexp.md new file mode 100644 index 0000000000..6a61c64957 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.defexp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [defEXP](./bitburner.gangmemberexpgain.defexp.md) + +## GangMemberExpGain.defEXP property + +Def EXP gain for a member after a given task + +**Signature:** + +```typescript +defEXP: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.dexexp.md b/markdown/bitburner.gangmemberexpgain.dexexp.md new file mode 100644 index 0000000000..4154bae8bf --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.dexexp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [dexEXP](./bitburner.gangmemberexpgain.dexexp.md) + +## GangMemberExpGain.dexEXP property + +Dex EXP gain for a member after a given task + +**Signature:** + +```typescript +dexEXP: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.hackexp.md b/markdown/bitburner.gangmemberexpgain.hackexp.md new file mode 100644 index 0000000000..f8794f90b7 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.hackexp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [hackEXP](./bitburner.gangmemberexpgain.hackexp.md) + +## GangMemberExpGain.hackEXP property + +Hack EXP gain for a member after a given task + +**Signature:** + +```typescript +hackEXP: number; +``` diff --git a/markdown/bitburner.gangmemberexpgain.md b/markdown/bitburner.gangmemberexpgain.md new file mode 100644 index 0000000000..f0235ae1c1 --- /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 | +| --- | --- | --- | --- | +| [agiEXP](./bitburner.gangmemberexpgain.agiexp.md) | | number | Agi EXP gain for a member after a given task | +| [chaEXP](./bitburner.gangmemberexpgain.chaexp.md) | | number | Cha EXP gain for a member after a given task | +| [defEXP](./bitburner.gangmemberexpgain.defexp.md) | | number | Def EXP gain for a member after a given task | +| [dexEXP](./bitburner.gangmemberexpgain.dexexp.md) | | number | Dex EXP gain for a member after a given task | +| [hackEXP](./bitburner.gangmemberexpgain.hackexp.md) | | number | Hack EXP gain for a member after a given task | +| [strEXP](./bitburner.gangmemberexpgain.strexp.md) | | number | Str EXP gain for a member after a given task | + diff --git a/markdown/bitburner.gangmemberexpgain.strexp.md b/markdown/bitburner.gangmemberexpgain.strexp.md new file mode 100644 index 0000000000..7908a36387 --- /dev/null +++ b/markdown/bitburner.gangmemberexpgain.strexp.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [strEXP](./bitburner.gangmemberexpgain.strexp.md) + +## GangMemberExpGain.strEXP property + +Str EXP gain for a member after a given task + +**Signature:** + +```typescript +strEXP: number; +``` diff --git a/markdown/bitburner.gangmemberinfo.expgain.md b/markdown/bitburner.gangmemberinfo.expgain.md index 272f927627..51951b2a77 100644 --- a/markdown/bitburner.gangmemberinfo.expgain.md +++ b/markdown/bitburner.gangmemberinfo.expgain.md @@ -4,10 +4,10 @@ ## GangMemberInfo.expGain property -PerCycle Exp object for each stat for this gang member +Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value returns null in the even that the member does not have a given task. **Signature:** ```typescript -expGain: object | undefined; +expGain: GangMemberExpGain | null; ``` diff --git a/markdown/bitburner.gangmemberinfo.md b/markdown/bitburner.gangmemberinfo.md index 81643eea93..366f19cf3e 100644 --- a/markdown/bitburner.gangmemberinfo.md +++ b/markdown/bitburner.gangmemberinfo.md @@ -37,7 +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) | | object \| undefined | PerCycle Exp object for each stat for this gang member | +| [expGain](./bitburner.gangmemberinfo.expgain.md) | | [GangMemberExpGain](./bitburner.gangmemberexpgain.md) \| null | Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value returns null in the even 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 db82c7eb90..f5e91d9dc1 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/Gang.ts b/src/Gang/Gang.ts index 3757e6811e..c30e4b89b7 100644 --- a/src/Gang/Gang.ts +++ b/src/Gang/Gang.ts @@ -273,7 +273,7 @@ export class Gang { * @param numCycles The number of cycles to process. */ processExperienceGains(numCycles: number): void { for (const member of this.members) { - member.gainExperience(numCycles, null); + member.gainExperience(numCycles); member.updateSkillLevels(); } } diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 40344d049d..64d308fe0e 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -13,6 +13,7 @@ import { calculateWantedLevelGain, calculateAscensionMult, calculateAscensionPointsGain, + calculateExpGain, } from "./formulas/formulas"; import { GangMemberExpGain } from "@nsdefs"; @@ -147,99 +148,29 @@ export class GangMember { cha: (this.cha_mult - 1) / 4 + 1, }; } - gainExperience(numCycles = 1, member: GangMember | null): GangMemberExpGain | null { + + // Grabs the GangMemberExpGain object based on the passed paramters to be exported to the getMemberInfo API + // if nothing is provided to the member it returns null + getGangMemberExpGain(numCycles = 1): GangMemberExpGain | null { const task = this.getTask(); - if (task === GangMemberTasks.Unassigned) return null; - - const difficultyMult = Math.pow(task.difficulty, 0.9); - const difficultyPerCycles = difficultyMult * numCycles; - const weightDivisor = 1500; - const expMult = this.expMult(); - - if (member != null) { - const expValues = { - hackEXP: 0, - strEXP: 0, - defEXP: 0, - dexEXP: 0, - agiEXP: 0, - chaEXP: 0, - }; - - expValues.hackEXP += - (task.hackWeight / weightDivisor) * - difficultyPerCycles * - expMult.hack * - member.calculateAscensionMult(member.hack_asc_points); - - expValues.strEXP += - (task.strWeight / weightDivisor) * - difficultyPerCycles * - expMult.str * - member.calculateAscensionMult(member.str_asc_points); - - expValues.defEXP += - (task.defWeight / weightDivisor) * - difficultyPerCycles * - expMult.def * - member.calculateAscensionMult(member.def_asc_points); - - expValues.dexEXP += - (task.dexWeight / weightDivisor) * - difficultyPerCycles * - expMult.dex * - member.calculateAscensionMult(member.dex_asc_points); - - expValues.agiEXP += - (task.agiWeight / weightDivisor) * - difficultyPerCycles * - expMult.agi * - member.calculateAscensionMult(member.agi_asc_points); - - expValues.chaEXP += - (task.chaWeight / weightDivisor) * - difficultyPerCycles * - expMult.cha * - member.calculateAscensionMult(member.cha_asc_points); - return expValues; - } else { - this.hack_exp += - (task.hackWeight / weightDivisor) * - difficultyPerCycles * - expMult.hack * - this.calculateAscensionMult(this.hack_asc_points); - - this.str_exp += - (task.strWeight / weightDivisor) * - difficultyPerCycles * - expMult.str * - this.calculateAscensionMult(this.str_asc_points); - - this.def_exp += - (task.defWeight / weightDivisor) * - difficultyPerCycles * - expMult.def * - this.calculateAscensionMult(this.def_asc_points); - - this.dex_exp += - (task.dexWeight / weightDivisor) * - difficultyPerCycles * - expMult.dex * - this.calculateAscensionMult(this.dex_asc_points); - - this.agi_exp += - (task.agiWeight / weightDivisor) * - difficultyPerCycles * - expMult.agi * - this.calculateAscensionMult(this.agi_asc_points); - - this.cha_exp += - (task.chaWeight / weightDivisor) * - difficultyPerCycles * - expMult.cha * - this.calculateAscensionMult(this.cha_asc_points); + if (task == GangMemberTasks.Unassigned) { return null; } + return calculateExpGain(numCycles, this, task); + } + + gainExperience(numCycles = 1): void { + const task = this.getTask(); + if (task === GangMemberTasks.Unassigned) return; + + const gains = calculateExpGain(numCycles, this, task); + + this.hack_exp += gains.hackEXP; + this.str_exp += gains.strEXP; + this.def_exp += gains.defEXP; + this.dex_exp += gains.dexEXP; + this.agi_exp += gains.agiEXP; + this.cha_exp += gains.chaEXP; } earnRespect(numCycles = 1, gang: Gang): number { diff --git a/src/Gang/formulas/formulas.ts b/src/Gang/formulas/formulas.ts index 21e8cd2b60..ad0f3e6d9d 100644 --- a/src/Gang/formulas/formulas.ts +++ b/src/Gang/formulas/formulas.ts @@ -1,6 +1,7 @@ import { currentNodeMults } from "../../BitNode/BitNodeMultipliers"; import { GangMember } from "../GangMember"; import { GangMemberTask } from "../GangMemberTask"; +import { GangMemberExpGain } from "@nsdefs"; export interface FormulaGang { respect: number; @@ -72,6 +73,60 @@ export function calculateMoneyGain(gang: FormulaGang, member: GangMember, task: return Math.pow(5 * task.baseMoney * statWeight * territoryMult * respectMult, territoryPenalty); } +export function calculateExpGain(numCycles = 1, member: GangMember, task: GangMemberTask): GangMemberExpGain { + const expValues = { + hackEXP: 0, + strEXP: 0, + defEXP: 0, + dexEXP: 0, + agiEXP: 0, + chaEXP: 0, + }; + + const difficultyMult = Math.pow(task.difficulty, 0.9); + const difficultyPerCycles = difficultyMult * numCycles; + const weightDivisor = 1500; + const expMult = member.expMult(); + + expValues.hackEXP += + (task.hackWeight / weightDivisor) * + difficultyPerCycles * + expMult.hack * + member.calculateAscensionMult(member.hack_asc_points); + + expValues.strEXP += + (task.strWeight / weightDivisor) * + difficultyPerCycles * + expMult.str * + member.calculateAscensionMult(member.str_asc_points); + + expValues.defEXP += + (task.defWeight / weightDivisor) * + difficultyPerCycles * + expMult.def * + member.calculateAscensionMult(member.def_asc_points); + + expValues.dexEXP += + (task.dexWeight / weightDivisor) * + difficultyPerCycles * + expMult.dex * + member.calculateAscensionMult(member.dex_asc_points); + + expValues.agiEXP += + (task.agiWeight / weightDivisor) * + difficultyPerCycles * + expMult.agi * + member.calculateAscensionMult(member.agi_asc_points); + + expValues.chaEXP += + (task.chaWeight / weightDivisor) * + difficultyPerCycles * + expMult.cha * + member.calculateAscensionMult(member.cha_asc_points); + + return expValues; +} + export function calculateAscensionPointsGain(exp: number): number { return Math.max(exp - 1000, 0); } diff --git a/src/NetscriptFunctions/Gang.ts b/src/NetscriptFunctions/Gang.ts index a3ad8b8fff..1e2b405836 100644 --- a/src/NetscriptFunctions/Gang.ts +++ b/src/NetscriptFunctions/Gang.ts @@ -156,7 +156,7 @@ export function NetscriptGang(): InternalAPI { respectGain: member.calculateRespectGain(gang), wantedLevelGain: member.calculateWantedLevelGain(gang), moneyGain: member.calculateMoneyGain(gang), - expGain: member.gainExperience(1, member), + expGain: member.getGangMemberExpGain(1), }; }, canRecruitMember: (ctx) => () => { diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 3fed18736a..46dc816a60 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -1018,7 +1018,9 @@ interface GangMemberInfo { wantedLevelGain: number; /** Per Cycle Income for this gang member */ moneyGain: number; - /** Per Cycle Exp object for each stat for this gang member */ + /** Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value + * returns null in the even that the member does not have a given task. + */ expGain: GangMemberExpGain | null; } From 37dfd62db6ff28e5a95427bb4940a8a47495ffcd Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Tue, 11 Feb 2025 20:20:32 -0800 Subject: [PATCH 07/15] changed the function to have a default value --- src/NetscriptFunctions/Gang.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NetscriptFunctions/Gang.ts b/src/NetscriptFunctions/Gang.ts index 1e2b405836..decdc79e8b 100644 --- a/src/NetscriptFunctions/Gang.ts +++ b/src/NetscriptFunctions/Gang.ts @@ -156,7 +156,7 @@ export function NetscriptGang(): InternalAPI { respectGain: member.calculateRespectGain(gang), wantedLevelGain: member.calculateWantedLevelGain(gang), moneyGain: member.calculateMoneyGain(gang), - expGain: member.getGangMemberExpGain(1), + expGain: member.getGangMemberExpGain(), }; }, canRecruitMember: (ctx) => () => { From 5ba867c229fe5e1e68db2e2394582d45ff627e7e Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Tue, 11 Feb 2025 22:17:14 -0800 Subject: [PATCH 08/15] fixed formatting issue --- src/Gang/GangMember.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 64d308fe0e..4019c2f0c0 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -151,7 +151,7 @@ export class GangMember { // Grabs the GangMemberExpGain object based on the passed paramters to be exported to the getMemberInfo API // if nothing is provided to the member it returns null - getGangMemberExpGain(numCycles = 1): GangMemberExpGain | null { + getGangMemberExpGain(numCycles = 1): GangMemberExpGain | null { const task = this.getTask(); if (task == GangMemberTasks.Unassigned) { return null; From 9daaf6db28e934d9dfbad7d51b991f1cec6dca1e Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Wed, 12 Feb 2025 18:22:27 -0800 Subject: [PATCH 09/15] Go rid of uneccessary function. Made calculation a member function so that it no longer needs to pass parameters it just takes from whatever member is called from and returns their per-cycle exp --- src/Gang/GangMember.ts | 77 ++++++++++++++++++++++++++++------ src/Gang/formulas/formulas.ts | 55 ------------------------ src/NetscriptFunctions/Gang.ts | 4 +- 3 files changed, 66 insertions(+), 70 deletions(-) diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 4019c2f0c0..d441f4b588 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -13,7 +13,6 @@ import { calculateWantedLevelGain, calculateAscensionMult, calculateAscensionPointsGain, - calculateExpGain, } from "./formulas/formulas"; import { GangMemberExpGain } from "@nsdefs"; @@ -149,21 +148,73 @@ export class GangMember { }; } - // Grabs the GangMemberExpGain object based on the passed paramters to be exported to the getMemberInfo API - // if nothing is provided to the member it returns null - getGangMemberExpGain(numCycles = 1): GangMemberExpGain | null { + // 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 null; - } - return calculateExpGain(numCycles, this, task); - } + if (task === GangMemberTasks.Unassigned) return null; + + const expValues = { + hackEXP: 0, + strEXP: 0, + defEXP: 0, + dexEXP: 0, + agiEXP: 0, + chaEXP: 0, + }; - gainExperience(numCycles = 1): void { - const task = this.getTask(); - if (task === GangMemberTasks.Unassigned) return; + const difficultyMult = Math.pow(task.difficulty, 0.9); + const difficultyPerCycles = difficultyMult * numCycles; + const weightDivisor = 1500; + const expMult = this.expMult(); + + expValues.hackEXP += + (task.hackWeight / weightDivisor) * + difficultyPerCycles * + expMult.hack * + this.calculateAscensionMult(this.hack_asc_points); + + expValues.strEXP += + (task.strWeight / weightDivisor) * + difficultyPerCycles * + expMult.str * + this.calculateAscensionMult(this.str_asc_points); + + expValues.defEXP += + (task.defWeight / weightDivisor) * + difficultyPerCycles * + expMult.def * + this.calculateAscensionMult(this.def_asc_points); + + expValues.dexEXP += + (task.dexWeight / weightDivisor) * + difficultyPerCycles * + expMult.dex * + this.calculateAscensionMult(this.dex_asc_points); + + expValues.agiEXP += + (task.agiWeight / weightDivisor) * + difficultyPerCycles * + expMult.agi * + this.calculateAscensionMult(this.agi_asc_points); + + expValues.chaEXP += + (task.chaWeight / weightDivisor) * + difficultyPerCycles * + expMult.cha * + this.calculateAscensionMult(this.cha_asc_points); + + return expValues; + } - const gains = calculateExpGain(numCycles, this, task); + gainExperience(): 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(); + if (gains === null) { + return; + } this.hack_exp += gains.hackEXP; this.str_exp += gains.strEXP; diff --git a/src/Gang/formulas/formulas.ts b/src/Gang/formulas/formulas.ts index ad0f3e6d9d..21e8cd2b60 100644 --- a/src/Gang/formulas/formulas.ts +++ b/src/Gang/formulas/formulas.ts @@ -1,7 +1,6 @@ import { currentNodeMults } from "../../BitNode/BitNodeMultipliers"; import { GangMember } from "../GangMember"; import { GangMemberTask } from "../GangMemberTask"; -import { GangMemberExpGain } from "@nsdefs"; export interface FormulaGang { respect: number; @@ -73,60 +72,6 @@ export function calculateMoneyGain(gang: FormulaGang, member: GangMember, task: return Math.pow(5 * task.baseMoney * statWeight * territoryMult * respectMult, territoryPenalty); } -export function calculateExpGain(numCycles = 1, member: GangMember, task: GangMemberTask): GangMemberExpGain { - const expValues = { - hackEXP: 0, - strEXP: 0, - defEXP: 0, - dexEXP: 0, - agiEXP: 0, - chaEXP: 0, - }; - - const difficultyMult = Math.pow(task.difficulty, 0.9); - const difficultyPerCycles = difficultyMult * numCycles; - const weightDivisor = 1500; - const expMult = member.expMult(); - - expValues.hackEXP += - (task.hackWeight / weightDivisor) * - difficultyPerCycles * - expMult.hack * - member.calculateAscensionMult(member.hack_asc_points); - - expValues.strEXP += - (task.strWeight / weightDivisor) * - difficultyPerCycles * - expMult.str * - member.calculateAscensionMult(member.str_asc_points); - - expValues.defEXP += - (task.defWeight / weightDivisor) * - difficultyPerCycles * - expMult.def * - member.calculateAscensionMult(member.def_asc_points); - - expValues.dexEXP += - (task.dexWeight / weightDivisor) * - difficultyPerCycles * - expMult.dex * - member.calculateAscensionMult(member.dex_asc_points); - - expValues.agiEXP += - (task.agiWeight / weightDivisor) * - difficultyPerCycles * - expMult.agi * - member.calculateAscensionMult(member.agi_asc_points); - - expValues.chaEXP += - (task.chaWeight / weightDivisor) * - difficultyPerCycles * - expMult.cha * - member.calculateAscensionMult(member.cha_asc_points); - - return expValues; -} - export function calculateAscensionPointsGain(exp: number): number { return Math.max(exp - 1000, 0); } diff --git a/src/NetscriptFunctions/Gang.ts b/src/NetscriptFunctions/Gang.ts index decdc79e8b..c747497c55 100644 --- a/src/NetscriptFunctions/Gang.ts +++ b/src/NetscriptFunctions/Gang.ts @@ -1,6 +1,6 @@ import type { Gang as IGang, EquipmentStats, GangOtherInfoObject } from "@nsdefs"; import type { Gang } from "../Gang/Gang"; -import { GangMember } from "../Gang/GangMember"; +import type { GangMember } from "../Gang/GangMember"; import type { GangMemberTask } from "../Gang/GangMemberTask"; import type { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper"; @@ -156,7 +156,7 @@ export function NetscriptGang(): InternalAPI { respectGain: member.calculateRespectGain(gang), wantedLevelGain: member.calculateWantedLevelGain(gang), moneyGain: member.calculateMoneyGain(gang), - expGain: member.getGangMemberExpGain(), + expGain: member.calculateExpGain(), }; }, canRecruitMember: (ctx) => () => { From 0f5b2a21ddc5295bfc26cb3e2774558529ce3d81 Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Wed, 12 Feb 2025 19:11:07 -0800 Subject: [PATCH 10/15] Made gain exp recieve numCycles and pass it to the calculation function --- src/Gang/GangMember.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index d441f4b588..999c82d4f9 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -208,10 +208,10 @@ export class GangMember { return expValues; } - gainExperience(): void { + 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(); + const gains = this.calculateExpGain(numCycles); if (gains === null) { return; } From b3bfce22d77e95be7da57585d8b8a8ecbde425b0 Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Mon, 17 Feb 2025 20:04:49 -0800 Subject: [PATCH 11/15] Fixed inconsitencies in naming for variables --- ...=> bitburner.gangmemberexpgain.agi_exp.md} | 6 ++-- ...=> bitburner.gangmemberexpgain.cha_exp.md} | 6 ++-- ...=> bitburner.gangmemberexpgain.def_exp.md} | 6 ++-- ...=> bitburner.gangmemberexpgain.dex_exp.md} | 6 ++-- ...> bitburner.gangmemberexpgain.hack_exp.md} | 6 ++-- markdown/bitburner.gangmemberexpgain.md | 12 +++---- ...=> bitburner.gangmemberexpgain.str_exp.md} | 6 ++-- markdown/bitburner.gangmemberinfo.expgain.md | 4 ++- markdown/bitburner.gangmemberinfo.md | 2 +- src/Gang/GangMember.ts | 36 +++++++++---------- src/ScriptEditor/NetscriptDefinitions.d.ts | 15 ++++---- 11 files changed, 54 insertions(+), 51 deletions(-) rename markdown/{bitburner.gangmemberexpgain.agiexp.md => bitburner.gangmemberexpgain.agi_exp.md} (58%) rename markdown/{bitburner.gangmemberexpgain.chaexp.md => bitburner.gangmemberexpgain.cha_exp.md} (58%) rename markdown/{bitburner.gangmemberexpgain.defexp.md => bitburner.gangmemberexpgain.def_exp.md} (58%) rename markdown/{bitburner.gangmemberexpgain.dexexp.md => bitburner.gangmemberexpgain.dex_exp.md} (58%) rename markdown/{bitburner.gangmemberexpgain.hackexp.md => bitburner.gangmemberexpgain.hack_exp.md} (58%) rename markdown/{bitburner.gangmemberexpgain.strexp.md => bitburner.gangmemberexpgain.str_exp.md} (58%) diff --git a/markdown/bitburner.gangmemberexpgain.agiexp.md b/markdown/bitburner.gangmemberexpgain.agi_exp.md similarity index 58% rename from markdown/bitburner.gangmemberexpgain.agiexp.md rename to markdown/bitburner.gangmemberexpgain.agi_exp.md index 9436a27470..e06ab7d9dc 100644 --- a/markdown/bitburner.gangmemberexpgain.agiexp.md +++ b/markdown/bitburner.gangmemberexpgain.agi_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [agiEXP](./bitburner.gangmemberexpgain.agiexp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [agi\_EXP](./bitburner.gangmemberexpgain.agi_exp.md) -## GangMemberExpGain.agiEXP property +## GangMemberExpGain.agi\_EXP property Agi EXP gain for a member after a given task **Signature:** ```typescript -agiEXP: number; +agi_EXP: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.chaexp.md b/markdown/bitburner.gangmemberexpgain.cha_exp.md similarity index 58% rename from markdown/bitburner.gangmemberexpgain.chaexp.md rename to markdown/bitburner.gangmemberexpgain.cha_exp.md index 4db0357303..30718d82f0 100644 --- a/markdown/bitburner.gangmemberexpgain.chaexp.md +++ b/markdown/bitburner.gangmemberexpgain.cha_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [chaEXP](./bitburner.gangmemberexpgain.chaexp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [cha\_EXP](./bitburner.gangmemberexpgain.cha_exp.md) -## GangMemberExpGain.chaEXP property +## GangMemberExpGain.cha\_EXP property Cha EXP gain for a member after a given task **Signature:** ```typescript -chaEXP: number; +cha_EXP: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.defexp.md b/markdown/bitburner.gangmemberexpgain.def_exp.md similarity index 58% rename from markdown/bitburner.gangmemberexpgain.defexp.md rename to markdown/bitburner.gangmemberexpgain.def_exp.md index 6a61c64957..dd21ccf06d 100644 --- a/markdown/bitburner.gangmemberexpgain.defexp.md +++ b/markdown/bitburner.gangmemberexpgain.def_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [defEXP](./bitburner.gangmemberexpgain.defexp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [def\_EXP](./bitburner.gangmemberexpgain.def_exp.md) -## GangMemberExpGain.defEXP property +## GangMemberExpGain.def\_EXP property Def EXP gain for a member after a given task **Signature:** ```typescript -defEXP: number; +def_EXP: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.dexexp.md b/markdown/bitburner.gangmemberexpgain.dex_exp.md similarity index 58% rename from markdown/bitburner.gangmemberexpgain.dexexp.md rename to markdown/bitburner.gangmemberexpgain.dex_exp.md index 4154bae8bf..a48cc01e8c 100644 --- a/markdown/bitburner.gangmemberexpgain.dexexp.md +++ b/markdown/bitburner.gangmemberexpgain.dex_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [dexEXP](./bitburner.gangmemberexpgain.dexexp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [dex\_EXP](./bitburner.gangmemberexpgain.dex_exp.md) -## GangMemberExpGain.dexEXP property +## GangMemberExpGain.dex\_EXP property Dex EXP gain for a member after a given task **Signature:** ```typescript -dexEXP: number; +dex_EXP: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.hackexp.md b/markdown/bitburner.gangmemberexpgain.hack_exp.md similarity index 58% rename from markdown/bitburner.gangmemberexpgain.hackexp.md rename to markdown/bitburner.gangmemberexpgain.hack_exp.md index f8794f90b7..1c71143e37 100644 --- a/markdown/bitburner.gangmemberexpgain.hackexp.md +++ b/markdown/bitburner.gangmemberexpgain.hack_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [hackEXP](./bitburner.gangmemberexpgain.hackexp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [hack\_EXP](./bitburner.gangmemberexpgain.hack_exp.md) -## GangMemberExpGain.hackEXP property +## GangMemberExpGain.hack\_EXP property Hack EXP gain for a member after a given task **Signature:** ```typescript -hackEXP: number; +hack_EXP: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.md b/markdown/bitburner.gangmemberexpgain.md index f0235ae1c1..45e2113122 100644 --- a/markdown/bitburner.gangmemberexpgain.md +++ b/markdown/bitburner.gangmemberexpgain.md @@ -15,10 +15,10 @@ interface GangMemberExpGain | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [agiEXP](./bitburner.gangmemberexpgain.agiexp.md) | | number | Agi EXP gain for a member after a given task | -| [chaEXP](./bitburner.gangmemberexpgain.chaexp.md) | | number | Cha EXP gain for a member after a given task | -| [defEXP](./bitburner.gangmemberexpgain.defexp.md) | | number | Def EXP gain for a member after a given task | -| [dexEXP](./bitburner.gangmemberexpgain.dexexp.md) | | number | Dex EXP gain for a member after a given task | -| [hackEXP](./bitburner.gangmemberexpgain.hackexp.md) | | number | Hack EXP gain for a member after a given task | -| [strEXP](./bitburner.gangmemberexpgain.strexp.md) | | number | Str EXP gain for a member after a given task | +| [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.strexp.md b/markdown/bitburner.gangmemberexpgain.str_exp.md similarity index 58% rename from markdown/bitburner.gangmemberexpgain.strexp.md rename to markdown/bitburner.gangmemberexpgain.str_exp.md index 7908a36387..362f51f8d1 100644 --- a/markdown/bitburner.gangmemberexpgain.strexp.md +++ b/markdown/bitburner.gangmemberexpgain.str_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [strEXP](./bitburner.gangmemberexpgain.strexp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [str\_EXP](./bitburner.gangmemberexpgain.str_exp.md) -## GangMemberExpGain.strEXP property +## GangMemberExpGain.str\_EXP property Str EXP gain for a member after a given task **Signature:** ```typescript -strEXP: number; +str_EXP: number; ``` diff --git a/markdown/bitburner.gangmemberinfo.expgain.md b/markdown/bitburner.gangmemberinfo.expgain.md index 51951b2a77..d6d6dcf8d1 100644 --- a/markdown/bitburner.gangmemberinfo.expgain.md +++ b/markdown/bitburner.gangmemberinfo.expgain.md @@ -4,7 +4,9 @@ ## GangMemberInfo.expGain property -Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value returns null in the even that the member does not have a given task. +Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value. + +returns null in the even that the member does not have a given task. **Signature:** diff --git a/markdown/bitburner.gangmemberinfo.md b/markdown/bitburner.gangmemberinfo.md index 366f19cf3e..dd28b06898 100644 --- a/markdown/bitburner.gangmemberinfo.md +++ b/markdown/bitburner.gangmemberinfo.md @@ -37,7 +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 returned as a object containing each stats value returns null in the even that the member does not have a given task. | +| [expGain](./bitburner.gangmemberinfo.expgain.md) | | [GangMemberExpGain](./bitburner.gangmemberexpgain.md) \| null |

Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value.

returns null in the even 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/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 999c82d4f9..321d39d8bb 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -156,12 +156,12 @@ export class GangMember { if (task === GangMemberTasks.Unassigned) return null; const expValues = { - hackEXP: 0, - strEXP: 0, - defEXP: 0, - dexEXP: 0, - agiEXP: 0, - chaEXP: 0, + 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); @@ -169,37 +169,37 @@ export class GangMember { const weightDivisor = 1500; const expMult = this.expMult(); - expValues.hackEXP += + expValues.hack_EXP += (task.hackWeight / weightDivisor) * difficultyPerCycles * expMult.hack * this.calculateAscensionMult(this.hack_asc_points); - expValues.strEXP += + expValues.str_EXP += (task.strWeight / weightDivisor) * difficultyPerCycles * expMult.str * this.calculateAscensionMult(this.str_asc_points); - expValues.defEXP += + expValues.def_EXP += (task.defWeight / weightDivisor) * difficultyPerCycles * expMult.def * this.calculateAscensionMult(this.def_asc_points); - expValues.dexEXP += + expValues.dex_EXP += (task.dexWeight / weightDivisor) * difficultyPerCycles * expMult.dex * this.calculateAscensionMult(this.dex_asc_points); - expValues.agiEXP += + expValues.agi_EXP += (task.agiWeight / weightDivisor) * difficultyPerCycles * expMult.agi * this.calculateAscensionMult(this.agi_asc_points); - expValues.chaEXP += + expValues.cha_EXP += (task.chaWeight / weightDivisor) * difficultyPerCycles * expMult.cha * @@ -216,12 +216,12 @@ export class GangMember { return; } - this.hack_exp += gains.hackEXP; - this.str_exp += gains.strEXP; - this.def_exp += gains.defEXP; - this.dex_exp += gains.dexEXP; - this.agi_exp += gains.agiEXP; - this.cha_exp += gains.chaEXP; + 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/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 46dc816a60..29ea1b73d3 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -920,17 +920,17 @@ interface GangTerritory { /** @public */ interface GangMemberExpGain { /** Hack EXP gain for a member after a given task*/ - hackEXP: number; + hack_EXP: number; /** Str EXP gain for a member after a given task*/ - strEXP: number; + str_EXP: number; /** Def EXP gain for a member after a given task*/ - defEXP: number; + def_EXP: number; /** Dex EXP gain for a member after a given task*/ - dexEXP: number; + dex_EXP: number; /** Agi EXP gain for a member after a given task*/ - agiEXP: number; + agi_EXP: number; /** Cha EXP gain for a member after a given task*/ - chaEXP: number; + cha_EXP: number; } /** @public */ @@ -1018,7 +1018,8 @@ interface GangMemberInfo { wantedLevelGain: number; /** Per Cycle Income for this gang member */ moneyGain: number; - /** Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value + /** Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value. + * * returns null in the even that the member does not have a given task. */ expGain: GangMemberExpGain | null; From 4b5171c8451c1286f7b07cbce1db32aae71b4ddc Mon Sep 17 00:00:00 2001 From: TustinJimberlake Date: Mon, 17 Feb 2025 20:06:13 -0800 Subject: [PATCH 12/15] Adjusted comment in Netscript definitions.d.ts --- src/ScriptEditor/NetscriptDefinitions.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 29ea1b73d3..b2d3fddb5c 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -1018,9 +1018,9 @@ interface GangMemberInfo { wantedLevelGain: number; /** Per Cycle Income for this gang member */ moneyGain: number; - /** Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value. + /** Per Cycle Exp object for each stat for this gang member. * - * returns null in the even that the member does not have a given task. + * null in the event that the member does not have a given task. */ expGain: GangMemberExpGain | null; } From 362edf262e175c797c41da4aab7edf0864504b59 Mon Sep 17 00:00:00 2001 From: Adam Andreatta <124220419+AdamAndreatta@users.noreply.github.com> Date: Tue, 18 Feb 2025 17:38:34 -0800 Subject: [PATCH 13/15] adjust value definition for exp object GangMember.ts --- src/Gang/GangMember.ts | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Gang/GangMember.ts b/src/Gang/GangMember.ts index 321d39d8bb..7bd0a768d4 100644 --- a/src/Gang/GangMember.ts +++ b/src/Gang/GangMember.ts @@ -156,12 +156,12 @@ export class GangMember { 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, + 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); @@ -169,37 +169,37 @@ export class GangMember { const weightDivisor = 1500; const expMult = this.expMult(); - expValues.hack_EXP += + expValues.hack_exp += (task.hackWeight / weightDivisor) * difficultyPerCycles * expMult.hack * this.calculateAscensionMult(this.hack_asc_points); - expValues.str_EXP += + expValues.str_exp += (task.strWeight / weightDivisor) * difficultyPerCycles * expMult.str * this.calculateAscensionMult(this.str_asc_points); - expValues.def_EXP += + expValues.def_exp += (task.defWeight / weightDivisor) * difficultyPerCycles * expMult.def * this.calculateAscensionMult(this.def_asc_points); - expValues.dex_EXP += + expValues.dex_exp += (task.dexWeight / weightDivisor) * difficultyPerCycles * expMult.dex * this.calculateAscensionMult(this.dex_asc_points); - expValues.agi_EXP += + expValues.agi_exp += (task.agiWeight / weightDivisor) * difficultyPerCycles * expMult.agi * this.calculateAscensionMult(this.agi_asc_points); - expValues.cha_EXP += + expValues.cha_exp += (task.chaWeight / weightDivisor) * difficultyPerCycles * expMult.cha * @@ -216,12 +216,12 @@ export class GangMember { 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; + 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 { From 5412b49e970b95571c4004249538928a09653ccf Mon Sep 17 00:00:00 2001 From: Adam Andreatta <124220419+AdamAndreatta@users.noreply.github.com> Date: Tue, 18 Feb 2025 17:41:10 -0800 Subject: [PATCH 14/15] Update interface defintions NetscriptDefinitions.d.ts --- src/ScriptEditor/NetscriptDefinitions.d.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index b2d3fddb5c..1a337e0221 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -920,17 +920,17 @@ interface GangTerritory { /** @public */ interface GangMemberExpGain { /** Hack EXP gain for a member after a given task*/ - hack_EXP: number; + hack_exp: number; /** Str EXP gain for a member after a given task*/ - str_EXP: number; + str_exp: number; /** Def EXP gain for a member after a given task*/ - def_EXP: number; + def_exp: number; /** Dex EXP gain for a member after a given task*/ - dex_EXP: number; + dex_exp: number; /** Agi EXP gain for a member after a given task*/ - agi_EXP: number; + agi_exp: number; /** Cha EXP gain for a member after a given task*/ - cha_EXP: number; + cha_exp: number; } /** @public */ From f7b737d4369572fe485942faa37dc73142caa59d Mon Sep 17 00:00:00 2001 From: Adam Andreatta Date: Tue, 18 Feb 2025 19:14:40 -0800 Subject: [PATCH 15/15] updated doc file --- markdown/bitburner.gangmemberexpgain.agi_exp.md | 6 +++--- markdown/bitburner.gangmemberexpgain.cha_exp.md | 6 +++--- markdown/bitburner.gangmemberexpgain.def_exp.md | 6 +++--- markdown/bitburner.gangmemberexpgain.dex_exp.md | 6 +++--- markdown/bitburner.gangmemberexpgain.hack_exp.md | 6 +++--- markdown/bitburner.gangmemberexpgain.md | 12 ++++++------ markdown/bitburner.gangmemberexpgain.str_exp.md | 6 +++--- markdown/bitburner.gangmemberinfo.expgain.md | 4 ++-- markdown/bitburner.gangmemberinfo.md | 2 +- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/markdown/bitburner.gangmemberexpgain.agi_exp.md b/markdown/bitburner.gangmemberexpgain.agi_exp.md index e06ab7d9dc..442a5e1edc 100644 --- a/markdown/bitburner.gangmemberexpgain.agi_exp.md +++ b/markdown/bitburner.gangmemberexpgain.agi_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [agi\_EXP](./bitburner.gangmemberexpgain.agi_exp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [agi\_exp](./bitburner.gangmemberexpgain.agi_exp.md) -## GangMemberExpGain.agi\_EXP property +## GangMemberExpGain.agi\_exp property Agi EXP gain for a member after a given task **Signature:** ```typescript -agi_EXP: number; +agi_exp: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.cha_exp.md b/markdown/bitburner.gangmemberexpgain.cha_exp.md index 30718d82f0..11a72c4a6a 100644 --- a/markdown/bitburner.gangmemberexpgain.cha_exp.md +++ b/markdown/bitburner.gangmemberexpgain.cha_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [cha\_EXP](./bitburner.gangmemberexpgain.cha_exp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [cha\_exp](./bitburner.gangmemberexpgain.cha_exp.md) -## GangMemberExpGain.cha\_EXP property +## GangMemberExpGain.cha\_exp property Cha EXP gain for a member after a given task **Signature:** ```typescript -cha_EXP: number; +cha_exp: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.def_exp.md b/markdown/bitburner.gangmemberexpgain.def_exp.md index dd21ccf06d..f38222ebda 100644 --- a/markdown/bitburner.gangmemberexpgain.def_exp.md +++ b/markdown/bitburner.gangmemberexpgain.def_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [def\_EXP](./bitburner.gangmemberexpgain.def_exp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [def\_exp](./bitburner.gangmemberexpgain.def_exp.md) -## GangMemberExpGain.def\_EXP property +## GangMemberExpGain.def\_exp property Def EXP gain for a member after a given task **Signature:** ```typescript -def_EXP: number; +def_exp: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.dex_exp.md b/markdown/bitburner.gangmemberexpgain.dex_exp.md index a48cc01e8c..130241b697 100644 --- a/markdown/bitburner.gangmemberexpgain.dex_exp.md +++ b/markdown/bitburner.gangmemberexpgain.dex_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [dex\_EXP](./bitburner.gangmemberexpgain.dex_exp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [dex\_exp](./bitburner.gangmemberexpgain.dex_exp.md) -## GangMemberExpGain.dex\_EXP property +## GangMemberExpGain.dex\_exp property Dex EXP gain for a member after a given task **Signature:** ```typescript -dex_EXP: number; +dex_exp: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.hack_exp.md b/markdown/bitburner.gangmemberexpgain.hack_exp.md index 1c71143e37..d730160d70 100644 --- a/markdown/bitburner.gangmemberexpgain.hack_exp.md +++ b/markdown/bitburner.gangmemberexpgain.hack_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [hack\_EXP](./bitburner.gangmemberexpgain.hack_exp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [hack\_exp](./bitburner.gangmemberexpgain.hack_exp.md) -## GangMemberExpGain.hack\_EXP property +## GangMemberExpGain.hack\_exp property Hack EXP gain for a member after a given task **Signature:** ```typescript -hack_EXP: number; +hack_exp: number; ``` diff --git a/markdown/bitburner.gangmemberexpgain.md b/markdown/bitburner.gangmemberexpgain.md index 45e2113122..66ab26f1c2 100644 --- a/markdown/bitburner.gangmemberexpgain.md +++ b/markdown/bitburner.gangmemberexpgain.md @@ -15,10 +15,10 @@ interface GangMemberExpGain | 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 | +| [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 index 362f51f8d1..2134c40c78 100644 --- a/markdown/bitburner.gangmemberexpgain.str_exp.md +++ b/markdown/bitburner.gangmemberexpgain.str_exp.md @@ -1,13 +1,13 @@ -[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [str\_EXP](./bitburner.gangmemberexpgain.str_exp.md) +[Home](./index.md) > [bitburner](./bitburner.md) > [GangMemberExpGain](./bitburner.gangmemberexpgain.md) > [str\_exp](./bitburner.gangmemberexpgain.str_exp.md) -## GangMemberExpGain.str\_EXP property +## GangMemberExpGain.str\_exp property Str EXP gain for a member after a given task **Signature:** ```typescript -str_EXP: number; +str_exp: number; ``` diff --git a/markdown/bitburner.gangmemberinfo.expgain.md b/markdown/bitburner.gangmemberinfo.expgain.md index d6d6dcf8d1..a897877a62 100644 --- a/markdown/bitburner.gangmemberinfo.expgain.md +++ b/markdown/bitburner.gangmemberinfo.expgain.md @@ -4,9 +4,9 @@ ## GangMemberInfo.expGain property -Per Cycle Exp object for each stat for this gang member returned as a object containing each stats value. +Per Cycle Exp object for each stat for this gang member. -returns null in the even that the member does not have a given task. +null in the event that the member does not have a given task. **Signature:** diff --git a/markdown/bitburner.gangmemberinfo.md b/markdown/bitburner.gangmemberinfo.md index dd28b06898..f4f692a18f 100644 --- a/markdown/bitburner.gangmemberinfo.md +++ b/markdown/bitburner.gangmemberinfo.md @@ -37,7 +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 returned as a object containing each stats value.

returns null in the even that the member does not have a given task.

| +| [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 |