API: Add types for parameters of gym-university-bladeburner API (Fix merging error) (#1596)

* API: Add types for parameters of gym-university-bladeburner API
* Fix merging error
This commit is contained in:
catloversg 2024-08-18 04:08:55 +07:00 committed by GitHub
parent 5b2a4eafcb
commit cacecda72f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
67 changed files with 1047 additions and 471 deletions

@ -9,15 +9,18 @@ Get whether an action is set to autolevel.
**Signature:**
```typescript
getActionAutolevel(type: string, name: string): boolean;
getActionAutolevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
**Returns:**

@ -9,15 +9,18 @@ Get action count remaining.
**Signature:**
```typescript
getActionCountRemaining(type: string, name: string): number;
getActionCountRemaining(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
**Returns:**

@ -9,15 +9,18 @@ Get the current level of an action.
**Signature:**
```typescript
getActionCurrentLevel(type: string, name: string): number;
getActionCurrentLevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
**Returns:**

@ -9,15 +9,19 @@ Get estimate success chance of an action.
**Signature:**
```typescript
getActionEstimatedSuccessChance(type: string, name: string, sleeveNumber?: number): [number, number];
getActionEstimatedSuccessChance(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
sleeveNumber?: number,
): [number, number];
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
| sleeveNumber | number | _(Optional)_ Optional. Index of the sleeve to retrieve information. |
**Returns:**

@ -9,15 +9,18 @@ Get the maximum level of an action.
**Signature:**
```typescript
getActionMaxLevel(type: string, name: string): number;
getActionMaxLevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
**Returns:**

@ -9,15 +9,19 @@ Get the reputation gain of an action.
**Signature:**
```typescript
getActionRepGain(type: string, name: string, level?: number): number;
getActionRepGain(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
level?: number,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
| level | number | _(Optional)_ Optional number. Action level at which to calculate the gain. Will be the action's current level if not given. |
**Returns:**

@ -9,15 +9,18 @@ Get action successes.
**Signature:**
```typescript
getActionSuccesses(type: string, name: string): number;
getActionSuccesses(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
**Returns:**

@ -9,15 +9,18 @@ Get the time to complete an action.
**Signature:**
```typescript
getActionTime(type: string, name: string): number;
getActionTime(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
**Returns:**

@ -9,11 +9,11 @@ List all black ops.
**Signature:**
```typescript
getBlackOpNames(): string[];
getBlackOpNames(): BladeburnerBlackOpName[];
```
**Returns:**
string\[\]
[BladeburnerBlackOpName](./bitburner.bladeburnerblackopname.md)<!-- -->\[\]
Array of strings containing the names of all Bladeburner Black Ops.

@ -9,14 +9,14 @@ Get black op required rank.
**Signature:**
```typescript
getBlackOpRank(name: string): number;
getBlackOpRank(name: BladeburnerBlackOpName): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | string | Name of BlackOp. Must be an exact match. |
| name | [BladeburnerBlackOpName](./bitburner.bladeburnerblackopname.md) | Name of BlackOp. Must be an exact match. |
**Returns:**

@ -9,11 +9,11 @@ List all contracts.
**Signature:**
```typescript
getContractNames(): string[];
getContractNames(): BladeburnerContractName[];
```
**Returns:**
string\[\]
[BladeburnerContractName](./bitburner.bladeburnercontractname.md)<!-- -->\[\]
Array of strings containing the names of all Bladeburner contracts.

@ -9,11 +9,11 @@ List all general actions.
**Signature:**
```typescript
getGeneralActionNames(): string[];
getGeneralActionNames(): BladeburnerGeneralActionName[];
```
**Returns:**
string\[\]
[BladeburnerGeneralActionName](./bitburner.bladeburnergeneralactionname.md)<!-- -->\[\]
Array of strings containing the names of all general Bladeburner actions.

@ -9,11 +9,11 @@ Get an object with the name and rank requirement of the next BlackOp that can be
**Signature:**
```typescript
getNextBlackOp(): { name: string; rank: number } | null;
getNextBlackOp(): { name: BladeburnerBlackOpName; rank: number } | null;
```
**Returns:**
{ name: string; rank: number } \| null
{ name: [BladeburnerBlackOpName](./bitburner.bladeburnerblackopname.md)<!-- -->; rank: number } \| null
An object with the `.name` and `.rank` properties of the available BlackOp, or `null`<!-- -->.

@ -9,11 +9,11 @@ List all operations.
**Signature:**
```typescript
getOperationNames(): string[];
getOperationNames(): BladeburnerOperationName[];
```
**Returns:**
string\[\]
[BladeburnerOperationName](./bitburner.bladeburneroperationname.md)<!-- -->\[\]
Array of strings containing the names of all Bladeburner operations.

@ -9,14 +9,14 @@ Get skill level.
**Signature:**
```typescript
getSkillLevel(skillName: string): number;
getSkillLevel(skillName: BladeburnerSkillName | `${BladeburnerSkillName}`): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| skillName | string | Name of skill. Case-sensitive and must be an exact match. |
| skillName | [BladeburnerSkillName](./bitburner.bladeburnerskillname.md) \| \`${[BladeburnerSkillName](./bitburner.bladeburnerskillname.md)<!-- -->}\` | Name of skill. Case-sensitive and must be an exact match. |
**Returns:**

@ -9,11 +9,11 @@ List all skills.
**Signature:**
```typescript
getSkillNames(): string[];
getSkillNames(): BladeburnerSkillName[];
```
**Returns:**
string\[\]
[BladeburnerSkillName](./bitburner.bladeburnerskillname.md)<!-- -->\[\]
Array of strings containing the names of all general Bladeburner skills.

@ -9,14 +9,14 @@ Get cost to upgrade skill.
**Signature:**
```typescript
getSkillUpgradeCost(skillName: string, count?: number): number;
getSkillUpgradeCost(skillName: BladeburnerSkillName | `${BladeburnerSkillName}`, count?: number): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| skillName | string | Name of skill. Case-sensitive and must be an exact match. |
| skillName | [BladeburnerSkillName](./bitburner.bladeburnerskillname.md) \| \`${[BladeburnerSkillName](./bitburner.bladeburnerskillname.md)<!-- -->}\` | Name of skill. Case-sensitive and must be an exact match. |
| count | number | _(Optional)_ Number of times to upgrade the skill. Defaults to 1 if not specified. |
**Returns:**

@ -9,15 +9,18 @@ Get team size.
**Signature:**
```typescript
getTeamSize(type?: string, name?: string): number;
getTeamSize(
type?: BladeburnerActionType | `${BladeburnerActionType}`,
name?: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | _(Optional)_ Type of action. |
| name | string | _(Optional)_ Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | _(Optional)_ Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | _(Optional)_ Name of action. Must be an exact match. |
**Returns:**

@ -9,15 +9,19 @@ Set an action autolevel.
**Signature:**
```typescript
setActionAutolevel(type: string, name: string, autoLevel: boolean): void;
setActionAutolevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
autoLevel: boolean,
): void;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
| autoLevel | boolean | Whether or not to autolevel this action |
**Returns:**

@ -9,15 +9,19 @@ Set the level of an action.
**Signature:**
```typescript
setActionLevel(type: string, name: string, level: number): void;
setActionLevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
level: number,
): void;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
| level | number | Level to set this action to. |
**Returns:**

@ -9,15 +9,19 @@ Set team size.
**Signature:**
```typescript
setTeamSize(type: string, name: string, size: number): number;
setTeamSize(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
size: number,
): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match. |
| size | number | Number of team members to set. Will be converted using Math.round(). |
**Returns:**

@ -9,15 +9,18 @@ Start an action.
**Signature:**
```typescript
startAction(type: string, name: string): boolean;
startAction(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match |
| type | [BladeburnerActionType](./bitburner.bladeburneractiontype.md) \| \`${[BladeburnerActionType](./bitburner.bladeburneractiontype.md)<!-- -->}\` | Type of action. |
| name | [BladeburnerActionName](./bitburner.bladeburneractionname.md) \| \`${[BladeburnerActionName](./bitburner.bladeburneractionname.md)<!-- -->}\` | Name of action. Must be an exact match |
**Returns:**

@ -9,14 +9,14 @@ Upgrade skill.
**Signature:**
```typescript
upgradeSkill(skillName: string, count?: number): boolean;
upgradeSkill(skillName: BladeburnerSkillName | `${BladeburnerSkillName}`, count?: number): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| skillName | string | Name of skill to be upgraded. Case-sensitive and must be an exact match. |
| skillName | [BladeburnerSkillName](./bitburner.bladeburnerskillname.md) \| \`${[BladeburnerSkillName](./bitburner.bladeburnerskillname.md)<!-- -->}\` | Name of skill to be upgraded. Case-sensitive and must be an exact match. |
| count | number | _(Optional)_ Number of times to upgrade the skill. Defaults to 1 if not specified. |
**Returns:**

@ -0,0 +1,18 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerActionName](./bitburner.bladeburneractionname.md)
## BladeburnerActionName type
**Signature:**
```typescript
export type BladeburnerActionName =
| BladeburnerGeneralActionName
| BladeburnerContractName
| BladeburnerOperationName
| BladeburnerBlackOpName;
```
**References:** [BladeburnerGeneralActionName](./bitburner.bladeburnergeneralactionname.md)<!-- -->, [BladeburnerContractName](./bitburner.bladeburnercontractname.md)<!-- -->, [BladeburnerOperationName](./bitburner.bladeburneroperationname.md)<!-- -->, [BladeburnerBlackOpName](./bitburner.bladeburnerblackopname.md)

@ -0,0 +1,23 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerActionType](./bitburner.bladeburneractiontype.md)
## BladeburnerActionType enum
Action types of Bladeburner
**Signature:**
```typescript
declare enum BladeburnerActionType
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| BlackOp | <code>&quot;Black Operations&quot;</code> | |
| Contract | <code>&quot;Contracts&quot;</code> | |
| General | <code>&quot;General&quot;</code> | |
| Operation | <code>&quot;Operations&quot;</code> | |

@ -0,0 +1,16 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerActionTypeForSleeve](./bitburner.bladeburneractiontypeforsleeve.md)
## BladeburnerActionTypeForSleeve type
**Signature:**
```typescript
export type BladeburnerActionTypeForSleeve =
| Exclude<BladeburnerGeneralActionName, BladeburnerGeneralActionName.InciteViolence>
| SpecialBladeburnerActionTypeForSleeve;
```
**References:** [BladeburnerGeneralActionName](./bitburner.bladeburnergeneralactionname.md)<!-- -->, [BladeburnerGeneralActionName.InciteViolence](./bitburner.bladeburnergeneralactionname.md)<!-- -->, [SpecialBladeburnerActionTypeForSleeve](./bitburner.specialbladeburneractiontypeforsleeve.md)

@ -0,0 +1,40 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerBlackOpName](./bitburner.bladeburnerblackopname.md)
## BladeburnerBlackOpName enum
Black Operation names of Bladeburner
**Signature:**
```typescript
declare enum BladeburnerBlackOpName
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| OperationAnnihilus | <code>&quot;Operation Annihilus&quot;</code> | |
| OperationArchangel | <code>&quot;Operation Archangel&quot;</code> | |
| OperationAres | <code>&quot;Operation Ares&quot;</code> | |
| OperationCenturion | <code>&quot;Operation Centurion&quot;</code> | |
| OperationDaedalus | <code>&quot;Operation Daedalus&quot;</code> | |
| OperationDeckard | <code>&quot;Operation Deckard&quot;</code> | |
| OperationHyron | <code>&quot;Operation Hyron&quot;</code> | |
| OperationIonStorm | <code>&quot;Operation Ion Storm&quot;</code> | |
| OperationJuggernaut | <code>&quot;Operation Juggernaut&quot;</code> | |
| OperationK | <code>&quot;Operation K&quot;</code> | |
| OperationMorpheus | <code>&quot;Operation Morpheus&quot;</code> | |
| OperationRedDragon | <code>&quot;Operation Red Dragon&quot;</code> | |
| OperationShoulderOfOrion | <code>&quot;Operation Shoulder of Orion&quot;</code> | |
| OperationTitan | <code>&quot;Operation Titan&quot;</code> | |
| OperationTyphoon | <code>&quot;Operation Typhoon&quot;</code> | |
| OperationTyrell | <code>&quot;Operation Tyrell&quot;</code> | |
| OperationUltron | <code>&quot;Operation Ultron&quot;</code> | |
| OperationVindictus | <code>&quot;Operation Vindictus&quot;</code> | |
| OperationWallace | <code>&quot;Operation Wallace&quot;</code> | |
| OperationX | <code>&quot;Operation X&quot;</code> | |
| OperationZero | <code>&quot;Operation Zero&quot;</code> | |

@ -0,0 +1,22 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerContractName](./bitburner.bladeburnercontractname.md)
## BladeburnerContractName enum
Contract names of Bladeburner
**Signature:**
```typescript
declare enum BladeburnerContractName
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| BountyHunter | <code>&quot;Bounty Hunter&quot;</code> | |
| Retirement | <code>&quot;Retirement&quot;</code> | |
| Tracking | <code>&quot;Tracking&quot;</code> | |

@ -0,0 +1,25 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerGeneralActionName](./bitburner.bladeburnergeneralactionname.md)
## BladeburnerGeneralActionName enum
General action names of Bladeburner
**Signature:**
```typescript
declare enum BladeburnerGeneralActionName
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| Diplomacy | <code>&quot;Diplomacy&quot;</code> | |
| FieldAnalysis | <code>&quot;Field Analysis&quot;</code> | |
| HyperbolicRegen | <code>&quot;Hyperbolic Regeneration Chamber&quot;</code> | |
| InciteViolence | <code>&quot;Incite Violence&quot;</code> | |
| Recruitment | <code>&quot;Recruitment&quot;</code> | |
| Training | <code>&quot;Training&quot;</code> | |

@ -0,0 +1,25 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerOperationName](./bitburner.bladeburneroperationname.md)
## BladeburnerOperationName enum
Operation names of Bladeburner
**Signature:**
```typescript
declare enum BladeburnerOperationName
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| Assassination | <code>&quot;Assassination&quot;</code> | |
| Investigation | <code>&quot;Investigation&quot;</code> | |
| Raid | <code>&quot;Raid&quot;</code> | |
| StealthRetirement | <code>&quot;Stealth Retirement Operation&quot;</code> | |
| Sting | <code>&quot;Sting Operation&quot;</code> | |
| Undercover | <code>&quot;Undercover Operation&quot;</code> | |

@ -0,0 +1,31 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerSkillName](./bitburner.bladeburnerskillname.md)
## BladeburnerSkillName enum
Skill names type of Bladeburner
**Signature:**
```typescript
declare enum BladeburnerSkillName
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| BladesIntuition | <code>&quot;Blade's Intuition&quot;</code> | |
| Cloak | <code>&quot;Cloak&quot;</code> | |
| CybersEdge | <code>&quot;Cyber's Edge&quot;</code> | |
| Datamancer | <code>&quot;Datamancer&quot;</code> | |
| DigitalObserver | <code>&quot;Digital Observer&quot;</code> | |
| EvasiveSystem | <code>&quot;Evasive System&quot;</code> | |
| HandsOfMidas | <code>&quot;Hands of Midas&quot;</code> | |
| Hyperdrive | <code>&quot;Hyperdrive&quot;</code> | |
| Overclock | <code>&quot;Overclock&quot;</code> | |
| Reaper | <code>&quot;Reaper&quot;</code> | |
| ShortCircuit | <code>&quot;Short-Circuit&quot;</code> | |
| Tracer | <code>&quot;Tracer&quot;</code> | |

@ -0,0 +1,24 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [GymLocationName](./bitburner.gymlocationname.md)
## GymLocationName enum
Locations of gym
**Signature:**
```typescript
declare enum GymLocationName
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| AevumCrushFitnessGym | <code>LocationName.AevumCrushFitnessGym</code> | |
| AevumSnapFitnessGym | <code>LocationName.AevumSnapFitnessGym</code> | |
| Sector12IronGym | <code>LocationName.Sector12IronGym</code> | |
| Sector12PowerhouseGym | <code>LocationName.Sector12PowerhouseGym</code> | |
| VolhavenMilleniumFitnessGym | <code>LocationName.VolhavenMilleniumFitnessGym</code> | |

@ -8,18 +8,27 @@
| Enumeration | Description |
| --- | --- |
| [BladeburnerActionType](./bitburner.bladeburneractiontype.md) | Action types of Bladeburner |
| [BladeburnerBlackOpName](./bitburner.bladeburnerblackopname.md) | Black Operation names of Bladeburner |
| [BladeburnerContractName](./bitburner.bladeburnercontractname.md) | Contract names of Bladeburner |
| [BladeburnerGeneralActionName](./bitburner.bladeburnergeneralactionname.md) | General action names of Bladeburner |
| [BladeburnerOperationName](./bitburner.bladeburneroperationname.md) | Operation names of Bladeburner |
| [BladeburnerSkillName](./bitburner.bladeburnerskillname.md) | Skill names type of Bladeburner |
| [CityName](./bitburner.cityname.md) | Names of all cities |
| [CompanyName](./bitburner.companyname.md) | Names of all companies |
| [CrimeType](./bitburner.crimetype.md) | |
| [FactionWorkType](./bitburner.factionworktype.md) | |
| [GymLocationName](./bitburner.gymlocationname.md) | Locations of gym |
| [GymType](./bitburner.gymtype.md) | |
| [JobField](./bitburner.jobfield.md) | |
| [JobName](./bitburner.jobname.md) | |
| [LocationName](./bitburner.locationname.md) | Names of all locations |
| [OrderType](./bitburner.ordertype.md) | |
| [PositionType](./bitburner.positiontype.md) | |
| [SpecialBladeburnerActionTypeForSleeve](./bitburner.specialbladeburneractiontypeforsleeve.md) | These special Bladeburner action types are only for Sleeve |
| [ToastVariant](./bitburner.toastvariant.md) | |
| [UniversityClassType](./bitburner.universityclasstype.md) | |
| [UniversityLocationName](./bitburner.universitylocationname.md) | Locations of university |
## Interfaces
@ -152,6 +161,8 @@
| Type Alias | Description |
| --- | --- |
| [BladeburnerActionName](./bitburner.bladeburneractionname.md) | |
| [BladeburnerActionTypeForSleeve](./bitburner.bladeburneractiontypeforsleeve.md) | |
| [CodingContractData](./bitburner.codingcontractdata.md) | Coding contract data will differ depending on coding contract. |
| [CorpEmployeePosition](./bitburner.corpemployeeposition.md) | |
| [CorpIndustryName](./bitburner.corpindustryname.md) | |

@ -9,15 +9,15 @@ Workout at the gym.
**Signature:**
```typescript
gymWorkout(gymName: string, stat: string, focus?: boolean): boolean;
gymWorkout(gymName: GymLocationName | `${GymLocationName}`, stat: GymType | `${GymType}`, focus?: boolean): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| gymName | string | Name of gym. You must be in the correct city for whatever gym you specify. |
| stat | string | The stat you want to train. |
| gymName | [GymLocationName](./bitburner.gymlocationname.md) \| \`${[GymLocationName](./bitburner.gymlocationname.md)<!-- -->}\` | Name of gym. You must be in the correct city for whatever gym you specify. |
| stat | [GymType](./bitburner.gymtype.md) \| \`${[GymType](./bitburner.gymtype.md)<!-- -->}\` | The stat you want to train. |
| focus | boolean | _(Optional)_ Acquire player focus on this gym workout. Optional. Defaults to true. |
**Returns:**

@ -9,15 +9,19 @@ Take university class.
**Signature:**
```typescript
universityCourse(universityName: string, courseName: string, focus?: boolean): boolean;
universityCourse(
universityName: UniversityLocationName | `${UniversityLocationName}`,
courseName: UniversityClassType | `${UniversityClassType}`,
focus?: boolean,
): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| universityName | string | Name of university. You must be in the correct city for whatever university you specify. |
| courseName | string | Name of course. |
| universityName | [UniversityLocationName](./bitburner.universitylocationname.md) \| \`${[UniversityLocationName](./bitburner.universitylocationname.md)<!-- -->}\` | Name of university. You must be in the correct city for whatever university you specify. |
| courseName | [UniversityClassType](./bitburner.universityclasstype.md) \| \`${[UniversityClassType](./bitburner.universityclasstype.md)<!-- -->}\` | Name of course. |
| focus | boolean | _(Optional)_ Acquire player focus on this class. Optional. Defaults to true. |
**Returns:**

@ -36,6 +36,6 @@ If you are not in BitNode-10, then you must have Source-File 10 in order to use
| [setToIdle(sleeveNumber)](./bitburner.sleeve.settoidle.md) | Set a sleeve to idle. |
| [setToShockRecovery(sleeveNumber)](./bitburner.sleeve.settoshockrecovery.md) | Set a sleeve to shock recovery. |
| [setToSynchronize(sleeveNumber)](./bitburner.sleeve.settosynchronize.md) | Set a sleeve to synchronize. |
| [setToUniversityCourse(sleeveNumber, university, className)](./bitburner.sleeve.settouniversitycourse.md) | Set a sleeve to take a class at a university. |
| [setToUniversityCourse(sleeveNumber, universityName, courseName)](./bitburner.sleeve.settouniversitycourse.md) | Set a sleeve to take a class at a university. |
| [travel(sleeveNumber, city)](./bitburner.sleeve.travel.md) | Make a sleeve travel to another city. The cost for using this function is the same as for a player. |

@ -9,7 +9,11 @@ Set a sleeve to perform Bladeburner actions.
**Signature:**
```typescript
setToBladeburnerAction(sleeveNumber: number, action: string, contract?: string): boolean;
setToBladeburnerAction(
sleeveNumber: number,
action: BladeburnerActionTypeForSleeve | `${BladeburnerActionTypeForSleeve}`,
contract?: BladeburnerContractName,
): boolean;
```
## Parameters
@ -17,8 +21,8 @@ setToBladeburnerAction(sleeveNumber: number, action: string, contract?: string):
| Parameter | Type | Description |
| --- | --- | --- |
| sleeveNumber | number | Index of the sleeve to perform a Bladeburner action. |
| action | string | Name of the action to be performed. |
| contract | string | _(Optional)_ Name of the contract if applicable. |
| action | [BladeburnerActionTypeForSleeve](./bitburner.bladeburneractiontypeforsleeve.md) \| \`${[BladeburnerActionTypeForSleeve](./bitburner.bladeburneractiontypeforsleeve.md)<!-- -->}\` | Name of the action to be performed. |
| contract | [BladeburnerContractName](./bitburner.bladeburnercontractname.md) | _(Optional)_ Name of the contract if applicable. |
**Returns:**

@ -9,7 +9,11 @@ Set a sleeve to workout at the gym.
**Signature:**
```typescript
setToGymWorkout(sleeveNumber: number, gymName: string, stat: string): boolean;
setToGymWorkout(
sleeveNumber: number,
gymName: GymLocationName | `${GymLocationName}`,
stat: GymType | `${GymType}`,
): boolean;
```
## Parameters
@ -17,8 +21,8 @@ setToGymWorkout(sleeveNumber: number, gymName: string, stat: string): boolean;
| Parameter | Type | Description |
| --- | --- | --- |
| sleeveNumber | number | Index of the sleeve to workout at the gym. |
| gymName | string | Name of the gym. |
| stat | string | Name of the stat to train. |
| gymName | [GymLocationName](./bitburner.gymlocationname.md) \| \`${[GymLocationName](./bitburner.gymlocationname.md)<!-- -->}\` | Name of the gym. |
| stat | [GymType](./bitburner.gymtype.md) \| \`${[GymType](./bitburner.gymtype.md)<!-- -->}\` | Name of the stat to train. |
**Returns:**

@ -9,7 +9,11 @@ Set a sleeve to take a class at a university.
**Signature:**
```typescript
setToUniversityCourse(sleeveNumber: number, university: string, className: string): boolean;
setToUniversityCourse(
sleeveNumber: number,
universityName: UniversityLocationName | `${UniversityLocationName}`,
courseName: UniversityClassType | `${UniversityClassType}`,
): boolean;
```
## Parameters
@ -17,8 +21,8 @@ setToUniversityCourse(sleeveNumber: number, university: string, className: strin
| Parameter | Type | Description |
| --- | --- | --- |
| sleeveNumber | number | Index of the sleeve to start taking class. |
| university | string | Name of the university to attend. |
| className | string | Name of the class to follow. |
| universityName | [UniversityLocationName](./bitburner.universitylocationname.md) \| \`${[UniversityLocationName](./bitburner.universitylocationname.md)<!-- -->}\` | Name of the university to attend. |
| courseName | [UniversityClassType](./bitburner.universityclasstype.md) \| \`${[UniversityClassType](./bitburner.universityclasstype.md)<!-- -->}\` | Name of the course to follow. |
**Returns:**

@ -0,0 +1,22 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [SpecialBladeburnerActionTypeForSleeve](./bitburner.specialbladeburneractiontypeforsleeve.md)
## SpecialBladeburnerActionTypeForSleeve enum
These special Bladeburner action types are only for Sleeve
**Signature:**
```typescript
declare enum SpecialBladeburnerActionTypeForSleeve
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| InfiltrateSynthoids | <code>&quot;Infiltrate Synthoids&quot;</code> | |
| SupportMainSleeve | <code>&quot;Support main sleeve&quot;</code> | |
| TakeOnContracts | <code>&quot;Take on contracts&quot;</code> | |

@ -0,0 +1,22 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [UniversityLocationName](./bitburner.universitylocationname.md)
## UniversityLocationName enum
Locations of university
**Signature:**
```typescript
declare enum UniversityLocationName
```
## Enumeration Members
| Member | Value | Description |
| --- | --- | --- |
| AevumSummitUniversity | <code>LocationName.AevumSummitUniversity</code> | |
| Sector12RothmanUniversity | <code>LocationName.Sector12RothmanUniversity</code> | |
| VolhavenZBInstituteOfTechnology | <code>LocationName.VolhavenZBInstituteOfTechnology</code> | |

@ -1,6 +1,6 @@
import {
AugmentationName,
BladeSkillName,
BladeburnerSkillName,
CityName,
CompletedProgramName,
CorpUnlockName,
@ -417,7 +417,8 @@ export const achievements: Record<string, Achievement> = {
Icon: "BLADEOVERCLOCK",
Visible: () => canAccessBitNodeFeature(6),
Condition: () =>
Player.bladeburner?.getSkillLevel(BladeSkillName.overclock) === Skills[BladeSkillName.overclock].maxLvl,
Player.bladeburner?.getSkillLevel(BladeburnerSkillName.Overclock) ===
Skills[BladeburnerSkillName.Overclock].maxLvl,
},
BLADEBURNER_UNSPENT_100000: {
...achievementData.BLADEBURNER_UNSPENT_100000,

@ -6,7 +6,7 @@ import type { Skills as PersonSkills } from "../../PersonObjects/Skills";
import { addOffset } from "../../utils/helpers/addOffset";
import { BladeburnerConstants } from "../data/Constants";
import { calculateIntelligenceBonus } from "../../PersonObjects/formulas/intelligence";
import { BladeMultName } from "../Enums";
import { BladeburnerMultName } from "../Enums";
import { getRecordKeys } from "../../Types/Record";
import { clampNumber } from "../../utils/helpers/clampNumber";
@ -100,7 +100,7 @@ export abstract class ActionClass {
getActionTime(bladeburner: Bladeburner, person: Person): number {
const difficulty = this.getDifficulty();
let baseTime = difficulty / BladeburnerConstants.DifficultyToTimeFactor;
const skillFac = bladeburner.getSkillMult(BladeMultName.actionTime); // Always < 1
const skillFac = bladeburner.getSkillMult(BladeburnerMultName.ActionTime); // Always < 1
const effAgility = bladeburner.getEffectiveSkillLevel(person, "agility");
const effDexterity = bladeburner.getEffectiveSkillLevel(person, "dexterity");
@ -175,10 +175,10 @@ export abstract class ActionClass {
difficulty *= this.getChaosSuccessFactor(inst);
// Factor skill multipliers into success chance
competence *= inst.getSkillMult(BladeMultName.successChanceAll);
competence *= inst.getSkillMult(BladeburnerMultName.SuccessChanceAll);
competence *= this.getActionTypeSkillSuccessBonus(inst);
if (this.isStealth) competence *= inst.getSkillMult(BladeMultName.successChanceStealth);
if (this.isKill) competence *= inst.getSkillMult(BladeMultName.successChanceKill);
if (this.isStealth) competence *= inst.getSkillMult(BladeburnerMultName.SuccessChanceStealth);
if (this.isKill) competence *= inst.getSkillMult(BladeburnerMultName.SuccessChanceKill);
// Augmentation multiplier
competence *= person.mults.bladeburner_success_chance;

@ -1,19 +1,19 @@
import type { Bladeburner } from "../Bladeburner";
import type { Availability, ActionIdentifier } from "../Types";
import { BladeActionType, BladeBlackOpName } from "@enums";
import { BladeburnerActionType, BladeburnerBlackOpName } from "@enums";
import { ActionClass, ActionParams } from "./Action";
import { operationSkillSuccessBonus, operationTeamSuccessBonus } from "./Operation";
interface BlackOpParams {
name: BladeBlackOpName;
name: BladeburnerBlackOpName;
reqdRank: number;
n: number;
}
export class BlackOperation extends ActionClass {
type: BladeActionType.blackOp = BladeActionType.blackOp;
name: BladeBlackOpName;
type: BladeburnerActionType.BlackOp = BladeburnerActionType.BlackOp;
name: BladeburnerBlackOpName;
n: number;
reqdRank: number;
teamCount = 0;

@ -2,23 +2,23 @@ import type { Bladeburner } from "../Bladeburner";
import type { ActionIdentifier } from "../Types";
import { Generic_fromJSON, IReviverValue, constructorsForReviver } from "../../utils/JSONReviver";
import { BladeActionType, BladeContractName, BladeMultName } from "../Enums";
import { BladeburnerActionType, BladeburnerContractName, BladeburnerMultName } from "../Enums";
import { LevelableActionClass, LevelableActionParams } from "./LevelableAction";
export class Contract extends LevelableActionClass {
type: BladeActionType.contract = BladeActionType.contract;
name: BladeContractName = BladeContractName.tracking;
type: BladeburnerActionType.Contract = BladeburnerActionType.Contract;
name: BladeburnerContractName = BladeburnerContractName.Tracking;
get id(): ActionIdentifier {
return { type: this.type, name: this.name };
}
constructor(params: (LevelableActionParams & { name: BladeContractName }) | null = null) {
constructor(params: (LevelableActionParams & { name: BladeburnerContractName }) | null = null) {
super(params);
if (params) this.name = params.name;
}
getActionTypeSkillSuccessBonus(inst: Bladeburner): number {
return inst.getSkillMult(BladeMultName.successChanceContract);
return inst.getSkillMult(BladeburnerMultName.SuccessChanceContract);
}
toJSON(): IReviverValue {

@ -2,19 +2,19 @@ import type { Person } from "../../PersonObjects/Person";
import type { Bladeburner } from "../Bladeburner";
import type { ActionIdentifier } from "../Types";
import { BladeActionType, BladeGeneralActionName } from "@enums";
import { BladeburnerActionType, BladeburnerGeneralActionName } from "@enums";
import { ActionClass, ActionParams } from "./Action";
import { clampNumber } from "../../utils/helpers/clampNumber";
type GeneralActionParams = ActionParams & {
name: BladeGeneralActionName;
name: BladeburnerGeneralActionName;
getActionTime: (bladeburner: Bladeburner, person: Person) => number;
getSuccessChance?: (bladeburner: Bladeburner, person: Person) => number;
};
export class GeneralAction extends ActionClass {
type: BladeActionType.general = BladeActionType.general;
name: BladeGeneralActionName;
type: BladeburnerActionType.General = BladeburnerActionType.General;
name: BladeburnerGeneralActionName;
get id(): ActionIdentifier {
return { type: this.type, name: this.name };
}

@ -3,7 +3,7 @@ import type { BlackOperation } from "./BlackOperation";
import type { Bladeburner } from "../Bladeburner";
import type { Availability, ActionIdentifier, SuccessChanceParams } from "../Types";
import { BladeActionType, BladeMultName, BladeOperationName } from "@enums";
import { BladeburnerActionType, BladeburnerMultName, BladeburnerOperationName } from "@enums";
import { BladeburnerConstants } from "../data/Constants";
import { ActionClass } from "./Action";
import { Generic_fromJSON, IReviverValue, constructorsForReviver } from "../../utils/JSONReviver";
@ -11,13 +11,13 @@ import { LevelableActionClass, LevelableActionParams } from "./LevelableAction";
import { clampInteger } from "../../utils/helpers/clampNumber";
export interface OperationParams extends LevelableActionParams {
name: BladeOperationName;
name: BladeburnerOperationName;
getAvailability?: (bladeburner: Bladeburner) => Availability;
}
export class Operation extends LevelableActionClass {
type: BladeActionType.operation = BladeActionType.operation;
name = BladeOperationName.investigation;
type: BladeburnerActionType.Operation = BladeburnerActionType.Operation;
name = BladeburnerOperationName.Investigation;
teamCount = 0;
get id(): ActionIdentifier {
return { type: this.type, name: this.name };
@ -46,7 +46,7 @@ export class Operation extends LevelableActionClass {
return 1;
}
getSuccessChance(inst: Bladeburner, person: Person, params: SuccessChanceParams) {
if (this.name === BladeOperationName.raid && inst.getCurrentCity().comms <= 0) {
if (this.name === BladeburnerOperationName.Raid && inst.getCurrentCity().comms <= 0) {
return 0;
}
return ActionClass.prototype.getSuccessChance.call(this, inst, person, params);
@ -75,7 +75,7 @@ constructorsForReviver.Operation = Operation;
// shared member functions for Operation and BlackOperation
export const operationSkillSuccessBonus = (inst: Bladeburner) => {
return inst.getSkillMult(BladeMultName.successChanceOperation);
return inst.getSkillMult(BladeburnerMultName.SuccessChanceOperation);
};
export function operationTeamSuccessBonus(this: Operation | BlackOperation, inst: Bladeburner) {

@ -6,12 +6,12 @@ import type { Skills as PersonSkills } from "../PersonObjects/Skills";
import {
AugmentationName,
BladeActionType,
BladeContractName,
BladeGeneralActionName,
BladeMultName,
BladeOperationName,
BladeSkillName,
BladeburnerActionType,
BladeburnerContractName,
BladeburnerGeneralActionName,
BladeburnerMultName,
BladeburnerOperationName,
BladeburnerSkillName,
CityName,
FactionName,
} from "@enums";
@ -78,14 +78,14 @@ export class Bladeburner {
cities = createEnumKeyedRecord(CityName, (name) => new City(name));
city = CityName.Sector12;
// Todo: better types for all these Record<string, etc> types. Will need custom types or enums for the named string categories (e.g. skills).
skills: PartialRecord<BladeSkillName, number> = {};
skillMultipliers: PartialRecord<BladeMultName, number> = {};
skills: PartialRecord<BladeburnerSkillName, number> = {};
skillMultipliers: PartialRecord<BladeburnerMultName, number> = {};
staminaBonus = 0;
maxStamina = 1;
stamina = 1;
// Contracts and operations are stored on the Bladeburner object even though they are global so that they can utilize save/load of the main bladeburner object
contracts: Record<BladeContractName, Contract>;
operations: Record<BladeOperationName, Operation>;
contracts: Record<BladeburnerContractName, Contract>;
operations: Record<BladeburnerOperationName, Operation>;
numBlackOpsComplete = 0;
logging = {
general: true,
@ -142,13 +142,13 @@ export class Bladeburner {
}
/** Directly sets a skill level, with no validation */
setSkillLevel(skillName: BladeSkillName, value: number) {
setSkillLevel(skillName: BladeburnerSkillName, value: number) {
this.skills[skillName] = clampInteger(value, 0, Number.MAX_VALUE);
this.updateSkillMultipliers();
}
/** Attempts to perform a skill upgrade, gives a message on both success and failure */
upgradeSkill(skillName: BladeSkillName, count = 1): Attempt<{ message: string }> {
upgradeSkill(skillName: BladeburnerSkillName, count = 1): Attempt<{ message: string }> {
const currentSkillLevel = this.skills[skillName] ?? 0;
const actualCount = currentSkillLevel + count - currentSkillLevel;
if (actualCount === 0) {
@ -284,7 +284,7 @@ export class Bladeburner {
}
case 3: {
const skillName = args[2];
if (!getEnumHelper("BladeSkillName").isMember(skillName)) {
if (!getEnumHelper("BladeburnerSkillName").isMember(skillName)) {
this.postToConsole("Invalid skill name (Note that it is case-sensitive): " + skillName);
return;
}
@ -450,31 +450,31 @@ export class Bladeburner {
return;
case "general":
case "gen": {
if (!getEnumHelper("BladeGeneralActionName").isMember(name)) {
if (!getEnumHelper("BladeburnerGeneralActionName").isMember(name)) {
this.postToConsole("Invalid General Action name specified: " + name);
return;
}
actionId = { type: BladeActionType.general, name };
actionId = { type: BladeburnerActionType.General, name };
break;
}
case "contract":
case "contracts": {
if (!getEnumHelper("BladeContractName").isMember(name)) {
if (!getEnumHelper("BladeburnerContractName").isMember(name)) {
this.postToConsole("Invalid Contract name specified: " + name);
return;
}
actionId = { type: BladeActionType.contract, name };
actionId = { type: BladeburnerActionType.Contract, name };
break;
}
case "ops":
case "op":
case "operations":
case "operation":
if (!getEnumHelper("BladeOperationName").isMember(name)) {
if (!getEnumHelper("BladeburnerOperationName").isMember(name)) {
this.postToConsole("Invalid Operation name specified: " + name);
return;
}
actionId = { type: BladeActionType.operation, name };
actionId = { type: BladeburnerActionType.Operation, name };
break;
default:
this.postToConsole("Invalid use of automate command.");
@ -685,7 +685,7 @@ export class Bladeburner {
const unweightedGain = time * BladeburnerConstants.BaseStatGain * successMult * difficultyMult;
const unweightedIntGain = time * BladeburnerConstants.BaseIntGain * successMult * difficultyMult;
const skillMult = this.getSkillMult(BladeMultName.expGain);
const skillMult = this.getSkillMult(BladeburnerMultName.ExpGain);
return {
hackExp: unweightedGain * action.weights.hacking * skillMult,
@ -724,22 +724,22 @@ export class Bladeburner {
}
}
getSkillMult(name: BladeMultName): number {
getSkillMult(name: BladeburnerMultName): number {
return this.skillMultipliers[name] ?? 1;
}
getEffectiveSkillLevel(person: Person, name: keyof PersonSkills): number {
switch (name) {
case "strength":
return person.skills.strength * this.getSkillMult(BladeMultName.effStr);
return person.skills.strength * this.getSkillMult(BladeburnerMultName.EffStr);
case "defense":
return person.skills.defense * this.getSkillMult(BladeMultName.effDef);
return person.skills.defense * this.getSkillMult(BladeburnerMultName.EffDef);
case "dexterity":
return person.skills.dexterity * this.getSkillMult(BladeMultName.effDex);
return person.skills.dexterity * this.getSkillMult(BladeburnerMultName.EffDex);
case "agility":
return person.skills.agility * this.getSkillMult(BladeMultName.effAgi);
return person.skills.agility * this.getSkillMult(BladeburnerMultName.EffAgi);
case "charisma":
return person.skills.charisma * this.getSkillMult(BladeMultName.effCha);
return person.skills.charisma * this.getSkillMult(BladeburnerMultName.EffCha);
default:
return person.skills[name];
}
@ -758,7 +758,7 @@ export class Bladeburner {
}
completeOperation(success: boolean): void {
if (this.action?.type !== BladeActionType.operation) {
if (this.action?.type !== BladeburnerActionType.Operation) {
throw new Error("completeOperation() called even though current action is not an Operation");
}
const action = this.getActionObject(this.action);
@ -786,21 +786,25 @@ export class Bladeburner {
const city = this.getCurrentCity();
switch (action.name) {
case BladeOperationName.investigation:
case BladeburnerOperationName.Investigation:
if (success) {
city.improvePopulationEstimateByPercentage(0.4 * this.getSkillMult(BladeMultName.successChanceEstimate));
city.improvePopulationEstimateByPercentage(
0.4 * this.getSkillMult(BladeburnerMultName.SuccessChanceEstimate),
);
} else {
this.triggerPotentialMigration(this.city, 0.1);
}
break;
case BladeOperationName.undercover:
case BladeburnerOperationName.Undercover:
if (success) {
city.improvePopulationEstimateByPercentage(0.8 * this.getSkillMult(BladeMultName.successChanceEstimate));
city.improvePopulationEstimateByPercentage(
0.8 * this.getSkillMult(BladeburnerMultName.SuccessChanceEstimate),
);
} else {
this.triggerPotentialMigration(this.city, 0.15);
}
break;
case BladeOperationName.sting:
case BladeburnerOperationName.Sting:
if (success) {
city.changePopulationByPercentage(-0.1, {
changeEstEqually: true,
@ -809,7 +813,7 @@ export class Bladeburner {
}
city.changeChaosByCount(0.1);
break;
case BladeOperationName.raid:
case BladeburnerOperationName.Raid:
if (success) {
city.changePopulationByPercentage(-1, {
changeEstEqually: true,
@ -825,7 +829,7 @@ export class Bladeburner {
}
city.changeChaosByPercentage(getRandomIntInclusive(1, 5));
break;
case BladeOperationName.stealthRetirement:
case BladeburnerOperationName.StealthRetirement:
if (success) {
city.changePopulationByPercentage(-0.5, {
changeEstEqually: true,
@ -834,7 +838,7 @@ export class Bladeburner {
}
city.changeChaosByPercentage(getRandomIntInclusive(-3, -1));
break;
case BladeOperationName.assassination:
case BladeburnerOperationName.Assassination:
if (success) {
city.changePopulationByCount(-1, { estChange: -1, estOffset: 0 });
}
@ -849,17 +853,17 @@ export class Bladeburner {
const city = this.getCurrentCity();
if (success) {
switch (action.name) {
case BladeContractName.tracking:
case BladeburnerContractName.Tracking:
// Increase estimate accuracy by a relatively small amount
city.improvePopulationEstimateByCount(
getRandomIntInclusive(100, 1e3) * this.getSkillMult(BladeMultName.successChanceEstimate),
getRandomIntInclusive(100, 1e3) * this.getSkillMult(BladeburnerMultName.SuccessChanceEstimate),
);
break;
case BladeContractName.bountyHunter:
case BladeburnerContractName.BountyHunter:
city.changePopulationByCount(-1, { estChange: -1, estOffset: 0 });
city.changeChaosByCount(0.02);
break;
case BladeContractName.retirement:
case BladeburnerContractName.Retirement:
city.changePopulationByCount(-1, { estChange: -1, estOffset: 0 });
city.changeChaosByCount(0.04);
break;
@ -887,10 +891,10 @@ export class Bladeburner {
let retValue = newWorkStats();
const action = this.getActionObject(actionIdent);
switch (action.type) {
case BladeActionType.contract:
case BladeActionType.operation: {
case BladeburnerActionType.Contract:
case BladeburnerActionType.Operation: {
try {
const isOperation = action.type === BladeActionType.operation;
const isOperation = action.type === BladeburnerActionType.Operation;
const difficulty = action.getDifficulty();
const difficultyMultiplier =
Math.pow(difficulty, BladeburnerConstants.DiffMultExponentialFactor) +
@ -915,7 +919,9 @@ export class Bladeburner {
let moneyGain = 0;
if (!isOperation) {
moneyGain =
BladeburnerConstants.ContractBaseMoneyGain * rewardMultiplier * this.getSkillMult(BladeMultName.money);
BladeburnerConstants.ContractBaseMoneyGain *
rewardMultiplier *
this.getSkillMult(BladeburnerMultName.Money);
retValue.money = moneyGain;
}
@ -980,7 +986,7 @@ export class Bladeburner {
}
break;
}
case BladeActionType.blackOp: {
case BladeburnerActionType.BlackOp: {
const difficulty = action.getDifficulty();
const difficultyMultiplier =
Math.pow(difficulty, BladeburnerConstants.DiffMultExponentialFactor) +
@ -1064,15 +1070,15 @@ export class Bladeburner {
}
break;
}
case BladeActionType.general:
case BladeburnerActionType.General:
switch (action.name) {
case BladeGeneralActionName.training: {
case BladeburnerGeneralActionName.Training: {
this.stamina -= 0.5 * BladeburnerConstants.BaseStaminaLoss;
const strExpGain = 30 * person.mults.strength_exp,
defExpGain = 30 * person.mults.defense_exp,
dexExpGain = 30 * person.mults.dexterity_exp,
agiExpGain = 30 * person.mults.agility_exp,
staminaGain = 0.04 * this.getSkillMult(BladeMultName.stamina);
staminaGain = 0.04 * this.getSkillMult(BladeburnerMultName.Stamina);
retValue.strExp = strExpGain;
retValue.defExp = defExpGain;
retValue.dexExp = dexExpGain;
@ -1096,7 +1102,7 @@ export class Bladeburner {
}
break;
}
case BladeGeneralActionName.fieldAnalysis: {
case BladeburnerGeneralActionName.FieldAnalysis: {
// Does not use stamina. Effectiveness depends on hacking, int, and cha
let eff =
0.04 * Math.pow(person.skills.hacking, 0.3) +
@ -1114,7 +1120,7 @@ export class Bladeburner {
retValue.intExp = BladeburnerConstants.BaseIntGain;
this.changeRank(person, rankGain);
this.getCurrentCity().improvePopulationEstimateByPercentage(
eff * this.getSkillMult(BladeMultName.successChanceEstimate),
eff * this.getSkillMult(BladeburnerMultName.SuccessChanceEstimate),
);
if (this.logging.general) {
this.log(
@ -1126,7 +1132,7 @@ export class Bladeburner {
}
break;
}
case BladeGeneralActionName.recruitment: {
case BladeburnerGeneralActionName.Recruitment: {
const actionTime = action.getActionTime(this, person) * 1000;
if (action.attempt(this, person)) {
const expGain = 2 * BladeburnerConstants.BaseStatGain * actionTime;
@ -1154,7 +1160,7 @@ export class Bladeburner {
}
break;
}
case BladeGeneralActionName.diplomacy: {
case BladeburnerGeneralActionName.Diplomacy: {
const diplomacyPct = this.getDiplomacyPercentage(person);
this.getCurrentCity().changeChaosByPercentage(-diplomacyPct);
if (this.logging.general) {
@ -1166,7 +1172,7 @@ export class Bladeburner {
}
break;
}
case BladeGeneralActionName.hyperbolicRegen: {
case BladeburnerGeneralActionName.HyperbolicRegen: {
person.regenerateHp(BladeburnerConstants.HrcHpGain);
const currentStamina = this.stamina;
@ -1188,7 +1194,7 @@ export class Bladeburner {
}
break;
}
case BladeGeneralActionName.inciteViolence: {
case BladeburnerGeneralActionName.InciteViolence: {
for (const contract of Object.values(this.contracts)) {
contract.count += (60 * 3 * contract.growthFunction()) / BladeburnerConstants.ActionCountGrowthPeriod;
}
@ -1222,10 +1228,10 @@ export class Bladeburner {
infiltrateSynthoidCommunities(): void {
const infilSleeves = Player.sleeves.filter((s) => isSleeveInfiltrateWork(s.currentWork)).length;
const amt = Math.pow(infilSleeves, -0.5) / 2;
for (const contract of Object.values(BladeContractName)) {
for (const contract of Object.values(BladeburnerContractName)) {
this.contracts[contract].count += amt;
}
for (const operation of Object.values(BladeOperationName)) {
for (const operation of Object.values(BladeburnerOperationName)) {
this.operations[operation].count += amt;
}
if (this.logging.general) {
@ -1280,7 +1286,7 @@ export class Bladeburner {
const retValue = this.completeAction(Player, action.id);
Player.gainMoney(retValue.money, "bladeburner");
Player.gainStats(retValue);
if (action.type != BladeActionType.blackOp) {
if (action.type != BladeburnerActionType.BlackOp) {
this.startAction(action.id); // Attempt to repeat action
}
}
@ -1290,7 +1296,10 @@ export class Bladeburner {
const effAgility = this.getEffectiveSkillLevel(Player, "agility");
const maxStaminaBonus = this.maxStamina / BladeburnerConstants.MaxStaminaToGainFactor;
const gain = (BladeburnerConstants.StaminaGainPerSecond + maxStaminaBonus) * Math.pow(effAgility, 0.17);
return clampNumber(gain * (this.getSkillMult(BladeMultName.stamina) * Player.mults.bladeburner_stamina_gain), 0);
return clampNumber(
gain * (this.getSkillMult(BladeburnerMultName.Stamina) * Player.mults.bladeburner_stamina_gain),
0,
);
}
calculateMaxStamina(): void {
@ -1298,7 +1307,7 @@ export class Bladeburner {
// Min value of maxStamina is an arbitrarily small positive value. It must not be 0 to avoid NaN stamina penalty.
const maxStamina = clampNumber(
(baseStamina + this.staminaBonus) *
this.getSkillMult(BladeMultName.stamina) *
this.getSkillMult(BladeburnerMultName.Stamina) *
Player.mults.bladeburner_max_stamina,
1e-9,
);
@ -1311,7 +1320,7 @@ export class Bladeburner {
this.stamina = clampNumber((this.maxStamina * this.stamina) / oldMax, 0, maxStamina);
}
getSkillLevel(skillName: BladeSkillName): number {
getSkillLevel(skillName: BladeburnerSkillName): number {
return this.skills[skillName] ?? 0;
}
@ -1397,20 +1406,20 @@ export class Bladeburner {
}
/** Return the action based on an ActionIdentifier, discriminating types when possible */
getActionObject(actionId: ActionIdentifier & { type: BladeActionType.blackOp }): BlackOperation;
getActionObject(actionId: ActionIdentifier & { type: BladeActionType.operation }): Operation;
getActionObject(actionId: ActionIdentifier & { type: BladeActionType.contract }): Contract;
getActionObject(actionId: ActionIdentifier & { type: BladeActionType.general }): GeneralAction;
getActionObject(actionId: ActionIdentifier & { type: BladeburnerActionType.BlackOp }): BlackOperation;
getActionObject(actionId: ActionIdentifier & { type: BladeburnerActionType.Operation }): Operation;
getActionObject(actionId: ActionIdentifier & { type: BladeburnerActionType.Contract }): Contract;
getActionObject(actionId: ActionIdentifier & { type: BladeburnerActionType.General }): GeneralAction;
getActionObject(actionId: ActionIdentifier): Action;
getActionObject(actionId: ActionIdentifier): Action {
switch (actionId.type) {
case BladeActionType.contract:
case BladeburnerActionType.Contract:
return this.contracts[actionId.name];
case BladeActionType.operation:
case BladeburnerActionType.Operation:
return this.operations[actionId.name];
case BladeActionType.blackOp:
case BladeburnerActionType.BlackOp:
return BlackOperations[actionId.name];
case BladeActionType.general:
case BladeburnerActionType.General:
return GeneralActions[actionId.name];
}
}
@ -1423,13 +1432,13 @@ export class Bladeburner {
case "contract":
case "contracts":
case "contr":
if (!getEnumHelper("BladeContractName").isMember(name)) return null;
if (!getEnumHelper("BladeburnerContractName").isMember(name)) return null;
return this.contracts[name];
case "operation":
case "operations":
case "op":
case "ops":
if (!getEnumHelper("BladeOperationName").isMember(name)) return null;
if (!getEnumHelper("BladeburnerOperationName").isMember(name)) return null;
return this.operations[name];
case "blackoperation":
case "black operation":
@ -1438,12 +1447,12 @@ export class Bladeburner {
case "black ops":
case "blackop":
case "blackops":
if (!getEnumHelper("BladeBlackOpName").isMember(name)) return null;
if (!getEnumHelper("BladeburnerBlackOpName").isMember(name)) return null;
return BlackOperations[name];
case "general":
case "general action":
case "gen": {
if (!getEnumHelper("BladeGeneralActionName").isMember(name)) return null;
if (!getEnumHelper("BladeburnerGeneralActionName").isMember(name)) return null;
return GeneralActions[name];
}
}

@ -1,31 +1,35 @@
export enum BladeActionType {
general = "General",
contract = "Contracts",
operation = "Operations",
blackOp = "Black Operations",
export enum BladeburnerActionType {
General = "General",
Contract = "Contracts",
Operation = "Operations",
BlackOp = "Black Operations",
}
export enum BladeGeneralActionName {
training = "Training",
fieldAnalysis = "Field Analysis",
recruitment = "Recruitment",
diplomacy = "Diplomacy",
hyperbolicRegen = "Hyperbolic Regeneration Chamber",
inciteViolence = "Incite Violence",
export enum BladeburnerGeneralActionName {
Training = "Training",
FieldAnalysis = "Field Analysis",
Recruitment = "Recruitment",
Diplomacy = "Diplomacy",
HyperbolicRegen = "Hyperbolic Regeneration Chamber",
InciteViolence = "Incite Violence",
}
export enum BladeContractName {
tracking = "Tracking",
bountyHunter = "Bounty Hunter",
retirement = "Retirement",
export enum BladeburnerContractName {
Tracking = "Tracking",
BountyHunter = "Bounty Hunter",
Retirement = "Retirement",
}
export enum BladeOperationName {
investigation = "Investigation",
undercover = "Undercover Operation",
sting = "Sting Operation",
raid = "Raid",
stealthRetirement = "Stealth Retirement Operation",
assassination = "Assassination",
export enum BladeburnerOperationName {
Investigation = "Investigation",
Undercover = "Undercover Operation",
Sting = "Sting Operation",
Raid = "Raid",
StealthRetirement = "Stealth Retirement Operation",
Assassination = "Assassination",
}
export enum BladeBlackOpName {
export enum BladeburnerBlackOpName {
OperationTyphoon = "Operation Typhoon",
OperationZero = "Operation Zero",
OperationX = "Operation X",
@ -49,35 +53,35 @@ export enum BladeBlackOpName {
OperationDaedalus = "Operation Daedalus",
}
export enum BladeSkillName {
bladesIntuition = "Blade's Intuition",
cloak = "Cloak",
shortCircuit = "Short-Circuit",
digitalObserver = "Digital Observer",
tracer = "Tracer",
overclock = "Overclock",
reaper = "Reaper",
evasiveSystem = "Evasive System",
datamancer = "Datamancer",
cybersEdge = "Cyber's Edge",
handsOfMidas = "Hands of Midas",
hyperdrive = "Hyperdrive",
export enum BladeburnerSkillName {
BladesIntuition = "Blade's Intuition",
Cloak = "Cloak",
ShortCircuit = "Short-Circuit",
DigitalObserver = "Digital Observer",
Tracer = "Tracer",
Overclock = "Overclock",
Reaper = "Reaper",
EvasiveSystem = "Evasive System",
Datamancer = "Datamancer",
CybersEdge = "Cyber's Edge",
HandsOfMidas = "Hands of Midas",
Hyperdrive = "Hyperdrive",
}
export enum BladeMultName {
successChanceAll = "Total Success Chance",
successChanceStealth = "Stealth Success Chance",
successChanceKill = "Retirement Success Chance",
successChanceContract = "Contract Success Chance",
successChanceOperation = "Operation Success Chance",
successChanceEstimate = "Synthoid Data Estimate",
actionTime = "Action Time",
effStr = "Effective Strength",
effDef = "Effective Defense",
effDex = "Effective Dexterity",
effAgi = "Effective Agility",
effCha = "Effective Charisma",
stamina = "Stamina",
money = "Contract Money",
expGain = "Experience Gain",
export enum BladeburnerMultName {
SuccessChanceAll = "Total Success Chance",
SuccessChanceStealth = "Stealth Success Chance",
SuccessChanceKill = "Retirement Success Chance",
SuccessChanceContract = "Contract Success Chance",
SuccessChanceOperation = "Operation Success Chance",
SuccessChanceEstimate = "Synthoid Data Estimate",
ActionTime = "Action Time",
EffStr = "Effective Strength",
EffDef = "Effective Defense",
EffDex = "Effective Dexterity",
EffAgi = "Effective Agility",
EffCha = "Effective Charisma",
Stamina = "Stamina",
Money = "Contract Money",
ExpGain = "Experience Gain",
}

@ -1,4 +1,4 @@
import type { BladeMultName, BladeSkillName } from "@enums";
import type { BladeburnerMultName, BladeburnerSkillName } from "@enums";
import { currentNodeMults } from "../BitNode/BitNodeMultipliers";
import { Bladeburner } from "./Bladeburner";
@ -7,23 +7,23 @@ import { PositiveInteger, PositiveNumber, isPositiveInteger } from "../types";
import { PartialRecord, getRecordEntries } from "../Types/Record";
interface SkillParams {
name: BladeSkillName;
name: BladeburnerSkillName;
desc: string;
baseCost?: number;
costInc?: number;
maxLvl?: number;
mults: PartialRecord<BladeMultName, number>;
mults: PartialRecord<BladeburnerMultName, number>;
}
export class Skill {
name: BladeSkillName;
name: BladeburnerSkillName;
desc: string;
// Cost is in Skill Points
baseCost: number;
// Additive cost increase per level
costInc: number;
maxLvl: number;
mults: PartialRecord<BladeMultName, number> = {};
mults: PartialRecord<BladeburnerMultName, number> = {};
constructor(params: SkillParams) {
this.name = params.name;
@ -150,7 +150,7 @@ export class Skill {
return { available: true, cost };
}
getMultiplier(name: BladeMultName): number {
getMultiplier(name: BladeburnerMultName): number {
return this.mults[name] ?? 0;
}
}

@ -1,10 +1,10 @@
import type { BlackOperation, Contract, GeneralAction, Operation } from "./Actions";
import type {
BladeActionType,
BladeBlackOpName,
BladeContractName,
BladeOperationName,
BladeGeneralActionName,
BladeburnerActionType,
BladeburnerBlackOpName,
BladeburnerContractName,
BladeburnerOperationName,
BladeburnerGeneralActionName,
} from "@enums";
export interface SuccessChanceParams {
@ -23,9 +23,9 @@ export type Attempt<T extends object = object> = AttemptSuccess<T> | AttemptFail
export type Action = Contract | Operation | BlackOperation | GeneralAction;
export type ActionIdentifier =
| { type: BladeActionType.blackOp; name: BladeBlackOpName }
| { type: BladeActionType.contract; name: BladeContractName }
| { type: BladeActionType.operation; name: BladeOperationName }
| { type: BladeActionType.general; name: BladeGeneralActionName };
| { type: BladeburnerActionType.BlackOp; name: BladeburnerBlackOpName }
| { type: BladeburnerActionType.Contract; name: BladeburnerContractName }
| { type: BladeburnerActionType.Operation; name: BladeburnerOperationName }
| { type: BladeburnerActionType.General; name: BladeburnerGeneralActionName };
export type LevelableAction = Contract | Operation;

@ -1,9 +1,9 @@
import { BlackOperation } from "../Actions/BlackOperation";
import { BladeBlackOpName, CityName, FactionName } from "@enums";
import { BladeburnerBlackOpName, CityName, FactionName } from "@enums";
export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
[BladeBlackOpName.OperationTyphoon]: new BlackOperation({
name: BladeBlackOpName.OperationTyphoon,
export const BlackOperations: Record<BladeburnerBlackOpName, BlackOperation> = {
[BladeburnerBlackOpName.OperationTyphoon]: new BlackOperation({
name: BladeburnerBlackOpName.OperationTyphoon,
n: 0,
baseDifficulty: 2000,
reqdRank: 2.5e3,
@ -32,11 +32,11 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
desc:
"Obadiah Zenyatta is the leader of a RedWater PMC. It has long been known among the intelligence community " +
"that Zenyatta, along with the rest of the PMC, is a Synthoid.\n\n" +
`The goal of ${BladeBlackOpName.OperationTyphoon} is to find and eliminate Zenyatta and RedWater by any means ` +
`The goal of ${BladeburnerBlackOpName.OperationTyphoon} is to find and eliminate Zenyatta and RedWater by any means ` +
"necessary. After the task is completed, the actions must be covered up from the general public.",
}),
[BladeBlackOpName.OperationZero]: new BlackOperation({
name: BladeBlackOpName.OperationZero,
[BladeburnerBlackOpName.OperationZero]: new BlackOperation({
name: BladeburnerBlackOpName.OperationZero,
n: 1,
baseDifficulty: 2500,
reqdRank: 5e3,
@ -65,13 +65,13 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
desc:
"AeroCorp is one of the world's largest defense contractors. Its leader, Steve Watataki, is thought to be " +
"a supporter of Synthoid rights. He must be removed.\n\n" +
`The goal of ${BladeBlackOpName.OperationZero} is to covertly infiltrate AeroCorp and uncover any incriminating ` +
`The goal of ${BladeburnerBlackOpName.OperationZero} is to covertly infiltrate AeroCorp and uncover any incriminating ` +
"evidence or information against Watataki that will cause him to be removed from his position at AeroCorp. " +
"Incriminating evidence can be fabricated as a last resort. Be warned that AeroCorp has some of the most advanced " +
"security measures in the world.",
}),
[BladeBlackOpName.OperationX]: new BlackOperation({
name: BladeBlackOpName.OperationX,
[BladeburnerBlackOpName.OperationX]: new BlackOperation({
name: BladeburnerBlackOpName.OperationX,
n: 2,
baseDifficulty: 3000,
reqdRank: 7.5e3,
@ -106,8 +106,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
`their base of operations is in ${CityName.Ishima}'s underground sewer systems. Your task is to investigate the ` +
"sewer systems, and eliminate Samizdat. They must never publish anything again.",
}),
[BladeBlackOpName.OperationTitan]: new BlackOperation({
name: BladeBlackOpName.OperationTitan,
[BladeburnerBlackOpName.OperationTitan]: new BlackOperation({
name: BladeburnerBlackOpName.OperationTitan,
n: 3,
baseDifficulty: 4000,
reqdRank: 10e3,
@ -142,8 +142,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"just to retire the Synthoids there, but also to destroy any information or research at the facility that is " +
"relevant to the Synthoids and their goals.",
}),
[BladeBlackOpName.OperationAres]: new BlackOperation({
name: BladeBlackOpName.OperationAres,
[BladeburnerBlackOpName.OperationAres]: new BlackOperation({
name: BladeburnerBlackOpName.OperationAres,
n: 4,
baseDifficulty: 5000,
reqdRank: 12.5e3,
@ -175,8 +175,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"weapons. It is critical for the safety of humanity that this deal does not happen.\n\n" +
"Your task is to intercept the deal. Leave no survivors.",
}),
[BladeBlackOpName.OperationArchangel]: new BlackOperation({
name: BladeBlackOpName.OperationArchangel,
[BladeburnerBlackOpName.OperationArchangel]: new BlackOperation({
name: BladeburnerBlackOpName.OperationArchangel,
n: 5,
baseDifficulty: 7500,
reqdRank: 15e3,
@ -209,8 +209,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"The goal of this operation is to take out the leaders that are running the Red Rabbit brothel. Try to limit the " +
"number of other casualties, but do what you must to complete the mission.",
}),
[BladeBlackOpName.OperationJuggernaut]: new BlackOperation({
name: BladeBlackOpName.OperationJuggernaut,
[BladeburnerBlackOpName.OperationJuggernaut]: new BlackOperation({
name: BladeburnerBlackOpName.OperationJuggernaut,
n: 6,
baseDifficulty: 10e3,
reqdRank: 20e3,
@ -244,8 +244,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"Synthoid, and have thus enlisted our help.\n\n" +
"Your mission is to eradicate Juggernaut and his followers.",
}),
[BladeBlackOpName.OperationRedDragon]: new BlackOperation({
name: BladeBlackOpName.OperationRedDragon,
[BladeburnerBlackOpName.OperationRedDragon]: new BlackOperation({
name: BladeburnerBlackOpName.OperationRedDragon,
n: 7,
baseDifficulty: 12.5e3,
reqdRank: 25e3,
@ -278,8 +278,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
`Your task is to infiltrate and destroy the ${FactionName.Tetrads}' base of operations in Los Angeles. ` +
"Intelligence tells us that their base houses one of their Synthoid manufacturing units.",
}),
[BladeBlackOpName.OperationK]: new BlackOperation({
name: BladeBlackOpName.OperationK,
[BladeburnerBlackOpName.OperationK]: new BlackOperation({
name: BladeburnerBlackOpName.OperationK,
n: 8,
baseDifficulty: 15e3,
reqdRank: 30e3,
@ -315,8 +315,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"to a covert operation. Your goal is to destroy this technology and eliminate anyone who was involved in its " +
"creation.",
}),
[BladeBlackOpName.OperationDeckard]: new BlackOperation({
name: BladeBlackOpName.OperationDeckard,
[BladeburnerBlackOpName.OperationDeckard]: new BlackOperation({
name: BladeburnerBlackOpName.OperationDeckard,
n: 9,
baseDifficulty: 20e3,
reqdRank: 40e3,
@ -344,14 +344,14 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
isKill: true,
desc:
"Despite your success in eliminating VitaLife's new android-replicating technology in " +
`${BladeBlackOpName.OperationK}, we've discovered that a small group of MK-VI Synthoids were able to make off with ` +
`${BladeburnerBlackOpName.OperationK}, we've discovered that a small group of MK-VI Synthoids were able to make off with ` +
"the schematics and design of the technology before the Operation. It is almost a certainty that these Synthoids " +
"are some of the rogue MK-VI ones from the Synthoid Uprising.\n\n" +
`The goal of ${BladeBlackOpName.OperationDeckard} is to hunt down these Synthoids and retire them. I don't need to ` +
`The goal of ${BladeburnerBlackOpName.OperationDeckard} is to hunt down these Synthoids and retire them. I don't need to ` +
"tell you how critical this mission is.",
}),
[BladeBlackOpName.OperationTyrell]: new BlackOperation({
name: BladeBlackOpName.OperationTyrell,
[BladeburnerBlackOpName.OperationTyrell]: new BlackOperation({
name: BladeburnerBlackOpName.OperationTyrell,
n: 10,
baseDifficulty: 25e3,
reqdRank: 50e3,
@ -384,8 +384,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"We cannot have Synthoids upgrading their already-enhanced abilities with Augmentations. Your task is to hunt " +
`down associated ${FactionName.TheDarkArmy} members and eliminate them.`,
}),
[BladeBlackOpName.OperationWallace]: new BlackOperation({
name: BladeBlackOpName.OperationWallace,
[BladeburnerBlackOpName.OperationWallace]: new BlackOperation({
name: BladeburnerBlackOpName.OperationWallace,
n: 11,
baseDifficulty: 30e3,
reqdRank: 75e3,
@ -412,18 +412,18 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
},
isKill: true,
desc:
`Based on information gathered from ${BladeBlackOpName.OperationTyrell}, we've discovered that ` +
`Based on information gathered from ${BladeburnerBlackOpName.OperationTyrell}, we've discovered that ` +
`${FactionName.TheDarkArmy} was well aware that there were Synthoids amongst their ranks. Even worse, we believe ` +
`that ${FactionName.TheDarkArmy} is working together with other criminal organizations such as ` +
`${FactionName.TheSyndicate} and that they are planning some sort of large-scale takeover of multiple major ` +
`cities, most notably ${CityName.Aevum}. We suspect that Synthoids have infiltrated the ranks of these criminal ` +
"factions and are trying to stage another Synthoid uprising.\n\n" +
"The best way to deal with this is to prevent it before it even happens. The goal of " +
`${BladeBlackOpName.OperationWallace} is to destroy ${FactionName.TheDarkArmy} and Syndicate factions in ` +
`${BladeburnerBlackOpName.OperationWallace} is to destroy ${FactionName.TheDarkArmy} and Syndicate factions in ` +
`${CityName.Aevum} immediately. Leave no survivors.`,
}),
[BladeBlackOpName.OperationShoulderOfOrion]: new BlackOperation({
name: BladeBlackOpName.OperationShoulderOfOrion,
[BladeburnerBlackOpName.OperationShoulderOfOrion]: new BlackOperation({
name: BladeburnerBlackOpName.OperationShoulderOfOrion,
n: 12,
baseDifficulty: 35e3,
reqdRank: 100e3,
@ -456,8 +456,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"mission you will be officially disavowed by the NSA and the national government until after you successfully " +
"return. In the event of failure, all of the operation's team members must not let themselves be captured alive.",
}),
[BladeBlackOpName.OperationHyron]: new BlackOperation({
name: BladeBlackOpName.OperationHyron,
[BladeburnerBlackOpName.OperationHyron]: new BlackOperation({
name: BladeburnerBlackOpName.OperationHyron,
n: 13,
baseDifficulty: 40e3,
reqdRank: 125e3,
@ -493,8 +493,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
`facilities in ${CityName.Aevum}, codenamed 'Alpha Ranch'. Infiltrate the compound, delete and destroy the work, ` +
"and then find and kill the project lead.",
}),
[BladeBlackOpName.OperationMorpheus]: new BlackOperation({
name: BladeBlackOpName.OperationMorpheus,
[BladeburnerBlackOpName.OperationMorpheus]: new BlackOperation({
name: BladeburnerBlackOpName.OperationMorpheus,
n: 14,
baseDifficulty: 45e3,
reqdRank: 150e3,
@ -527,8 +527,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"has been compromised by Synthoids and is being used to spread pro-Synthoid propaganda.\n\n" +
"The mission is to destroy this broadcast tower. Speed and stealth are of the utmost importance for this.",
}),
[BladeBlackOpName.OperationIonStorm]: new BlackOperation({
name: BladeBlackOpName.OperationIonStorm,
[BladeburnerBlackOpName.OperationIonStorm]: new BlackOperation({
name: BladeburnerBlackOpName.OperationIonStorm,
n: 15,
baseDifficulty: 50e3,
reqdRank: 175e3,
@ -561,8 +561,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
`This is a full-scale assault operation to find and retire all of these Synthoids in the ${CityName.Sector12} ` +
"Slums.",
}),
[BladeBlackOpName.OperationAnnihilus]: new BlackOperation({
name: BladeBlackOpName.OperationAnnihilus,
[BladeburnerBlackOpName.OperationAnnihilus]: new BlackOperation({
name: BladeburnerBlackOpName.OperationAnnihilus,
n: 16,
baseDifficulty: 55e3,
reqdRank: 200e3,
@ -594,8 +594,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
`organization called '${FactionName.TheCovenant}'. We have no prior intelligence about this organization, so you ` +
"are going in blind.",
}),
[BladeBlackOpName.OperationUltron]: new BlackOperation({
name: BladeBlackOpName.OperationUltron,
[BladeburnerBlackOpName.OperationUltron]: new BlackOperation({
name: BladeburnerBlackOpName.OperationUltron,
n: 17,
baseDifficulty: 60e3,
reqdRank: 250e3,
@ -633,8 +633,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"moves to take control of and weaponize DeltaOne's Tactical High-Energy Satellite Laser Array (THESLA).\n\n" +
"Your task is to find and destroy Ultron.",
}),
[BladeBlackOpName.OperationCenturion]: new BlackOperation({
name: BladeBlackOpName.OperationCenturion,
[BladeburnerBlackOpName.OperationCenturion]: new BlackOperation({
name: BladeburnerBlackOpName.OperationCenturion,
n: 18,
baseDifficulty: 70e3,
reqdRank: 300e3,
@ -667,8 +667,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"It seems that the universe is not without a sense of irony.\n\n" +
"D)@#)($M)C0293c40($*)@#D0JUMP3Rm0C<*@#)*$)#02c94830c(#$*D)",
}),
[BladeBlackOpName.OperationVindictus]: new BlackOperation({
name: BladeBlackOpName.OperationVindictus,
[BladeburnerBlackOpName.OperationVindictus]: new BlackOperation({
name: BladeburnerBlackOpName.OperationVindictus,
n: 19,
baseDifficulty: 75e3,
reqdRank: 350e3,
@ -699,8 +699,8 @@ export const BlackOperations: Record<BladeBlackOpName, BlackOperation> = {
"ways.\n\n" +
"D)@#)($M)C0293c40($*)@#D0JUMP3Rm0C<*@#)*$)#02c94830c(#$*D)",
}),
[BladeBlackOpName.OperationDaedalus]: new BlackOperation({
name: BladeBlackOpName.OperationDaedalus,
[BladeburnerBlackOpName.OperationDaedalus]: new BlackOperation({
name: BladeburnerBlackOpName.OperationDaedalus,
n: 20,
baseDifficulty: 80e3,
reqdRank: 400e3,

@ -1,12 +1,12 @@
import { BladeContractName } from "@enums";
import { BladeburnerContractName } from "@enums";
import { Contract } from "../Actions/Contract";
import { getRandomIntInclusive } from "../../utils/helpers/getRandomIntInclusive";
import { assertLoadingType } from "../../utils/TypeAssertion";
export function createContracts(): Record<BladeContractName, Contract> {
export function createContracts(): Record<BladeburnerContractName, Contract> {
return {
[BladeContractName.tracking]: new Contract({
name: BladeContractName.tracking,
[BladeburnerContractName.Tracking]: new Contract({
name: BladeburnerContractName.Tracking,
desc:
"Identify and locate Synthoids. This contract involves reconnaissance and information-gathering ONLY. Do NOT " +
"engage. Stealth is of the utmost importance.\n\n" +
@ -39,8 +39,8 @@ export function createContracts(): Record<BladeContractName, Contract> {
growthFunction: () => getRandomIntInclusive(5, 75) / 10,
minCount: 25,
}),
[BladeContractName.bountyHunter]: new Contract({
name: BladeContractName.bountyHunter,
[BladeburnerContractName.BountyHunter]: new Contract({
name: BladeburnerContractName.BountyHunter,
desc:
"Hunt down and capture fugitive Synthoids. These Synthoids are wanted alive.\n\n" +
"Successfully completing a Bounty Hunter contract will lower the population in your current city, and will also " +
@ -72,8 +72,8 @@ export function createContracts(): Record<BladeContractName, Contract> {
growthFunction: () => getRandomIntInclusive(5, 75) / 10,
minCount: 5,
}),
[BladeContractName.retirement]: new Contract({
name: BladeContractName.retirement,
[BladeburnerContractName.Retirement]: new Contract({
name: BladeburnerContractName.Retirement,
desc:
"Hunt down and retire (kill) rogue Synthoids.\n\n" +
"Successfully completing a Retirement contract will lower the population in your current city, and will also " +
@ -108,12 +108,12 @@ export function createContracts(): Record<BladeContractName, Contract> {
};
}
export function loadContractsData(data: unknown, contracts: Record<BladeContractName, Contract>) {
export function loadContractsData(data: unknown, contracts: Record<BladeburnerContractName, Contract>) {
// loading data as "unknown" and typechecking it down is probably not necessary
// but this will prevent crashes even with malformed savedata
if (!data || typeof data !== "object") return;
assertLoadingType<Record<BladeContractName, unknown>>(data);
for (const contractName of Object.values(BladeContractName)) {
assertLoadingType<Record<BladeburnerContractName, unknown>>(data);
for (const contractName of Object.values(BladeburnerContractName)) {
const loadedContract = data[contractName];
if (!(loadedContract instanceof Contract)) continue;
contracts[contractName].loadData(loadedContract);

@ -1,17 +1,17 @@
import { BladeGeneralActionName } from "@enums";
import { BladeburnerGeneralActionName } from "@enums";
import { GeneralAction } from "../Actions/GeneralAction";
import { BladeburnerConstants } from "./Constants";
export const GeneralActions: Record<BladeGeneralActionName, GeneralAction> = {
[BladeGeneralActionName.training]: new GeneralAction({
name: BladeGeneralActionName.training,
export const GeneralActions: Record<BladeburnerGeneralActionName, GeneralAction> = {
[BladeburnerGeneralActionName.Training]: new GeneralAction({
name: BladeburnerGeneralActionName.Training,
getActionTime: () => 30,
desc:
"Improve your abilities at the Bladeburner unit's specialized training center. Doing this gives experience for " +
"all combat stats and also increases your max stamina.",
}),
[BladeGeneralActionName.fieldAnalysis]: new GeneralAction({
name: BladeGeneralActionName.fieldAnalysis,
[BladeburnerGeneralActionName.FieldAnalysis]: new GeneralAction({
name: BladeburnerGeneralActionName.FieldAnalysis,
getActionTime: () => 30,
desc:
"Mine and analyze Synthoid-related data. This improves the Bladeburner unit's intelligence on Synthoid locations " +
@ -19,8 +19,8 @@ export const GeneralActions: Record<BladeGeneralActionName, GeneralAction> = {
"current city.\n\n" +
"Does NOT require stamina.",
}),
[BladeGeneralActionName.recruitment]: new GeneralAction({
name: BladeGeneralActionName.recruitment,
[BladeburnerGeneralActionName.Recruitment]: new GeneralAction({
name: BladeburnerGeneralActionName.Recruitment,
getActionTime: function (bladeburner, person) {
const effCharisma = bladeburner.getEffectiveSkillLevel(person, "charisma");
const charismaFactor = Math.pow(effCharisma, 0.81) + effCharisma / 90;
@ -33,23 +33,23 @@ export const GeneralActions: Record<BladeGeneralActionName, GeneralAction> = {
"Attempt to recruit members for your Bladeburner team. These members can help you conduct operations.\n\n" +
"Does NOT require stamina.",
}),
[BladeGeneralActionName.diplomacy]: new GeneralAction({
name: BladeGeneralActionName.diplomacy,
[BladeburnerGeneralActionName.Diplomacy]: new GeneralAction({
name: BladeburnerGeneralActionName.Diplomacy,
getActionTime: () => 60,
desc:
"Improve diplomatic relations with the Synthoid population. Completing this action will reduce the Chaos level in " +
"your current city.\n\n" +
"Does NOT require stamina.",
}),
[BladeGeneralActionName.hyperbolicRegen]: new GeneralAction({
name: BladeGeneralActionName.hyperbolicRegen,
[BladeburnerGeneralActionName.HyperbolicRegen]: new GeneralAction({
name: BladeburnerGeneralActionName.HyperbolicRegen,
getActionTime: () => 60,
desc:
"Enter cryogenic stasis using the Bladeburner division's hi-tech Regeneration Chamber. This will slowly heal your " +
"wounds and slightly increase your stamina.",
}),
[BladeGeneralActionName.inciteViolence]: new GeneralAction({
name: BladeGeneralActionName.inciteViolence,
[BladeburnerGeneralActionName.InciteViolence]: new GeneralAction({
name: BladeburnerGeneralActionName.InciteViolence,
getActionTime: () => 60,
desc:
"Purposefully stir trouble in the synthoid community in order to gain a political edge. This will generate " +

@ -1,13 +1,13 @@
import { BladeOperationName } from "@enums";
import { BladeburnerOperationName } from "@enums";
import { Operation } from "../Actions/Operation";
import { getRandomIntInclusive } from "../../utils/helpers/getRandomIntInclusive";
import { LevelableActionClass } from "../Actions/LevelableAction";
import { assertLoadingType } from "../../utils/TypeAssertion";
export function createOperations(): Record<BladeOperationName, Operation> {
export function createOperations(): Record<BladeburnerOperationName, Operation> {
return {
[BladeOperationName.investigation]: new Operation({
name: BladeOperationName.investigation,
[BladeburnerOperationName.Investigation]: new Operation({
name: BladeburnerOperationName.Investigation,
desc:
"As a field agent, investigate and identify Synthoid populations, movements, and operations.\n\n" +
"Successful Investigation ops will increase the accuracy of your synthoid data.\n\n" +
@ -39,8 +39,8 @@ export function createOperations(): Record<BladeOperationName, Operation> {
growthFunction: () => getRandomIntInclusive(10, 40) / 10,
maxCount: 100,
}),
[BladeOperationName.undercover]: new Operation({
name: BladeOperationName.undercover,
[BladeburnerOperationName.Undercover]: new Operation({
name: BladeburnerOperationName.Undercover,
desc:
"Conduct undercover operations to identify hidden and underground Synthoid communities and organizations.\n\n" +
"Successful Undercover ops will increase the accuracy of your synthoid data.",
@ -72,8 +72,8 @@ export function createOperations(): Record<BladeOperationName, Operation> {
growthFunction: () => getRandomIntInclusive(10, 40) / 10,
maxCount: 100,
}),
[BladeOperationName.sting]: new Operation({
name: BladeOperationName.sting,
[BladeburnerOperationName.Sting]: new Operation({
name: BladeburnerOperationName.Sting,
desc: "Conduct a sting operation to bait and capture particularly notorious Synthoid criminals.",
baseDifficulty: 650,
difficultyFac: 1.04,
@ -102,8 +102,8 @@ export function createOperations(): Record<BladeOperationName, Operation> {
isStealth: true,
growthFunction: () => getRandomIntInclusive(3, 40) / 10,
}),
[BladeOperationName.raid]: new Operation({
name: BladeOperationName.raid,
[BladeburnerOperationName.Raid]: new Operation({
name: BladeburnerOperationName.Raid,
desc:
"Lead an assault on a known Synthoid community. Note that there must be an existing Synthoid community in your " +
"current city in order for this Operation to be successful.",
@ -138,8 +138,8 @@ export function createOperations(): Record<BladeOperationName, Operation> {
return LevelableActionClass.prototype.getAvailability.call(this, bladeburner);
},
}),
[BladeOperationName.stealthRetirement]: new Operation({
name: BladeOperationName.stealthRetirement,
[BladeburnerOperationName.StealthRetirement]: new Operation({
name: BladeburnerOperationName.StealthRetirement,
desc:
"Lead a covert operation to retire Synthoids. The objective is to complete the task without drawing any " +
"attention. Stealth and discretion are key.",
@ -171,8 +171,8 @@ export function createOperations(): Record<BladeOperationName, Operation> {
isKill: true,
growthFunction: () => getRandomIntInclusive(1, 20) / 10,
}),
[BladeOperationName.assassination]: new Operation({
name: BladeOperationName.assassination,
[BladeburnerOperationName.Assassination]: new Operation({
name: BladeburnerOperationName.Assassination,
desc:
"Assassinate Synthoids that have been identified as important, high-profile social and political leaders in the " +
"Synthoid communities.",
@ -207,12 +207,12 @@ export function createOperations(): Record<BladeOperationName, Operation> {
};
}
export function loadOperationsData(data: unknown, operations: Record<BladeOperationName, Operation>) {
export function loadOperationsData(data: unknown, operations: Record<BladeburnerOperationName, Operation>) {
// loading data as "unknown" and typechecking it down is probably not necessary
// but this will prevent crashes even with malformed savedata
if (!data || typeof data !== "object") return;
assertLoadingType<Record<BladeOperationName, unknown>>(data);
for (const operationName of Object.values(BladeOperationName)) {
assertLoadingType<Record<BladeburnerOperationName, unknown>>(data);
for (const operationName of Object.values(BladeburnerOperationName)) {
const loadedOperation = data[operationName];
if (!(loadedOperation instanceof Operation)) continue;
operations[operationName].loadData(loadedOperation);

@ -1,77 +1,77 @@
import { BladeMultName, BladeSkillName } from "@enums";
import { BladeburnerMultName, BladeburnerSkillName } from "@enums";
import { Skill } from "../Skill";
export const Skills: Record<BladeSkillName, Skill> = {
[BladeSkillName.bladesIntuition]: new Skill({
name: BladeSkillName.bladesIntuition,
export const Skills: Record<BladeburnerSkillName, Skill> = {
[BladeburnerSkillName.BladesIntuition]: new Skill({
name: BladeburnerSkillName.BladesIntuition,
desc: "Each level of this skill increases your success chance for all Contracts, Operations, and BlackOps by 3%",
baseCost: 3,
costInc: 2.1,
mults: { [BladeMultName.successChanceAll]: 3 },
mults: { [BladeburnerMultName.SuccessChanceAll]: 3 },
}),
[BladeSkillName.cloak]: new Skill({
name: BladeSkillName.cloak,
[BladeburnerSkillName.Cloak]: new Skill({
name: BladeburnerSkillName.Cloak,
desc:
"Each level of this skill increases your " +
"success chance in stealth-related Contracts, Operations, and BlackOps by 5.5%",
baseCost: 2,
costInc: 1.1,
mults: { [BladeMultName.successChanceStealth]: 5.5 },
mults: { [BladeburnerMultName.SuccessChanceStealth]: 5.5 },
}),
[BladeSkillName.shortCircuit]: new Skill({
name: BladeSkillName.shortCircuit,
[BladeburnerSkillName.ShortCircuit]: new Skill({
name: BladeburnerSkillName.ShortCircuit,
desc:
"Each level of this skill increases your success chance " +
"in Contracts, Operations, and BlackOps that involve retirement by 5.5%",
baseCost: 2,
costInc: 2.1,
mults: { [BladeMultName.successChanceKill]: 5.5 },
mults: { [BladeburnerMultName.SuccessChanceKill]: 5.5 },
}),
[BladeSkillName.digitalObserver]: new Skill({
name: BladeSkillName.digitalObserver,
[BladeburnerSkillName.DigitalObserver]: new Skill({
name: BladeburnerSkillName.DigitalObserver,
desc: "Each level of this skill increases your success chance in all Operations and BlackOps by 4%",
baseCost: 2,
costInc: 2.1,
mults: { [BladeMultName.successChanceOperation]: 4 },
mults: { [BladeburnerMultName.SuccessChanceOperation]: 4 },
}),
[BladeSkillName.tracer]: new Skill({
name: BladeSkillName.tracer,
[BladeburnerSkillName.Tracer]: new Skill({
name: BladeburnerSkillName.Tracer,
desc: "Each level of this skill increases your success chance in all Contracts by 4%",
baseCost: 2,
costInc: 2.1,
mults: { [BladeMultName.successChanceContract]: 4 },
mults: { [BladeburnerMultName.SuccessChanceContract]: 4 },
}),
[BladeSkillName.overclock]: new Skill({
name: BladeSkillName.overclock,
[BladeburnerSkillName.Overclock]: new Skill({
name: BladeburnerSkillName.Overclock,
desc:
"Each level of this skill decreases the time it takes " +
"to attempt a Contract, Operation, and BlackOp by 1% (Max Level: 90)",
baseCost: 3,
costInc: 1.4,
maxLvl: 90,
mults: { [BladeMultName.actionTime]: -1 },
mults: { [BladeburnerMultName.ActionTime]: -1 },
}),
[BladeSkillName.reaper]: new Skill({
name: BladeSkillName.reaper,
[BladeburnerSkillName.Reaper]: new Skill({
name: BladeburnerSkillName.Reaper,
desc: "Each level of this skill increases your effective combat stats for Bladeburner actions by 2%",
baseCost: 2,
costInc: 2.1,
mults: {
[BladeMultName.effStr]: 2,
[BladeMultName.effDef]: 2,
[BladeMultName.effDex]: 2,
[BladeMultName.effAgi]: 2,
[BladeburnerMultName.EffStr]: 2,
[BladeburnerMultName.EffDef]: 2,
[BladeburnerMultName.EffDex]: 2,
[BladeburnerMultName.EffAgi]: 2,
},
}),
[BladeSkillName.evasiveSystem]: new Skill({
name: BladeSkillName.evasiveSystem,
[BladeburnerSkillName.EvasiveSystem]: new Skill({
name: BladeburnerSkillName.EvasiveSystem,
desc: "Each level of this skill increases your effective dexterity and agility for Bladeburner actions by 4%",
baseCost: 2,
costInc: 2.1,
mults: { [BladeMultName.effDex]: 4, [BladeMultName.effAgi]: 4 },
mults: { [BladeburnerMultName.EffDex]: 4, [BladeburnerMultName.EffAgi]: 4 },
}),
[BladeSkillName.datamancer]: new Skill({
name: BladeSkillName.datamancer,
[BladeburnerSkillName.Datamancer]: new Skill({
name: BladeburnerSkillName.Datamancer,
desc:
"Each level of this skill increases your effectiveness in " +
"synthoid population analysis and investigation by 5%. " +
@ -79,27 +79,27 @@ export const Skills: Record<BladeSkillName, Skill> = {
"the accuracy of your synthoid population/community estimates.",
baseCost: 3,
costInc: 1,
mults: { [BladeMultName.successChanceEstimate]: 5 },
mults: { [BladeburnerMultName.SuccessChanceEstimate]: 5 },
}),
[BladeSkillName.cybersEdge]: new Skill({
name: BladeSkillName.cybersEdge,
[BladeburnerSkillName.CybersEdge]: new Skill({
name: BladeburnerSkillName.CybersEdge,
desc: "Each level of this skill increases your max stamina by 2%",
baseCost: 1,
costInc: 3,
mults: { [BladeMultName.stamina]: 2 },
mults: { [BladeburnerMultName.Stamina]: 2 },
}),
[BladeSkillName.handsOfMidas]: new Skill({
name: BladeSkillName.handsOfMidas,
[BladeburnerSkillName.HandsOfMidas]: new Skill({
name: BladeburnerSkillName.HandsOfMidas,
desc: "Each level of this skill increases the amount of money you receive from Contracts by 10%",
baseCost: 2,
costInc: 2.5,
mults: { [BladeMultName.money]: 10 },
mults: { [BladeburnerMultName.Money]: 10 },
}),
[BladeSkillName.hyperdrive]: new Skill({
name: BladeSkillName.hyperdrive,
[BladeburnerSkillName.Hyperdrive]: new Skill({
name: BladeburnerSkillName.Hyperdrive,
desc: "Each level of this skill increases the experience earned from Contracts, Operations, and BlackOps by 10%",
baseCost: 1,
costInc: 2.5,
mults: { [BladeMultName.expGain]: 10 },
mults: { [BladeburnerMultName.ExpGain]: 10 },
}),
};

@ -11,7 +11,7 @@ import { ActionLevel } from "./ActionLevel";
import { Autolevel } from "./Autolevel";
import { formatBigNumber } from "../../ui/formatNumber";
import { useRerender } from "../../ui/React/hooks";
import { BladeActionType } from "@enums";
import { BladeburnerActionType } from "@enums";
import { ActionHeader } from "./ActionHeader";
interface OperationElemProps {
@ -21,7 +21,8 @@ interface OperationElemProps {
export function OperationElem({ bladeburner, action }: OperationElemProps): React.ReactElement {
const rerender = useRerender();
const isActive = bladeburner.action?.type === BladeActionType.operation && action.name === bladeburner.action?.name;
const isActive =
bladeburner.action?.type === BladeburnerActionType.Operation && action.name === bladeburner.action?.name;
const actionTime = action.getActionTime(bladeburner, Player);
return (

@ -1,5 +1,5 @@
import type { ActionIdentifier } from "../Types";
import { BladeActionType } from "@enums";
import { BladeburnerActionType } from "@enums";
import { assertLoadingType } from "../../utils/TypeAssertion";
import { getEnumHelper } from "../../utils/EnumHelper";
@ -9,17 +9,17 @@ import { getEnumHelper } from "../../utils/EnumHelper";
export function loadActionIdentifier(identifier: unknown): ActionIdentifier | null {
if (!identifier || typeof identifier !== "object") return null;
assertLoadingType<ActionIdentifier>(identifier);
if (getEnumHelper("BladeBlackOpName").isMember(identifier.name)) {
return { type: BladeActionType.blackOp, name: identifier.name };
if (getEnumHelper("BladeburnerBlackOpName").isMember(identifier.name)) {
return { type: BladeburnerActionType.BlackOp, name: identifier.name };
}
if (getEnumHelper("BladeContractName").isMember(identifier.name)) {
return { type: BladeActionType.contract, name: identifier.name };
if (getEnumHelper("BladeburnerContractName").isMember(identifier.name)) {
return { type: BladeburnerActionType.Contract, name: identifier.name };
}
if (getEnumHelper("BladeOperationName").isMember(identifier.name)) {
return { type: BladeActionType.operation, name: identifier.name };
if (getEnumHelper("BladeburnerOperationName").isMember(identifier.name)) {
return { type: BladeburnerActionType.Operation, name: identifier.name };
}
if (getEnumHelper("BladeGeneralActionName").isMember(identifier.name)) {
return { type: BladeActionType.general, name: identifier.name };
if (getEnumHelper("BladeburnerGeneralActionName").isMember(identifier.name)) {
return { type: BladeburnerActionType.General, name: identifier.name };
}
return null;
}

@ -15,7 +15,7 @@ import Select, { SelectChangeEvent } from "@mui/material/Select";
import DeleteIcon from "@mui/icons-material/Delete";
import { Adjuster } from "./Adjuster";
import { Player } from "@player";
import { BladeSkillName, CityName } from "@enums";
import { BladeburnerSkillName, CityName } from "@enums";
import { Skills as AllSkills } from "../../Bladeburner/data/Skills";
import { Bladeburner } from "../../Bladeburner/Bladeburner";
import { getEnumHelper } from "../../utils/EnumHelper";
@ -57,9 +57,9 @@ export function BladeburnerDev({ bladeburner }: { bladeburner: Bladeburner }): R
};
// Skill functions
const [skillName, setSkillName] = useState(BladeSkillName.bladesIntuition);
const [skillName, setSkillName] = useState(BladeburnerSkillName.BladesIntuition);
function setSkillDropdown(event: SelectChangeEvent): void {
if (!getEnumHelper("BladeSkillName").isMember(event.target.value)) return;
if (!getEnumHelper("BladeburnerSkillName").isMember(event.target.value)) return;
setSkillName(event.target.value);
}
const modifySkill = (modifier: number) => (levelchange: number) => {
@ -81,7 +81,7 @@ export function BladeburnerDev({ bladeburner }: { bladeburner: Bladeburner }): R
const AllContracts = bladeburner.contracts;
const [contractTarget, setContract] = useState(AllContracts.Tracking.name);
function setContractDropdown(event: SelectChangeEvent): void {
if (!getEnumHelper("BladeContractName").isMember(event.target.value)) return;
if (!getEnumHelper("BladeburnerContractName").isMember(event.target.value)) return;
setContract(event.target.value);
}
const modifyContractLevel = (modifier: number) => (levelchange: number) => {
@ -117,7 +117,7 @@ export function BladeburnerDev({ bladeburner }: { bladeburner: Bladeburner }): R
const AllOperations = bladeburner.operations;
const [operationTarget, setOperation] = useState(AllOperations.Investigation.name);
function setOperationDropdown(event: SelectChangeEvent): void {
if (!getEnumHelper("BladeOperationName").isMember(event.target.value)) return;
if (!getEnumHelper("BladeburnerOperationName").isMember(event.target.value)) return;
setOperation(event.target.value);
}
const modifyOperationLevel = (modifier: number) => (levelchange: number) => {

@ -3,7 +3,13 @@ import type { Action, LevelableAction } from "../Bladeburner/Types";
import type { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
import { Player } from "@player";
import { BladeActionType, BladeContractName, BladeGeneralActionName, BladeOperationName, BladeSkillName } from "@enums";
import {
BladeburnerActionType,
BladeburnerContractName,
BladeburnerGeneralActionName,
BladeburnerOperationName,
BladeburnerSkillName,
} from "@enums";
import { Bladeburner, BladeburnerPromise } from "../Bladeburner/Bladeburner";
import { currentNodeMults } from "../BitNode/BitNodeMultipliers";
import { helpers } from "../Netscript/NetscriptHelpers";
@ -40,7 +46,7 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
}
function isLevelableAction(action: Action): action is LevelableAction {
return action.type === BladeActionType.contract || action.type === BladeActionType.operation;
return action.type === BladeburnerActionType.Contract || action.type === BladeburnerActionType.Operation;
}
function getLevelableAction(ctx: NetscriptContext, type: unknown, name: unknown): LevelableAction {
@ -58,11 +64,11 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
inBladeburner: () => () => !!Player.bladeburner,
getContractNames: (ctx) => () => {
getBladeburner(ctx);
return Object.values(BladeContractName);
return Object.values(BladeburnerContractName);
},
getOperationNames: (ctx) => () => {
getBladeburner(ctx);
return Object.values(BladeOperationName);
return Object.values(BladeburnerOperationName);
},
getBlackOpNames: (ctx) => () => {
getBladeburner(ctx);
@ -77,16 +83,16 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
},
getBlackOpRank: (ctx) => (_blackOpName) => {
checkBladeburnerAccess(ctx);
const blackOpName = getEnumHelper("BladeBlackOpName").nsGetMember(ctx, _blackOpName);
const blackOpName = getEnumHelper("BladeburnerBlackOpName").nsGetMember(ctx, _blackOpName);
return BlackOperations[blackOpName].reqdRank;
},
getGeneralActionNames: (ctx) => () => {
getBladeburner(ctx);
return Object.values(BladeGeneralActionName);
return Object.values(BladeburnerGeneralActionName);
},
getSkillNames: (ctx) => () => {
getBladeburner(ctx);
return Object.values(BladeSkillName);
return Object.values(BladeburnerSkillName);
},
startAction: (ctx) => (type, name) => {
const bladeburner = getBladeburner(ctx);
@ -128,8 +134,8 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
const sleeveNumber = helpers.number(ctx, "sleeve", _sleeve);
checkSleeveNumber(ctx, sleeveNumber);
switch (action.type) {
case BladeActionType.general:
case BladeActionType.contract: {
case BladeburnerActionType.General:
case BladeburnerActionType.Contract: {
const sleevePerson = Player.sleeves[sleeveNumber];
return action.getSuccessRange(bladeburner, sleevePerson);
}
@ -148,12 +154,12 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
const bladeburner = getBladeburner(ctx);
const action = getAction(ctx, type, name);
switch (action.type) {
case BladeActionType.general:
case BladeburnerActionType.General:
return Infinity;
case BladeActionType.blackOp:
case BladeburnerActionType.BlackOp:
return bladeburner.numBlackOpsComplete > action.n ? 0 : 1;
case BladeActionType.contract:
case BladeActionType.operation:
case BladeburnerActionType.Contract:
case BladeburnerActionType.Operation:
return action.count;
}
},
@ -206,12 +212,12 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
},
getSkillLevel: (ctx) => (_skillName) => {
const bladeburner = getBladeburner(ctx);
const skillName = getEnumHelper("BladeSkillName").nsGetMember(ctx, _skillName, "skillName");
const skillName = getEnumHelper("BladeburnerSkillName").nsGetMember(ctx, _skillName, "skillName");
return bladeburner.getSkillLevel(skillName);
},
getSkillUpgradeCost: (ctx) => (_skillName, _count) => {
const bladeburner = getBladeburner(ctx);
const skillName = getEnumHelper("BladeSkillName").nsGetMember(ctx, _skillName, "skillName");
const skillName = getEnumHelper("BladeburnerSkillName").nsGetMember(ctx, _skillName, "skillName");
const count = helpers.positiveInteger(ctx, "count", _count ?? 1);
const currentLevel = bladeburner.getSkillLevel(skillName);
const skill = Skills[skillName];
@ -222,7 +228,7 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
},
upgradeSkill: (ctx) => (_skillName, _count) => {
const bladeburner = getBladeburner(ctx);
const skillName = getEnumHelper("BladeSkillName").nsGetMember(ctx, _skillName, "skillName");
const skillName = getEnumHelper("BladeburnerSkillName").nsGetMember(ctx, _skillName, "skillName");
const count = helpers.positiveInteger(ctx, "count", _count ?? 1);
const attempt = bladeburner.upgradeSkill(skillName, count);
helpers.log(ctx, () => attempt.message);
@ -233,11 +239,11 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
if (!type && !name) return bladeburner.teamSize;
const action = getAction(ctx, type, name);
switch (action.type) {
case BladeActionType.general:
case BladeActionType.contract:
case BladeburnerActionType.General:
case BladeburnerActionType.Contract:
return 0;
case BladeActionType.blackOp:
case BladeActionType.operation:
case BladeburnerActionType.BlackOp:
case BladeburnerActionType.Operation:
return action.teamCount;
}
},
@ -250,12 +256,12 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
return -1;
}
switch (action.type) {
case BladeActionType.contract:
case BladeActionType.general:
case BladeburnerActionType.Contract:
case BladeburnerActionType.General:
helpers.log(ctx, () => "Only valid for Operations and Black Operations");
return -1;
case BladeActionType.blackOp:
case BladeActionType.operation: {
case BladeburnerActionType.BlackOp:
case BladeburnerActionType.Operation: {
action.teamCount = size;
helpers.log(ctx, () => `Set team size for ${action.name} to ${size}`);
return size;

@ -431,7 +431,7 @@ export function NetscriptFormulas(): InternalAPI<IFormulas> {
bladeburner: {
skillMaxUpgradeCount: (ctx) => (_name, _level, _skillPoints) => {
checkFormulasAccess(ctx);
const name = getEnumHelper("BladeSkillName").nsGetMember(ctx, _name, "name");
const name = getEnumHelper("BladeburnerSkillName").nsGetMember(ctx, _name, "name");
const level = helpers.number(ctx, "level", _level);
if (level < 0) {
throw new Error(`Level must be a non-negative number.`);

@ -3,7 +3,7 @@ import type { Sleeve as NetscriptSleeve } from "@nsdefs";
import type { ActionIdentifier } from "../Bladeburner/Types";
import { Player } from "@player";
import { BladeActionType, type BladeContractName } from "@enums";
import { BladeburnerActionType, type BladeburnerContractName } from "@enums";
import { Augmentations } from "../Augmentation/Augmentations";
import { findCrime } from "../Crime/CrimeHelpers";
import { getEnumHelper } from "../utils/EnumHelper";
@ -259,9 +259,9 @@ export function NetscriptSleeve(): InternalAPI<NetscriptSleeve> {
const action = helpers.string(ctx, "action", _action);
checkSleeveAPIAccess(ctx);
checkSleeveNumber(ctx, sleeveNumber);
let contract: BladeContractName | undefined = undefined;
let contract: BladeburnerContractName | undefined = undefined;
if (action === "Take on contracts") {
contract = getEnumHelper("BladeContractName").nsGetMember(ctx, _contract);
contract = getEnumHelper("BladeburnerContractName").nsGetMember(ctx, _contract);
for (let i = 0; i < Player.sleeves.length; ++i) {
if (i === sleeveNumber) continue;
const otherWork = Player.sleeves[i].currentWork;
@ -272,7 +272,7 @@ export function NetscriptSleeve(): InternalAPI<NetscriptSleeve> {
);
}
}
const actionId: ActionIdentifier = { type: BladeActionType.contract, name: contract };
const actionId: ActionIdentifier = { type: BladeburnerActionType.Contract, name: contract };
Player.sleeves[sleeveNumber].startWork(new SleeveBladeburnerWork({ actionId }));
}
return Player.sleeves[sleeveNumber].bladeburner(action, contract);

@ -25,8 +25,8 @@ import {
UniversityClassType,
CompanyName,
FactionName,
BladeActionType,
BladeGeneralActionName,
BladeburnerActionType,
BladeburnerGeneralActionName,
AugmentationName,
} from "@enums";
@ -482,7 +482,7 @@ export class Sleeve extends Person implements SleevePerson {
case "Training":
this.startWork(
new SleeveBladeburnerWork({
actionId: { type: BladeActionType.general, name: BladeGeneralActionName.training },
actionId: { type: BladeburnerActionType.General, name: BladeburnerGeneralActionName.Training },
}),
);
return true;
@ -490,28 +490,28 @@ export class Sleeve extends Person implements SleevePerson {
case "Field Analysis":
this.startWork(
new SleeveBladeburnerWork({
actionId: { type: BladeActionType.general, name: BladeGeneralActionName.fieldAnalysis },
actionId: { type: BladeburnerActionType.General, name: BladeburnerGeneralActionName.FieldAnalysis },
}),
);
return true;
case "Recruitment":
this.startWork(
new SleeveBladeburnerWork({
actionId: { type: BladeActionType.general, name: BladeGeneralActionName.recruitment },
actionId: { type: BladeburnerActionType.General, name: BladeburnerGeneralActionName.Recruitment },
}),
);
return true;
case "Diplomacy":
this.startWork(
new SleeveBladeburnerWork({
actionId: { type: BladeActionType.general, name: BladeGeneralActionName.diplomacy },
actionId: { type: BladeburnerActionType.General, name: BladeburnerGeneralActionName.Diplomacy },
}),
);
return true;
case "Hyperbolic Regeneration Chamber":
this.startWork(
new SleeveBladeburnerWork({
actionId: { type: BladeActionType.general, name: BladeGeneralActionName.hyperbolicRegen },
actionId: { type: BladeburnerActionType.General, name: BladeburnerGeneralActionName.HyperbolicRegen },
}),
);
return true;
@ -523,8 +523,10 @@ export class Sleeve extends Person implements SleevePerson {
this.startWork(new SleeveSupportWork());
return true;
case "Take on contracts":
if (!getEnumHelper("BladeContractName").isMember(contract)) return false;
this.startWork(new SleeveBladeburnerWork({ actionId: { type: BladeActionType.contract, name: contract } }));
if (!getEnumHelper("BladeburnerContractName").isMember(contract)) return false;
this.startWork(
new SleeveBladeburnerWork({ actionId: { type: BladeburnerActionType.Contract, name: contract } }),
);
return true;
}
return false;

@ -2,7 +2,7 @@ import type { Sleeve } from "../Sleeve";
import type { ActionIdentifier } from "../../../Bladeburner/Types";
import type { PromisePair } from "../../../Types/Promises";
import { Player } from "@player";
import { BladeActionType, BladeGeneralActionName } from "@enums";
import { BladeburnerActionType, BladeburnerGeneralActionName } from "@enums";
import { Generic_fromJSON, Generic_toJSON, IReviverValue, constructorsForReviver } from "../../../utils/JSONReviver";
import { applySleeveGains, SleeveWorkClass, SleeveWorkType } from "./Work";
import { CONSTANTS } from "../../../Constants";
@ -12,7 +12,7 @@ import { loadActionIdentifier } from "../../../Bladeburner/utils/loadActionIdent
import { invalidWork } from "../../../Work/InvalidWork";
interface SleeveBladeburnerWorkParams {
actionId: ActionIdentifier & { type: BladeActionType.general | BladeActionType.contract };
actionId: ActionIdentifier & { type: BladeburnerActionType.General | BladeburnerActionType.Contract };
}
export const isSleeveBladeburnerWork = (w: SleeveWorkClass | null): w is SleeveBladeburnerWork =>
@ -22,12 +22,15 @@ export class SleeveBladeburnerWork extends SleeveWorkClass {
type: SleeveWorkType.BLADEBURNER = SleeveWorkType.BLADEBURNER;
tasksCompleted = 0;
cyclesWorked = 0;
actionId: ActionIdentifier & { type: BladeActionType.general | BladeActionType.contract };
actionId: ActionIdentifier & { type: BladeburnerActionType.General | BladeburnerActionType.Contract };
nextCompletionPair: PromisePair<void> = { promise: null, resolve: null };
constructor(params?: SleeveBladeburnerWorkParams) {
super();
this.actionId = params?.actionId ?? { type: BladeActionType.general, name: BladeGeneralActionName.fieldAnalysis };
this.actionId = params?.actionId ?? {
type: BladeburnerActionType.General,
name: BladeburnerGeneralActionName.FieldAnalysis,
};
}
cyclesNeeded(sleeve: Sleeve): number {
@ -48,13 +51,13 @@ export class SleeveBladeburnerWork extends SleeveWorkClass {
process(sleeve: Sleeve, cycles: number) {
if (!Player.bladeburner) return sleeve.stopWork();
this.cyclesWorked += cycles;
if (this.actionId.type === BladeActionType.contract) {
if (this.actionId.type === BladeburnerActionType.Contract) {
const action = Player.bladeburner.getActionObject(this.actionId);
if (action.count < 1) return sleeve.stopWork();
}
while (this.cyclesWorked >= this.cyclesNeeded(sleeve)) {
if (this.actionId.type === BladeActionType.contract) {
if (this.actionId.type === BladeburnerActionType.Contract) {
const action = Player.bladeburner.getActionObject(this.actionId);
if (action.count < 1) return sleeve.stopWork();
}

@ -5,8 +5,8 @@ import { MenuItem, Select, SelectChangeEvent } from "@mui/material";
import { Player } from "@player";
import {
BladeActionType,
BladeContractName,
BladeburnerActionType,
BladeburnerContractName,
CityName,
FactionName,
FactionWorkType,
@ -96,19 +96,19 @@ function possibleFactions(sleeve: Sleeve): string[] {
});
}
function possibleContracts(sleeve: Sleeve): BladeContractName[] | ["------"] {
function possibleContracts(sleeve: Sleeve): BladeburnerContractName[] | ["------"] {
const bb = Player.bladeburner;
if (bb === null) {
return ["------"];
}
let contracts = Object.values(BladeContractName);
let contracts = Object.values(BladeburnerContractName);
for (const otherSleeve of Player.sleeves) {
if (sleeve === otherSleeve) {
continue;
}
if (
otherSleeve.currentWork?.type === SleeveWorkType.BLADEBURNER &&
otherSleeve.currentWork.actionId.type === BladeActionType.contract
otherSleeve.currentWork.actionId.type === BladeburnerActionType.Contract
) {
const w = otherSleeve.currentWork;
contracts = contracts.filter((x) => x != w.actionId.name);
@ -262,7 +262,7 @@ function getABC(sleeve: Sleeve): [string, string, string] {
return ["Work for Faction", work.factionName, workNames[work.factionWorkType] ?? ""];
}
case SleeveWorkType.BLADEBURNER:
if (work.actionId.type === BladeActionType.contract) {
if (work.actionId.type === BladeburnerActionType.Contract) {
return ["Perform Bladeburner Actions", "Take on contracts", work.actionId.name];
}
return ["Perform Bladeburner Actions", work.actionId.name, "------"];

@ -1787,7 +1787,11 @@ export interface Singularity {
* @param focus - Acquire player focus on this class. Optional. Defaults to true.
* @returns True if action is successfully started, false otherwise.
*/
universityCourse(universityName: string, courseName: string, focus?: boolean): boolean;
universityCourse(
universityName: UniversityLocationName | `${UniversityLocationName}`,
courseName: UniversityClassType | `${UniversityClassType}`,
focus?: boolean,
): boolean;
/**
* Workout at the gym.
@ -1809,7 +1813,7 @@ export interface Singularity {
* @param focus - Acquire player focus on this gym workout. Optional. Defaults to true.
* @returns True if action is successfully started, false otherwise.
*/
gymWorkout(gymName: string, stat: string, focus?: boolean): boolean;
gymWorkout(gymName: GymLocationName | `${GymLocationName}`, stat: GymType | `${GymType}`, focus?: boolean): boolean;
/**
* Travel to another city.
@ -3033,6 +3037,133 @@ export interface Hacknet {
getTrainingMult(): number;
}
/**
* Action types of Bladeburner
*
* @public
*/
declare enum BladeburnerActionType {
General = "General",
Contract = "Contracts",
Operation = "Operations",
BlackOp = "Black Operations",
}
/**
* General action names of Bladeburner
*
* @public
*/
declare enum BladeburnerGeneralActionName {
Training = "Training",
FieldAnalysis = "Field Analysis",
Recruitment = "Recruitment",
Diplomacy = "Diplomacy",
HyperbolicRegen = "Hyperbolic Regeneration Chamber",
InciteViolence = "Incite Violence",
}
/**
* Contract names of Bladeburner
*
* @public
*/
declare enum BladeburnerContractName {
Tracking = "Tracking",
BountyHunter = "Bounty Hunter",
Retirement = "Retirement",
}
/**
* Operation names of Bladeburner
*
* @public
*/
declare enum BladeburnerOperationName {
Investigation = "Investigation",
Undercover = "Undercover Operation",
Sting = "Sting Operation",
Raid = "Raid",
StealthRetirement = "Stealth Retirement Operation",
Assassination = "Assassination",
}
/**
* Black Operation names of Bladeburner
*
* @public
*/
declare enum BladeburnerBlackOpName {
OperationTyphoon = "Operation Typhoon",
OperationZero = "Operation Zero",
OperationX = "Operation X",
OperationTitan = "Operation Titan",
OperationAres = "Operation Ares",
OperationArchangel = "Operation Archangel",
OperationJuggernaut = "Operation Juggernaut",
OperationRedDragon = "Operation Red Dragon",
OperationK = "Operation K",
OperationDeckard = "Operation Deckard",
OperationTyrell = "Operation Tyrell",
OperationWallace = "Operation Wallace",
OperationShoulderOfOrion = "Operation Shoulder of Orion",
OperationHyron = "Operation Hyron",
OperationMorpheus = "Operation Morpheus",
OperationIonStorm = "Operation Ion Storm",
OperationAnnihilus = "Operation Annihilus",
OperationUltron = "Operation Ultron",
OperationCenturion = "Operation Centurion",
OperationVindictus = "Operation Vindictus",
OperationDaedalus = "Operation Daedalus",
}
/**
* Skill names type of Bladeburner
*
* @public
*/
declare enum BladeburnerSkillName {
BladesIntuition = "Blade's Intuition",
Cloak = "Cloak",
ShortCircuit = "Short-Circuit",
DigitalObserver = "Digital Observer",
Tracer = "Tracer",
Overclock = "Overclock",
Reaper = "Reaper",
EvasiveSystem = "Evasive System",
Datamancer = "Datamancer",
CybersEdge = "Cyber's Edge",
HandsOfMidas = "Hands of Midas",
Hyperdrive = "Hyperdrive",
}
/**
* @public
*/
export type BladeburnerActionName =
| BladeburnerGeneralActionName
| BladeburnerContractName
| BladeburnerOperationName
| BladeburnerBlackOpName;
/**
* These special Bladeburner action types are only for Sleeve
*
* @public
*/
declare enum SpecialBladeburnerActionTypeForSleeve {
InfiltrateSynthoids = "Infiltrate Synthoids",
SupportMainSleeve = "Support main sleeve",
TakeOnContracts = "Take on contracts",
}
/**
* @public
*/
export type BladeburnerActionTypeForSleeve =
| Exclude<BladeburnerGeneralActionName, BladeburnerGeneralActionName.InciteViolence>
| SpecialBladeburnerActionTypeForSleeve;
/**
* Bladeburner API
* @remarks
@ -3050,7 +3181,7 @@ export interface Bladeburner {
*
* @returns Array of strings containing the names of all Bladeburner contracts.
*/
getContractNames(): string[];
getContractNames(): BladeburnerContractName[];
/**
* List all operations.
@ -3061,7 +3192,7 @@ export interface Bladeburner {
*
* @returns Array of strings containing the names of all Bladeburner operations.
*/
getOperationNames(): string[];
getOperationNames(): BladeburnerOperationName[];
/**
* List all black ops.
@ -3072,7 +3203,7 @@ export interface Bladeburner {
*
* @returns Array of strings containing the names of all Bladeburner Black Ops.
*/
getBlackOpNames(): string[];
getBlackOpNames(): BladeburnerBlackOpName[];
/**
* Get an object with the name and rank requirement of the next BlackOp that can be completed.
@ -3084,7 +3215,7 @@ export interface Bladeburner {
*
* @returns An object with the `.name` and `.rank` properties of the available BlackOp, or `null`.
*/
getNextBlackOp(): { name: string; rank: number } | null;
getNextBlackOp(): { name: BladeburnerBlackOpName; rank: number } | null;
/**
* List all general actions.
@ -3095,7 +3226,7 @@ export interface Bladeburner {
*
* @returns Array of strings containing the names of all general Bladeburner actions.
*/
getGeneralActionNames(): string[];
getGeneralActionNames(): BladeburnerGeneralActionName[];
/**
* List all skills.
@ -3106,7 +3237,7 @@ export interface Bladeburner {
*
* @returns Array of strings containing the names of all general Bladeburner skills.
*/
getSkillNames(): string[];
getSkillNames(): BladeburnerSkillName[];
/**
* Start an action.
@ -3126,7 +3257,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match
* @returns True if the action was started successfully, and false otherwise.
*/
startAction(type: string, name: string): boolean;
startAction(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): boolean;
/**
* Stop current action.
@ -3158,7 +3292,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @returns Number of milliseconds it takes to complete the specified action.
*/
getActionTime(type: string, name: string): number;
getActionTime(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
/**
* Get the time elapsed on current action.
@ -3186,7 +3323,11 @@ export interface Bladeburner {
* @param sleeveNumber - Optional. Index of the sleeve to retrieve information.
* @returns Estimated success chance for the specified action.
*/
getActionEstimatedSuccessChance(type: string, name: string, sleeveNumber?: number): [number, number];
getActionEstimatedSuccessChance(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
sleeveNumber?: number,
): [number, number];
/**
* Get the reputation gain of an action.
@ -3202,7 +3343,11 @@ export interface Bladeburner {
* @param level - Optional number. Action level at which to calculate the gain. Will be the action's current level if not given.
* @returns Average Bladeburner reputation gain for successfully completing the specified action.
*/
getActionRepGain(type: string, name: string, level?: number): number;
getActionRepGain(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
level?: number,
): number;
/**
* Get action count remaining.
@ -3220,7 +3365,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @returns Remaining count of the specified action.
*/
getActionCountRemaining(type: string, name: string): number;
getActionCountRemaining(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
/**
* Get the maximum level of an action.
@ -3235,7 +3383,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @returns Maximum level of the specified action.
*/
getActionMaxLevel(type: string, name: string): number;
getActionMaxLevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
/**
* Get the current level of an action.
@ -3250,7 +3401,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @returns Current level of the specified action.
*/
getActionCurrentLevel(type: string, name: string): number;
getActionCurrentLevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
/**
* Get whether an action is set to autolevel.
@ -3265,7 +3419,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @returns True if the action is set to autolevel, and false otherwise.
*/
getActionAutolevel(type: string, name: string): boolean;
getActionAutolevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): boolean;
/**
* Get action successes.
@ -3278,7 +3435,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @returns a number with how many successes you have with action.
*/
getActionSuccesses(type: string, name: string): number;
getActionSuccesses(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
/**
* Set an action autolevel.
@ -3291,7 +3451,11 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @param autoLevel - Whether or not to autolevel this action
*/
setActionAutolevel(type: string, name: string, autoLevel: boolean): void;
setActionAutolevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
autoLevel: boolean,
): void;
/**
* Set the level of an action.
@ -3304,7 +3468,11 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @param level - Level to set this action to.
*/
setActionLevel(type: string, name: string, level: number): void;
setActionLevel(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
level: number,
): void;
/**
* Get player bladeburner rank.
@ -3329,7 +3497,7 @@ export interface Bladeburner {
* @param name - Name of BlackOp. Must be an exact match.
* @returns Rank required to complete this BlackOp.
*/
getBlackOpRank(name: string): number;
getBlackOpRank(name: BladeburnerBlackOpName): number;
/**
* Get bladeburner skill points.
@ -3354,7 +3522,7 @@ export interface Bladeburner {
* @param skillName - Name of skill. Case-sensitive and must be an exact match.
* @returns Level in the specified skill.
*/
getSkillLevel(skillName: string): number;
getSkillLevel(skillName: BladeburnerSkillName | `${BladeburnerSkillName}`): number;
/**
* Get cost to upgrade skill.
@ -3369,7 +3537,7 @@ export interface Bladeburner {
* @param count - Number of times to upgrade the skill. Defaults to 1 if not specified.
* @returns Number of skill points needed to upgrade the specified skill.
*/
getSkillUpgradeCost(skillName: string, count?: number): number;
getSkillUpgradeCost(skillName: BladeburnerSkillName | `${BladeburnerSkillName}`, count?: number): number;
/**
* Upgrade skill.
@ -3384,7 +3552,7 @@ export interface Bladeburner {
* @param count - Number of times to upgrade the skill. Defaults to 1 if not specified.
* @returns true if the skill is successfully upgraded, and false otherwise.
*/
upgradeSkill(skillName: string, count?: number): boolean;
upgradeSkill(skillName: BladeburnerSkillName | `${BladeburnerSkillName}`, count?: number): boolean;
/**
* Get team size.
@ -3401,7 +3569,10 @@ export interface Bladeburner {
* @param name - Name of action. Must be an exact match.
* @returns Number of Bladeburner team members that were assigned to the specified action.
*/
getTeamSize(type?: string, name?: string): number;
getTeamSize(
type?: BladeburnerActionType | `${BladeburnerActionType}`,
name?: BladeburnerActionName | `${BladeburnerActionName}`,
): number;
/**
* Set team size.
@ -3417,7 +3588,11 @@ export interface Bladeburner {
* @param size - Number of team members to set. Will be converted using Math.round().
* @returns Number of Bladeburner team members you assigned to the specified action.
*/
setTeamSize(type: string, name: string, size: number): number;
setTeamSize(
type: BladeburnerActionType | `${BladeburnerActionType}`,
name: BladeburnerActionName | `${BladeburnerActionName}`,
size: number,
): number;
/**
* Get estimated population in city.
@ -4566,11 +4741,15 @@ export interface Sleeve {
* Return a boolean indicating whether or not this action was set successfully.
*
* @param sleeveNumber - Index of the sleeve to start taking class.
* @param university - Name of the university to attend.
* @param className - Name of the class to follow.
* @param universityName - Name of the university to attend.
* @param courseName - Name of the course to follow.
* @returns True if this action was set successfully, false otherwise.
*/
setToUniversityCourse(sleeveNumber: number, university: string, className: string): boolean;
setToUniversityCourse(
sleeveNumber: number,
universityName: UniversityLocationName | `${UniversityLocationName}`,
courseName: UniversityClassType | `${UniversityClassType}`,
): boolean;
/**
* Set a sleeve to workout at the gym.
@ -4584,7 +4763,11 @@ export interface Sleeve {
* @param stat - Name of the stat to train.
* @returns True if the sleeve started working out, false otherwise.
*/
setToGymWorkout(sleeveNumber: number, gymName: string, stat: string): boolean;
setToGymWorkout(
sleeveNumber: number,
gymName: GymLocationName | `${GymLocationName}`,
stat: GymType | `${GymType}`,
): boolean;
/**
* Make a sleeve travel to another city. The cost for using this function is the same as for a player.
@ -4670,7 +4853,11 @@ export interface Sleeve {
* @param contract - Name of the contract if applicable.
* @returns True if the sleeve started the given Bladeburner action, false otherwise.
*/
setToBladeburnerAction(sleeveNumber: number, action: string, contract?: string): boolean;
setToBladeburnerAction(
sleeveNumber: number,
action: BladeburnerActionTypeForSleeve | `${BladeburnerActionTypeForSleeve}`,
contract?: BladeburnerContractName,
): boolean;
}
/**
@ -7893,6 +8080,30 @@ declare enum LocationName {
Void = "The Void",
}
/**
* Locations of university
*
* @public
*/
declare enum UniversityLocationName {
AevumSummitUniversity = LocationName.AevumSummitUniversity,
Sector12RothmanUniversity = LocationName.Sector12RothmanUniversity,
VolhavenZBInstituteOfTechnology = LocationName.VolhavenZBInstituteOfTechnology,
}
/**
* Locations of gym
*
* @public
*/
declare enum GymLocationName {
AevumCrushFitnessGym = LocationName.AevumCrushFitnessGym,
AevumSnapFitnessGym = LocationName.AevumSnapFitnessGym,
Sector12IronGym = LocationName.Sector12IronGym,
Sector12PowerhouseGym = LocationName.Sector12PowerhouseGym,
VolhavenMilleniumFitnessGym = LocationName.VolhavenMilleniumFitnessGym,
}
/** Names of all companies
* @public */
declare enum CompanyName {

@ -1,12 +1,12 @@
import { currentNodeMults } from "../../../src/BitNode/BitNodeMultipliers";
import { Skill } from "../../../src/Bladeburner/Skill";
import { BladeSkillName } from "../../../src/Enums";
import { BladeburnerSkillName } from "../../../src/Enums";
import { PositiveInteger, isPositiveInteger, isPositiveNumber } from "../../../src/types";
import { getRandomArbitrary } from "../../../src/utils/helpers/getRandomArbitrary";
import { getRandomIntInclusive } from "../../../src/utils/helpers/getRandomIntInclusive";
const skill = new Skill({
name: BladeSkillName.hyperdrive,
name: BladeburnerSkillName.Hyperdrive,
desc: "",
baseCost: 1,
costInc: 1,