From 2613948bad9f92f6354f2a7dec4057b7ee285005 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Thu, 14 Apr 2022 11:40:59 -0400
Subject: [PATCH 01/17] Add bladeburner actions to sleeves
This adds bladeburner actions to sleeves. In addition this bulked out the IPerson functionality and updated bladeburner functions to be more sleeve compatible
---
package-lock.json | 4 +-
src/Bladeburner/Action.tsx | 21 +-
src/Bladeburner/Bladeburner.tsx | 298 ++++++++++--------
src/Bladeburner/IAction.tsx | 9 +-
src/Bladeburner/IBladeburner.ts | 23 +-
src/Bladeburner/ui/BlackOpElem.tsx | 2 +-
src/Bladeburner/ui/ContractElem.tsx | 2 +-
src/Bladeburner/ui/OperationElem.tsx | 2 +-
src/Bladeburner/ui/SuccessChance.tsx | 3 +-
src/Crime/Crime.ts | 4 +-
src/Hospital/Hospital.ts | 6 +-
src/NetscriptFunctions/Bladeburner.ts | 18 +-
src/PersonObjects/IPerson.ts | 64 ++++
src/PersonObjects/IPlayer.ts | 15 +-
src/PersonObjects/IPlayerOrSleeve.ts | 26 --
src/PersonObjects/ITaskTracker.ts | 25 ++
src/PersonObjects/Person.ts | 64 ++--
src/PersonObjects/Player/PlayerObject.ts | 6 +
.../Player/PlayerObjectGeneralMethods.tsx | 30 +-
src/PersonObjects/Sleeve/Sleeve.ts | 272 ++++++++++++++--
.../Sleeve/SleeveTaskTypesEnum.ts | 1 +
src/PersonObjects/Sleeve/ui/SleeveElem.tsx | 18 +-
src/PersonObjects/Sleeve/ui/TaskSelector.tsx | 40 +++
src/PersonObjects/Sleeve/ui/TravelModal.tsx | 2 +-
24 files changed, 687 insertions(+), 268 deletions(-)
create mode 100644 src/PersonObjects/IPerson.ts
delete mode 100644 src/PersonObjects/IPlayerOrSleeve.ts
create mode 100644 src/PersonObjects/ITaskTracker.ts
diff --git a/package-lock.json b/package-lock.json
index b7c794026..79a902002 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bitburner",
- "version": "1.5.0",
+ "version": "1.6.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "bitburner",
- "version": "1.5.0",
+ "version": "1.6.0",
"hasInstallScript": true,
"license": "SEE LICENSE IN license.txt",
"dependencies": {
diff --git a/src/Bladeburner/Action.tsx b/src/Bladeburner/Action.tsx
index c166ef567..b05eac04d 100644
--- a/src/Bladeburner/Action.tsx
+++ b/src/Bladeburner/Action.tsx
@@ -5,6 +5,7 @@ import { Generic_fromJSON, Generic_toJSON, Reviver } from "../utils/JSONReviver"
import { BladeburnerConstants } from "./data/Constants";
import { IBladeburner } from "./IBladeburner";
import { IAction, ISuccessChanceParams } from "./IAction";
+import { IPerson } from "../PersonObjects/IPerson";
class StatsMultiplier {
[key: string]: number;
@@ -154,8 +155,8 @@ export class Action implements IAction {
* Tests for success. Should be called when an action has completed
* @param inst {Bladeburner} - Bladeburner instance
*/
- attempt(inst: IBladeburner): boolean {
- return Math.random() < this.getSuccessChance(inst);
+ attempt(inst: IBladeburner, person: IPerson): boolean {
+ return Math.random() < this.getSuccessChance(inst, person);
}
// To be implemented by subtypes
@@ -163,13 +164,13 @@ export class Action implements IAction {
return 1;
}
- getActionTime(inst: IBladeburner): number {
+ getActionTime(inst: IBladeburner, person: IPerson): number {
const difficulty = this.getDifficulty();
let baseTime = difficulty / BladeburnerConstants.DifficultyToTimeFactor;
const skillFac = inst.skillMultipliers.actionTime; // Always < 1
- const effAgility = Player.agility * inst.skillMultipliers.effAgi;
- const effDexterity = Player.dexterity * inst.skillMultipliers.effDex;
+ const effAgility = person.agility * inst.skillMultipliers.effAgi;
+ const effDexterity = person.dexterity * inst.skillMultipliers.effDex;
const statFac =
0.5 *
(Math.pow(effAgility, BladeburnerConstants.EffAgiExponentialFactor) +
@@ -213,12 +214,12 @@ export class Action implements IAction {
return 1;
}
- getEstSuccessChance(inst: IBladeburner): [number, number] {
+ getEstSuccessChance(inst: IBladeburner, person: IPerson): [number, number] {
function clamp(x: number): number {
return Math.max(0, Math.min(x, 1));
}
- const est = this.getSuccessChance(inst, { est: true });
- const real = this.getSuccessChance(inst);
+ const est = this.getSuccessChance(inst, person, { est: true });
+ const real = this.getSuccessChance(inst, person);
const diff = Math.abs(real - est);
let low = real - diff;
let high = real + diff;
@@ -234,7 +235,7 @@ export class Action implements IAction {
* @params - options:
* est (bool): Get success chance estimate instead of real success chance
*/
- getSuccessChance(inst: IBladeburner, params: ISuccessChanceParams = { est: false }): number {
+ getSuccessChance(inst: IBladeburner, person: IPerson, params: ISuccessChanceParams = { est: false }): number {
if (inst == null) {
throw new Error("Invalid Bladeburner instance passed into Action.getSuccessChance");
}
@@ -242,7 +243,7 @@ export class Action implements IAction {
let competence = 0;
for (const stat of Object.keys(this.weights)) {
if (this.weights.hasOwnProperty(stat)) {
- const playerStatLvl = Player.queryStatFromString(stat);
+ const playerStatLvl = person.queryStatFromString(stat);
const key = "eff" + stat.charAt(0).toUpperCase() + stat.slice(1);
let effMultiplier = inst.skillMultipliers[key];
if (effMultiplier == null) {
diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx
index 11ebf3122..7dee7aae3 100644
--- a/src/Bladeburner/Bladeburner.tsx
+++ b/src/Bladeburner/Bladeburner.tsx
@@ -15,6 +15,8 @@ import { Skill } from "./Skill";
import { City } from "./City";
import { IAction } from "./IAction";
import { IPlayer } from "../PersonObjects/IPlayer";
+import { createTaskTracker, ITaskTracker } from "../PersonObjects/ITaskTracker";
+import { IPerson } from "../PersonObjects/IPerson";
import { IRouter, Page } from "../ui/Router";
import { ConsoleHelpText } from "./data/Help";
import { exceptionAlert } from "../utils/helpers/exceptionAlert";
@@ -36,6 +38,7 @@ import { WorkerScript } from "../Netscript/WorkerScript";
import { FactionNames } from "../Faction/data/FactionNames";
import { BlackOperationNames } from "./data/BlackOperationNames";
import { KEY } from "../utils/helpers/keyCodes";
+import { Player } from "src/Player";
interface BlackOpsAttempt {
error?: string;
@@ -53,6 +56,7 @@ export class Bladeburner implements IBladeburner {
totalSkillPoints = 0;
teamSize = 0;
+ sleeveSize = 0;
teamLost = 0;
hpLost = 0;
@@ -159,7 +163,7 @@ export class Bladeburner implements IBladeburner {
return { isAvailable: true, action };
}
- startAction(player: IPlayer, actionId: IActionIdentifier): void {
+ startAction(person: IPerson, actionId: IActionIdentifier): void {
if (actionId == null) return;
this.action = actionId;
this.actionTimeCurrent = 0;
@@ -176,7 +180,7 @@ export class Bladeburner implements IBladeburner {
if (action.count < 1) {
return this.resetAction();
}
- this.actionTimeToComplete = action.getActionTime(this);
+ this.actionTimeToComplete = action.getActionTime(this, person);
} catch (e: any) {
exceptionAlert(e);
}
@@ -193,7 +197,7 @@ export class Bladeburner implements IBladeburner {
if (actionId.name === "Raid" && this.getCurrentCity().comms === 0) {
return this.resetAction();
}
- this.actionTimeToComplete = action.getActionTime(this);
+ this.actionTimeToComplete = action.getActionTime(this, person);
} catch (e: any) {
exceptionAlert(e);
}
@@ -211,14 +215,14 @@ export class Bladeburner implements IBladeburner {
if (testBlackOp.action === undefined) {
throw new Error("action should not be null");
}
- this.actionTimeToComplete = testBlackOp.action.getActionTime(this);
+ this.actionTimeToComplete = testBlackOp.action.getActionTime(this, person);
} catch (e: any) {
exceptionAlert(e);
}
break;
}
case ActionTypes["Recruitment"]:
- this.actionTimeToComplete = this.getRecruitmentTime(player);
+ this.actionTimeToComplete = this.getRecruitmentTime(person);
break;
case ActionTypes["Training"]:
case ActionTypes["FieldAnalysis"]:
@@ -997,11 +1001,11 @@ export class Bladeburner implements IBladeburner {
}
/**
- * Process stat gains from Contracts, Operations, and Black Operations
+ * Return stat to be gained from Contracts, Operations, and Black Operations
* @param action(Action obj) - Derived action class
* @param success(bool) - Whether action was successful
*/
- gainActionStats(player: IPlayer, action: IAction, success: boolean): void {
+ getActionStats(action: IAction, success: boolean): ITaskTracker {
const difficulty = action.getDifficulty();
/**
@@ -1018,34 +1022,48 @@ export class Bladeburner implements IBladeburner {
const unweightedGain = time * BladeburnerConstants.BaseStatGain * successMult * difficultyMult;
const unweightedIntGain = time * BladeburnerConstants.BaseIntGain * successMult * difficultyMult;
const skillMult = this.skillMultipliers.expGain;
- player.gainHackingExp(unweightedGain * action.weights.hack * player.hacking_exp_mult * skillMult);
- player.gainStrengthExp(unweightedGain * action.weights.str * player.strength_exp_mult * skillMult);
- player.gainDefenseExp(unweightedGain * action.weights.def * player.defense_exp_mult * skillMult);
- player.gainDexterityExp(unweightedGain * action.weights.dex * player.dexterity_exp_mult * skillMult);
- player.gainAgilityExp(unweightedGain * action.weights.agi * player.agility_exp_mult * skillMult);
- player.gainCharismaExp(unweightedGain * action.weights.cha * player.charisma_exp_mult * skillMult);
- player.gainIntelligenceExp(unweightedIntGain * action.weights.int * skillMult);
+
+ return {
+ hack: unweightedGain * action.weights.hack * skillMult,
+ str: unweightedGain * action.weights.str * skillMult,
+ def: unweightedGain * action.weights.def * skillMult,
+ dex: unweightedGain * action.weights.dex * skillMult,
+ agi: unweightedGain * action.weights.agi * skillMult,
+ cha: unweightedGain * action.weights.cha * skillMult,
+ int: unweightedIntGain * action.weights.int * skillMult,
+ money: 0,
+ }
}
- getDiplomacyEffectiveness(player: IPlayer): number {
+ getDiplomacyEffectiveness(person: IPerson): number {
// Returns a decimal by which the city's chaos level should be multiplied (e.g. 0.98)
const CharismaLinearFactor = 1e3;
const CharismaExponentialFactor = 0.045;
- const charismaEff = Math.pow(player.charisma, CharismaExponentialFactor) + player.charisma / CharismaLinearFactor;
+ const charismaEff = Math.pow(person.charisma, CharismaExponentialFactor) + person.charisma / CharismaLinearFactor;
return (100 - charismaEff) / 100;
}
- getRecruitmentSuccessChance(player: IPlayer): number {
- return Math.pow(player.charisma, 0.45) / (this.teamSize + 1);
+ getRecruitmentSuccessChance(person: IPerson): number {
+ return Math.pow(person.charisma, 0.45) / (this.teamSize - this.sleeveSize + 1);
}
- getRecruitmentTime(player: IPlayer): number {
- const effCharisma = player.charisma * this.skillMultipliers.effCha;
+ getRecruitmentTime(person: IPerson): number {
+ const effCharisma = person.charisma * this.skillMultipliers.effCha;
const charismaFactor = Math.pow(effCharisma, 0.81) + effCharisma / 90;
return Math.max(10, Math.round(BladeburnerConstants.BaseRecruitmentTimeNeeded - charismaFactor));
}
+ sleeveSupport(joining: boolean): void {
+ if(joining){
+ this.sleeveSize += 1;
+ this.teamSize += 1;
+ } else {
+ this.sleeveSize -= 1;
+ this.teamSize -= 1;
+ }
+ }
+
resetSkillMultipliers(): void {
this.skillMultipliers = {
successChanceAll: 1,
@@ -1097,7 +1115,7 @@ export class Bladeburner implements IBladeburner {
}
}
- completeOperation(success: boolean): void {
+ completeOperation(success: boolean, player: IPlayer): void {
if (this.action.type !== ActionTypes.Operation) {
throw new Error("completeOperation() called even though current action is not an Operation");
}
@@ -1117,6 +1135,15 @@ export class Bladeburner implements IBladeburner {
}
const losses = getRandomInt(0, max);
this.teamSize -= losses;
+ if(this.teamSize < this.sleeveSize) {
+ let sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
+ for(let i = 0; i > (this.teamSize-this.sleeveSize); i--){
+ const r = Math.floor(Math.random() * sup.length);
+ sup[r].takeDamage(sup[r].max_hp);
+ sup.splice(r, 1);
+ }
+ this.teamSize += this.sleeveSize;
+ }
this.teamLost += losses;
if (this.logging.ops && losses > 0) {
this.log("Lost " + formatNumber(losses, 0) + " team members during this " + action.name);
@@ -1214,13 +1241,13 @@ export class Bladeburner implements IBladeburner {
}
}
- completeContract(success: boolean): void {
- if (this.action.type !== ActionTypes.Contract) {
+ completeContract(success: boolean, actionIdent: IActionIdentifier): void {
+ if (actionIdent.type !== ActionTypes.Contract) {
throw new Error("completeContract() called even though current action is not a Contract");
}
const city = this.getCurrentCity();
if (success) {
- switch (this.action.name) {
+ switch (actionIdent.name) {
case "Tracking":
// Increase estimate accuracy by a relatively small amount
city.improvePopulationEstimateByCount(getRandomInt(100, 1e3));
@@ -1234,20 +1261,21 @@ export class Bladeburner implements IBladeburner {
city.changeChaosByCount(0.04);
break;
default:
- throw new Error("Invalid Action name in completeContract: " + this.action.name);
+ throw new Error("Invalid Action name in completeContract: " + actionIdent.name);
}
}
}
- completeAction(router: IRouter, player: IPlayer): void {
- switch (this.action.type) {
+ completeAction(player: IPlayer, person: IPerson, actionIdent: IActionIdentifier): ITaskTracker {
+ let retValue = createTaskTracker();
+ switch (actionIdent.type) {
case ActionTypes["Contract"]:
case ActionTypes["Operation"]: {
try {
- const isOperation = this.action.type === ActionTypes["Operation"];
- const action = this.getActionObject(this.action);
+ const isOperation = actionIdent.type === ActionTypes["Operation"];
+ const action = this.getActionObject(actionIdent);
if (action == null) {
- throw new Error("Failed to get Contract/Operation Object for: " + this.action.name);
+ throw new Error("Failed to get Contract/Operation Object for: " + actionIdent.name);
}
const difficulty = action.getDifficulty();
const difficultyMultiplier =
@@ -1262,8 +1290,8 @@ export class Bladeburner implements IBladeburner {
}
// Process Contract/Operation success/failure
- if (action.attempt(this)) {
- this.gainActionStats(player, action, true);
+ if (action.attempt(this, person)) {
+ retValue = this.getActionStats(action, true);
++action.successes;
--action.count;
@@ -1271,7 +1299,7 @@ export class Bladeburner implements IBladeburner {
let moneyGain = 0;
if (!isOperation) {
moneyGain = BladeburnerConstants.ContractBaseMoneyGain * rewardMultiplier * this.skillMultipliers.money;
- player.gainMoney(moneyGain, "bladeburner");
+ retValue.money = moneyGain;
}
if (isOperation) {
@@ -1281,11 +1309,12 @@ export class Bladeburner implements IBladeburner {
}
if (action.rankGain) {
const gain = addOffset(action.rankGain * rewardMultiplier * BitNodeMultipliers.BladeburnerRank, 10);
- this.changeRank(player, gain);
+ this.changeRank(person, gain);
if (isOperation && this.logging.ops) {
- this.log(action.name + " successfully completed! Gained " + formatNumber(gain, 3) + " rank");
+ this.log(`${person.whoAmI()}: ` + action.name + " successfully completed! Gained " + formatNumber(gain, 3) + " rank");
} else if (!isOperation && this.logging.contracts) {
this.log(
+ `${person.whoAmI()}: ` +
action.name +
" contract successfully completed! Gained " +
formatNumber(gain, 3) +
@@ -1294,22 +1323,22 @@ export class Bladeburner implements IBladeburner {
);
}
}
- isOperation ? this.completeOperation(true) : this.completeContract(true);
+ isOperation ? this.completeOperation(true, player) : this.completeContract(true, actionIdent);
} else {
- this.gainActionStats(player, action, false);
+ retValue = this.getActionStats(action, false);
++action.failures;
let loss = 0,
damage = 0;
if (action.rankLoss) {
loss = addOffset(action.rankLoss * rewardMultiplier, 10);
- this.changeRank(player, -1 * loss);
+ this.changeRank(person, -1 * loss);
}
if (action.hpLoss) {
damage = action.hpLoss * difficultyMultiplier;
damage = Math.ceil(addOffset(damage, 10));
this.hpLost += damage;
- const cost = calculateHospitalizationCost(player, damage);
- if (player.takeDamage(damage)) {
+ const cost = calculateHospitalizationCost(person, damage);
+ if (person.takeDamage(damage)) {
++this.numHosp;
this.moneyLost += cost;
}
@@ -1322,16 +1351,15 @@ export class Bladeburner implements IBladeburner {
logLossText += "Took " + formatNumber(damage, 0) + " damage.";
}
if (isOperation && this.logging.ops) {
- this.log(action.name + " failed! " + logLossText);
+ this.log(`${person.whoAmI()}: ` + action.name + " failed! " + logLossText);
} else if (!isOperation && this.logging.contracts) {
- this.log(action.name + " contract failed! " + logLossText);
+ this.log(`${person.whoAmI()}: ` + action.name + " contract failed! " + logLossText);
}
- isOperation ? this.completeOperation(false) : this.completeContract(false);
+ isOperation ? this.completeOperation(false, player) : this.completeContract(false, actionIdent);
}
if (action.autoLevel) {
action.level = action.maxLevel;
} // Autolevel
- this.startAction(player, this.action); // Repeat action
} catch (e: any) {
exceptionAlert(e);
}
@@ -1340,9 +1368,9 @@ export class Bladeburner implements IBladeburner {
case ActionTypes["BlackOp"]:
case ActionTypes["BlackOperation"]: {
try {
- const action = this.getActionObject(this.action);
+ const action = this.getActionObject(actionIdent);
if (action == null || !(action instanceof BlackOperation)) {
- throw new Error("Failed to get BlackOperation Object for: " + this.action.name);
+ throw new Error("Failed to get BlackOperation Object for: " + actionIdent.name);
}
const difficulty = action.getDifficulty();
const difficultyMultiplier =
@@ -1359,39 +1387,33 @@ export class Bladeburner implements IBladeburner {
const teamCount = action.teamCount;
let teamLossMax;
- if (action.attempt(this)) {
- this.gainActionStats(player, action, true);
+ if (action.attempt(this, person)) {
+ retValue = this.getActionStats(action, true);
action.count = 0;
this.blackops[action.name] = true;
let rankGain = 0;
if (action.rankGain) {
rankGain = addOffset(action.rankGain * BitNodeMultipliers.BladeburnerRank, 10);
- this.changeRank(player, rankGain);
+ this.changeRank(person, rankGain);
}
teamLossMax = Math.ceil(teamCount / 2);
- // Operation Daedalus
- if (action.name === BlackOperationNames.OperationDaedalus) {
- this.resetAction();
- return router.toBitVerse(false, false);
- }
-
if (this.logging.blackops) {
- this.log(action.name + " successful! Gained " + formatNumber(rankGain, 1) + " rank");
+ this.log(`${person.whoAmI()}: ` + action.name + " successful! Gained " + formatNumber(rankGain, 1) + " rank");
}
} else {
- this.gainActionStats(player, action, false);
+ retValue = this.getActionStats(action, false);
let rankLoss = 0;
let damage = 0;
if (action.rankLoss) {
rankLoss = addOffset(action.rankLoss, 10);
- this.changeRank(player, -1 * rankLoss);
+ this.changeRank(person, -1 * rankLoss);
}
if (action.hpLoss) {
damage = action.hpLoss * difficultyMultiplier;
damage = Math.ceil(addOffset(damage, 10));
- const cost = calculateHospitalizationCost(player, damage);
- if (player.takeDamage(damage)) {
+ const cost = calculateHospitalizationCost(person, damage);
+ if (person.takeDamage(damage)) {
++this.numHosp;
this.moneyLost += cost;
}
@@ -1400,6 +1422,7 @@ export class Bladeburner implements IBladeburner {
if (this.logging.blackops) {
this.log(
+ `${person.whoAmI()}: ` +
action.name +
" failed! Lost " +
formatNumber(rankLoss, 1) +
@@ -1416,9 +1439,18 @@ export class Bladeburner implements IBladeburner {
if (teamCount >= 1) {
const losses = getRandomInt(1, teamLossMax);
this.teamSize -= losses;
+ if(this.teamSize < this.sleeveSize) {
+ let sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
+ for(let i = 0; i > (this.teamSize-this.sleeveSize); i--){
+ const r = Math.floor(Math.random() * sup.length);
+ sup[r].takeDamage(sup[r].max_hp);
+ sup.splice(r, 1);
+ }
+ this.teamSize += this.sleeveSize;
+ }
this.teamLost += losses;
if (this.logging.blackops) {
- this.log("You lost " + formatNumber(losses, 0) + " team members during " + action.name);
+ this.log(`${person.whoAmI()}: ` + "You lost " + formatNumber(losses, 0) + " team members during " + action.name);
}
}
} catch (e: any) {
@@ -1428,18 +1460,19 @@ export class Bladeburner implements IBladeburner {
}
case ActionTypes["Training"]: {
this.stamina -= 0.5 * BladeburnerConstants.BaseStaminaLoss;
- const strExpGain = 30 * player.strength_exp_mult,
- defExpGain = 30 * player.defense_exp_mult,
- dexExpGain = 30 * player.dexterity_exp_mult,
- agiExpGain = 30 * player.agility_exp_mult,
+ const strExpGain = 30 * person.strength_exp_mult,
+ defExpGain = 30 * person.defense_exp_mult,
+ dexExpGain = 30 * person.dexterity_exp_mult,
+ agiExpGain = 30 * person.agility_exp_mult,
staminaGain = 0.04 * this.skillMultipliers.stamina;
- player.gainStrengthExp(strExpGain);
- player.gainDefenseExp(defExpGain);
- player.gainDexterityExp(dexExpGain);
- player.gainAgilityExp(agiExpGain);
+ retValue.str = strExpGain;
+ retValue.def = defExpGain;
+ retValue.dex = dexExpGain;
+ retValue.agi = agiExpGain;
this.staminaBonus += staminaGain;
if (this.logging.general) {
this.log(
+ `${person.whoAmI()}: ` +
"Training completed. Gained: " +
formatNumber(strExpGain, 1) +
" str exp, " +
@@ -1453,80 +1486,77 @@ export class Bladeburner implements IBladeburner {
" max stamina",
);
}
- this.startAction(player, this.action); // Repeat action
break;
}
case ActionTypes["FieldAnalysis"]:
case ActionTypes["Field Analysis"]: {
// Does not use stamina. Effectiveness depends on hacking, int, and cha
let eff =
- 0.04 * Math.pow(player.hacking, 0.3) +
- 0.04 * Math.pow(player.intelligence, 0.9) +
- 0.02 * Math.pow(player.charisma, 0.3);
- eff *= player.bladeburner_analysis_mult;
+ 0.04 * Math.pow(person.hacking, 0.3) +
+ 0.04 * Math.pow(person.intelligence, 0.9) +
+ 0.02 * Math.pow(person.charisma, 0.3);
+ eff *= person.bladeburner_analysis_mult;
if (isNaN(eff) || eff < 0) {
throw new Error("Field Analysis Effectiveness calculated to be NaN or negative");
}
- const hackingExpGain = 20 * player.hacking_exp_mult;
- const charismaExpGain = 20 * player.charisma_exp_mult;
+ const hackingExpGain = 20 * person.hacking_exp_mult;
+ const charismaExpGain = 20 * person.charisma_exp_mult;
const rankGain = 0.1 * BitNodeMultipliers.BladeburnerRank;
- player.gainHackingExp(hackingExpGain);
- player.gainIntelligenceExp(BladeburnerConstants.BaseIntGain);
- player.gainCharismaExp(charismaExpGain);
- this.changeRank(player, rankGain);
+ retValue.hack = hackingExpGain;
+ retValue.cha = charismaExpGain;
+ retValue.int = BladeburnerConstants.BaseIntGain;
+ this.changeRank(person, rankGain);
this.getCurrentCity().improvePopulationEstimateByPercentage(eff * this.skillMultipliers.successChanceEstimate);
if (this.logging.general) {
this.log(
+ `${person.whoAmI()}: ` +
`Field analysis completed. Gained ${formatNumber(rankGain, 2)} rank, ` +
`${formatNumber(hackingExpGain, 1)} hacking exp, and ` +
`${formatNumber(charismaExpGain, 1)} charisma exp`,
);
}
- this.startAction(player, this.action); // Repeat action
break;
}
case ActionTypes["Recruitment"]: {
- const successChance = this.getRecruitmentSuccessChance(player);
+ const successChance = this.getRecruitmentSuccessChance(person);
+ const recruitTime = this.getRecruitmentTime(person) * 1000;
if (Math.random() < successChance) {
- const expGain = 2 * BladeburnerConstants.BaseStatGain * this.actionTimeToComplete;
- player.gainCharismaExp(expGain);
+ const expGain = 2 * BladeburnerConstants.BaseStatGain * recruitTime;
+ retValue.cha = expGain;
++this.teamSize;
if (this.logging.general) {
- this.log("Successfully recruited a team member! Gained " + formatNumber(expGain, 1) + " charisma exp");
+ this.log(`${person.whoAmI()}: ` + "Successfully recruited a team member! Gained " + formatNumber(expGain, 1) + " charisma exp");
}
} else {
- const expGain = BladeburnerConstants.BaseStatGain * this.actionTimeToComplete;
- player.gainCharismaExp(expGain);
+ const expGain = BladeburnerConstants.BaseStatGain * recruitTime;
+ retValue.cha = expGain;
if (this.logging.general) {
- this.log("Failed to recruit a team member. Gained " + formatNumber(expGain, 1) + " charisma exp");
+ this.log(`${person.whoAmI()}: ` + "Failed to recruit a team member. Gained " + formatNumber(expGain, 1) + " charisma exp");
}
}
- this.startAction(player, this.action); // Repeat action
break;
}
case ActionTypes["Diplomacy"]: {
- const eff = this.getDiplomacyEffectiveness(player);
+ const eff = this.getDiplomacyEffectiveness(person);
this.getCurrentCity().chaos *= eff;
if (this.getCurrentCity().chaos < 0) {
this.getCurrentCity().chaos = 0;
}
if (this.logging.general) {
this.log(
- `Diplomacy completed. Chaos levels in the current city fell by ${numeralWrapper.formatPercentage(1 - eff)}`,
+ `${person.whoAmI()}: Diplomacy completed. Chaos levels in the current city fell by ${numeralWrapper.formatPercentage(1 - eff)}`,
);
}
- this.startAction(player, this.action); // Repeat Action
break;
}
case ActionTypes["Hyperbolic Regeneration Chamber"]: {
- player.regenerateHp(BladeburnerConstants.HrcHpGain);
+ person.regenerateHp(BladeburnerConstants.HrcHpGain);
const staminaGain = this.maxStamina * (BladeburnerConstants.HrcStaminaGain / 100);
this.stamina = Math.min(this.maxStamina, this.stamina + staminaGain);
- this.startAction(player, this.action);
if (this.logging.general) {
this.log(
- `Rested in Hyperbolic Regeneration Chamber. Restored ${
+ `${person.whoAmI()}: Rested in Hyperbolic Regeneration Chamber. Restored ${
BladeburnerConstants.HrcHpGain
} HP and gained ${numeralWrapper.formatStamina(staminaGain)} stamina`,
);
@@ -1545,24 +1575,35 @@ export class Bladeburner implements IBladeburner {
this.operations[operation].count += (60 * 3 * growthF()) / BladeburnerConstants.ActionCountGrowthPeriod;
}
if (this.logging.general) {
- this.log(`Incited violence in the synthoid communities.`);
+ this.log(`${person.whoAmI()}: ` + `Incited violence in the synthoid communities.`);
}
for (const cityName of Object.keys(this.cities)) {
const city = this.cities[cityName];
city.chaos += 10;
city.chaos += city.chaos / (Math.log(city.chaos) / Math.log(10));
}
-
- this.startAction(player, this.action);
break;
}
default:
- console.error(`Bladeburner.completeAction() called for invalid action: ${this.action.type}`);
+ console.error(`Bladeburner.completeAction() called for invalid action: ${actionIdent.type}`);
break;
}
+ return retValue;
}
- changeRank(player: IPlayer, change: number): void {
+ infiltrateSynthoidCommunities(): void {
+ for (const contract of Object.keys(this.contracts)) {
+ this.contracts[contract].count += 1;
+ }
+ for (const operation of Object.keys(this.operations)) {
+ this.operations[operation].count += 1;
+ }
+ if (this.logging.general) {
+ this.log(`Sleeve: Infiltrate the synthoid communities.`);
+ }
+ }
+
+ changeRank(person: IPerson, change: number): void {
if (isNaN(change)) {
throw new Error("NaN passed into Bladeburner.changeRank()");
}
@@ -1583,7 +1624,7 @@ export class Bladeburner implements IBladeburner {
if (bladeburnerFac.isMember) {
const favorBonus = 1 + bladeburnerFac.favor / 100;
bladeburnerFac.playerReputation +=
- BladeburnerConstants.RankToFactionRepFactor * change * player.faction_rep_mult * favorBonus;
+ BladeburnerConstants.RankToFactionRepFactor * change * person.faction_rep_mult * favorBonus;
}
}
@@ -1614,7 +1655,19 @@ export class Bladeburner implements IBladeburner {
this.actionTimeOverflow = 0;
if (this.actionTimeCurrent >= this.actionTimeToComplete) {
this.actionTimeOverflow = this.actionTimeCurrent - this.actionTimeToComplete;
- return this.completeAction(router, player);
+ let retValue = this.completeAction(player, player, this.action);
+ player.gainMoney(retValue.money, "bladeburner");
+ player.gainStats(retValue);
+ // Operation Daedalus
+ const action = this.getActionObject(this.action);
+ if (action == null || !(action instanceof BlackOperation)) {
+ throw new Error("Failed to get BlackOperation Object for: " + this.action.name);
+ } else if (action.name === BlackOperationNames.OperationDaedalus && this.blackops[action.name]) {
+ this.resetAction();
+ router.toBitVerse(false, false);
+ } else if(this.action.type != ActionTypes["BlackOperation"] && this.action.type != ActionTypes["BlackOp"]) {
+ this.startAction(player, this.action); // Repeat action
+ }
}
}
@@ -2093,67 +2146,57 @@ export class Bladeburner implements IBladeburner {
}
}
- getActionTimeNetscriptFn(player: IPlayer, type: string, name: string, workerScript: WorkerScript): number {
- const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ getActionTimeNetscriptFn(person: IPerson, type: string, name: string): number|string {
const actionId = this.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
- workerScript.log("bladeburner.getActionTime", () => errorLogText);
- return -1;
+ return "bladeburner.getActionTime";
}
const actionObj = this.getActionObject(actionId);
if (actionObj == null) {
- workerScript.log("bladeburner.getActionTime", () => errorLogText);
- return -1;
+ return "bladeburner.getActionTime";
}
-
switch (actionId.type) {
case ActionTypes["Contract"]:
case ActionTypes["Operation"]:
case ActionTypes["BlackOp"]:
case ActionTypes["BlackOperation"]:
- return actionObj.getActionTime(this) * 1000;
+ return actionObj.getActionTime(this, person) * 1000;
case ActionTypes["Training"]:
case ActionTypes["Field Analysis"]:
case ActionTypes["FieldAnalysis"]:
return 30000;
case ActionTypes["Recruitment"]:
- return this.getRecruitmentTime(player) * 1000;
+ return this.getRecruitmentTime(person) * 1000;
case ActionTypes["Diplomacy"]:
case ActionTypes["Hyperbolic Regeneration Chamber"]:
case ActionTypes["Incite Violence"]:
return 60000;
default:
- workerScript.log("bladeburner.getActionTime", () => errorLogText);
- return -1;
+ return "bladeburner.getActionTime";
}
}
getActionEstimatedSuccessChanceNetscriptFn(
- player: IPlayer,
+ person: IPerson,
type: string,
name: string,
- workerScript: WorkerScript,
- ): [number, number] {
- const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ ): [number, number]|string {
const actionId = this.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
- workerScript.log("bladeburner.getActionEstimatedSuccessChance", () => errorLogText);
- return [-1, -1];
+ return "bladeburner.getActionEstimatedSuccessChance";
}
const actionObj = this.getActionObject(actionId);
if (actionObj == null) {
- workerScript.log("bladeburner.getActionEstimatedSuccessChance", () => errorLogText);
- return [-1, -1];
+ return "bladeburner.getActionEstimatedSuccessChance";
}
-
switch (actionId.type) {
case ActionTypes["Contract"]:
case ActionTypes["Operation"]:
case ActionTypes["BlackOp"]:
case ActionTypes["BlackOperation"]:
- return actionObj.getEstSuccessChance(this);
+ return actionObj.getEstSuccessChance(this, person);
case ActionTypes["Training"]:
case ActionTypes["Field Analysis"]:
case ActionTypes["FieldAnalysis"]:
@@ -2162,12 +2205,11 @@ export class Bladeburner implements IBladeburner {
case ActionTypes["Incite Violence"]:
return [1, 1];
case ActionTypes["Recruitment"]: {
- const recChance = this.getRecruitmentSuccessChance(player);
- return [recChance, recChance];
- }
+ const recChance = this.getRecruitmentSuccessChance(person);
+ return [recChance, recChance];
+ }
default:
- workerScript.log("bladeburner.getActionEstimatedSuccessChance", () => errorLogText);
- return [-1, -1];
+ return "bladeburner.getActionEstimatedSuccessChance";
}
}
diff --git a/src/Bladeburner/IAction.tsx b/src/Bladeburner/IAction.tsx
index 274bae4c9..666ffbfe9 100644
--- a/src/Bladeburner/IAction.tsx
+++ b/src/Bladeburner/IAction.tsx
@@ -1,3 +1,4 @@
+import { IPerson } from "../PersonObjects/IPerson";
import { IBladeburner } from "./IBladeburner";
interface IStatsMultiplier {
@@ -55,15 +56,15 @@ export interface IAction {
teamCount: number;
getDifficulty(): number;
- attempt(inst: IBladeburner): boolean;
+ attempt(inst: IBladeburner, person: IPerson): boolean;
getActionTimePenalty(): number;
- getActionTime(inst: IBladeburner): number;
+ getActionTime(inst: IBladeburner, person: IPerson): number;
getTeamSuccessBonus(inst: IBladeburner): number;
getActionTypeSkillSuccessBonus(inst: IBladeburner): number;
getChaosCompetencePenalty(inst: IBladeburner, params: ISuccessChanceParams): number;
getChaosDifficultyBonus(inst: IBladeburner): number;
- getEstSuccessChance(inst: IBladeburner): [number, number];
- getSuccessChance(inst: IBladeburner, params: ISuccessChanceParams): number;
+ getEstSuccessChance(inst: IBladeburner, person: IPerson): [number, number];
+ getSuccessChance(inst: IBladeburner, person: IPerson, params: ISuccessChanceParams): number;
getSuccessesNeededForNextLevel(baseSuccessesPerLevel: number): number;
setMaxLevel(baseSuccessesPerLevel: number): void;
toJSON(): any;
diff --git a/src/Bladeburner/IBladeburner.ts b/src/Bladeburner/IBladeburner.ts
index 840ed20f4..f757f9d66 100644
--- a/src/Bladeburner/IBladeburner.ts
+++ b/src/Bladeburner/IBladeburner.ts
@@ -3,6 +3,8 @@ import { City } from "./City";
import { Skill } from "./Skill";
import { IAction } from "./IAction";
import { IPlayer } from "../PersonObjects/IPlayer";
+import { IPerson } from "../PersonObjects/IPerson";
+import { ITaskTracker } from "../PersonObjects/ITaskTracker";
import { IRouter } from "../ui/Router";
import { WorkerScript } from "../Netscript/WorkerScript";
@@ -70,13 +72,12 @@ export interface IBladeburner {
getGeneralActionNamesNetscriptFn(): string[];
getSkillNamesNetscriptFn(): string[];
startActionNetscriptFn(player: IPlayer, type: string, name: string, workerScript: WorkerScript): boolean;
- getActionTimeNetscriptFn(player: IPlayer, type: string, name: string, workerScript: WorkerScript): number;
+ getActionTimeNetscriptFn(person: IPerson, type: string, name: string): number|string;
getActionEstimatedSuccessChanceNetscriptFn(
- player: IPlayer,
+ person: IPerson,
type: string,
name: string,
- workerScript: WorkerScript,
- ): [number, number];
+ ): [number, number]|string;
getActionCountRemainingNetscriptFn(type: string, name: string, workerScript: WorkerScript): number;
getSkillLevelNetscriptFn(skillName: string, workerScript: WorkerScript): number;
getSkillUpgradeCostNetscriptFn(skillName: string, workerScript: WorkerScript): number;
@@ -95,20 +96,22 @@ export interface IBladeburner {
triggerMigration(sourceCityName: string): void;
triggerPotentialMigration(sourceCityName: string, chance: number): void;
randomEvent(): void;
- gainActionStats(player: IPlayer, action: IAction, success: boolean): void;
getDiplomacyEffectiveness(player: IPlayer): number;
- getRecruitmentSuccessChance(player: IPlayer): number;
- getRecruitmentTime(player: IPlayer): number;
+ getRecruitmentSuccessChance(player: IPerson): number;
+ getRecruitmentTime(player: IPerson): number;
resetSkillMultipliers(): void;
updateSkillMultipliers(): void;
- completeOperation(success: boolean): void;
+ completeOperation(success: boolean, player: IPlayer): void;
getActionObject(actionId: IActionIdentifier): IAction | null;
- completeContract(success: boolean): void;
- completeAction(router: IRouter, player: IPlayer): void;
+ completeContract(success: boolean, actionIdent: IActionIdentifier): void;
+ completeAction(player: IPlayer, person: IPerson, actionIdent: IActionIdentifier): ITaskTracker;
+ infiltrateSynthoidCommunities(): void;
changeRank(player: IPlayer, change: number): void;
processAction(router: IRouter, player: IPlayer, seconds: number): void;
calculateStaminaGainPerSecond(player: IPlayer): number;
calculateMaxStamina(player: IPlayer): void;
create(): void;
process(router: IRouter, player: IPlayer): void;
+ getActionStats(action: IAction, success: boolean): ITaskTracker;
+ sleeveSupport(joining: boolean): void;
}
diff --git a/src/Bladeburner/ui/BlackOpElem.tsx b/src/Bladeburner/ui/BlackOpElem.tsx
index ae406f14d..7c45836c3 100644
--- a/src/Bladeburner/ui/BlackOpElem.tsx
+++ b/src/Bladeburner/ui/BlackOpElem.tsx
@@ -37,7 +37,7 @@ export function BlackOpElem(props: IProps): React.ReactElement {
const isActive =
props.bladeburner.action.type === ActionTypes["BlackOperation"] &&
props.action.name === props.bladeburner.action.name;
- const actionTime = props.action.getActionTime(props.bladeburner);
+ const actionTime = props.action.getActionTime(props.bladeburner, props.player);
const hasReqdRank = props.bladeburner.rank >= props.action.reqdRank;
const computedActionTimeCurrent = Math.min(
props.bladeburner.actionTimeCurrent + props.bladeburner.actionTimeOverflow,
diff --git a/src/Bladeburner/ui/ContractElem.tsx b/src/Bladeburner/ui/ContractElem.tsx
index fad0865df..5edf04842 100644
--- a/src/Bladeburner/ui/ContractElem.tsx
+++ b/src/Bladeburner/ui/ContractElem.tsx
@@ -32,7 +32,7 @@ export function ContractElem(props: IProps): React.ReactElement {
props.bladeburner.actionTimeCurrent + props.bladeburner.actionTimeOverflow,
props.bladeburner.actionTimeToComplete,
);
- const actionTime = props.action.getActionTime(props.bladeburner);
+ const actionTime = props.action.getActionTime(props.bladeburner, props.player);
const actionData = Contracts[props.action.name];
if (actionData === undefined) {
diff --git a/src/Bladeburner/ui/OperationElem.tsx b/src/Bladeburner/ui/OperationElem.tsx
index 6e50fd547..e217e4225 100644
--- a/src/Bladeburner/ui/OperationElem.tsx
+++ b/src/Bladeburner/ui/OperationElem.tsx
@@ -33,7 +33,7 @@ export function OperationElem(props: IProps): React.ReactElement {
props.bladeburner.actionTimeCurrent + props.bladeburner.actionTimeOverflow,
props.bladeburner.actionTimeToComplete,
);
- const actionTime = props.action.getActionTime(props.bladeburner);
+ const actionTime = props.action.getActionTime(props.bladeburner, props.player);
const actionData = Operations[props.action.name];
if (actionData === undefined) {
diff --git a/src/Bladeburner/ui/SuccessChance.tsx b/src/Bladeburner/ui/SuccessChance.tsx
index 934b8338c..285a730d6 100644
--- a/src/Bladeburner/ui/SuccessChance.tsx
+++ b/src/Bladeburner/ui/SuccessChance.tsx
@@ -4,6 +4,7 @@ import { StealthIcon } from "./StealthIcon";
import { KillIcon } from "./KillIcon";
import { IAction } from "../IAction";
import { IBladeburner } from "../IBladeburner";
+import { Player } from "../../Player";
interface IProps {
bladeburner: IBladeburner;
@@ -11,7 +12,7 @@ interface IProps {
}
export function SuccessChance(props: IProps): React.ReactElement {
- const estimatedSuccessChance = props.action.getEstSuccessChance(props.bladeburner);
+ const estimatedSuccessChance = props.action.getEstSuccessChance(props.bladeburner, Player);
let chance = <>>;
if (estimatedSuccessChance[0] === estimatedSuccessChance[1]) {
diff --git a/src/Crime/Crime.ts b/src/Crime/Crime.ts
index 4551677a2..94820e466 100644
--- a/src/Crime/Crime.ts
+++ b/src/Crime/Crime.ts
@@ -1,6 +1,6 @@
import { CONSTANTS } from "../Constants";
import { IPlayer } from "../PersonObjects/IPlayer";
-import { IPlayerOrSleeve } from "../PersonObjects/IPlayerOrSleeve";
+import { IPerson } from "../PersonObjects/IPerson";
import { IRouter } from "../ui/Router";
import { WorkerScript } from "../Netscript/WorkerScript";
@@ -108,7 +108,7 @@ export class Crime {
return this.time;
}
- successRate(p: IPlayerOrSleeve): number {
+ successRate(p: IPerson): number {
let chance: number =
this.hacking_success_weight * p.hacking +
this.strength_success_weight * p.strength +
diff --git a/src/Hospital/Hospital.ts b/src/Hospital/Hospital.ts
index d811cae54..4122d9f03 100644
--- a/src/Hospital/Hospital.ts
+++ b/src/Hospital/Hospital.ts
@@ -1,7 +1,7 @@
import { CONSTANTS } from "../Constants";
-import { IPlayer } from "../PersonObjects/IPlayer";
+import { IPerson } from "../PersonObjects/IPerson";
-export function getHospitalizationCost(p: IPlayer): number {
+export function getHospitalizationCost(p: IPerson): number {
if (p.money < 0) {
return 0;
}
@@ -9,7 +9,7 @@ export function getHospitalizationCost(p: IPlayer): number {
return Math.min(p.money * 0.1, (p.max_hp - p.hp) * CONSTANTS.HospitalCostPerHp);
}
-export function calculateHospitalizationCost(p: IPlayer, damage: number): number {
+export function calculateHospitalizationCost(p: IPerson, damage: number): number {
const oldhp = p.hp;
p.hp -= damage;
const cost = getHospitalizationCost(p);
diff --git a/src/NetscriptFunctions/Bladeburner.ts b/src/NetscriptFunctions/Bladeburner.ts
index e6da8bbed..1692b124f 100644
--- a/src/NetscriptFunctions/Bladeburner.ts
+++ b/src/NetscriptFunctions/Bladeburner.ts
@@ -134,7 +134,14 @@ export function NetscriptBladeburner(
const bladeburner = player.bladeburner;
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
try {
- return bladeburner.getActionTimeNetscriptFn(player, type, name, workerScript);
+ let time = bladeburner.getActionTimeNetscriptFn(player, type, name);
+ if(typeof time === 'string'){
+ const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ workerScript.log("bladeburner.getActionTime", () => errorLogText);
+ return -1;
+ } else {
+ return time;
+ }
} catch (e: any) {
throw helper.makeRuntimeErrorMsg("bladeburner.getActionTime", e);
}
@@ -150,7 +157,14 @@ export function NetscriptBladeburner(
const bladeburner = player.bladeburner;
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
try {
- return bladeburner.getActionEstimatedSuccessChanceNetscriptFn(player, type, name, workerScript);
+ let chance = bladeburner.getActionEstimatedSuccessChanceNetscriptFn(player, type, name);
+ if(typeof chance === 'string'){
+ const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ workerScript.log("bladeburner.getActionTime", () => errorLogText);
+ return [-1, -1];
+ } else {
+ return chance;
+ }
} catch (e: any) {
throw helper.makeRuntimeErrorMsg("bladeburner.getActionEstimatedSuccessChance", e);
}
diff --git a/src/PersonObjects/IPerson.ts b/src/PersonObjects/IPerson.ts
new file mode 100644
index 000000000..ab51f85c0
--- /dev/null
+++ b/src/PersonObjects/IPerson.ts
@@ -0,0 +1,64 @@
+// Interface that represents either the player (PlayerObject) or
+// a Sleeve. Used for functions that need to take in both.
+
+import { ITaskTracker } from "./ITaskTracker";
+
+export interface IPerson {
+ // Stats
+ hacking: number;
+ strength: number;
+ defense: number;
+ dexterity: number;
+ agility: number;
+ charisma: number;
+ intelligence: number;
+ hp: number;
+ max_hp: number;
+ money: number;
+
+ // Experience
+ hacking_exp: number;
+ strength_exp: number;
+ defense_exp: number;
+ dexterity_exp: number;
+ agility_exp: number;
+ charisma_exp: number;
+ intelligence_exp: number;
+
+ // Multipliers
+ hacking_exp_mult: number;
+ strength_exp_mult: number;
+ defense_exp_mult: number;
+ dexterity_exp_mult: number;
+ agility_exp_mult: number;
+ charisma_exp_mult: number;
+ hacking_mult: number;
+ strength_mult: number;
+ defense_mult: number;
+ dexterity_mult: number;
+ agility_mult: number;
+ charisma_mult: number;
+
+ company_rep_mult: number;
+ faction_rep_mult: number;
+
+ crime_money_mult: number;
+ crime_success_mult: number;
+
+ bladeburner_analysis_mult: number;
+
+ getIntelligenceBonus(weight: number): number;
+ gainHackingExp(exp: number): void;
+ gainStrengthExp(exp: number): void;
+ gainDefenseExp(exp: number): void;
+ gainDexterityExp(exp: number): void;
+ gainAgilityExp(exp: number): void;
+ gainCharismaExp(exp: number): void;
+ gainIntelligenceExp(exp: number): void;
+ gainStats(retValue: ITaskTracker): void;
+ calculateSkill(exp: number, mult?: number): number;
+ takeDamage(amt: number): boolean;
+ regenerateHp: (amt: number) => void;
+ queryStatFromString: (str: string) => number;
+ whoAmI: () => string;
+ }
\ No newline at end of file
diff --git a/src/PersonObjects/IPlayer.ts b/src/PersonObjects/IPlayer.ts
index ca1f2940a..b4ca6c20f 100644
--- a/src/PersonObjects/IPlayer.ts
+++ b/src/PersonObjects/IPlayer.ts
@@ -30,8 +30,9 @@ import { WorkerScript } from "../Netscript/WorkerScript";
import { HacknetServer } from "../Hacknet/HacknetServer";
import { ISkillProgress } from "./formulas/skill";
import { PlayerAchievement } from "../Achievements/Achievements";
+import { IPerson } from "./IPerson";
-export interface IPlayer {
+export interface IPlayer extends IPerson {
// Class members
augmentations: IPlayerOwnedAugmentation[];
bitNodeN: number;
@@ -185,13 +186,6 @@ export interface IPlayer {
canAccessGang(): boolean;
canAccessGrafting(): boolean;
canAfford(cost: number): boolean;
- gainHackingExp(exp: number): void;
- gainStrengthExp(exp: number): void;
- gainDefenseExp(exp: number): void;
- gainDexterityExp(exp: number): void;
- gainAgilityExp(exp: number): void;
- gainCharismaExp(exp: number): void;
- gainIntelligenceExp(exp: number): void;
gainMoney(money: number, source: string): void;
getCurrentServer(): BaseServer;
getGangFaction(): Faction;
@@ -213,7 +207,6 @@ export interface IPlayer {
process(router: IRouter, numCycles?: number): void;
reapplyAllAugmentations(resetMultipliers?: boolean): void;
reapplyAllSourceFiles(): void;
- regenerateHp(amt: number): void;
setMoney(amt: number): void;
singularityStopWork(): string;
startBladeburner(p: any): void;
@@ -240,12 +233,9 @@ export interface IPlayer {
startGang(facName: string, isHacking: boolean): void;
startWork(companyName: string): void;
startWorkPartTime(companyName: string): void;
- takeDamage(amt: number): boolean;
travel(to: CityName): boolean;
giveExploit(exploit: Exploit): void;
giveAchievement(achievementId: string): void;
- queryStatFromString(str: string): number;
- getIntelligenceBonus(weight: number): number;
getCasinoWinnings(): number;
quitJob(company: string): void;
hasJob(): boolean;
@@ -266,7 +256,6 @@ export interface IPlayer {
resetMultipliers(): void;
prestigeAugmentation(): void;
prestigeSourceFile(): void;
- calculateSkill(exp: number, mult?: number): number;
calculateSkillProgress(exp: number, mult?: number): ISkillProgress;
resetWorkStatus(generalType?: string, group?: string, workType?: string): void;
getWorkHackExpGain(): number;
diff --git a/src/PersonObjects/IPlayerOrSleeve.ts b/src/PersonObjects/IPlayerOrSleeve.ts
deleted file mode 100644
index 366c31dde..000000000
--- a/src/PersonObjects/IPlayerOrSleeve.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-// Interface that represents either the player (PlayerObject) or
-// a Sleeve. Used for functions that need to take in both.
-
-export interface IPlayerOrSleeve {
- // Stats
- hacking: number;
- strength: number;
- defense: number;
- dexterity: number;
- agility: number;
- charisma: number;
- intelligence: number;
-
- // Experience
- hacking_exp: number;
- strength_exp: number;
- defense_exp: number;
- dexterity_exp: number;
- agility_exp: number;
- charisma_exp: number;
-
- // Multipliers
- crime_success_mult: number;
-
- getIntelligenceBonus(weight: number): number;
-}
diff --git a/src/PersonObjects/ITaskTracker.ts b/src/PersonObjects/ITaskTracker.ts
new file mode 100644
index 000000000..8b2d92efa
--- /dev/null
+++ b/src/PersonObjects/ITaskTracker.ts
@@ -0,0 +1,25 @@
+// Interface that defines a generic object used to track experience/money
+// earnings for tasks
+export interface ITaskTracker {
+ hack: number;
+ str: number;
+ def: number;
+ dex: number;
+ agi: number;
+ cha: number;
+ int: number;
+ money: number;
+ }
+
+ export function createTaskTracker(): ITaskTracker {
+ return {
+ hack: 0,
+ str: 0,
+ def: 0,
+ dex: 0,
+ agi: 0,
+ cha: 0,
+ int: 0,
+ money: 0,
+ };
+ }
\ No newline at end of file
diff --git a/src/PersonObjects/Person.ts b/src/PersonObjects/Person.ts
index 18c39a2ed..0bee0658a 100644
--- a/src/PersonObjects/Person.ts
+++ b/src/PersonObjects/Person.ts
@@ -1,4 +1,4 @@
-// Base class representing a person-like object
+import * as generalMethods from "./Player/PlayerObjectGeneralMethods";
import { Augmentation } from "../Augmentation/Augmentation";
import { IPlayerOwnedAugmentation } from "../Augmentation/PlayerOwnedAugmentation";
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
@@ -6,32 +6,12 @@ import { CityName } from "../Locations/data/CityNames";
import { CONSTANTS } from "../Constants";
import { calculateSkill } from "./formulas/skill";
import { calculateIntelligenceBonus } from "./formulas/intelligence";
+import { IPerson } from "./IPerson";
+import { Reviver } from "../utils/JSONReviver";
+import { ITaskTracker } from "./ITaskTracker";
-// Interface that defines a generic object used to track experience/money
-// earnings for tasks
-export interface ITaskTracker {
- hack: number;
- str: number;
- def: number;
- dex: number;
- agi: number;
- cha: number;
- money: number;
-}
-
-export function createTaskTracker(): ITaskTracker {
- return {
- hack: 0,
- str: 0,
- def: 0,
- dex: 0,
- agi: 0,
- cha: 0,
- money: 0,
- };
-}
-
-export abstract class Person {
+// Base class representing a person-like object
+export abstract class Person implements IPerson {
/**
* Stats
*/
@@ -44,6 +24,7 @@ export abstract class Person {
intelligence = 1;
hp = 10;
max_hp = 10;
+ money = 0;
/**
* Experience
@@ -240,4 +221,35 @@ export abstract class Person {
getIntelligenceBonus(weight: number): number {
return calculateIntelligenceBonus(this.intelligence, weight);
}
+
+ abstract takeDamage(amt: number): boolean;
+
+ abstract whoAmI(): string;
+
+ gainHackingExp: (exp: number) => void;
+ gainStrengthExp: (exp: number) => void;
+ gainDefenseExp: (exp: number) => void;
+ gainDexterityExp: (exp: number) => void;
+ gainAgilityExp: (exp: number) => void;
+ gainCharismaExp: (exp: number) => void;
+ gainIntelligenceExp: (exp: number) => void;
+ gainStats: (retValue: ITaskTracker) => void;
+ calculateSkill: (exp: number, mult: number) => number;
+ regenerateHp: (amt: number) => void;
+ queryStatFromString: (str: string) => number;
+ constructor() {
+ this.gainHackingExp = generalMethods.gainHackingExp;
+ this.gainStrengthExp = generalMethods.gainStrengthExp;
+ this.gainDefenseExp = generalMethods.gainDefenseExp;
+ this.gainDexterityExp = generalMethods.gainDexterityExp;
+ this.gainAgilityExp = generalMethods.gainAgilityExp;
+ this.gainCharismaExp = generalMethods.gainCharismaExp;
+ this.gainIntelligenceExp = generalMethods.gainIntelligenceExp;
+ this.gainStats = generalMethods.gainStats;
+ this.calculateSkill = generalMethods.calculateSkill;
+ this.regenerateHp = generalMethods.regenerateHp;
+ this.queryStatFromString = generalMethods.queryStatFromString;
+ }
}
+
+Reviver.constructors.Person = Person;
\ No newline at end of file
diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts
index 943598b60..fec5ae596 100644
--- a/src/PersonObjects/Player/PlayerObject.ts
+++ b/src/PersonObjects/Player/PlayerObject.ts
@@ -37,6 +37,7 @@ import { ISkillProgress } from "../formulas/skill";
import { PlayerAchievement } from "../../Achievements/Achievements";
import { cyrb53 } from "../../utils/StringHelperFunctions";
import { getRandomInt } from "../../utils/helpers/getRandomInt";
+import { ITaskTracker } from "../ITaskTracker";
export class PlayerObject implements IPlayer {
// Class members
@@ -201,6 +202,7 @@ export class PlayerObject implements IPlayer {
gainAgilityExp: (exp: number) => void;
gainCharismaExp: (exp: number) => void;
gainIntelligenceExp: (exp: number) => void;
+ gainStats: (retValue: ITaskTracker) => void;
gainMoney: (money: number, source: string) => void;
getCurrentServer: () => BaseServer;
getGangFaction: () => Faction;
@@ -302,6 +304,9 @@ export class PlayerObject implements IPlayer {
graftAugmentationWork: (numCycles: number) => boolean;
finishGraftAugmentationWork: (cancelled: boolean) => string;
applyEntropy: (stacks?: number) => void;
+ whoAmI(): string{
+ return 'Player';
+ }
constructor() {
//Skills and stats
@@ -521,6 +526,7 @@ export class PlayerObject implements IPlayer {
this.gainAgilityExp = generalMethods.gainAgilityExp;
this.gainCharismaExp = generalMethods.gainCharismaExp;
this.gainIntelligenceExp = generalMethods.gainIntelligenceExp;
+ this.gainStats = generalMethods.gainStats;
this.queryStatFromString = generalMethods.queryStatFromString;
this.resetWorkStatus = generalMethods.resetWorkStatus;
this.processWorkEarnings = generalMethods.processWorkEarnings;
diff --git a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
index 00f0acbd7..d28850706 100644
--- a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
+++ b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
@@ -66,6 +66,8 @@ import { SnackbarEvents } from "../../ui/React/Snackbar";
import { calculateClassEarnings } from "../formulas/work";
import { achievements } from "../../Achievements/Achievements";
import { FactionNames } from "../../Faction/data/FactionNames";
+import { ITaskTracker } from "../ITaskTracker";
+import { IPerson } from "../IPerson";
export function init(this: IPlayer): void {
/* Initialize Player's home computer */
@@ -227,7 +229,7 @@ export function receiveInvite(this: IPlayer, factionName: string): void {
}
//Calculates skill level based on experience. The same formula will be used for every skill
-export function calculateSkill(this: IPlayer, exp: number, mult = 1): number {
+export function calculateSkill(this: IPerson, exp: number, mult = 1): number {
return calculateSkillF(exp, mult);
}
@@ -391,7 +393,7 @@ export function gainHackingExp(this: IPlayer, exp: number): void {
this.hacking = calculateSkillF(this.hacking_exp, this.hacking_mult * BitNodeMultipliers.HackingLevelMultiplier);
}
-export function gainStrengthExp(this: IPlayer, exp: number): void {
+export function gainStrengthExp(this: IPerson, exp: number): void {
if (isNaN(exp)) {
console.error("ERR: NaN passed into Player.gainStrengthExp()");
return;
@@ -404,7 +406,7 @@ export function gainStrengthExp(this: IPlayer, exp: number): void {
this.strength = calculateSkillF(this.strength_exp, this.strength_mult * BitNodeMultipliers.StrengthLevelMultiplier);
}
-export function gainDefenseExp(this: IPlayer, exp: number): void {
+export function gainDefenseExp(this: IPerson, exp: number): void {
if (isNaN(exp)) {
console.error("ERR: NaN passed into player.gainDefenseExp()");
return;
@@ -420,7 +422,7 @@ export function gainDefenseExp(this: IPlayer, exp: number): void {
this.hp = Math.round(this.max_hp * ratio);
}
-export function gainDexterityExp(this: IPlayer, exp: number): void {
+export function gainDexterityExp(this: IPerson, exp: number): void {
if (isNaN(exp)) {
console.error("ERR: NaN passed into Player.gainDexterityExp()");
return;
@@ -436,7 +438,7 @@ export function gainDexterityExp(this: IPlayer, exp: number): void {
);
}
-export function gainAgilityExp(this: IPlayer, exp: number): void {
+export function gainAgilityExp(this: IPerson, exp: number): void {
if (isNaN(exp)) {
console.error("ERR: NaN passed into Player.gainAgilityExp()");
return;
@@ -449,7 +451,7 @@ export function gainAgilityExp(this: IPlayer, exp: number): void {
this.agility = calculateSkillF(this.agility_exp, this.agility_mult * BitNodeMultipliers.AgilityLevelMultiplier);
}
-export function gainCharismaExp(this: IPlayer, exp: number): void {
+export function gainCharismaExp(this: IPerson, exp: number): void {
if (isNaN(exp)) {
console.error("ERR: NaN passed into Player.gainCharismaExp()");
return;
@@ -462,17 +464,27 @@ export function gainCharismaExp(this: IPlayer, exp: number): void {
this.charisma = calculateSkillF(this.charisma_exp, this.charisma_mult * BitNodeMultipliers.CharismaLevelMultiplier);
}
-export function gainIntelligenceExp(this: IPlayer, exp: number): void {
+export function gainIntelligenceExp(this: IPerson, exp: number): void {
if (isNaN(exp)) {
console.error("ERROR: NaN passed into Player.gainIntelligenceExp()");
return;
}
if (SourceFileFlags[5] > 0 || this.intelligence > 0) {
this.intelligence_exp += exp;
- this.intelligence = Math.floor(this.calculateSkill(this.intelligence_exp));
+ this.intelligence = Math.floor(this.calculateSkill(this.intelligence_exp, 1));
}
}
+export function gainStats(this: IPerson, retValue: ITaskTracker): void {
+ this.gainHackingExp(retValue.hack * this.hacking_exp_mult);
+ this.gainStrengthExp(retValue.str * this.strength_exp_mult);
+ this.gainDefenseExp(retValue.def * this.defense_exp_mult);
+ this.gainDexterityExp(retValue.dex * this.dexterity_exp_mult);
+ this.gainAgilityExp(retValue.agi * this.agility_exp_mult);
+ this.gainCharismaExp(retValue.cha * this.charisma_exp_mult);
+ this.gainIntelligenceExp(retValue.int);
+}
+
//Given a string expression like "str" or "strength", returns the given stat
export function queryStatFromString(this: IPlayer, str: string): number {
const tempStr = str.toLowerCase();
@@ -1718,7 +1730,7 @@ export function takeDamage(this: IPlayer, amt: number): boolean {
}
}
-export function regenerateHp(this: IPlayer, amt: number): void {
+export function regenerateHp(this: IPerson, amt: number): void {
if (typeof amt !== "number") {
console.warn(`Player.regenerateHp() called without a numeric argument: ${amt}`);
return;
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index 2b931d37f..74103f5dc 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -9,7 +9,8 @@
import { SleeveTaskType } from "./SleeveTaskTypesEnum";
import { IPlayer } from "../IPlayer";
-import { Person, ITaskTracker, createTaskTracker } from "../Person";
+import { Person } from "../Person";
+import { ITaskTracker, createTaskTracker } from "../ITaskTracker";
import { Augmentation } from "../../Augmentation/Augmentation";
@@ -33,6 +34,7 @@ import { CityName } from "../../Locations/data/CityNames";
import { LocationName } from "../../Locations/data/LocationNames";
import { Generic_fromJSON, Generic_toJSON, Reviver } from "../../utils/JSONReviver";
+import { BladeburnerConstants } from "../../Bladeburner/data/Constants";
export class Sleeve extends Person {
/**
@@ -58,6 +60,7 @@ export class Sleeve extends Person {
* Faction/Company Work: Name of Faction/Company
* Crime: Money earned if successful
* Class/Gym: Name of university/gym
+ * Bladeburner: success chance
*/
currentTaskLocation = "";
@@ -101,6 +104,16 @@ export class Sleeve extends Person {
*/
gymStatType = "";
+ /**
+ * String that stores what stat the sleeve is training at the gym
+ */
+ bbAction = "";
+
+ /**
+ * String that stores what stat the sleeve is training at the gym
+ */
+ bbContract = "";
+
/**
* Keeps track of events/notifications for this sleeve
*/
@@ -151,7 +164,7 @@ export class Sleeve extends Person {
if (this.currentTask !== SleeveTaskType.Idle) {
this.finishTask(p);
} else {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
this.gainRatesForTask.hack = crime.hacking_exp * this.hacking_exp_mult * BitNodeMultipliers.CrimeExpGain;
@@ -160,6 +173,7 @@ export class Sleeve extends Person {
this.gainRatesForTask.dex = crime.dexterity_exp * this.dexterity_exp_mult * BitNodeMultipliers.CrimeExpGain;
this.gainRatesForTask.agi = crime.agility_exp * this.agility_exp_mult * BitNodeMultipliers.CrimeExpGain;
this.gainRatesForTask.cha = crime.charisma_exp * this.charisma_exp_mult * BitNodeMultipliers.CrimeExpGain;
+ this.gainRatesForTask.int = crime.intelligence_exp;
this.gainRatesForTask.money = crime.money * this.crime_money_mult * BitNodeMultipliers.CrimeMoney;
this.currentTaskLocation = String(this.gainRatesForTask.money);
@@ -175,14 +189,14 @@ export class Sleeve extends Person {
*/
finishTask(p: IPlayer): ITaskTracker {
let retValue: ITaskTracker = createTaskTracker(); // Amount of exp to be gained by other sleeves
-
+
if (this.currentTask === SleeveTaskType.Crime) {
// For crimes, all experience and money is gained at the end
if (this.currentTaskTime >= this.currentTaskMaxTime) {
const crime: Crime | undefined = Object.values(Crimes).find((crime) => crime.name === this.crimeType);
if (!crime) {
console.error(`Invalid data stored in sleeve.crimeType: ${this.crimeType}`);
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
return retValue;
}
if (Math.random() < crime.successRate(this)) {
@@ -206,11 +220,57 @@ export class Sleeve extends Person {
this.currentTaskTime = 0;
return retValue;
}
- } else {
- // For other crimes... I dont think anything else needs to be done
+ } else if (this.currentTask === SleeveTaskType.Bladeburner) {
+ // For bladeburner, all experience and money is gained at the end
+ const bb = p.bladeburner;
+ if (bb === null) {
+ const errorLogText = `bladeburner is null`;
+ console.error(`Function: sleeves.finishTask; Message: '${errorLogText}'`)
+ this.resetTaskStatus(p);
+ return retValue;
+ }
+
+ if (this.currentTaskTime >= this.currentTaskMaxTime) {
+ if (this.bbAction === "Infiltrate synthoids") {
+ bb.infiltrateSynthoidCommunities();
+ this.currentTaskTime = 0;
+ return retValue;
+ }
+
+ let type: string;
+ let name: string;
+ if (this.bbAction === "Take on Contracts") {
+ type = 'Contracts';
+ name = this.bbContract;
+ } else {
+ type = 'General';
+ name = this.bbAction;
+ }
+
+ const actionIdent = bb.getActionIdFromTypeAndName(type, name);
+ if(actionIdent === null) {
+ const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ console.error(`Function: sleeves.finishTask; Message: '${errorLogText}'`)
+ this.resetTaskStatus(p);
+ return retValue;
+ }
+
+ const action = bb.getActionObject(actionIdent);
+ if((action?.count ?? 0) > 0) {
+ const bbRetValue = bb.completeAction(p, this, actionIdent);
+ if(bbRetValue) {
+ retValue = this.gainExperience(p, bbRetValue);
+ this.gainMoney(p, bbRetValue);
+
+ // Do not reset task to IDLE
+ this.currentTaskTime = 0;
+ return retValue;
+ }
+ }
+ }
}
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
return retValue;
}
@@ -260,50 +320,56 @@ export class Sleeve extends Person {
const pDexExp = exp.dex * multFac;
const pAgiExp = exp.agi * multFac;
const pChaExp = exp.cha * multFac;
+ const pIntExp = exp.int * multFac;
// Experience is gained by both this sleeve and player
if (pHackExp > 0) {
- this.hacking_exp += pHackExp;
+ this.gainHackingExp(pHackExp);
p.gainHackingExp(pHackExp);
this.earningsForPlayer.hack += pHackExp;
this.earningsForTask.hack += pHackExp;
}
if (pStrExp > 0) {
- this.strength_exp += pStrExp;
+ this.gainStrengthExp(pStrExp);
p.gainStrengthExp(pStrExp);
this.earningsForPlayer.str += pStrExp;
this.earningsForTask.str += pStrExp;
}
if (pDefExp > 0) {
- this.defense_exp += pDefExp;
+ this.gainDefenseExp(pDefExp);
p.gainDefenseExp(pDefExp);
this.earningsForPlayer.def += pDefExp;
this.earningsForTask.def += pDefExp;
}
if (pDexExp > 0) {
- this.dexterity_exp += pDexExp;
+ this.gainDexterityExp(pDexExp);
p.gainDexterityExp(pDexExp);
this.earningsForPlayer.dex += pDexExp;
this.earningsForTask.dex += pDexExp;
}
if (pAgiExp > 0) {
- this.agility_exp += pAgiExp;
+ this.gainAgilityExp(pAgiExp);
p.gainAgilityExp(pAgiExp);
this.earningsForPlayer.agi += pAgiExp;
this.earningsForTask.agi += pAgiExp;
}
if (pChaExp > 0) {
- this.charisma_exp += pChaExp;
+ this.gainCharismaExp(pChaExp);
p.gainCharismaExp(pChaExp);
this.earningsForPlayer.cha += pChaExp;
this.earningsForTask.cha += pChaExp;
}
+ if (pIntExp > 0) {
+ this.gainIntelligenceExp(pIntExp);
+ p.gainIntelligenceExp(pIntExp);
+ }
+
// Record earnings for other sleeves
this.earningsForSleeves.hack += pHackExp * (this.sync / 100);
this.earningsForSleeves.str += pStrExp * (this.sync / 100);
@@ -320,7 +386,8 @@ export class Sleeve extends Person {
dex: pDexExp * (this.sync / 100),
agi: pAgiExp * (this.sync / 100),
cha: pChaExp * (this.sync / 100),
- money: 0,
+ int: pIntExp * (this.sync / 100),
+ money: exp.money,
};
}
@@ -445,7 +512,7 @@ export class Sleeve extends Person {
this.charisma_exp = 0;
// Reset task-related stuff
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
this.earningsForSleeves = createTaskTracker();
this.earningsForPlayer = createTaskTracker();
this.shockRecovery(p);
@@ -537,18 +604,18 @@ export class Sleeve extends Person {
}
case SleeveTaskType.Recovery:
this.shock = Math.min(100, this.shock + 0.0002 * cyclesUsed);
- if (this.shock >= 100) this.resetTaskStatus();
+ if (this.shock >= 100) this.resetTaskStatus(p);
break;
case SleeveTaskType.Synchro:
this.sync = Math.min(100, this.sync + p.getIntelligenceBonus(0.5) * 0.0002 * cyclesUsed);
- if (this.sync >= 100) this.resetTaskStatus();
+ if (this.sync >= 100) this.resetTaskStatus(p);
break;
default:
break;
}
if (this.currentTaskMaxTime !== 0 && this.currentTaskTime >= this.currentTaskMaxTime) {
- if (this.currentTask === SleeveTaskType.Crime) {
+ if (this.currentTask === SleeveTaskType.Crime || this.currentTask === SleeveTaskType.Bladeburner) {
retValue = this.finishTask(p);
} else {
this.finishTask(p);
@@ -565,7 +632,15 @@ export class Sleeve extends Person {
/**
* Resets all parameters used to keep information about the current task
*/
- resetTaskStatus(): void {
+ resetTaskStatus(p: IPlayer): void {
+ if (this.bbAction == 'Support main sleeve') {
+ p.bladeburner?.sleeveSupport(false);
+ }
+ if (this.currentTask == SleeveTaskType.Class) {
+ let retVal = createTaskTracker();
+ retVal.int = CONSTANTS.IntelligenceClassBaseExpGain * Math.round(this.currentTaskTime / 1000);
+ this.gainExperience(p, retVal);//Wont be shared with other sleeves
+ }
this.earningsForTask = createTaskTracker();
this.gainRatesForTask = createTaskTracker();
this.currentTask = SleeveTaskType.Idle;
@@ -576,13 +651,15 @@ export class Sleeve extends Person {
this.currentTaskLocation = "";
this.gymStatType = "";
this.className = "";
+ this.bbAction = "";
+ this.bbContract = "";
}
shockRecovery(p: IPlayer): boolean {
if (this.currentTask !== SleeveTaskType.Idle) {
this.finishTask(p);
} else {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
this.currentTask = SleeveTaskType.Recovery;
@@ -593,7 +670,7 @@ export class Sleeve extends Person {
if (this.currentTask !== SleeveTaskType.Idle) {
this.finishTask(p);
} else {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
this.currentTask = SleeveTaskType.Synchro;
@@ -607,7 +684,7 @@ export class Sleeve extends Person {
if (this.currentTask !== SleeveTaskType.Idle) {
this.finishTask(p);
} else {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
// Set exp/money multipliers based on which university.
@@ -801,7 +878,7 @@ export class Sleeve extends Person {
if (this.currentTask !== SleeveTaskType.Idle) {
this.finishTask(p);
} else {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
const company: Company | null = Companies[companyName];
@@ -867,7 +944,7 @@ export class Sleeve extends Person {
if (this.currentTask !== SleeveTaskType.Idle) {
this.finishTask(p);
} else {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
const factionInfo = faction.getInfo();
@@ -918,7 +995,7 @@ export class Sleeve extends Person {
if (this.currentTask !== SleeveTaskType.Idle) {
this.finishTask(p);
} else {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
// Set exp/money multipliers based on which university.
@@ -986,6 +1063,151 @@ export class Sleeve extends Person {
return true;
}
+ /**
+ * Begin a bladeburner task
+ */
+ bladeburner(p: IPlayer, action: string, contract: string): boolean {
+ if (this.currentTask !== SleeveTaskType.Idle) {
+ this.finishTask(p);
+ } else {
+ this.resetTaskStatus(p);
+ }
+
+ this.gainRatesForTask.hack = 0;
+ this.gainRatesForTask.str = 0;
+ this.gainRatesForTask.def = 0;
+ this.gainRatesForTask.dex = 0;
+ this.gainRatesForTask.agi = 0;
+ this.gainRatesForTask.cha = 0;
+ this.gainRatesForTask.money = 0;
+ this.currentTaskLocation = '';
+
+ let time = 0;
+ switch (action) {
+ case "Field Analysis":
+ time = this.getBladeburnerActionTime(p, 'General', action);
+ this.gainRatesForTask.hack = 20 * this.hacking_exp_mult;
+ this.gainRatesForTask.cha = 20 * this.charisma_exp_mult;
+ break;
+ case "Recruitment":
+ time = this.getBladeburnerActionTime(p, 'General', action);
+ const recruitTime = p.bladeburner?.getRecruitmentTime(this) ?? 0 * 1000;
+ this.gainRatesForTask.cha = 2 * BladeburnerConstants.BaseStatGain * recruitTime;
+ this.currentTaskLocation = (p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0).toString() + '%';
+ break;
+ case "Diplomacy":
+ time = this.getBladeburnerActionTime(p, 'General', action);
+ break;
+ case "Infiltrate synthoids":
+ time = 60000;
+ break;
+ case "Support main sleeve":
+ p.bladeburner?.sleeveSupport(true);
+ time = 0;
+ break;
+ case "Take on Contracts":
+ time = this.getBladeburnerActionTime(p, 'Contracts', contract);
+ this.contractGainRates(p, 'Contracts', contract);
+ this.currentTaskLocation = this.contractSuccessChance(p, 'Contracts', contract);
+ break;
+ }
+
+ this.bbAction = action;
+ this.bbContract = contract;
+ this.currentTaskMaxTime = time;
+ this.currentTask = SleeveTaskType.Bladeburner;
+ return true;
+ }
+
+ contractSuccessChance(p: IPlayer, type: string, name: string): string {
+ const bb = p.bladeburner;
+ if(bb === null){
+ const errorLogText = `bladeburner is null`;
+ console.error(`Function: sleeves.contractSuccessChance; Message: '${errorLogText}'`)
+ return '0%';
+ }
+ const chances = bb.getActionEstimatedSuccessChanceNetscriptFn(this, type, name);
+ if(typeof chances === 'string'){
+ console.error(`Function: sleeves.contractSuccessChance; Message: '${chances}'`)
+ return '0%';
+ }
+ if(chances[0] >= 1) {
+ return '100%';
+ } else {
+ return `${chances[0]*100}% - ${chances[1]*100}%`;
+ }
+ }
+
+ contractGainRates(p: IPlayer, type: string, name: string): void {
+ const bb = p.bladeburner;
+ if(bb === null){
+ const errorLogText = `bladeburner is null`;
+ console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`)
+ return;
+ }
+ const actionIdent = bb.getActionIdFromTypeAndName(type, name);
+ if(actionIdent === null) {
+ const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`)
+ this.resetTaskStatus(p);
+ return;
+ }
+ const action = bb.getActionObject(actionIdent);
+ if(action === null) {
+ const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`)
+ this.resetTaskStatus(p);
+ return;
+ }
+ const retValue = bb.getActionStats(action, true);
+ this.gainRatesForTask.hack = retValue.hack;
+ this.gainRatesForTask.str = retValue.str;
+ this.gainRatesForTask.def = retValue.def;
+ this.gainRatesForTask.dex = retValue.dex;
+ this.gainRatesForTask.agi = retValue.agi;
+ this.gainRatesForTask.cha = retValue.cha;
+ const rewardMultiplier = Math.pow(action.rewardFac, action.level - 1);
+ this.gainRatesForTask.money = BladeburnerConstants.ContractBaseMoneyGain * rewardMultiplier * bb.skillMultipliers.money;;
+ }
+
+ getBladeburnerActionTime(p: IPlayer, type: string, name: string): number{//Maybe find workerscript and use original
+ const bb = p.bladeburner;
+ if(bb === null){
+ const errorLogText = `bladeburner is null`;
+ console.error(`Function: sleeves.getBladeburnerActionTime; Message: '${errorLogText}'`)
+ return -1;
+ }
+
+ const time = bb.getActionTimeNetscriptFn(this, type, name);
+ if(typeof time === 'string'){
+ const errorLogText = `Invalid action: type='${type}' name='${name}'`;
+ console.error(`Function: sleeves.getBladeburnerActionTime; Message: '${errorLogText}'`)
+ return -1;
+ } else {
+ return time;
+ }
+ }
+
+ takeDamage(amt: number):boolean {
+ if (typeof amt !== "number") {
+ console.warn(`Player.takeDamage() called without a numeric argument: ${amt}`);
+ return false;
+ }
+
+ this.hp -= amt;
+ if (this.hp <= 0) {
+ this.shock += 0.5;
+ this.hp = this.max_hp;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ whoAmI(): string {
+ return 'Sleeve';
+ }
+
/**
* Serialize the current object to a JSON save state.
*/
diff --git a/src/PersonObjects/Sleeve/SleeveTaskTypesEnum.ts b/src/PersonObjects/Sleeve/SleeveTaskTypesEnum.ts
index 61f216d03..68881383f 100644
--- a/src/PersonObjects/Sleeve/SleeveTaskTypesEnum.ts
+++ b/src/PersonObjects/Sleeve/SleeveTaskTypesEnum.ts
@@ -9,6 +9,7 @@ export enum SleeveTaskType {
Crime,
Class,
Gym,
+ Bladeburner,
Recovery,
Synchro,
}
diff --git a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
index 5d73a762d..f45e7a0d5 100644
--- a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
+++ b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
@@ -40,7 +40,7 @@ export function SleeveElem(props: IProps): React.ReactElement {
const [abc, setABC] = useState(["------", "------", "------"]);
function setTask(): void {
- props.sleeve.resetTaskStatus(); // sets to idle
+ props.sleeve.resetTaskStatus(player); // sets to idle
switch (abc[0]) {
case "------":
break;
@@ -59,6 +59,9 @@ export function SleeveElem(props: IProps): React.ReactElement {
case "Workout at Gym":
props.sleeve.workoutAtGym(player, abc[2], abc[1]);
break;
+ case "Perform Bladeburner Actions":
+ props.sleeve.bladeburner(player, abc[1], abc[2]);
+ break;
case "Shock Recovery":
props.sleeve.shockRecovery(player);
break;
@@ -116,6 +119,13 @@ export function SleeveElem(props: IProps): React.ReactElement {
case SleeveTaskType.Gym:
desc = <>This sleeve is currently working out at {props.sleeve.currentTaskLocation}.>;
break;
+ case SleeveTaskType.Bladeburner:
+ let contract = '';
+ if (props.sleeve.bbContract !== '------') {
+ contract = ` - ${props.sleeve.bbContract} (Success Rate: ${props.sleeve.currentTaskLocation})`;
+ }
+ desc = <>This sleeve is currently attempting to {props.sleeve.bbAction}{contract}>
+ break;
case SleeveTaskType.Recovery:
desc = (
<>
@@ -178,8 +188,10 @@ export function SleeveElem(props: IProps): React.ReactElement {
{desc}
- {props.sleeve.currentTask === SleeveTaskType.Crime &&
- createProgressBarText({
+ {(props.sleeve.currentTask === SleeveTaskType.Crime
+ || props.sleeve.currentTask === SleeveTaskType.Bladeburner)
+ && props.sleeve.currentTaskMaxTime > 0
+ && createProgressBarText({
progress: props.sleeve.currentTaskTime / props.sleeve.currentTaskMaxTime,
totalTicks: 25,
})}
diff --git a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
index 70d5aac15..383a586e1 100644
--- a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
+++ b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
@@ -10,6 +10,7 @@ import { FactionWorkType } from "../../../Faction/FactionWorkTypeEnum";
import Select, { SelectChangeEvent } from "@mui/material/Select";
import MenuItem from "@mui/material/MenuItem";
import { FactionNames } from "../../../Faction/data/FactionNames";
+import { Contract } from "../../../Bladeburner/Contract";
const universitySelectorOptions: string[] = [
"Study Computer Science",
@@ -22,6 +23,8 @@ const universitySelectorOptions: string[] = [
const gymSelectorOptions: string[] = ["Train Strength", "Train Defense", "Train Dexterity", "Train Agility"];
+const bladeburnerSelectorOptions: string[] = ["Field Analysis", "Recruitment", "Diplomacy", "Infiltrate synthoids", "Support main sleeve", "Take on Contracts"];
+
interface IProps {
sleeve: Sleeve;
player: IPlayer;
@@ -82,6 +85,27 @@ function possibleFactions(player: IPlayer, sleeve: Sleeve): string[] {
});
}
+function possibleContracts(player: IPlayer, sleeve: Sleeve): string[] {
+ const bb = player.bladeburner;
+ if(bb === null){
+ return ["------"];
+ }
+ let contracts = bb.getContractNamesNetscriptFn();
+ for (const otherSleeve of player.sleeves) {
+ if (sleeve === otherSleeve) {
+ continue;
+ }
+ if (otherSleeve.currentTask === SleeveTaskType.Bladeburner
+ && otherSleeve.bbAction == 'Take on Contracts') {
+ contracts = contracts.filter(x => x != otherSleeve.bbContract);
+ }
+ }
+ if(contracts.length === 0){
+ return ["------"];
+ }
+ return contracts;
+}
+
const tasks: {
[key: string]: undefined | ((player: IPlayer, sleeve: Sleeve) => ITaskDetails);
["------"]: (player: IPlayer, sleeve: Sleeve) => ITaskDetails;
@@ -90,6 +114,7 @@ const tasks: {
["Commit Crime"]: (player: IPlayer, sleeve: Sleeve) => ITaskDetails;
["Take University Course"]: (player: IPlayer, sleeve: Sleeve) => ITaskDetails;
["Workout at Gym"]: (player: IPlayer, sleeve: Sleeve) => ITaskDetails;
+ ["Perform Bladeburner Actions"]: (player: IPlayer, sleeve: Sleeve) => ITaskDetails;
["Shock Recovery"]: (player: IPlayer, sleeve: Sleeve) => ITaskDetails;
["Synchronize"]: (player: IPlayer, sleeve: Sleeve) => ITaskDetails;
} = {
@@ -166,6 +191,17 @@ const tasks: {
return { first: gymSelectorOptions, second: () => gyms };
},
+ "Perform Bladeburner Actions": (player: IPlayer, sleeve: Sleeve): ITaskDetails => {
+ return {
+ first: bladeburnerSelectorOptions,
+ second: (s1: string) => {
+ if(s1 === "Take on Contracts"){
+ return possibleContracts(player, sleeve);
+ } else {
+ return ["------"];
+ }
+ } };
+ },
"Shock Recovery": (): ITaskDetails => {
return { first: ["------"], second: () => ["------"] };
},
@@ -182,6 +218,7 @@ const canDo: {
["Commit Crime"]: (player: IPlayer, sleeve: Sleeve) => boolean;
["Take University Course"]: (player: IPlayer, sleeve: Sleeve) => boolean;
["Workout at Gym"]: (player: IPlayer, sleeve: Sleeve) => boolean;
+ ["Perform Bladeburner Actions"]: (player: IPlayer, sleeve: Sleeve) => boolean;
["Shock Recovery"]: (player: IPlayer, sleeve: Sleeve) => boolean;
["Synchronize"]: (player: IPlayer, sleeve: Sleeve) => boolean;
} = {
@@ -193,6 +230,7 @@ const canDo: {
[CityName.Aevum, CityName.Sector12, CityName.Volhaven].includes(sleeve.city),
"Workout at Gym": (player: IPlayer, sleeve: Sleeve) =>
[CityName.Aevum, CityName.Sector12, CityName.Volhaven].includes(sleeve.city),
+ "Perform Bladeburner Actions": (player: IPlayer, sleeve: Sleeve) => player.inBladeburner(),
"Shock Recovery": (player: IPlayer, sleeve: Sleeve) => sleeve.shock < 100,
Synchronize: (player: IPlayer, sleeve: Sleeve) => sleeve.sync < 100,
};
@@ -224,6 +262,8 @@ function getABC(sleeve: Sleeve): [string, string, string] {
return ["Take University Course", sleeve.className, sleeve.currentTaskLocation];
case SleeveTaskType.Gym:
return ["Workout at Gym", sleeve.gymStatType, sleeve.currentTaskLocation];
+ case SleeveTaskType.Bladeburner:
+ return ["Perform Bladeburner Actions", sleeve.bbAction, sleeve.bbContract];
case SleeveTaskType.Recovery:
return ["Shock Recovery", "------", "------"];
case SleeveTaskType.Synchro:
diff --git a/src/PersonObjects/Sleeve/ui/TravelModal.tsx b/src/PersonObjects/Sleeve/ui/TravelModal.tsx
index 0883b1a8d..6bc4af1be 100644
--- a/src/PersonObjects/Sleeve/ui/TravelModal.tsx
+++ b/src/PersonObjects/Sleeve/ui/TravelModal.tsx
@@ -26,7 +26,7 @@ export function TravelModal(props: IProps): React.ReactElement {
}
props.sleeve.city = city as CityName;
player.loseMoney(CONSTANTS.TravelCost, "sleeve");
- props.sleeve.resetTaskStatus();
+ props.sleeve.resetTaskStatus(player);
props.rerender();
props.onClose();
}
From 04062729423f2de35d173236467f3644a8ec5dfe Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Thu, 14 Apr 2022 11:57:01 -0400
Subject: [PATCH 02/17] Clean up
linter
---
src/Bladeburner/Bladeburner.tsx | 17 +++++++------
src/NetscriptFunctions/Bladeburner.ts | 4 ++--
src/PersonObjects/IPerson.ts | 8 +++----
src/PersonObjects/ITaskTracker.ts | 4 ++--
src/PersonObjects/Person.ts | 25 ++++++++++----------
src/PersonObjects/Sleeve/Sleeve.ts | 12 +++++-----
src/PersonObjects/Sleeve/ui/SleeveElem.tsx | 4 ++--
src/PersonObjects/Sleeve/ui/TaskSelector.tsx | 7 +++---
8 files changed, 40 insertions(+), 41 deletions(-)
diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx
index 7dee7aae3..8294114bd 100644
--- a/src/Bladeburner/Bladeburner.tsx
+++ b/src/Bladeburner/Bladeburner.tsx
@@ -38,7 +38,6 @@ import { WorkerScript } from "../Netscript/WorkerScript";
import { FactionNames } from "../Faction/data/FactionNames";
import { BlackOperationNames } from "./data/BlackOperationNames";
import { KEY } from "../utils/helpers/keyCodes";
-import { Player } from "src/Player";
interface BlackOpsAttempt {
error?: string;
@@ -1022,7 +1021,7 @@ export class Bladeburner implements IBladeburner {
const unweightedGain = time * BladeburnerConstants.BaseStatGain * successMult * difficultyMult;
const unweightedIntGain = time * BladeburnerConstants.BaseIntGain * successMult * difficultyMult;
const skillMult = this.skillMultipliers.expGain;
-
+
return {
hack: unweightedGain * action.weights.hack * skillMult,
str: unweightedGain * action.weights.str * skillMult,
@@ -1136,7 +1135,7 @@ export class Bladeburner implements IBladeburner {
const losses = getRandomInt(0, max);
this.teamSize -= losses;
if(this.teamSize < this.sleeveSize) {
- let sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
+ const sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
for(let i = 0; i > (this.teamSize-this.sleeveSize); i--){
const r = Math.floor(Math.random() * sup.length);
sup[r].takeDamage(sup[r].max_hp);
@@ -1314,7 +1313,7 @@ export class Bladeburner implements IBladeburner {
this.log(`${person.whoAmI()}: ` + action.name + " successfully completed! Gained " + formatNumber(gain, 3) + " rank");
} else if (!isOperation && this.logging.contracts) {
this.log(
- `${person.whoAmI()}: ` +
+ `${person.whoAmI()}: ` +
action.name +
" contract successfully completed! Gained " +
formatNumber(gain, 3) +
@@ -1422,7 +1421,7 @@ export class Bladeburner implements IBladeburner {
if (this.logging.blackops) {
this.log(
- `${person.whoAmI()}: ` +
+ `${person.whoAmI()}: ` +
action.name +
" failed! Lost " +
formatNumber(rankLoss, 1) +
@@ -1440,7 +1439,7 @@ export class Bladeburner implements IBladeburner {
const losses = getRandomInt(1, teamLossMax);
this.teamSize -= losses;
if(this.teamSize < this.sleeveSize) {
- let sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
+ const sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
for(let i = 0; i > (this.teamSize-this.sleeveSize); i--){
const r = Math.floor(Math.random() * sup.length);
sup[r].takeDamage(sup[r].max_hp);
@@ -1472,7 +1471,7 @@ export class Bladeburner implements IBladeburner {
this.staminaBonus += staminaGain;
if (this.logging.general) {
this.log(
- `${person.whoAmI()}: ` +
+ `${person.whoAmI()}: ` +
"Training completed. Gained: " +
formatNumber(strExpGain, 1) +
" str exp, " +
@@ -1509,7 +1508,7 @@ export class Bladeburner implements IBladeburner {
this.getCurrentCity().improvePopulationEstimateByPercentage(eff * this.skillMultipliers.successChanceEstimate);
if (this.logging.general) {
this.log(
- `${person.whoAmI()}: ` +
+ `${person.whoAmI()}: ` +
`Field analysis completed. Gained ${formatNumber(rankGain, 2)} rank, ` +
`${formatNumber(hackingExpGain, 1)} hacking exp, and ` +
`${formatNumber(charismaExpGain, 1)} charisma exp`,
@@ -1655,7 +1654,7 @@ export class Bladeburner implements IBladeburner {
this.actionTimeOverflow = 0;
if (this.actionTimeCurrent >= this.actionTimeToComplete) {
this.actionTimeOverflow = this.actionTimeCurrent - this.actionTimeToComplete;
- let retValue = this.completeAction(player, player, this.action);
+ const retValue = this.completeAction(player, player, this.action);
player.gainMoney(retValue.money, "bladeburner");
player.gainStats(retValue);
// Operation Daedalus
diff --git a/src/NetscriptFunctions/Bladeburner.ts b/src/NetscriptFunctions/Bladeburner.ts
index 73ea9756a..e3bc2281e 100644
--- a/src/NetscriptFunctions/Bladeburner.ts
+++ b/src/NetscriptFunctions/Bladeburner.ts
@@ -137,7 +137,7 @@ export function NetscriptBladeburner(
const bladeburner = player.bladeburner;
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
try {
- let time = bladeburner.getActionTimeNetscriptFn(player, type, name);
+ const time = bladeburner.getActionTimeNetscriptFn(player, type, name);
if(typeof time === 'string'){
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
workerScript.log("bladeburner.getActionTime", () => errorLogText);
@@ -157,7 +157,7 @@ export function NetscriptBladeburner(
const bladeburner = player.bladeburner;
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
try {
- let chance = bladeburner.getActionEstimatedSuccessChanceNetscriptFn(player, type, name);
+ const chance = bladeburner.getActionEstimatedSuccessChanceNetscriptFn(player, type, name);
if(typeof chance === 'string'){
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
workerScript.log("bladeburner.getActionTime", () => errorLogText);
diff --git a/src/PersonObjects/IPerson.ts b/src/PersonObjects/IPerson.ts
index ab51f85c0..fbafd3505 100644
--- a/src/PersonObjects/IPerson.ts
+++ b/src/PersonObjects/IPerson.ts
@@ -15,7 +15,7 @@ export interface IPerson {
hp: number;
max_hp: number;
money: number;
-
+
// Experience
hacking_exp: number;
strength_exp: number;
@@ -24,7 +24,7 @@ export interface IPerson {
agility_exp: number;
charisma_exp: number;
intelligence_exp: number;
-
+
// Multipliers
hacking_exp_mult: number;
strength_exp_mult: number;
@@ -46,7 +46,7 @@ export interface IPerson {
crime_success_mult: number;
bladeburner_analysis_mult: number;
-
+
getIntelligenceBonus(weight: number): number;
gainHackingExp(exp: number): void;
gainStrengthExp(exp: number): void;
@@ -61,4 +61,4 @@ export interface IPerson {
regenerateHp: (amt: number) => void;
queryStatFromString: (str: string) => number;
whoAmI: () => string;
- }
\ No newline at end of file
+ }
diff --git a/src/PersonObjects/ITaskTracker.ts b/src/PersonObjects/ITaskTracker.ts
index 8b2d92efa..91bbad453 100644
--- a/src/PersonObjects/ITaskTracker.ts
+++ b/src/PersonObjects/ITaskTracker.ts
@@ -10,7 +10,7 @@ export interface ITaskTracker {
int: number;
money: number;
}
-
+
export function createTaskTracker(): ITaskTracker {
return {
hack: 0,
@@ -22,4 +22,4 @@ export interface ITaskTracker {
int: 0,
money: 0,
};
- }
\ No newline at end of file
+ }
diff --git a/src/PersonObjects/Person.ts b/src/PersonObjects/Person.ts
index 0bee0658a..3b87840af 100644
--- a/src/PersonObjects/Person.ts
+++ b/src/PersonObjects/Person.ts
@@ -89,6 +89,18 @@ export abstract class Person implements IPerson {
*/
city: CityName = CityName.Sector12;
+ gainHackingExp: (exp: number) => void;
+ gainStrengthExp: (exp: number) => void;
+ gainDefenseExp: (exp: number) => void;
+ gainDexterityExp: (exp: number) => void;
+ gainAgilityExp: (exp: number) => void;
+ gainCharismaExp: (exp: number) => void;
+ gainIntelligenceExp: (exp: number) => void;
+ gainStats: (retValue: ITaskTracker) => void;
+ calculateSkill: (exp: number, mult: number) => number;
+ regenerateHp: (amt: number) => void;
+ queryStatFromString: (str: string) => number;
+
/**
* Updates this object's multipliers for the given augmentation
*/
@@ -226,17 +238,6 @@ export abstract class Person implements IPerson {
abstract whoAmI(): string;
- gainHackingExp: (exp: number) => void;
- gainStrengthExp: (exp: number) => void;
- gainDefenseExp: (exp: number) => void;
- gainDexterityExp: (exp: number) => void;
- gainAgilityExp: (exp: number) => void;
- gainCharismaExp: (exp: number) => void;
- gainIntelligenceExp: (exp: number) => void;
- gainStats: (retValue: ITaskTracker) => void;
- calculateSkill: (exp: number, mult: number) => number;
- regenerateHp: (amt: number) => void;
- queryStatFromString: (str: string) => number;
constructor() {
this.gainHackingExp = generalMethods.gainHackingExp;
this.gainStrengthExp = generalMethods.gainStrengthExp;
@@ -252,4 +253,4 @@ export abstract class Person implements IPerson {
}
}
-Reviver.constructors.Person = Person;
\ No newline at end of file
+Reviver.constructors.Person = Person;
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index 364e0f57f..6de0e5c49 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -189,7 +189,7 @@ export class Sleeve extends Person {
*/
finishTask(p: IPlayer): ITaskTracker {
let retValue: ITaskTracker = createTaskTracker(); // Amount of exp to be gained by other sleeves
-
+
if (this.currentTask === SleeveTaskType.Crime) {
// For crimes, all experience and money is gained at the end
if (this.currentTaskTime >= this.currentTaskMaxTime) {
@@ -229,7 +229,7 @@ export class Sleeve extends Person {
this.resetTaskStatus(p);
return retValue;
}
-
+
if (this.currentTaskTime >= this.currentTaskMaxTime) {
if (this.bbAction === "Infiltrate synthoids") {
bb.infiltrateSynthoidCommunities();
@@ -637,7 +637,7 @@ export class Sleeve extends Person {
p.bladeburner?.sleeveSupport(false);
}
if (this.currentTask == SleeveTaskType.Class) {
- let retVal = createTaskTracker();
+ const retVal = createTaskTracker();
retVal.int = CONSTANTS.IntelligenceClassBaseExpGain * Math.round(this.currentTaskTime / 1000);
this.gainExperience(p, retVal);//Wont be shared with other sleeves
}
@@ -1091,7 +1091,7 @@ export class Sleeve extends Person {
break;
case "Recruitment":
time = this.getBladeburnerActionTime(p, 'General', action);
- const recruitTime = p.bladeburner?.getRecruitmentTime(this) ?? 0 * 1000;
+ const recruitTime = (p.bladeburner?.getRecruitmentTime(this) ?? 0) * 1000;
this.gainRatesForTask.cha = 2 * BladeburnerConstants.BaseStatGain * recruitTime;
this.currentTaskLocation = (p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0).toString() + '%';
break;
@@ -1167,7 +1167,7 @@ export class Sleeve extends Person {
this.gainRatesForTask.agi = retValue.agi;
this.gainRatesForTask.cha = retValue.cha;
const rewardMultiplier = Math.pow(action.rewardFac, action.level - 1);
- this.gainRatesForTask.money = BladeburnerConstants.ContractBaseMoneyGain * rewardMultiplier * bb.skillMultipliers.money;;
+ this.gainRatesForTask.money = BladeburnerConstants.ContractBaseMoneyGain * rewardMultiplier * bb.skillMultipliers.money;
}
getBladeburnerActionTime(p: IPlayer, type: string, name: string): number{//Maybe find workerscript and use original
@@ -1177,7 +1177,7 @@ export class Sleeve extends Person {
console.error(`Function: sleeves.getBladeburnerActionTime; Message: '${errorLogText}'`)
return -1;
}
-
+
const time = bb.getActionTimeNetscriptFn(this, type, name);
if(typeof time === 'string'){
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
diff --git a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
index 734d45522..ec288ff34 100644
--- a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
+++ b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
@@ -186,8 +186,8 @@ export function SleeveElem(props: IProps): React.ReactElement {
{desc}
- {(props.sleeve.currentTask === SleeveTaskType.Crime
- || props.sleeve.currentTask === SleeveTaskType.Bladeburner)
+ {(props.sleeve.currentTask === SleeveTaskType.Crime
+ || props.sleeve.currentTask === SleeveTaskType.Bladeburner)
&& props.sleeve.currentTaskMaxTime > 0
&& createProgressBarText({
progress: props.sleeve.currentTaskTime / props.sleeve.currentTaskMaxTime,
diff --git a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
index 574115770..7d8086817 100644
--- a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
+++ b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
@@ -10,7 +10,6 @@ import { FactionWorkType } from "../../../Faction/FactionWorkTypeEnum";
import Select, { SelectChangeEvent } from "@mui/material/Select";
import MenuItem from "@mui/material/MenuItem";
import { FactionNames } from "../../../Faction/data/FactionNames";
-import { Contract } from "../../../Bladeburner/Contract";
const universitySelectorOptions: string[] = [
"Study Computer Science",
@@ -95,7 +94,7 @@ function possibleContracts(player: IPlayer, sleeve: Sleeve): string[] {
if (sleeve === otherSleeve) {
continue;
}
- if (otherSleeve.currentTask === SleeveTaskType.Bladeburner
+ if (otherSleeve.currentTask === SleeveTaskType.Bladeburner
&& otherSleeve.bbAction == 'Take on Contracts') {
contracts = contracts.filter(x => x != otherSleeve.bbContract);
}
@@ -192,8 +191,8 @@ const tasks: {
return { first: gymSelectorOptions, second: () => gyms };
},
"Perform Bladeburner Actions": (player: IPlayer, sleeve: Sleeve): ITaskDetails => {
- return {
- first: bladeburnerSelectorOptions,
+ return {
+ first: bladeburnerSelectorOptions,
second: (s1: string) => {
if(s1 === "Take on Contracts"){
return possibleContracts(player, sleeve);
From 3886e31a45d5941b95a863ea150b14a2ba1ac186 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Thu, 14 Apr 2022 11:59:49 -0400
Subject: [PATCH 03/17] Format
---
src/Bladeburner/Bladeburner.tsx | 92 ++++++++++++++++++++-------------
src/Bladeburner/IBladeburner.ts | 8 +--
2 files changed, 57 insertions(+), 43 deletions(-)
diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx
index 66d0ef2db..4dd630242 100644
--- a/src/Bladeburner/Bladeburner.tsx
+++ b/src/Bladeburner/Bladeburner.tsx
@@ -1030,7 +1030,7 @@ export class Bladeburner implements IBladeburner {
cha: unweightedGain * action.weights.cha * skillMult,
int: unweightedIntGain * action.weights.int * skillMult,
money: 0,
- }
+ };
}
getDiplomacyEffectiveness(person: IPerson): number {
@@ -1053,7 +1053,7 @@ export class Bladeburner implements IBladeburner {
}
sleeveSupport(joining: boolean): void {
- if(joining){
+ if (joining) {
this.sleeveSize += 1;
this.teamSize += 1;
} else {
@@ -1133,9 +1133,9 @@ export class Bladeburner implements IBladeburner {
}
const losses = getRandomInt(0, max);
this.teamSize -= losses;
- if(this.teamSize < this.sleeveSize) {
- const sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
- for(let i = 0; i > (this.teamSize-this.sleeveSize); i--){
+ if (this.teamSize < this.sleeveSize) {
+ const sup = player.sleeves.filter((x) => x.bbAction == "Support main sleeve");
+ for (let i = 0; i > this.teamSize - this.sleeveSize; i--) {
const r = Math.floor(Math.random() * sup.length);
sup[r].takeDamage(sup[r].max_hp);
sup.splice(r, 1);
@@ -1309,11 +1309,17 @@ export class Bladeburner implements IBladeburner {
const gain = addOffset(action.rankGain * rewardMultiplier * BitNodeMultipliers.BladeburnerRank, 10);
this.changeRank(person, gain);
if (isOperation && this.logging.ops) {
- this.log(`${person.whoAmI()}: ` + action.name + " successfully completed! Gained " + formatNumber(gain, 3) + " rank");
+ this.log(
+ `${person.whoAmI()}: ` +
+ action.name +
+ " successfully completed! Gained " +
+ formatNumber(gain, 3) +
+ " rank",
+ );
} else if (!isOperation && this.logging.contracts) {
this.log(
`${person.whoAmI()}: ` +
- action.name +
+ action.name +
" contract successfully completed! Gained " +
formatNumber(gain, 3) +
" rank and " +
@@ -1397,7 +1403,9 @@ export class Bladeburner implements IBladeburner {
teamLossMax = Math.ceil(teamCount / 2);
if (this.logging.blackops) {
- this.log(`${person.whoAmI()}: ` + action.name + " successful! Gained " + formatNumber(rankGain, 1) + " rank");
+ this.log(
+ `${person.whoAmI()}: ` + action.name + " successful! Gained " + formatNumber(rankGain, 1) + " rank",
+ );
}
} else {
retValue = this.getActionStats(action, false);
@@ -1421,7 +1429,7 @@ export class Bladeburner implements IBladeburner {
if (this.logging.blackops) {
this.log(
`${person.whoAmI()}: ` +
- action.name +
+ action.name +
" failed! Lost " +
formatNumber(rankLoss, 1) +
" rank and took " +
@@ -1437,9 +1445,9 @@ export class Bladeburner implements IBladeburner {
if (teamCount >= 1) {
const losses = getRandomInt(1, teamLossMax);
this.teamSize -= losses;
- if(this.teamSize < this.sleeveSize) {
- const sup = player.sleeves.filter(x => x.bbAction == 'Support main sleeve');
- for(let i = 0; i > (this.teamSize-this.sleeveSize); i--){
+ if (this.teamSize < this.sleeveSize) {
+ const sup = player.sleeves.filter((x) => x.bbAction == "Support main sleeve");
+ for (let i = 0; i > this.teamSize - this.sleeveSize; i--) {
const r = Math.floor(Math.random() * sup.length);
sup[r].takeDamage(sup[r].max_hp);
sup.splice(r, 1);
@@ -1448,7 +1456,9 @@ export class Bladeburner implements IBladeburner {
}
this.teamLost += losses;
if (this.logging.blackops) {
- this.log(`${person.whoAmI()}: ` + "You lost " + formatNumber(losses, 0) + " team members during " + action.name);
+ this.log(
+ `${person.whoAmI()}: ` + "You lost " + formatNumber(losses, 0) + " team members during " + action.name,
+ );
}
}
} catch (e: any) {
@@ -1471,7 +1481,7 @@ export class Bladeburner implements IBladeburner {
if (this.logging.general) {
this.log(
`${person.whoAmI()}: ` +
- "Training completed. Gained: " +
+ "Training completed. Gained: " +
formatNumber(strExpGain, 1) +
" str exp, " +
formatNumber(defExpGain, 1) +
@@ -1508,7 +1518,7 @@ export class Bladeburner implements IBladeburner {
if (this.logging.general) {
this.log(
`${person.whoAmI()}: ` +
- `Field analysis completed. Gained ${formatNumber(rankGain, 2)} rank, ` +
+ `Field analysis completed. Gained ${formatNumber(rankGain, 2)} rank, ` +
`${formatNumber(hackingExpGain, 1)} hacking exp, and ` +
`${formatNumber(charismaExpGain, 1)} charisma exp`,
);
@@ -1523,13 +1533,23 @@ export class Bladeburner implements IBladeburner {
retValue.cha = expGain;
++this.teamSize;
if (this.logging.general) {
- this.log(`${person.whoAmI()}: ` + "Successfully recruited a team member! Gained " + formatNumber(expGain, 1) + " charisma exp");
+ this.log(
+ `${person.whoAmI()}: ` +
+ "Successfully recruited a team member! Gained " +
+ formatNumber(expGain, 1) +
+ " charisma exp",
+ );
}
} else {
const expGain = BladeburnerConstants.BaseStatGain * recruitTime;
retValue.cha = expGain;
if (this.logging.general) {
- this.log(`${person.whoAmI()}: ` + "Failed to recruit a team member. Gained " + formatNumber(expGain, 1) + " charisma exp");
+ this.log(
+ `${person.whoAmI()}: ` +
+ "Failed to recruit a team member. Gained " +
+ formatNumber(expGain, 1) +
+ " charisma exp",
+ );
}
}
break;
@@ -1542,7 +1562,9 @@ export class Bladeburner implements IBladeburner {
}
if (this.logging.general) {
this.log(
- `${person.whoAmI()}: Diplomacy completed. Chaos levels in the current city fell by ${numeralWrapper.formatPercentage(1 - eff)}`,
+ `${person.whoAmI()}: Diplomacy completed. Chaos levels in the current city fell by ${numeralWrapper.formatPercentage(
+ 1 - eff,
+ )}`,
);
}
break;
@@ -1590,15 +1612,15 @@ export class Bladeburner implements IBladeburner {
}
infiltrateSynthoidCommunities(): void {
- for (const contract of Object.keys(this.contracts)) {
- this.contracts[contract].count += 1;
- }
- for (const operation of Object.keys(this.operations)) {
- this.operations[operation].count += 1;
- }
- if (this.logging.general) {
- this.log(`Sleeve: Infiltrate the synthoid communities.`);
- }
+ for (const contract of Object.keys(this.contracts)) {
+ this.contracts[contract].count += 1;
+ }
+ for (const operation of Object.keys(this.operations)) {
+ this.operations[operation].count += 1;
+ }
+ if (this.logging.general) {
+ this.log(`Sleeve: Infiltrate the synthoid communities.`);
+ }
}
changeRank(person: IPerson, change: number): void {
@@ -1663,7 +1685,7 @@ export class Bladeburner implements IBladeburner {
} else if (action.name === BlackOperationNames.OperationDaedalus && this.blackops[action.name]) {
this.resetAction();
router.toBitVerse(false, false);
- } else if(this.action.type != ActionTypes["BlackOperation"] && this.action.type != ActionTypes["BlackOp"]) {
+ } else if (this.action.type != ActionTypes["BlackOperation"] && this.action.type != ActionTypes["BlackOp"]) {
this.startAction(player, this.action); // Repeat action
}
}
@@ -2144,7 +2166,7 @@ export class Bladeburner implements IBladeburner {
}
}
- getActionTimeNetscriptFn(person: IPerson, type: string, name: string): number|string {
+ getActionTimeNetscriptFn(person: IPerson, type: string, name: string): number | string {
const actionId = this.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
return "bladeburner.getActionTime";
@@ -2175,11 +2197,7 @@ export class Bladeburner implements IBladeburner {
}
}
- getActionEstimatedSuccessChanceNetscriptFn(
- person: IPerson,
- type: string,
- name: string,
- ): [number, number]|string {
+ getActionEstimatedSuccessChanceNetscriptFn(person: IPerson, type: string, name: string): [number, number] | string {
const actionId = this.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
return "bladeburner.getActionEstimatedSuccessChance";
@@ -2203,9 +2221,9 @@ export class Bladeburner implements IBladeburner {
case ActionTypes["Incite Violence"]:
return [1, 1];
case ActionTypes["Recruitment"]: {
- const recChance = this.getRecruitmentSuccessChance(person);
- return [recChance, recChance];
- }
+ const recChance = this.getRecruitmentSuccessChance(person);
+ return [recChance, recChance];
+ }
default:
return "bladeburner.getActionEstimatedSuccessChance";
}
diff --git a/src/Bladeburner/IBladeburner.ts b/src/Bladeburner/IBladeburner.ts
index f757f9d66..65ecff71c 100644
--- a/src/Bladeburner/IBladeburner.ts
+++ b/src/Bladeburner/IBladeburner.ts
@@ -72,12 +72,8 @@ export interface IBladeburner {
getGeneralActionNamesNetscriptFn(): string[];
getSkillNamesNetscriptFn(): string[];
startActionNetscriptFn(player: IPlayer, type: string, name: string, workerScript: WorkerScript): boolean;
- getActionTimeNetscriptFn(person: IPerson, type: string, name: string): number|string;
- getActionEstimatedSuccessChanceNetscriptFn(
- person: IPerson,
- type: string,
- name: string,
- ): [number, number]|string;
+ getActionTimeNetscriptFn(person: IPerson, type: string, name: string): number | string;
+ getActionEstimatedSuccessChanceNetscriptFn(person: IPerson, type: string, name: string): [number, number] | string;
getActionCountRemainingNetscriptFn(type: string, name: string, workerScript: WorkerScript): number;
getSkillLevelNetscriptFn(skillName: string, workerScript: WorkerScript): number;
getSkillUpgradeCostNetscriptFn(skillName: string, workerScript: WorkerScript): number;
From 9d181182084e71cd7f1cd5604fa4717692774f69 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Thu, 14 Apr 2022 12:00:17 -0400
Subject: [PATCH 04/17] Format, but git forgot this last time
---
src/NetscriptFunctions/Bladeburner.ts | 4 +-
src/PersonObjects/IPerson.ts | 104 +++++++++----------
src/PersonObjects/ITaskTracker.ts | 42 ++++----
src/PersonObjects/Player/PlayerObject.ts | 4 +-
src/PersonObjects/Sleeve/Sleeve.ts | 82 ++++++++-------
src/PersonObjects/Sleeve/ui/SleeveElem.tsx | 19 ++--
src/PersonObjects/Sleeve/ui/TaskSelector.tsx | 23 ++--
7 files changed, 146 insertions(+), 132 deletions(-)
diff --git a/src/NetscriptFunctions/Bladeburner.ts b/src/NetscriptFunctions/Bladeburner.ts
index e3bc2281e..8d9598496 100644
--- a/src/NetscriptFunctions/Bladeburner.ts
+++ b/src/NetscriptFunctions/Bladeburner.ts
@@ -138,7 +138,7 @@ export function NetscriptBladeburner(
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
try {
const time = bladeburner.getActionTimeNetscriptFn(player, type, name);
- if(typeof time === 'string'){
+ if (typeof time === "string") {
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
workerScript.log("bladeburner.getActionTime", () => errorLogText);
return -1;
@@ -158,7 +158,7 @@ export function NetscriptBladeburner(
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
try {
const chance = bladeburner.getActionEstimatedSuccessChanceNetscriptFn(player, type, name);
- if(typeof chance === 'string'){
+ if (typeof chance === "string") {
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
workerScript.log("bladeburner.getActionTime", () => errorLogText);
return [-1, -1];
diff --git a/src/PersonObjects/IPerson.ts b/src/PersonObjects/IPerson.ts
index fbafd3505..25cb9b9cc 100644
--- a/src/PersonObjects/IPerson.ts
+++ b/src/PersonObjects/IPerson.ts
@@ -4,61 +4,61 @@
import { ITaskTracker } from "./ITaskTracker";
export interface IPerson {
- // Stats
- hacking: number;
- strength: number;
- defense: number;
- dexterity: number;
- agility: number;
- charisma: number;
- intelligence: number;
- hp: number;
- max_hp: number;
- money: number;
+ // Stats
+ hacking: number;
+ strength: number;
+ defense: number;
+ dexterity: number;
+ agility: number;
+ charisma: number;
+ intelligence: number;
+ hp: number;
+ max_hp: number;
+ money: number;
- // Experience
- hacking_exp: number;
- strength_exp: number;
- defense_exp: number;
- dexterity_exp: number;
- agility_exp: number;
- charisma_exp: number;
- intelligence_exp: number;
+ // Experience
+ hacking_exp: number;
+ strength_exp: number;
+ defense_exp: number;
+ dexterity_exp: number;
+ agility_exp: number;
+ charisma_exp: number;
+ intelligence_exp: number;
- // Multipliers
- hacking_exp_mult: number;
- strength_exp_mult: number;
- defense_exp_mult: number;
- dexterity_exp_mult: number;
- agility_exp_mult: number;
- charisma_exp_mult: number;
- hacking_mult: number;
- strength_mult: number;
- defense_mult: number;
- dexterity_mult: number;
- agility_mult: number;
- charisma_mult: number;
+ // Multipliers
+ hacking_exp_mult: number;
+ strength_exp_mult: number;
+ defense_exp_mult: number;
+ dexterity_exp_mult: number;
+ agility_exp_mult: number;
+ charisma_exp_mult: number;
+ hacking_mult: number;
+ strength_mult: number;
+ defense_mult: number;
+ dexterity_mult: number;
+ agility_mult: number;
+ charisma_mult: number;
- company_rep_mult: number;
- faction_rep_mult: number;
+ company_rep_mult: number;
+ faction_rep_mult: number;
- crime_money_mult: number;
- crime_success_mult: number;
+ crime_money_mult: number;
+ crime_success_mult: number;
- bladeburner_analysis_mult: number;
+ bladeburner_analysis_mult: number;
- getIntelligenceBonus(weight: number): number;
- gainHackingExp(exp: number): void;
- gainStrengthExp(exp: number): void;
- gainDefenseExp(exp: number): void;
- gainDexterityExp(exp: number): void;
- gainAgilityExp(exp: number): void;
- gainCharismaExp(exp: number): void;
- gainIntelligenceExp(exp: number): void;
- gainStats(retValue: ITaskTracker): void;
- calculateSkill(exp: number, mult?: number): number;
- takeDamage(amt: number): boolean;
- regenerateHp: (amt: number) => void;
- queryStatFromString: (str: string) => number;
- whoAmI: () => string;
- }
+ getIntelligenceBonus(weight: number): number;
+ gainHackingExp(exp: number): void;
+ gainStrengthExp(exp: number): void;
+ gainDefenseExp(exp: number): void;
+ gainDexterityExp(exp: number): void;
+ gainAgilityExp(exp: number): void;
+ gainCharismaExp(exp: number): void;
+ gainIntelligenceExp(exp: number): void;
+ gainStats(retValue: ITaskTracker): void;
+ calculateSkill(exp: number, mult?: number): number;
+ takeDamage(amt: number): boolean;
+ regenerateHp: (amt: number) => void;
+ queryStatFromString: (str: string) => number;
+ whoAmI: () => string;
+}
diff --git a/src/PersonObjects/ITaskTracker.ts b/src/PersonObjects/ITaskTracker.ts
index 91bbad453..f6acc8799 100644
--- a/src/PersonObjects/ITaskTracker.ts
+++ b/src/PersonObjects/ITaskTracker.ts
@@ -1,25 +1,25 @@
// Interface that defines a generic object used to track experience/money
// earnings for tasks
export interface ITaskTracker {
- hack: number;
- str: number;
- def: number;
- dex: number;
- agi: number;
- cha: number;
- int: number;
- money: number;
- }
+ hack: number;
+ str: number;
+ def: number;
+ dex: number;
+ agi: number;
+ cha: number;
+ int: number;
+ money: number;
+}
- export function createTaskTracker(): ITaskTracker {
- return {
- hack: 0,
- str: 0,
- def: 0,
- dex: 0,
- agi: 0,
- cha: 0,
- int: 0,
- money: 0,
- };
- }
+export function createTaskTracker(): ITaskTracker {
+ return {
+ hack: 0,
+ str: 0,
+ def: 0,
+ dex: 0,
+ agi: 0,
+ cha: 0,
+ int: 0,
+ money: 0,
+ };
+}
diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts
index fec5ae596..b2c089c6b 100644
--- a/src/PersonObjects/Player/PlayerObject.ts
+++ b/src/PersonObjects/Player/PlayerObject.ts
@@ -304,8 +304,8 @@ export class PlayerObject implements IPlayer {
graftAugmentationWork: (numCycles: number) => boolean;
finishGraftAugmentationWork: (cancelled: boolean) => string;
applyEntropy: (stacks?: number) => void;
- whoAmI(): string{
- return 'Player';
+ whoAmI(): string {
+ return "Player";
}
constructor() {
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index 6de0e5c49..9d80e01e2 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -225,7 +225,7 @@ export class Sleeve extends Person {
const bb = p.bladeburner;
if (bb === null) {
const errorLogText = `bladeburner is null`;
- console.error(`Function: sleeves.finishTask; Message: '${errorLogText}'`)
+ console.error(`Function: sleeves.finishTask; Message: '${errorLogText}'`);
this.resetTaskStatus(p);
return retValue;
}
@@ -240,25 +240,25 @@ export class Sleeve extends Person {
let type: string;
let name: string;
if (this.bbAction === "Take on Contracts") {
- type = 'Contracts';
+ type = "Contracts";
name = this.bbContract;
} else {
- type = 'General';
+ type = "General";
name = this.bbAction;
}
const actionIdent = bb.getActionIdFromTypeAndName(type, name);
- if(actionIdent === null) {
+ if (actionIdent === null) {
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
- console.error(`Function: sleeves.finishTask; Message: '${errorLogText}'`)
+ console.error(`Function: sleeves.finishTask; Message: '${errorLogText}'`);
this.resetTaskStatus(p);
return retValue;
}
const action = bb.getActionObject(actionIdent);
- if((action?.count ?? 0) > 0) {
+ if ((action?.count ?? 0) > 0) {
const bbRetValue = bb.completeAction(p, this, actionIdent);
- if(bbRetValue) {
+ if (bbRetValue) {
retValue = this.gainExperience(p, bbRetValue);
this.gainMoney(p, bbRetValue);
@@ -633,13 +633,13 @@ export class Sleeve extends Person {
* Resets all parameters used to keep information about the current task
*/
resetTaskStatus(p: IPlayer): void {
- if (this.bbAction == 'Support main sleeve') {
+ if (this.bbAction == "Support main sleeve") {
p.bladeburner?.sleeveSupport(false);
}
if (this.currentTask == SleeveTaskType.Class) {
const retVal = createTaskTracker();
retVal.int = CONSTANTS.IntelligenceClassBaseExpGain * Math.round(this.currentTaskTime / 1000);
- this.gainExperience(p, retVal);//Wont be shared with other sleeves
+ this.gainExperience(p, retVal); //Wont be shared with other sleeves
}
this.earningsForTask = createTaskTracker();
this.gainRatesForTask = createTaskTracker();
@@ -1080,23 +1080,23 @@ export class Sleeve extends Person {
this.gainRatesForTask.agi = 0;
this.gainRatesForTask.cha = 0;
this.gainRatesForTask.money = 0;
- this.currentTaskLocation = '';
+ this.currentTaskLocation = "";
let time = 0;
switch (action) {
case "Field Analysis":
- time = this.getBladeburnerActionTime(p, 'General', action);
+ time = this.getBladeburnerActionTime(p, "General", action);
this.gainRatesForTask.hack = 20 * this.hacking_exp_mult;
this.gainRatesForTask.cha = 20 * this.charisma_exp_mult;
break;
case "Recruitment":
- time = this.getBladeburnerActionTime(p, 'General', action);
+ time = this.getBladeburnerActionTime(p, "General", action);
const recruitTime = (p.bladeburner?.getRecruitmentTime(this) ?? 0) * 1000;
this.gainRatesForTask.cha = 2 * BladeburnerConstants.BaseStatGain * recruitTime;
- this.currentTaskLocation = (p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0).toString() + '%';
+ this.currentTaskLocation = (p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0).toString() + "%";
break;
case "Diplomacy":
- time = this.getBladeburnerActionTime(p, 'General', action);
+ time = this.getBladeburnerActionTime(p, "General", action);
break;
case "Infiltrate synthoids":
time = 60000;
@@ -1106,9 +1106,9 @@ export class Sleeve extends Person {
time = 0;
break;
case "Take on Contracts":
- time = this.getBladeburnerActionTime(p, 'Contracts', contract);
- this.contractGainRates(p, 'Contracts', contract);
- this.currentTaskLocation = this.contractSuccessChance(p, 'Contracts', contract);
+ time = this.getBladeburnerActionTime(p, "Contracts", contract);
+ this.contractGainRates(p, "Contracts", contract);
+ this.currentTaskLocation = this.contractSuccessChance(p, "Contracts", contract);
break;
}
@@ -1121,41 +1121,41 @@ export class Sleeve extends Person {
contractSuccessChance(p: IPlayer, type: string, name: string): string {
const bb = p.bladeburner;
- if(bb === null){
+ if (bb === null) {
const errorLogText = `bladeburner is null`;
- console.error(`Function: sleeves.contractSuccessChance; Message: '${errorLogText}'`)
- return '0%';
+ console.error(`Function: sleeves.contractSuccessChance; Message: '${errorLogText}'`);
+ return "0%";
}
const chances = bb.getActionEstimatedSuccessChanceNetscriptFn(this, type, name);
- if(typeof chances === 'string'){
- console.error(`Function: sleeves.contractSuccessChance; Message: '${chances}'`)
- return '0%';
+ if (typeof chances === "string") {
+ console.error(`Function: sleeves.contractSuccessChance; Message: '${chances}'`);
+ return "0%";
}
- if(chances[0] >= 1) {
- return '100%';
+ if (chances[0] >= 1) {
+ return "100%";
} else {
- return `${chances[0]*100}% - ${chances[1]*100}%`;
+ return `${chances[0] * 100}% - ${chances[1] * 100}%`;
}
}
contractGainRates(p: IPlayer, type: string, name: string): void {
const bb = p.bladeburner;
- if(bb === null){
+ if (bb === null) {
const errorLogText = `bladeburner is null`;
- console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`)
+ console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`);
return;
}
const actionIdent = bb.getActionIdFromTypeAndName(type, name);
- if(actionIdent === null) {
+ if (actionIdent === null) {
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
- console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`)
+ console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`);
this.resetTaskStatus(p);
return;
}
const action = bb.getActionObject(actionIdent);
- if(action === null) {
+ if (action === null) {
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
- console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`)
+ console.error(`Function: sleeves.contractGainRates; Message: '${errorLogText}'`);
this.resetTaskStatus(p);
return;
}
@@ -1167,28 +1167,30 @@ export class Sleeve extends Person {
this.gainRatesForTask.agi = retValue.agi;
this.gainRatesForTask.cha = retValue.cha;
const rewardMultiplier = Math.pow(action.rewardFac, action.level - 1);
- this.gainRatesForTask.money = BladeburnerConstants.ContractBaseMoneyGain * rewardMultiplier * bb.skillMultipliers.money;
+ this.gainRatesForTask.money =
+ BladeburnerConstants.ContractBaseMoneyGain * rewardMultiplier * bb.skillMultipliers.money;
}
- getBladeburnerActionTime(p: IPlayer, type: string, name: string): number{//Maybe find workerscript and use original
+ getBladeburnerActionTime(p: IPlayer, type: string, name: string): number {
+ //Maybe find workerscript and use original
const bb = p.bladeburner;
- if(bb === null){
+ if (bb === null) {
const errorLogText = `bladeburner is null`;
- console.error(`Function: sleeves.getBladeburnerActionTime; Message: '${errorLogText}'`)
+ console.error(`Function: sleeves.getBladeburnerActionTime; Message: '${errorLogText}'`);
return -1;
}
const time = bb.getActionTimeNetscriptFn(this, type, name);
- if(typeof time === 'string'){
+ if (typeof time === "string") {
const errorLogText = `Invalid action: type='${type}' name='${name}'`;
- console.error(`Function: sleeves.getBladeburnerActionTime; Message: '${errorLogText}'`)
+ console.error(`Function: sleeves.getBladeburnerActionTime; Message: '${errorLogText}'`);
return -1;
} else {
return time;
}
}
- takeDamage(amt: number):boolean {
+ takeDamage(amt: number): boolean {
if (typeof amt !== "number") {
console.warn(`Player.takeDamage() called without a numeric argument: ${amt}`);
return false;
@@ -1205,7 +1207,7 @@ export class Sleeve extends Person {
}
whoAmI(): string {
- return 'Sleeve';
+ return "Sleeve";
}
/**
diff --git a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
index ec288ff34..355f17f43 100644
--- a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
+++ b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
@@ -114,11 +114,16 @@ export function SleeveElem(props: IProps): React.ReactElement {
desc = <>This sleeve is currently working out at {props.sleeve.currentTaskLocation}.>;
break;
case SleeveTaskType.Bladeburner:
- let contract = '';
- if (props.sleeve.bbContract !== '------') {
+ let contract = "";
+ if (props.sleeve.bbContract !== "------") {
contract = ` - ${props.sleeve.bbContract} (Success Rate: ${props.sleeve.currentTaskLocation})`;
}
- desc = <>This sleeve is currently attempting to {props.sleeve.bbAction}{contract}>
+ desc = (
+ <>
+ This sleeve is currently attempting to {props.sleeve.bbAction}
+ {contract}
+ >
+ );
break;
case SleeveTaskType.Recovery:
desc = (
@@ -186,10 +191,10 @@ export function SleeveElem(props: IProps): React.ReactElement {
{desc}
- {(props.sleeve.currentTask === SleeveTaskType.Crime
- || props.sleeve.currentTask === SleeveTaskType.Bladeburner)
- && props.sleeve.currentTaskMaxTime > 0
- && createProgressBarText({
+ {(props.sleeve.currentTask === SleeveTaskType.Crime ||
+ props.sleeve.currentTask === SleeveTaskType.Bladeburner) &&
+ props.sleeve.currentTaskMaxTime > 0 &&
+ createProgressBarText({
progress: props.sleeve.currentTaskTime / props.sleeve.currentTaskMaxTime,
totalTicks: 25,
})}
diff --git a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
index 7d8086817..0e81213f5 100644
--- a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
+++ b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
@@ -22,7 +22,14 @@ const universitySelectorOptions: string[] = [
const gymSelectorOptions: string[] = ["Train Strength", "Train Defense", "Train Dexterity", "Train Agility"];
-const bladeburnerSelectorOptions: string[] = ["Field Analysis", "Recruitment", "Diplomacy", "Infiltrate synthoids", "Support main sleeve", "Take on Contracts"];
+const bladeburnerSelectorOptions: string[] = [
+ "Field Analysis",
+ "Recruitment",
+ "Diplomacy",
+ "Infiltrate synthoids",
+ "Support main sleeve",
+ "Take on Contracts",
+];
interface IProps {
sleeve: Sleeve;
@@ -86,7 +93,7 @@ function possibleFactions(player: IPlayer, sleeve: Sleeve): string[] {
function possibleContracts(player: IPlayer, sleeve: Sleeve): string[] {
const bb = player.bladeburner;
- if(bb === null){
+ if (bb === null) {
return ["------"];
}
let contracts = bb.getContractNamesNetscriptFn();
@@ -94,12 +101,11 @@ function possibleContracts(player: IPlayer, sleeve: Sleeve): string[] {
if (sleeve === otherSleeve) {
continue;
}
- if (otherSleeve.currentTask === SleeveTaskType.Bladeburner
- && otherSleeve.bbAction == 'Take on Contracts') {
- contracts = contracts.filter(x => x != otherSleeve.bbContract);
+ if (otherSleeve.currentTask === SleeveTaskType.Bladeburner && otherSleeve.bbAction == "Take on Contracts") {
+ contracts = contracts.filter((x) => x != otherSleeve.bbContract);
}
}
- if(contracts.length === 0){
+ if (contracts.length === 0) {
return ["------"];
}
return contracts;
@@ -194,12 +200,13 @@ const tasks: {
return {
first: bladeburnerSelectorOptions,
second: (s1: string) => {
- if(s1 === "Take on Contracts"){
+ if (s1 === "Take on Contracts") {
return possibleContracts(player, sleeve);
} else {
return ["------"];
}
- } };
+ },
+ };
},
"Shock Recovery": (): ITaskDetails => {
return { first: ["------"], second: () => ["------"] };
From 332b8033327adb3ec4ae32a79bb5c07a5121aa4d Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Thu, 14 Apr 2022 15:28:13 -0400
Subject: [PATCH 05/17] Fmt and lint
---
src/Bladeburner/Bladeburner.tsx | 6 +-
src/PersonObjects/Person.ts | 203 ++++++++++++------
src/PersonObjects/Player/PlayerObject.ts | 7 +-
.../Player/PlayerObjectGeneralMethods.tsx | 4 +-
src/PersonObjects/Sleeve/Sleeve.ts | 4 +-
src/PersonObjects/Sleeve/ui/SleeveElem.tsx | 3 +-
src/PersonObjects/Sleeve/ui/TaskSelector.tsx | 2 +-
7 files changed, 154 insertions(+), 75 deletions(-)
diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx
index 4dd630242..b7fa6664e 100644
--- a/src/Bladeburner/Bladeburner.tsx
+++ b/src/Bladeburner/Bladeburner.tsx
@@ -1456,9 +1456,7 @@ export class Bladeburner implements IBladeburner {
}
this.teamLost += losses;
if (this.logging.blackops) {
- this.log(
- `${person.whoAmI()}: ` + "You lost " + formatNumber(losses, 0) + " team members during " + action.name,
- );
+ this.log(`${person.whoAmI()}: You lost ${formatNumber(losses, 0)} team members during ${action.name}`);
}
}
} catch (e: any) {
@@ -1595,7 +1593,7 @@ export class Bladeburner implements IBladeburner {
this.operations[operation].count += (60 * 3 * growthF()) / BladeburnerConstants.ActionCountGrowthPeriod;
}
if (this.logging.general) {
- this.log(`${person.whoAmI()}: ` + `Incited violence in the synthoid communities.`);
+ this.log(`${person.whoAmI()}: Incited violence in the synthoid communities.`);
}
for (const cityName of Object.keys(this.cities)) {
const city = this.cities[cityName];
diff --git a/src/PersonObjects/Person.ts b/src/PersonObjects/Person.ts
index 3b87840af..70daf5ba2 100644
--- a/src/PersonObjects/Person.ts
+++ b/src/PersonObjects/Person.ts
@@ -15,74 +15,74 @@ export abstract class Person implements IPerson {
/**
* Stats
*/
- hacking = 1;
- strength = 1;
- defense = 1;
- dexterity = 1;
- agility = 1;
- charisma = 1;
- intelligence = 1;
- hp = 10;
- max_hp = 10;
- money = 0;
+ hacking;
+ strength;
+ defense;
+ dexterity;
+ agility;
+ charisma;
+ intelligence;
+ hp;
+ max_hp;
+ money;
/**
* Experience
*/
- hacking_exp = 0;
- strength_exp = 0;
- defense_exp = 0;
- dexterity_exp = 0;
- agility_exp = 0;
- charisma_exp = 0;
- intelligence_exp = 0;
+ hacking_exp;
+ strength_exp;
+ defense_exp;
+ dexterity_exp;
+ agility_exp;
+ charisma_exp;
+ intelligence_exp;
/**
* Multipliers
*/
- hacking_mult = 1;
- strength_mult = 1;
- defense_mult = 1;
- dexterity_mult = 1;
- agility_mult = 1;
- charisma_mult = 1;
+ hacking_mult;
+ strength_mult;
+ defense_mult;
+ dexterity_mult;
+ agility_mult;
+ charisma_mult;
- hacking_exp_mult = 1;
- strength_exp_mult = 1;
- defense_exp_mult = 1;
- dexterity_exp_mult = 1;
- agility_exp_mult = 1;
- charisma_exp_mult = 1;
+ hacking_exp_mult;
+ strength_exp_mult;
+ defense_exp_mult;
+ dexterity_exp_mult;
+ agility_exp_mult;
+ charisma_exp_mult;
- hacking_chance_mult = 1;
- hacking_speed_mult = 1;
- hacking_money_mult = 1;
- hacking_grow_mult = 1;
+ hacking_chance_mult;
+ hacking_speed_mult;
+ hacking_money_mult;
+ hacking_grow_mult;
- company_rep_mult = 1;
- faction_rep_mult = 1;
+ company_rep_mult;
+ faction_rep_mult;
- crime_money_mult = 1;
- crime_success_mult = 1;
+ crime_money_mult;
+ crime_success_mult;
- work_money_mult = 1;
+ work_money_mult;
- hacknet_node_money_mult = 1;
- hacknet_node_purchase_cost_mult = 1;
- hacknet_node_ram_cost_mult = 1;
- hacknet_node_core_cost_mult = 1;
- hacknet_node_level_cost_mult = 1;
+ hacknet_node_money_mult;
+ hacknet_node_purchase_cost_mult;
+ hacknet_node_ram_cost_mult;
+ hacknet_node_core_cost_mult;
+ hacknet_node_level_cost_mult;
- bladeburner_max_stamina_mult = 1;
- bladeburner_stamina_gain_mult = 1;
- bladeburner_analysis_mult = 1;
- bladeburner_success_chance_mult = 1;
+ bladeburner_max_stamina_mult;
+ bladeburner_stamina_gain_mult;
+ bladeburner_analysis_mult;
+ bladeburner_success_chance_mult;
/**
* Augmentations
*/
- augmentations: IPlayerOwnedAugmentation[] = [];
- queuedAugmentations: IPlayerOwnedAugmentation[] = [];
+ augmentations: IPlayerOwnedAugmentation[];
+ queuedAugmentations: IPlayerOwnedAugmentation[];
/**
* City that the person is in
@@ -101,6 +101,97 @@ export abstract class Person implements IPerson {
regenerateHp: (amt: number) => void;
queryStatFromString: (str: string) => number;
+ constructor() {
+ /**
+ * Stats
+ */
+ this.hacking = 1;
+ this.strength = 1;
+ this.defense = 1;
+ this.dexterity = 1;
+ this.agility = 1;
+ this.charisma = 1;
+ this.intelligence = 1;
+ this.hp = 10;
+ this.max_hp = 10;
+ this.money = 0;
+
+ /**
+ * Experience
+ */
+ this.hacking_exp = 0;
+ this.strength_exp = 0;
+ this.defense_exp = 0;
+ this.dexterity_exp = 0;
+ this.agility_exp = 0;
+ this.charisma_exp = 0;
+ this.intelligence_exp = 0;
+
+ /**
+ * Multipliers
+ */
+ this.hacking_mult = 1;
+ this.strength_mult = 1;
+ this.defense_mult = 1;
+ this.dexterity_mult = 1;
+ this.agility_mult = 1;
+ this.charisma_mult = 1;
+
+ this.hacking_exp_mult = 1;
+ this.strength_exp_mult = 1;
+ this.defense_exp_mult = 1;
+ this.dexterity_exp_mult = 1;
+ this.agility_exp_mult = 1;
+ this.charisma_exp_mult = 1;
+
+ this.hacking_chance_mult = 1;
+ this.hacking_speed_mult = 1;
+ this.hacking_money_mult = 1;
+ this.hacking_grow_mult = 1;
+
+ this.company_rep_mult = 1;
+ this.faction_rep_mult = 1;
+
+ this.crime_money_mult = 1;
+ this.crime_success_mult = 1;
+
+ this.work_money_mult = 1;
+
+ this.hacknet_node_money_mult = 1;
+ this.hacknet_node_purchase_cost_mult = 1;
+ this.hacknet_node_ram_cost_mult = 1;
+ this.hacknet_node_core_cost_mult = 1;
+ this.hacknet_node_level_cost_mult = 1;
+
+ this.bladeburner_max_stamina_mult = 1;
+ this.bladeburner_stamina_gain_mult = 1;
+ this.bladeburner_analysis_mult = 1;
+ this.bladeburner_success_chance_mult = 1;
+
+ /**
+ * Augmentations
+ */
+ this.augmentations = [];
+ this.queuedAugmentations = [];
+
+ /**
+ * City that the person is in
+ */
+ this.city = CityName.Sector12;
+
+ this.gainHackingExp = generalMethods.gainHackingExp;
+ this.gainStrengthExp = generalMethods.gainStrengthExp;
+ this.gainDefenseExp = generalMethods.gainDefenseExp;
+ this.gainDexterityExp = generalMethods.gainDexterityExp;
+ this.gainAgilityExp = generalMethods.gainAgilityExp;
+ this.gainCharismaExp = generalMethods.gainCharismaExp;
+ this.gainIntelligenceExp = generalMethods.gainIntelligenceExp;
+ this.gainStats = generalMethods.gainStats;
+ this.calculateSkill = generalMethods.calculateSkill;
+ this.regenerateHp = generalMethods.regenerateHp;
+ this.queryStatFromString = generalMethods.queryStatFromString;
+ }
+
/**
* Updates this object's multipliers for the given augmentation
*/
@@ -237,20 +328,6 @@ export abstract class Person implements IPerson {
abstract takeDamage(amt: number): boolean;
abstract whoAmI(): string;
-
- constructor() {
- this.gainHackingExp = generalMethods.gainHackingExp;
- this.gainStrengthExp = generalMethods.gainStrengthExp;
- this.gainDefenseExp = generalMethods.gainDefenseExp;
- this.gainDexterityExp = generalMethods.gainDexterityExp;
- this.gainAgilityExp = generalMethods.gainAgilityExp;
- this.gainCharismaExp = generalMethods.gainCharismaExp;
- this.gainIntelligenceExp = generalMethods.gainIntelligenceExp;
- this.gainStats = generalMethods.gainStats;
- this.calculateSkill = generalMethods.calculateSkill;
- this.regenerateHp = generalMethods.regenerateHp;
- this.queryStatFromString = generalMethods.queryStatFromString;
- }
}
Reviver.constructors.Person = Person;
diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts
index b2c089c6b..d420ddce0 100644
--- a/src/PersonObjects/Player/PlayerObject.ts
+++ b/src/PersonObjects/Player/PlayerObject.ts
@@ -304,9 +304,6 @@ export class PlayerObject implements IPlayer {
graftAugmentationWork: (numCycles: number) => boolean;
finishGraftAugmentationWork: (cancelled: boolean) => string;
applyEntropy: (stacks?: number) => void;
- whoAmI(): string {
- return "Player";
- }
constructor() {
//Skills and stats
@@ -634,6 +631,10 @@ export class PlayerObject implements IPlayer {
this.applyEntropy = augmentationMethods.applyEntropy;
}
+ whoAmI(): string {
+ return "Player";
+ }
+
/**
* Serialize the current object to a JSON save state.
*/
diff --git a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
index d14b2b81e..493af8a1c 100644
--- a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
+++ b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
@@ -67,6 +67,7 @@ import { achievements } from "../../Achievements/Achievements";
import { FactionNames } from "../../Faction/data/FactionNames";
import { ITaskTracker } from "../ITaskTracker";
import { IPerson } from "../IPerson";
+import { use } from "../../ui/Context";
export function init(this: IPlayer): void {
/* Initialize Player's home computer */
@@ -468,7 +469,8 @@ export function gainIntelligenceExp(this: IPerson, exp: number): void {
console.error("ERROR: NaN passed into Player.gainIntelligenceExp()");
return;
}
- if (this.sourceFileLvl(5) > 0 || this.intelligence > 0) {
+ const player = use.Player();
+ if (player.sourceFileLvl(5) > 0 || this.intelligence > 0) {
this.intelligence_exp += exp;
this.intelligence = Math.floor(this.calculateSkill(this.intelligence_exp, 1));
}
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index 9d80e01e2..52a27dd69 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -1091,8 +1091,8 @@ export class Sleeve extends Person {
break;
case "Recruitment":
time = this.getBladeburnerActionTime(p, "General", action);
- const recruitTime = (p.bladeburner?.getRecruitmentTime(this) ?? 0) * 1000;
- this.gainRatesForTask.cha = 2 * BladeburnerConstants.BaseStatGain * recruitTime;
+ this.gainRatesForTask.cha =
+ 2 * BladeburnerConstants.BaseStatGain * (p.bladeburner?.getRecruitmentTime(this) ?? 0) * 1000;
this.currentTaskLocation = (p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0).toString() + "%";
break;
case "Diplomacy":
diff --git a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
index 355f17f43..2c5cba2c4 100644
--- a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
+++ b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
@@ -113,7 +113,7 @@ export function SleeveElem(props: IProps): React.ReactElement {
case SleeveTaskType.Gym:
desc = <>This sleeve is currently working out at {props.sleeve.currentTaskLocation}.>;
break;
- case SleeveTaskType.Bladeburner:
+ case SleeveTaskType.Bladeburner: {
let contract = "";
if (props.sleeve.bbContract !== "------") {
contract = ` - ${props.sleeve.bbContract} (Success Rate: ${props.sleeve.currentTaskLocation})`;
@@ -125,6 +125,7 @@ export function SleeveElem(props: IProps): React.ReactElement {
>
);
break;
+ }
case SleeveTaskType.Recovery:
desc = (
<>
diff --git a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
index 0e81213f5..a5fb04c59 100644
--- a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
+++ b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
@@ -236,7 +236,7 @@ const canDo: {
[CityName.Aevum, CityName.Sector12, CityName.Volhaven].includes(sleeve.city),
"Workout at Gym": (player: IPlayer, sleeve: Sleeve) =>
[CityName.Aevum, CityName.Sector12, CityName.Volhaven].includes(sleeve.city),
- "Perform Bladeburner Actions": (player: IPlayer, sleeve: Sleeve) => player.inBladeburner(),
+ "Perform Bladeburner Actions": (player: IPlayer, _: Sleeve) => player.inBladeburner(),
"Shock Recovery": (player: IPlayer, sleeve: Sleeve) => sleeve.shock < 100,
Synchronize: (player: IPlayer, sleeve: Sleeve) => sleeve.sync < 100,
};
From 9e6e97d1fb17df2650934f68196cad9d9818b9e5 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Thu, 14 Apr 2022 15:49:21 -0400
Subject: [PATCH 06/17] fmt and merge upstream
---
src/PersonObjects/Player/PlayerObject.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts
index 0e9563f3b..e09d82c5f 100644
--- a/src/PersonObjects/Player/PlayerObject.ts
+++ b/src/PersonObjects/Player/PlayerObject.ts
@@ -636,8 +636,7 @@ export class PlayerObject implements IPlayer {
return "Player";
}
-
- /**
+ /**
* Serialize the current object to a JSON save state.
*/
toJSON(): any {
From 5f467759509bcdc7051f0f583fc2783f963eb9bc Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Mon, 25 Apr 2022 13:41:43 -0400
Subject: [PATCH 07/17] Cant stop wont stop studying
Correct merge, and known bug that prevents stopping studying
---
src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx | 5 ++---
src/PersonObjects/Sleeve/Sleeve.ts | 2 +-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
index c7287064e..d293117de 100644
--- a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
+++ b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
@@ -67,7 +67,7 @@ import { achievements } from "../../Achievements/Achievements";
import { FactionNames } from "../../Faction/data/FactionNames";
import { ITaskTracker } from "../ITaskTracker";
import { IPerson } from "../IPerson";
-import { use } from "../../ui/Context";
+import { Player } from "../../Player";
import { graftingIntBonus } from "../Grafting/GraftingHelpers";
export function init(this: IPlayer): void {
@@ -470,8 +470,7 @@ export function gainIntelligenceExp(this: IPerson, exp: number): void {
console.error("ERROR: NaN passed into Player.gainIntelligenceExp()");
return;
}
- const player = use.Player();
- if (player.sourceFileLvl(5) > 0 || this.intelligence > 0) {
+ if (Player.sourceFileLvl(5) > 0 || this.intelligence > 0) {
this.intelligence_exp += exp;
this.intelligence = Math.floor(this.calculateSkill(this.intelligence_exp, 1));
}
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index 918ca11d7..335abeb5c 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -590,7 +590,7 @@ export class Sleeve extends Person {
// for, we need to reset the sleeve's task
if (p.gang) {
if (fac.name === p.gang.facName) {
- this.resetTaskStatus();
+ this.resetTaskStatus(p);
}
}
From d345188ccea73920cd162af80a41c90a41daeb60 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Mon, 25 Apr 2022 13:57:54 -0400
Subject: [PATCH 08/17] Address blackops error
Address blackops error by removing incorrect check for type
---
src/Bladeburner/Bladeburner.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx
index b7fa6664e..4ef0074bf 100644
--- a/src/Bladeburner/Bladeburner.tsx
+++ b/src/Bladeburner/Bladeburner.tsx
@@ -1678,7 +1678,7 @@ export class Bladeburner implements IBladeburner {
player.gainStats(retValue);
// Operation Daedalus
const action = this.getActionObject(this.action);
- if (action == null || !(action instanceof BlackOperation)) {
+ if (action == null) {
throw new Error("Failed to get BlackOperation Object for: " + this.action.name);
} else if (action.name === BlackOperationNames.OperationDaedalus && this.blackops[action.name]) {
this.resetAction();
From 46c6884c89c53f23b9bfc885ff8bf9fa7e363443 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Mon, 25 Apr 2022 15:48:02 -0400
Subject: [PATCH 09/17] Make Infiltrate synthoids a little more clear
By adding a short description
---
src/PersonObjects/Player/PlayerObjectGangMethods.ts | 4 +---
src/PersonObjects/Sleeve/Sleeve.ts | 1 +
src/PersonObjects/Sleeve/ui/SleeveElem.tsx | 8 +++++---
3 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/PersonObjects/Player/PlayerObjectGangMethods.ts b/src/PersonObjects/Player/PlayerObjectGangMethods.ts
index 02242d5ff..77568ee60 100644
--- a/src/PersonObjects/Player/PlayerObjectGangMethods.ts
+++ b/src/PersonObjects/Player/PlayerObjectGangMethods.ts
@@ -2,9 +2,7 @@ import { Factions } from "../../Faction/Factions";
import { Faction } from "../../Faction/Faction";
import { Gang } from "../../Gang/Gang";
import { IPlayer } from "../IPlayer";
-import { GangConstants } from "../../Gang/data/Constants"
-
-
+import { GangConstants } from "../../Gang/data/Constants";
export function canAccessGang(this: IPlayer): boolean {
if (this.bitNodeN === 2) {
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index 335abeb5c..e3088fe0f 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -1108,6 +1108,7 @@ export class Sleeve extends Person {
break;
case "Infiltrate synthoids":
time = 60000;
+ this.currentTaskLocation = "This will generate additional contracts and operations";
break;
case "Support main sleeve":
p.bladeburner?.sleeveSupport(true);
diff --git a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
index 2c5cba2c4..024d14830 100644
--- a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
+++ b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
@@ -114,14 +114,16 @@ export function SleeveElem(props: IProps): React.ReactElement {
desc = <>This sleeve is currently working out at {props.sleeve.currentTaskLocation}.>;
break;
case SleeveTaskType.Bladeburner: {
- let contract = "";
+ let message = "";
if (props.sleeve.bbContract !== "------") {
- contract = ` - ${props.sleeve.bbContract} (Success Rate: ${props.sleeve.currentTaskLocation})`;
+ message = ` - ${props.sleeve.bbContract} (Success Rate: ${props.sleeve.currentTaskLocation})`;
+ } else if (props.sleeve.currentTaskLocation !== "") {
+ message = props.sleeve.currentTaskLocation;
}
desc = (
<>
This sleeve is currently attempting to {props.sleeve.bbAction}
- {contract}
+ {message}
>
);
break;
From 7cf21629a7361cbc95fe2ba082c77c022be0b13f Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Sat, 30 Apr 2022 15:25:36 -0400
Subject: [PATCH 10/17] Address review
Add ns function setToBladeburnerAction
Formatting updates
fix sleeves using player stamina
Correct supporting sleeve causing error
---
src/Bladeburner/Bladeburner.tsx | 12 ++++---
src/Bladeburner/IBladeburner.ts | 2 +-
src/Netscript/RamCostGenerator.ts | 1 +
src/NetscriptFunctions/Sleeve.ts | 31 +++++++++++++++++
src/PersonObjects/Sleeve/Sleeve.ts | 36 ++++++++++++++------
src/PersonObjects/Sleeve/ui/SleeveElem.tsx | 3 +-
src/PersonObjects/Sleeve/ui/TaskSelector.tsx | 8 ++---
src/ScriptEditor/NetscriptDefinitions.d.ts | 14 ++++++++
src/utils/StringHelperFunctions.ts | 13 +++++++
9 files changed, 97 insertions(+), 23 deletions(-)
diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx
index 4ef0074bf..1dca43922 100644
--- a/src/Bladeburner/Bladeburner.tsx
+++ b/src/Bladeburner/Bladeburner.tsx
@@ -1264,7 +1264,7 @@ export class Bladeburner implements IBladeburner {
}
}
- completeAction(player: IPlayer, person: IPerson, actionIdent: IActionIdentifier): ITaskTracker {
+ completeAction(player: IPlayer, person: IPerson, actionIdent: IActionIdentifier, isPlayer = true): ITaskTracker {
let retValue = createTaskTracker();
switch (actionIdent.type) {
case ActionTypes["Contract"]:
@@ -1281,10 +1281,12 @@ export class Bladeburner implements IBladeburner {
difficulty / BladeburnerConstants.DiffMultLinearFactor;
const rewardMultiplier = Math.pow(action.rewardFac, action.level - 1);
- // Stamina loss is based on difficulty
- this.stamina -= BladeburnerConstants.BaseStaminaLoss * difficultyMultiplier;
- if (this.stamina < 0) {
- this.stamina = 0;
+ if (isPlayer) {
+ // Stamina loss is based on difficulty
+ this.stamina -= BladeburnerConstants.BaseStaminaLoss * difficultyMultiplier;
+ if (this.stamina < 0) {
+ this.stamina = 0;
+ }
}
// Process Contract/Operation success/failure
diff --git a/src/Bladeburner/IBladeburner.ts b/src/Bladeburner/IBladeburner.ts
index 65ecff71c..71849aac6 100644
--- a/src/Bladeburner/IBladeburner.ts
+++ b/src/Bladeburner/IBladeburner.ts
@@ -100,7 +100,7 @@ export interface IBladeburner {
completeOperation(success: boolean, player: IPlayer): void;
getActionObject(actionId: IActionIdentifier): IAction | null;
completeContract(success: boolean, actionIdent: IActionIdentifier): void;
- completeAction(player: IPlayer, person: IPerson, actionIdent: IActionIdentifier): ITaskTracker;
+ completeAction(player: IPlayer, person: IPerson, actionIdent: IActionIdentifier, isPlayer?: boolean): ITaskTracker;
infiltrateSynthoidCommunities(): void;
changeRank(player: IPlayer, change: number): void;
processAction(router: IRouter, player: IPlayer, seconds: number): void;
diff --git a/src/Netscript/RamCostGenerator.ts b/src/Netscript/RamCostGenerator.ts
index 9d9eef719..6cba2d99d 100644
--- a/src/Netscript/RamCostGenerator.ts
+++ b/src/Netscript/RamCostGenerator.ts
@@ -282,6 +282,7 @@ const sleeve: IMap = {
getSleeveAugmentations: RamCostConstants.ScriptSleeveBaseRamCost,
getSleevePurchasableAugs: RamCostConstants.ScriptSleeveBaseRamCost,
purchaseSleeveAug: RamCostConstants.ScriptSleeveBaseRamCost,
+ setToBladeburnerAction: RamCostConstants.ScriptSleeveBaseRamCost,
};
// Stanek API
diff --git a/src/NetscriptFunctions/Sleeve.ts b/src/NetscriptFunctions/Sleeve.ts
index ed58bbfdc..fa5575b0a 100644
--- a/src/NetscriptFunctions/Sleeve.ts
+++ b/src/NetscriptFunctions/Sleeve.ts
@@ -310,5 +310,36 @@ export function NetscriptSleeve(player: IPlayer, workerScript: WorkerScript, hel
return player.sleeves[sleeveNumber].tryBuyAugmentation(player, aug);
},
+ setToBladeburnerAction: function (_sleeveNumber: unknown, _action: unknown, _contract?: unknown): boolean {
+ updateRam("setToBladeburnerAction");
+ const sleeveNumber = helper.number("setToBladeburnerAction", "sleeveNumber", _sleeveNumber);
+ const action = helper.string("setToBladeburnerAction", "action", _action);
+ let contract: string;
+ if (typeof _contract === "undefined") {
+ contract = "------";
+ } else {
+ contract = helper.string("setToBladeburnerAction", "contract", _contract);
+ }
+ checkSleeveAPIAccess("setToBladeburnerAction");
+ checkSleeveNumber("setToBladeburnerAction", sleeveNumber);
+
+ // Cannot Take on Contracts if another sleeve is performing that action
+ if (action === "Take on contracts") {
+ for (let i = 0; i < player.sleeves.length; ++i) {
+ if (i === sleeveNumber) {
+ continue;
+ }
+ const other = player.sleeves[i];
+ if (other.currentTask === SleeveTaskType.Bladeburner && other.bbAction === action) {
+ throw helper.makeRuntimeErrorMsg(
+ "sleeve.setToBladeburnerAction",
+ `Sleeve ${sleeveNumber} cannot take of contracts because Sleeve ${i} is already performing that action.`,
+ );
+ }
+ }
+ }
+
+ return player.sleeves[sleeveNumber].bladeburner(player, action, contract);
+ },
};
}
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index e3088fe0f..52285a8af 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -35,6 +35,8 @@ import { LocationName } from "../../Locations/data/LocationNames";
import { Generic_fromJSON, Generic_toJSON, Reviver } from "../../utils/JSONReviver";
import { BladeburnerConstants } from "../../Bladeburner/data/Constants";
+import { numeralWrapper } from "../../ui/numeralFormat";
+import { capitalizeFirstLetter, capitalizeEachWord } from "../../utils/StringHelperFunctions";
export class Sleeve extends Person {
/**
@@ -221,6 +223,10 @@ export class Sleeve extends Person {
return retValue;
}
} else if (this.currentTask === SleeveTaskType.Bladeburner) {
+ if (this.currentTaskMaxTime === 0) {
+ this.currentTaskTime = 0;
+ return retValue;
+ }
// For bladeburner, all experience and money is gained at the end
const bb = p.bladeburner;
if (bb === null) {
@@ -236,10 +242,9 @@ export class Sleeve extends Person {
this.currentTaskTime = 0;
return retValue;
}
-
let type: string;
let name: string;
- if (this.bbAction === "Take on Contracts") {
+ if (this.bbAction === "Take on contracts") {
type = "Contracts";
name = this.bbContract;
} else {
@@ -257,7 +262,7 @@ export class Sleeve extends Person {
const action = bb.getActionObject(actionIdent);
if ((action?.count ?? 0) > 0) {
- const bbRetValue = bb.completeAction(p, this, actionIdent);
+ const bbRetValue = bb.completeAction(p, this, actionIdent, false);
if (bbRetValue) {
retValue = this.gainExperience(p, bbRetValue);
this.gainMoney(p, bbRetValue);
@@ -647,7 +652,8 @@ export class Sleeve extends Person {
if (this.currentTask == SleeveTaskType.Class) {
const retVal = createTaskTracker();
retVal.int = CONSTANTS.IntelligenceClassBaseExpGain * Math.round(this.currentTaskTime / 1000);
- this.gainExperience(p, retVal); //Wont be shared with other sleeves
+ const r = this.gainExperience(p, retVal);
+ p.sleeves.filter((s) => s != this).forEach((s) => s.gainExperience(p, r, 1, true));
}
this.earningsForTask = createTaskTracker();
this.gainRatesForTask = createTaskTracker();
@@ -660,7 +666,7 @@ export class Sleeve extends Person {
this.gymStatType = "";
this.className = "";
this.bbAction = "";
- this.bbContract = "";
+ this.bbContract = "------";
}
shockRecovery(p: IPlayer): boolean {
@@ -1091,8 +1097,10 @@ export class Sleeve extends Person {
this.currentTaskLocation = "";
let time = 0;
+
+ this.bbContract = "------";
switch (action) {
- case "Field Analysis":
+ case "Field analysis":
time = this.getBladeburnerActionTime(p, "General", action);
this.gainRatesForTask.hack = 20 * this.hacking_exp_mult;
this.gainRatesForTask.cha = 20 * this.charisma_exp_mult;
@@ -1101,7 +1109,9 @@ export class Sleeve extends Person {
time = this.getBladeburnerActionTime(p, "General", action);
this.gainRatesForTask.cha =
2 * BladeburnerConstants.BaseStatGain * (p.bladeburner?.getRecruitmentTime(this) ?? 0) * 1000;
- this.currentTaskLocation = (p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0).toString() + "%";
+ this.currentTaskLocation = `(Success Rate: ${numeralWrapper.formatPercentage(
+ this.recrutmentSuccessChance(p),
+ )})`;
break;
case "Diplomacy":
time = this.getBladeburnerActionTime(p, "General", action);
@@ -1114,20 +1124,24 @@ export class Sleeve extends Person {
p.bladeburner?.sleeveSupport(true);
time = 0;
break;
- case "Take on Contracts":
+ case "Take on contracts":
time = this.getBladeburnerActionTime(p, "Contracts", contract);
this.contractGainRates(p, "Contracts", contract);
this.currentTaskLocation = this.contractSuccessChance(p, "Contracts", contract);
+ this.bbContract = capitalizeEachWord(contract.toLowerCase());
break;
}
- this.bbAction = action;
- this.bbContract = contract;
+ this.bbAction = capitalizeFirstLetter(action.toLowerCase());
this.currentTaskMaxTime = time;
this.currentTask = SleeveTaskType.Bladeburner;
return true;
}
+ recrutmentSuccessChance(p: IPlayer): number {
+ return Math.max(0, Math.min(1, p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0));
+ }
+
contractSuccessChance(p: IPlayer, type: string, name: string): string {
const bb = p.bladeburner;
if (bb === null) {
@@ -1143,7 +1157,7 @@ export class Sleeve extends Person {
if (chances[0] >= 1) {
return "100%";
} else {
- return `${chances[0] * 100}% - ${chances[1] * 100}%`;
+ return `${numeralWrapper.formatPercentage(chances[0])} - ${numeralWrapper.formatPercentage(chances[1])}`;
}
}
diff --git a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
index 024d14830..21fb8ed92 100644
--- a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
+++ b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
@@ -122,8 +122,7 @@ export function SleeveElem(props: IProps): React.ReactElement {
}
desc = (
<>
- This sleeve is currently attempting to {props.sleeve.bbAction}
- {message}
+ This sleeve is currently attempting to {props.sleeve.bbAction}. {message}
>
);
break;
diff --git a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
index 2218bdef8..fbd40e280 100644
--- a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
+++ b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx
@@ -23,12 +23,12 @@ const universitySelectorOptions: string[] = [
const gymSelectorOptions: string[] = ["Train Strength", "Train Defense", "Train Dexterity", "Train Agility"];
const bladeburnerSelectorOptions: string[] = [
- "Field Analysis",
+ "Field analysis",
"Recruitment",
"Diplomacy",
"Infiltrate synthoids",
"Support main sleeve",
- "Take on Contracts",
+ "Take on contracts",
];
interface IProps {
@@ -101,7 +101,7 @@ function possibleContracts(player: IPlayer, sleeve: Sleeve): string[] {
if (sleeve === otherSleeve) {
continue;
}
- if (otherSleeve.currentTask === SleeveTaskType.Bladeburner && otherSleeve.bbAction == "Take on Contracts") {
+ if (otherSleeve.currentTask === SleeveTaskType.Bladeburner && otherSleeve.bbAction == "Take on contracts") {
contracts = contracts.filter((x) => x != otherSleeve.bbContract);
}
}
@@ -202,7 +202,7 @@ const tasks: {
return {
first: bladeburnerSelectorOptions,
second: (s1: string) => {
- if (s1 === "Take on Contracts") {
+ if (s1 === "Take on contracts") {
return possibleContracts(player, sleeve);
} else {
return ["------"];
diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts
index e98b03557..cc649032a 100644
--- a/src/ScriptEditor/NetscriptDefinitions.d.ts
+++ b/src/ScriptEditor/NetscriptDefinitions.d.ts
@@ -3777,6 +3777,20 @@ export interface Sleeve {
* @returns True if the aug was purchased and installed on the sleeve, false otherwise.
*/
purchaseSleeveAug(sleeveNumber: number, augName: string): boolean;
+
+ /**
+ * Set a sleeve to perform bladeburner actions.
+ * @remarks
+ * RAM cost: 4 GB
+ *
+ * Return a boolean indicating whether or not the sleeve started working out.
+ *
+ * @param sleeveNumber - Index of the sleeve to workout at the gym.
+ * @param action - Name of the action to be performed.
+ * @param contract - Name of the contract if applicable.
+ * @returns True if the sleeve started working out, false otherwise.
+ */
+ setToBladeburnerAction(sleeveNumber: number, action: string, contract?: string): boolean;
}
/**
diff --git a/src/utils/StringHelperFunctions.ts b/src/utils/StringHelperFunctions.ts
index 58c685871..60bc09d6e 100644
--- a/src/utils/StringHelperFunctions.ts
+++ b/src/utils/StringHelperFunctions.ts
@@ -117,6 +117,17 @@ function cyrb53(str: string, seed = 0): string {
return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(16);
}
+function capitalizeFirstLetter(s: string): string {
+ return s.charAt(0).toUpperCase() + s.slice(1);
+}
+
+function capitalizeEachWord(s: string): string {
+ return s
+ .split(" ")
+ .map((word) => capitalizeFirstLetter(word))
+ .join(" ");
+}
+
export {
convertTimeMsToTimeElapsedString,
longestCommonStart,
@@ -124,4 +135,6 @@ export {
formatNumber,
generateRandomString,
cyrb53,
+ capitalizeFirstLetter,
+ capitalizeEachWord,
};
From e12bb6cf4bc466a2c716989c71e8f0e5354787b4 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Sat, 30 Apr 2022 15:31:36 -0400
Subject: [PATCH 11/17] Make lint happy
---
src/Faction/ui/FactionRoot.tsx | 5 +----
src/index.tsx | 1 -
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/Faction/ui/FactionRoot.tsx b/src/Faction/ui/FactionRoot.tsx
index 4410e5bdb..bcb37a563 100644
--- a/src/Faction/ui/FactionRoot.tsx
+++ b/src/Faction/ui/FactionRoot.tsx
@@ -16,12 +16,10 @@ import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
import { Faction } from "../Faction";
import { use } from "../../ui/Context";
-import { CreateGangModal } from "./CreateGangModal";
-import { Box, Paper, Typography, Button, Tooltip } from "@mui/material";
+import { Typography, Button } from "@mui/material";
import { CovenantPurchasesRoot } from "../../PersonObjects/Sleeve/ui/CovenantPurchasesRoot";
import { FactionNames } from "../data/FactionNames";
-import { GangConstants } from "../../Gang/data/Constants";
import { GangButton } from "./GangButton";
type IProps = {
@@ -30,7 +28,6 @@ type IProps = {
};
// Info text for all options on the UI
-const gangInfo = "Create and manage a gang for this Faction. Gangs will earn you money and faction reputation";
const hackingContractsInfo =
"Complete hacking contracts for your faction. " +
"Your effectiveness, which determines how much " +
diff --git a/src/index.tsx b/src/index.tsx
index 38aba9a58..db30c785c 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -4,7 +4,6 @@ import ReactDOM from "react-dom";
import { TTheme as Theme, ThemeEvents, refreshTheme } from "./Themes/ui/Theme";
import { LoadingScreen } from "./ui/LoadingScreen";
import { initElectron } from "./Electron";
-import { AlertEvents } from "./ui/React/AlertManager";
initElectron();
globalThis["React"] = React;
globalThis["ReactDOM"] = ReactDOM;
From 30521468fc695c39d81f4bb9d2dbf494b747a9a5 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Fri, 6 May 2022 22:44:37 -0400
Subject: [PATCH 12/17] Merge dev
---
package-lock.json | 1373 +++++++++++++++------------------------------
1 file changed, 465 insertions(+), 908 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 77b1d9de3..d753cff81 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,8 +17,7 @@
"@mui/icons-material": "^5.0.3",
"@mui/material": "^5.0.3",
"@mui/styles": "^5.0.1",
- "@types/bcrypt": "^5.0.0",
- "@types/bcryptjs": "^2.4.2",
+ "@mui/system": "^5.0.3",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^5.0.0",
@@ -26,10 +25,8 @@
"better-react-mathjax": "^1.0.3",
"clsx": "^1.1.1",
"date-fns": "^2.25.0",
- "electron-config": "^2.0.0",
"escodegen": "^1.11.0",
"file-saver": "^1.3.8",
- "fs": "^0.0.1-security",
"jquery": "^3.5.0",
"js-sha256": "^0.9.0",
"jszip": "^3.7.0",
@@ -56,22 +53,24 @@
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.1",
"@testing-library/cypress": "^8.0.1",
"@types/acorn": "^4.0.6",
+ "@types/bcryptjs": "^2.4.2",
"@types/escodegen": "^0.0.7",
"@types/file-saver": "^2.0.3",
+ "@types/jquery": "^3.5.14",
"@types/lodash": "^4.14.168",
- "@types/numeral": "0.0.25",
+ "@types/numeral": "^2.0.2",
"@types/react": "^17.0.21",
"@types/react-beautiful-dnd": "^13.1.2",
"@types/react-dom": "^17.0.9",
"@types/react-resizable": "^1.7.3",
- "@typescript-eslint/eslint-plugin": "^4.22.0",
- "@typescript-eslint/parser": "^4.22.0",
+ "@typescript-eslint/eslint-plugin": "^5.20.0",
+ "@typescript-eslint/parser": "^5.20.0",
"babel-jest": "^27.0.6",
"babel-loader": "^8.0.5",
"cypress": "^8.3.1",
"electron": "^14.2.4",
"electron-packager": "^15.4.0",
- "eslint": "^7.24.0",
+ "eslint": "^8.13.0",
"file-loader": "^6.2.0",
"fork-ts-checker-webpack-plugin": "^6.3.3",
"html-webpack-plugin": "^3.2.0",
@@ -83,17 +82,15 @@
"prettier": "^2.3.2",
"raw-loader": "^4.0.2",
"react-refresh": "^0.10.0",
- "regenerator-runtime": "^0.13.9",
"source-map": "^0.7.3",
"start-server-and-test": "^1.14.0",
"typescript": "^4.2.4",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12",
- "webpack-dev-middleware": "^3.7.3",
"webpack-dev-server": "^3.11.2"
},
"engines": {
- "node": ">=8 || <=9"
+ "node": ">=14"
}
},
"node_modules/@babel/code-frame": {
@@ -2071,29 +2068,35 @@
"integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"node_modules/@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
+ "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
+ "debug": "^4.3.2",
+ "espree": "^9.3.1",
"globals": "^13.9.0",
- "ignore": "^4.0.6",
+ "ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -2105,13 +2108,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
- "engines": {
- "node": ">= 4"
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
@@ -2142,12 +2148,12 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
"dev": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.0",
+ "@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
},
@@ -2156,9 +2162,9 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
"node_modules/@istanbuljs/load-nyc-config": {
@@ -3980,18 +3986,11 @@
"@babel/types": "^7.3.0"
}
},
- "node_modules/@types/bcrypt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz",
- "integrity": "sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/bcryptjs": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
- "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ=="
+ "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==",
+ "dev": true
},
"node_modules/@types/escodegen": {
"version": "0.0.7",
@@ -4063,6 +4062,15 @@
"@types/istanbul-lib-report": "*"
}
},
+ "node_modules/@types/jquery": {
+ "version": "3.5.14",
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz",
+ "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==",
+ "dev": true,
+ "dependencies": {
+ "@types/sizzle": "*"
+ }
+ },
"node_modules/@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -4084,12 +4092,13 @@
"node_modules/@types/node": {
"version": "16.10.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.4.tgz",
- "integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA=="
+ "integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA==",
+ "dev": true
},
"node_modules/@types/numeral": {
- "version": "0.0.25",
- "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-0.0.25.tgz",
- "integrity": "sha512-ShHzHkYD+Ldw3eyttptCpUhF1/mkInWwasQkCNXZHOsJMJ/UMa8wXrxSrTJaVk0r4pLK/VnESVM0wFsfQzNEKQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.2.tgz",
+ "integrity": "sha512-A8F30k2gYJ/6e07spSCPpkuZu79LCnkPTvqmIWQzNGcrzwFKpVOydG41lNt5wZXjSI149qjyzC2L1+F2PD/NUA==",
"dev": true
},
"node_modules/@types/parse-json": {
@@ -4221,30 +4230,31 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
- "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz",
+ "integrity": "sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/experimental-utils": "4.33.0",
- "@typescript-eslint/scope-manager": "4.33.0",
- "debug": "^4.3.1",
+ "@typescript-eslint/scope-manager": "5.21.0",
+ "@typescript-eslint/type-utils": "5.21.0",
+ "@typescript-eslint/utils": "5.21.0",
+ "debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
- "regexpp": "^3.1.0",
+ "regexpp": "^3.2.0",
"semver": "^7.3.5",
"tsutils": "^3.21.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^4.0.0",
- "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -4267,50 +4277,26 @@
"node": ">=10"
}
},
- "node_modules/@typescript-eslint/experimental-utils": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
- "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.7",
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "*"
- }
- },
"node_modules/@typescript-eslint/parser": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
- "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz",
+ "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
- "debug": "^4.3.1"
+ "@typescript-eslint/scope-manager": "5.21.0",
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/typescript-estree": "5.21.0",
+ "debug": "^4.3.2"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -4319,29 +4305,55 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
- "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz",
+ "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0"
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/visitor-keys": "5.21.0"
},
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz",
+ "integrity": "sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "5.21.0",
+ "debug": "^4.3.2",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@typescript-eslint/types": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
- "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz",
+ "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==",
"dev": true,
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"type": "opencollective",
@@ -4349,21 +4361,21 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
- "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz",
+ "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0",
- "debug": "^4.3.1",
- "globby": "^11.0.3",
- "is-glob": "^4.0.1",
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/visitor-keys": "5.21.0",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "is-glob": "^4.0.3",
"semver": "^7.3.5",
"tsutils": "^3.21.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"type": "opencollective",
@@ -4376,9 +4388,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -4390,17 +4402,41 @@
"node": ">=10"
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
- "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.21.0.tgz",
+ "integrity": "sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "4.33.0",
- "eslint-visitor-keys": "^2.0.0"
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.21.0",
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/typescript-estree": "5.21.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
},
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz",
+ "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.21.0",
+ "eslint-visitor-keys": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"type": "opencollective",
@@ -4614,9 +4650,9 @@
}
},
"node_modules/acorn": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
- "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
"bin": {
"acorn": "bin/acorn"
},
@@ -6509,58 +6545,6 @@
"safe-buffer": "~5.1.0"
}
},
- "node_modules/conf": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz",
- "integrity": "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==",
- "dependencies": {
- "dot-prop": "^4.1.0",
- "env-paths": "^1.0.0",
- "make-dir": "^1.0.0",
- "pkg-up": "^2.0.0",
- "write-file-atomic": "^2.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conf/node_modules/env-paths": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
- "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conf/node_modules/make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conf/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conf/node_modules/write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
"node_modules/config-chain": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
@@ -7745,17 +7729,6 @@
"webidl-conversions": "^4.0.2"
}
},
- "node_modules/dot-prop": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
- "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
- "dependencies": {
- "is-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@@ -7844,15 +7817,6 @@
"node": ">= 8.6"
}
},
- "node_modules/electron-config": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/electron-config/-/electron-config-2.0.0.tgz",
- "integrity": "sha512-5mGwRK4lsAo6tiy4KNF/zUInYpUGr7JJzLA8FHOoqBWV3kkKJWSrDXo4Uk2Ffm5aeQ1o73XuorfkYhaWFV2O4g==",
- "deprecated": "Renamed to `electron-store`.",
- "dependencies": {
- "conf": "^1.0.0"
- }
- },
"node_modules/electron-notarize": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz",
@@ -8280,49 +8244,44 @@
}
},
"node_modules/eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
+ "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
+ "@eslint/eslintrc": "^1.2.2",
+ "@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
+ "glob-parent": "^6.0.1",
"globals": "^13.6.0",
- "ignore": "^4.0.6",
+ "ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
@@ -8330,7 +8289,7 @@
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -8367,7 +8326,7 @@
"eslint": ">=5"
}
},
- "node_modules/eslint-visitor-keys": {
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
@@ -8376,13 +8335,13 @@
"node": ">=10"
}
},
- "node_modules/eslint/node_modules/@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
"dev": true,
- "dependencies": {
- "@babel/highlight": "^7.10.4"
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/eslint/node_modules/ansi-styles": {
@@ -8400,6 +8359,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/eslint/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"node_modules/eslint/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -8434,28 +8399,38 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/eslint/node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
"dev": true,
"dependencies": {
- "eslint-visitor-keys": "^1.1.0"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"engines": {
- "node": ">=4"
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
}
},
"node_modules/eslint/node_modules/globals": {
@@ -8482,13 +8457,16 @@
"node": ">=8"
}
},
- "node_modules/eslint/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "node_modules/eslint/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
- "engines": {
- "node": ">= 4"
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
"node_modules/eslint/node_modules/optionator": {
@@ -8508,21 +8486,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/eslint/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -8556,38 +8519,17 @@
}
},
"node_modules/espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
"dev": true,
"dependencies": {
- "acorn": "^7.4.0",
+ "acorn": "^8.7.0",
"acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/espree/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/esprima": {
@@ -9139,9 +9081,9 @@
"dev": true
},
"node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
@@ -9151,7 +9093,7 @@
"micromatch": "^4.0.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=8.6.0"
}
},
"node_modules/fast-json-stable-stringify": {
@@ -9961,11 +9903,6 @@
"safe-buffer": "~5.1.0"
}
},
- "node_modules/fs": {
- "version": "0.0.1-security",
- "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
- "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
- },
"node_modules/fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -10360,16 +10297,16 @@
}
},
"node_modules/globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
"slash": "^3.0.0"
},
"engines": {
@@ -10416,7 +10353,8 @@
"node_modules/graceful-fs": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+ "dev": true
},
"node_modules/handle-thing": {
"version": "2.0.1",
@@ -11172,9 +11110,9 @@
"dev": true
},
"node_modules/ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -11237,6 +11175,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
"engines": {
"node": ">=0.8.19"
}
@@ -11612,14 +11551,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-path-cwd": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@@ -14554,12 +14485,6 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -14596,12 +14521,6 @@
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
"dev": true
},
- "node_modules/lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
- "dev": true
- },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -16417,78 +16336,6 @@
"node": ">=8"
}
},
- "node_modules/pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
- "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
- "dependencies": {
- "find-up": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/plist": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
@@ -17581,15 +17428,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
@@ -18217,7 +18055,8 @@
"node_modules/signal-exit": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ=="
+ "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
+ "dev": true
},
"node_modules/sisteransi": {
"version": "1.0.5",
@@ -19292,95 +19131,6 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
- "node_modules/table": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
- "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/table/node_modules/ajv": {
- "version": "8.6.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
- "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/table/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/table/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/table/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/table/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/table/node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
"node_modules/tapable": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
@@ -24014,36 +23764,45 @@
"integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
+ "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
+ "debug": "^4.3.2",
+ "espree": "^9.3.1",
"globals": "^13.9.0",
- "ignore": "^4.0.6",
+ "ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
},
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
},
"type-fest": {
"version": "0.20.2",
@@ -24069,20 +23828,20 @@
}
},
"@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
"dev": true,
"requires": {
- "@humanwhocodes/object-schema": "^1.2.0",
+ "@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
}
},
"@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
"@istanbuljs/load-nyc-config": {
@@ -25370,18 +25129,11 @@
"@babel/types": "^7.3.0"
}
},
- "@types/bcrypt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz",
- "integrity": "sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/bcryptjs": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
- "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ=="
+ "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==",
+ "dev": true
},
"@types/escodegen": {
"version": "0.0.7",
@@ -25453,6 +25205,15 @@
"@types/istanbul-lib-report": "*"
}
},
+ "@types/jquery": {
+ "version": "3.5.14",
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz",
+ "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==",
+ "dev": true,
+ "requires": {
+ "@types/sizzle": "*"
+ }
+ },
"@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -25474,12 +25235,13 @@
"@types/node": {
"version": "16.10.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.4.tgz",
- "integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA=="
+ "integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA==",
+ "dev": true
},
"@types/numeral": {
- "version": "0.0.25",
- "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-0.0.25.tgz",
- "integrity": "sha512-ShHzHkYD+Ldw3eyttptCpUhF1/mkInWwasQkCNXZHOsJMJ/UMa8wXrxSrTJaVk0r4pLK/VnESVM0wFsfQzNEKQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.2.tgz",
+ "integrity": "sha512-A8F30k2gYJ/6e07spSCPpkuZu79LCnkPTvqmIWQzNGcrzwFKpVOydG41lNt5wZXjSI149qjyzC2L1+F2PD/NUA==",
"dev": true
},
"@types/parse-json": {
@@ -25611,17 +25373,18 @@
}
},
"@typescript-eslint/eslint-plugin": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
- "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz",
+ "integrity": "sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "4.33.0",
- "@typescript-eslint/scope-manager": "4.33.0",
- "debug": "^4.3.1",
+ "@typescript-eslint/scope-manager": "5.21.0",
+ "@typescript-eslint/type-utils": "5.21.0",
+ "@typescript-eslint/utils": "5.21.0",
+ "debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
- "regexpp": "^3.1.0",
+ "regexpp": "^3.2.0",
"semver": "^7.3.5",
"tsutils": "^3.21.0"
},
@@ -25637,82 +25400,93 @@
}
}
},
- "@typescript-eslint/experimental-utils": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
- "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
+ "@typescript-eslint/parser": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz",
+ "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.7",
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
+ "@typescript-eslint/scope-manager": "5.21.0",
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/typescript-estree": "5.21.0",
+ "debug": "^4.3.2"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz",
+ "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/visitor-keys": "5.21.0"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz",
+ "integrity": "sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/utils": "5.21.0",
+ "debug": "^4.3.2",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz",
+ "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz",
+ "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/visitor-keys": "5.21.0",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.21.0.tgz",
+ "integrity": "sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.21.0",
+ "@typescript-eslint/types": "5.21.0",
+ "@typescript-eslint/typescript-estree": "5.21.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
}
},
- "@typescript-eslint/parser": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
- "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
- "debug": "^4.3.1"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
- "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
- "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
- "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0",
- "debug": "^4.3.1",
- "globby": "^11.0.3",
- "is-glob": "^4.0.1",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
"@typescript-eslint/visitor-keys": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
- "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz",
+ "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "4.33.0",
- "eslint-visitor-keys": "^2.0.0"
+ "@typescript-eslint/types": "5.21.0",
+ "eslint-visitor-keys": "^3.0.0"
}
},
"@webassemblyjs/ast": {
@@ -25919,9 +25693,9 @@
}
},
"acorn": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
- "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q=="
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
},
"acorn-globals": {
"version": "4.3.4",
@@ -27447,48 +27221,6 @@
}
}
},
- "conf": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz",
- "integrity": "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==",
- "requires": {
- "dot-prop": "^4.1.0",
- "env-paths": "^1.0.0",
- "make-dir": "^1.0.0",
- "pkg-up": "^2.0.0",
- "write-file-atomic": "^2.3.0"
- },
- "dependencies": {
- "env-paths": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
- "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA="
- },
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- },
- "write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- }
- }
- },
"config-chain": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
@@ -28440,14 +28172,6 @@
"webidl-conversions": "^4.0.2"
}
},
- "dot-prop": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
- "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
"duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@@ -28566,14 +28290,6 @@
}
}
},
- "electron-config": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/electron-config/-/electron-config-2.0.0.tgz",
- "integrity": "sha512-5mGwRK4lsAo6tiy4KNF/zUInYpUGr7JJzLA8FHOoqBWV3kkKJWSrDXo4Uk2Ffm5aeQ1o73XuorfkYhaWFV2O4g==",
- "requires": {
- "conf": "^1.0.0"
- }
- },
"electron-notarize": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz",
@@ -28890,62 +28606,48 @@
}
},
"eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
+ "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
"dev": true,
"requires": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
+ "@eslint/eslintrc": "^1.2.2",
+ "@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
+ "glob-parent": "^6.0.1",
"globals": "^13.6.0",
- "ignore": "^4.0.6",
+ "ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -28955,6 +28657,12 @@
"color-convert": "^2.0.1"
}
},
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -28980,21 +28688,29 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
}
},
"globals": {
@@ -29012,11 +28728,14 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
},
"optionator": {
"version": "0.9.1",
@@ -29032,15 +28751,6 @@
"word-wrap": "^1.2.3"
}
},
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -29075,12 +28785,20 @@
"dev": true,
"requires": {
"eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
}
},
"eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
"dev": true
},
"esm": {
@@ -29089,28 +28807,14 @@
"integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
},
"espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
"dev": true,
"requires": {
- "acorn": "^7.4.0",
+ "acorn": "^8.7.0",
"acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
- },
- "dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
+ "eslint-visitor-keys": "^3.3.0"
}
},
"esprima": {
@@ -29558,9 +29262,9 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
@@ -30206,11 +29910,6 @@
}
}
},
- "fs": {
- "version": "0.0.1-security",
- "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
- "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
- },
"fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -30533,16 +30232,16 @@
}
},
"globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
"requires": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
"slash": "^3.0.0"
}
},
@@ -30579,7 +30278,8 @@
"graceful-fs": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+ "dev": true
},
"handle-thing": {
"version": "2.0.1",
@@ -31196,9 +30896,9 @@
"dev": true
},
"ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
"dev": true
},
"immediate": {
@@ -31241,7 +30941,8 @@
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
},
"indent-string": {
"version": "4.0.0",
@@ -31503,11 +31204,6 @@
"has-tostringtag": "^1.0.0"
}
},
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
- },
"is-path-cwd": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@@ -33746,12 +33442,6 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -33788,12 +33478,6 @@
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
"dev": true
},
- "lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
- "dev": true
- },
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -35216,59 +34900,6 @@
}
}
},
- "pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
- "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
- "requires": {
- "find-up": "^2.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- }
- }
- },
"plist": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
@@ -36116,12 +35747,6 @@
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true
- },
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
@@ -36635,7 +36260,8 @@
"signal-exit": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ=="
+ "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
+ "dev": true
},
"sisteransi": {
"version": "1.0.5",
@@ -37529,75 +37155,6 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
- "table": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
- "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==",
- "dev": true,
- "requires": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ajv": {
- "version": "8.6.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
- "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- }
- }
- }
- },
"tapable": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
From b683bc0340805c59b471cdac0838bc54b8edc503 Mon Sep 17 00:00:00 2001
From: rderfler <44448965+rderfler@users.noreply.github.com>
Date: Sun, 8 May 2022 14:14:05 -0400
Subject: [PATCH 13/17] fmt
---
src/PersonObjects/Sleeve/ui/SleeveElem.tsx | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
index f195bdb08..cc87927d3 100644
--- a/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
+++ b/src/PersonObjects/Sleeve/ui/SleeveElem.tsx
@@ -186,14 +186,14 @@ export function SleeveElem(props: IProps): React.ReactElement {
{desc}
{(props.sleeve.currentTask === SleeveTaskType.Crime ||
- props.sleeve.currentTask === SleeveTaskType.Bladeburner) &&
- props.sleeve.currentTaskMaxTime > 0 && (
-
- )}
+ props.sleeve.currentTask === SleeveTaskType.Bladeburner) &&
+ props.sleeve.currentTaskMaxTime > 0 && (
+
+ )}
From 42dcbf889e62b30fa6ac49827827f462d6948608 Mon Sep 17 00:00:00 2001
From: Olivier Gagnon
Date: Fri, 20 May 2022 17:28:21 -0400
Subject: [PATCH 14/17] fix typo
---
src/NetscriptFunctions/Singularity.ts | 12 ++----------
src/PersonObjects/Sleeve/Sleeve.ts | 4 ++--
2 files changed, 4 insertions(+), 12 deletions(-)
diff --git a/src/NetscriptFunctions/Singularity.ts b/src/NetscriptFunctions/Singularity.ts
index aea458c1f..0d8c04e77 100644
--- a/src/NetscriptFunctions/Singularity.ts
+++ b/src/NetscriptFunctions/Singularity.ts
@@ -487,16 +487,8 @@ export function NetscriptSingularity(player: IPlayer, workerScript: WorkerScript
}
player.loseMoney(CONSTANTS.TorRouterCost, "other");
- const darkweb = safetlyCreateUniqueServer({
- ip: createUniqueRandomIp(),
- hostname: "darkweb",
- organizationName: "",
- isConnectedTo: false,
- adminRights: false,
- purchasedByPlayer: false,
- maxRam: 1,
- });
- AddToAllServers(darkweb);
+ const darkweb = GetServer(SpecialServers.DarkWeb);
+ if (!darkweb) throw _ctx.makeRuntimeErrorMsg("DarkWeb was not a server but should have been");
player.getHomeComputer().serversOnNetwork.push(darkweb.hostname);
darkweb.serversOnNetwork.push(player.getHomeComputer().hostname);
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index 55797c227..dd7312729 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -1110,7 +1110,7 @@ export class Sleeve extends Person {
this.gainRatesForTask.cha =
2 * BladeburnerConstants.BaseStatGain * (p.bladeburner?.getRecruitmentTime(this) ?? 0) * 1000;
this.currentTaskLocation = `(Success Rate: ${numeralWrapper.formatPercentage(
- this.recrutmentSuccessChance(p),
+ this.recruitmentSuccessChance(p),
)})`;
break;
case "Diplomacy":
@@ -1138,7 +1138,7 @@ export class Sleeve extends Person {
return true;
}
- recrutmentSuccessChance(p: IPlayer): number {
+ recruitmentSuccessChance(p: IPlayer): number {
return Math.max(0, Math.min(1, p.bladeburner?.getRecruitmentSuccessChance(this) ?? 0));
}
From 34b099c050a603b4d3835c7f8c2f1b4962a12cfa Mon Sep 17 00:00:00 2001
From: Olivier Gagnon
Date: Fri, 20 May 2022 17:44:20 -0400
Subject: [PATCH 15/17] rm reviver from person
---
src/PersonObjects/Person.ts | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/PersonObjects/Person.ts b/src/PersonObjects/Person.ts
index 560ad0d99..69b077843 100644
--- a/src/PersonObjects/Person.ts
+++ b/src/PersonObjects/Person.ts
@@ -354,5 +354,3 @@ export abstract class Person implements IPerson {
abstract whoAmI(): string;
}
-
-Reviver.constructors.Person = Person;
From 27a8582df8863631d9215f5eefc2db2ab33fd736 Mon Sep 17 00:00:00 2001
From: Olivier Gagnon
Date: Fri, 20 May 2022 18:18:42 -0400
Subject: [PATCH 16/17] balance infiltrate synthoids
---
package-lock.json | 312 +-----------------
src/Bladeburner/Bladeburner.tsx | 12 +-
src/Bladeburner/IBladeburner.ts | 2 +-
src/Hospital/Hospital.ts | 5 +-
src/PersonObjects/IPerson.ts | 4 +-
src/PersonObjects/IPlayer.ts | 2 -
src/PersonObjects/Person.ts | 223 ++++---------
.../Player/PlayerObjectGeneralMethods.tsx | 2 +-
src/PersonObjects/Sleeve/Sleeve.ts | 2 +-
9 files changed, 76 insertions(+), 488 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 726c44698..4f90b38cf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bitburner",
- "version": "1.6.4",
+ "version": "1.7.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "bitburner",
- "version": "1.6.4",
+ "version": "1.7.0",
"hasInstallScript": true,
"license": "SEE LICENSE IN license.txt",
"dependencies": {
@@ -56,10 +56,7 @@
"@types/bcryptjs": "^2.4.2",
"@types/escodegen": "^0.0.7",
"@types/file-saver": "^2.0.3",
-<<<<<<< HEAD
-=======
"@types/jest": "^27.4.1",
->>>>>>> dev
"@types/jquery": "^3.5.14",
"@types/lodash": "^4.14.168",
"@types/numeral": "^2.0.2",
@@ -2072,33 +2069,19 @@
"integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"node_modules/@eslint/eslintrc": {
-<<<<<<< HEAD
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
- "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
-=======
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz",
"integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==",
->>>>>>> dev
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
-<<<<<<< HEAD
- "espree": "^9.3.1",
-=======
"espree": "^9.3.2",
->>>>>>> dev
"globals": "^13.9.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
-<<<<<<< HEAD
- "minimatch": "^3.0.4",
-=======
"minimatch": "^3.1.2",
->>>>>>> dev
"strip-json-comments": "^3.1.1"
},
"engines": {
@@ -2112,15 +2095,9 @@
"dev": true
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
-<<<<<<< HEAD
- "version": "13.13.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
- "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
-=======
"version": "13.15.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
"integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
->>>>>>> dev
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -4086,8 +4063,6 @@
"@types/istanbul-lib-report": "*"
}
},
-<<<<<<< HEAD
-=======
"node_modules/@types/jest": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.1.tgz",
@@ -4098,7 +4073,6 @@
"pretty-format": "^27.0.0"
}
},
->>>>>>> dev
"node_modules/@types/jquery": {
"version": "3.5.14",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz",
@@ -4267,21 +4241,6 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz",
- "integrity": "sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "5.21.0",
- "@typescript-eslint/type-utils": "5.21.0",
- "@typescript-eslint/utils": "5.21.0",
- "debug": "^4.3.2",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.2.0",
- "semver": "^7.3.5",
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.25.0.tgz",
"integrity": "sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==",
@@ -4295,7 +4254,6 @@
"ignore": "^5.2.0",
"regexpp": "^3.2.0",
"semver": "^7.3.7",
->>>>>>> dev
"tsutils": "^3.21.0"
},
"engines": {
@@ -4348,17 +4306,6 @@
}
},
"node_modules/@typescript-eslint/parser": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz",
- "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "5.21.0",
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/typescript-estree": "5.21.0",
- "debug": "^4.3.2"
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.25.0.tgz",
"integrity": "sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==",
@@ -4368,7 +4315,6 @@
"@typescript-eslint/types": "5.25.0",
"@typescript-eslint/typescript-estree": "5.25.0",
"debug": "^4.3.4"
->>>>>>> dev
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4386,18 +4332,6 @@
}
}
},
-<<<<<<< HEAD
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz",
- "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/visitor-keys": "5.21.0"
- },
- "engines": {
-=======
"node_modules/@typescript-eslint/parser/node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -4443,38 +4377,11 @@
"tsutils": "^3.21.0"
},
"engines": {
->>>>>>> dev
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
-<<<<<<< HEAD
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz",
- "integrity": "sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/utils": "5.21.0",
- "debug": "^4.3.2",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
-=======
},
"peerDependencies": {
"eslint": "*"
@@ -4498,21 +4405,14 @@
},
"peerDependenciesMeta": {
"supports-color": {
->>>>>>> dev
"optional": true
}
}
},
"node_modules/@typescript-eslint/types": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz",
- "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==",
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.25.0.tgz",
"integrity": "sha512-7fWqfxr0KNHj75PFqlGX24gWjdV/FDBABXL5dyvBOWHpACGyveok8Uj4ipPX/1fGU63fBkzSIycEje4XsOxUFA==",
->>>>>>> dev
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4523,19 +4423,6 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz",
- "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/visitor-keys": "5.21.0",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
- "is-glob": "^4.0.3",
- "semver": "^7.3.5",
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.25.0.tgz",
"integrity": "sha512-MrPODKDych/oWs/71LCnuO7NyR681HuBly2uLnX3r5i4ME7q/yBqC4hW33kmxtuauLTM0OuBOhhkFaxCCOjEEw==",
@@ -4547,7 +4434,6 @@
"globby": "^11.1.0",
"is-glob": "^4.0.3",
"semver": "^7.3.7",
->>>>>>> dev
"tsutils": "^3.21.0"
},
"engines": {
@@ -4596,17 +4482,6 @@
}
},
"node_modules/@typescript-eslint/utils": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.21.0.tgz",
- "integrity": "sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.21.0",
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/typescript-estree": "5.21.0",
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.25.0.tgz",
"integrity": "sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==",
@@ -4616,7 +4491,6 @@
"@typescript-eslint/scope-manager": "5.25.0",
"@typescript-eslint/types": "5.25.0",
"@typescript-eslint/typescript-estree": "5.25.0",
->>>>>>> dev
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -4632,15 +4506,6 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz",
- "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.21.0",
- "eslint-visitor-keys": "^3.0.0"
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.25.0.tgz",
"integrity": "sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA==",
@@ -4648,7 +4513,6 @@
"dependencies": {
"@typescript-eslint/types": "5.25.0",
"eslint-visitor-keys": "^3.3.0"
->>>>>>> dev
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4865,15 +4729,9 @@
}
},
"node_modules/acorn": {
-<<<<<<< HEAD
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
-=======
"version": "8.7.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
"integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
->>>>>>> dev
"bin": {
"acorn": "bin/acorn"
},
@@ -8465,21 +8323,12 @@
}
},
"node_modules/eslint": {
-<<<<<<< HEAD
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
- "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
- "dev": true,
- "dependencies": {
- "@eslint/eslintrc": "^1.2.2",
-=======
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz",
"integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==",
"dev": true,
"dependencies": {
"@eslint/eslintrc": "^1.2.3",
->>>>>>> dev
"@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
@@ -8490,11 +8339,7 @@
"eslint-scope": "^7.1.1",
"eslint-utils": "^3.0.0",
"eslint-visitor-keys": "^3.3.0",
-<<<<<<< HEAD
- "espree": "^9.3.1",
-=======
"espree": "^9.3.2",
->>>>>>> dev
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -8753,15 +8598,6 @@
}
},
"node_modules/espree": {
-<<<<<<< HEAD
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
- "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.7.0",
- "acorn-jsx": "^5.3.1",
-=======
"version": "9.3.2",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
"integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
@@ -8769,7 +8605,6 @@
"dependencies": {
"acorn": "^8.7.1",
"acorn-jsx": "^5.3.2",
->>>>>>> dev
"eslint-visitor-keys": "^3.3.0"
},
"engines": {
@@ -24008,33 +23843,19 @@
"integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"@eslint/eslintrc": {
-<<<<<<< HEAD
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
- "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
-=======
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz",
"integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==",
->>>>>>> dev
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
-<<<<<<< HEAD
- "espree": "^9.3.1",
-=======
"espree": "^9.3.2",
->>>>>>> dev
"globals": "^13.9.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
-<<<<<<< HEAD
- "minimatch": "^3.0.4",
-=======
"minimatch": "^3.1.2",
->>>>>>> dev
"strip-json-comments": "^3.1.1"
},
"dependencies": {
@@ -24045,15 +23866,9 @@
"dev": true
},
"globals": {
-<<<<<<< HEAD
- "version": "13.13.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
- "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
-=======
"version": "13.15.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
"integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
->>>>>>> dev
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -25469,8 +25284,6 @@
"@types/istanbul-lib-report": "*"
}
},
-<<<<<<< HEAD
-=======
"@types/jest": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.1.tgz",
@@ -25481,7 +25294,6 @@
"pretty-format": "^27.0.0"
}
},
->>>>>>> dev
"@types/jquery": {
"version": "3.5.14",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz",
@@ -25650,21 +25462,6 @@
}
},
"@typescript-eslint/eslint-plugin": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz",
- "integrity": "sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/scope-manager": "5.21.0",
- "@typescript-eslint/type-utils": "5.21.0",
- "@typescript-eslint/utils": "5.21.0",
- "debug": "^4.3.2",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.2.0",
- "semver": "^7.3.5",
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.25.0.tgz",
"integrity": "sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==",
@@ -25678,7 +25475,6 @@
"ignore": "^5.2.0",
"regexpp": "^3.2.0",
"semver": "^7.3.7",
->>>>>>> dev
"tsutils": "^3.21.0"
},
"dependencies": {
@@ -25703,58 +25499,6 @@
}
},
"@typescript-eslint/parser": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz",
- "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/scope-manager": "5.21.0",
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/typescript-estree": "5.21.0",
- "debug": "^4.3.2"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz",
- "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/visitor-keys": "5.21.0"
- }
- },
- "@typescript-eslint/type-utils": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz",
- "integrity": "sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/utils": "5.21.0",
- "debug": "^4.3.2",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz",
- "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz",
- "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/visitor-keys": "5.21.0",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
- "is-glob": "^4.0.3",
- "semver": "^7.3.5",
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.25.0.tgz",
"integrity": "sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==",
@@ -25827,7 +25571,6 @@
"globby": "^11.1.0",
"is-glob": "^4.0.3",
"semver": "^7.3.7",
->>>>>>> dev
"tsutils": "^3.21.0"
},
"dependencies": {
@@ -25852,17 +25595,6 @@
}
},
"@typescript-eslint/utils": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.21.0.tgz",
- "integrity": "sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.21.0",
- "@typescript-eslint/types": "5.21.0",
- "@typescript-eslint/typescript-estree": "5.21.0",
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.25.0.tgz",
"integrity": "sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==",
@@ -25872,21 +25604,11 @@
"@typescript-eslint/scope-manager": "5.25.0",
"@typescript-eslint/types": "5.25.0",
"@typescript-eslint/typescript-estree": "5.25.0",
->>>>>>> dev
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
}
},
"@typescript-eslint/visitor-keys": {
-<<<<<<< HEAD
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz",
- "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.21.0",
- "eslint-visitor-keys": "^3.0.0"
-=======
"version": "5.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.25.0.tgz",
"integrity": "sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA==",
@@ -25894,7 +25616,6 @@
"requires": {
"@typescript-eslint/types": "5.25.0",
"eslint-visitor-keys": "^3.3.0"
->>>>>>> dev
}
},
"@webassemblyjs/ast": {
@@ -26101,15 +25822,9 @@
}
},
"acorn": {
-<<<<<<< HEAD
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
-=======
"version": "8.7.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
"integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A=="
->>>>>>> dev
},
"acorn-globals": {
"version": "4.3.4",
@@ -29020,21 +28735,12 @@
}
},
"eslint": {
-<<<<<<< HEAD
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
- "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
- "dev": true,
- "requires": {
- "@eslint/eslintrc": "^1.2.2",
-=======
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz",
"integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==",
"dev": true,
"requires": {
"@eslint/eslintrc": "^1.2.3",
->>>>>>> dev
"@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
@@ -29045,11 +28751,7 @@
"eslint-scope": "^7.1.1",
"eslint-utils": "^3.0.0",
"eslint-visitor-keys": "^3.3.0",
-<<<<<<< HEAD
- "espree": "^9.3.1",
-=======
"espree": "^9.3.2",
->>>>>>> dev
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -29234,15 +28936,6 @@
"integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
},
"espree": {
-<<<<<<< HEAD
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
- "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
- "dev": true,
- "requires": {
- "acorn": "^8.7.0",
- "acorn-jsx": "^5.3.1",
-=======
"version": "9.3.2",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
"integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
@@ -29250,7 +28943,6 @@
"requires": {
"acorn": "^8.7.1",
"acorn-jsx": "^5.3.2",
->>>>>>> dev
"eslint-visitor-keys": "^3.3.0"
}
},
diff --git a/src/Bladeburner/Bladeburner.tsx b/src/Bladeburner/Bladeburner.tsx
index 8bf1b9eac..7a043ea35 100644
--- a/src/Bladeburner/Bladeburner.tsx
+++ b/src/Bladeburner/Bladeburner.tsx
@@ -1343,7 +1343,7 @@ export class Bladeburner implements IBladeburner {
damage = action.hpLoss * difficultyMultiplier;
damage = Math.ceil(addOffset(damage, 10));
this.hpLost += damage;
- const cost = calculateHospitalizationCost(person, damage);
+ const cost = calculateHospitalizationCost(player, damage);
if (person.takeDamage(damage)) {
++this.numHosp;
this.moneyLost += cost;
@@ -1420,7 +1420,7 @@ export class Bladeburner implements IBladeburner {
if (action.hpLoss) {
damage = action.hpLoss * difficultyMultiplier;
damage = Math.ceil(addOffset(damage, 10));
- const cost = calculateHospitalizationCost(person, damage);
+ const cost = calculateHospitalizationCost(player, damage);
if (person.takeDamage(damage)) {
++this.numHosp;
this.moneyLost += cost;
@@ -1611,12 +1611,14 @@ export class Bladeburner implements IBladeburner {
return retValue;
}
- infiltrateSynthoidCommunities(): void {
+ infiltrateSynthoidCommunities(p: IPlayer): void {
+ const infilSleeves = p.sleeves.filter((s) => s.bbAction === "Infiltrate synthoids").length;
+ const amt = Math.pow(infilSleeves, -0.5) / 2;
for (const contract of Object.keys(this.contracts)) {
- this.contracts[contract].count += 1;
+ this.contracts[contract].count += amt;
}
for (const operation of Object.keys(this.operations)) {
- this.operations[operation].count += 1;
+ this.operations[operation].count += amt;
}
if (this.logging.general) {
this.log(`Sleeve: Infiltrate the synthoid communities.`);
diff --git a/src/Bladeburner/IBladeburner.ts b/src/Bladeburner/IBladeburner.ts
index 71849aac6..66f97e0f7 100644
--- a/src/Bladeburner/IBladeburner.ts
+++ b/src/Bladeburner/IBladeburner.ts
@@ -101,7 +101,7 @@ export interface IBladeburner {
getActionObject(actionId: IActionIdentifier): IAction | null;
completeContract(success: boolean, actionIdent: IActionIdentifier): void;
completeAction(player: IPlayer, person: IPerson, actionIdent: IActionIdentifier, isPlayer?: boolean): ITaskTracker;
- infiltrateSynthoidCommunities(): void;
+ infiltrateSynthoidCommunities(p: IPlayer): void;
changeRank(player: IPlayer, change: number): void;
processAction(router: IRouter, player: IPlayer, seconds: number): void;
calculateStaminaGainPerSecond(player: IPlayer): number;
diff --git a/src/Hospital/Hospital.ts b/src/Hospital/Hospital.ts
index 4122d9f03..057afcbef 100644
--- a/src/Hospital/Hospital.ts
+++ b/src/Hospital/Hospital.ts
@@ -1,7 +1,8 @@
+import { IPlayer } from "../PersonObjects/IPlayer";
import { CONSTANTS } from "../Constants";
import { IPerson } from "../PersonObjects/IPerson";
-export function getHospitalizationCost(p: IPerson): number {
+export function getHospitalizationCost(p: IPlayer): number {
if (p.money < 0) {
return 0;
}
@@ -9,7 +10,7 @@ export function getHospitalizationCost(p: IPerson): number {
return Math.min(p.money * 0.1, (p.max_hp - p.hp) * CONSTANTS.HospitalCostPerHp);
}
-export function calculateHospitalizationCost(p: IPerson, damage: number): number {
+export function calculateHospitalizationCost(p: IPlayer, damage: number): number {
const oldhp = p.hp;
p.hp -= damage;
const cost = getHospitalizationCost(p);
diff --git a/src/PersonObjects/IPerson.ts b/src/PersonObjects/IPerson.ts
index 25cb9b9cc..18b697de2 100644
--- a/src/PersonObjects/IPerson.ts
+++ b/src/PersonObjects/IPerson.ts
@@ -1,6 +1,7 @@
// Interface that represents either the player (PlayerObject) or
// a Sleeve. Used for functions that need to take in both.
+import { IPlayerOwnedAugmentation } from "../Augmentation/PlayerOwnedAugmentation";
import { ITaskTracker } from "./ITaskTracker";
export interface IPerson {
@@ -14,7 +15,6 @@ export interface IPerson {
intelligence: number;
hp: number;
max_hp: number;
- money: number;
// Experience
hacking_exp: number;
@@ -47,6 +47,8 @@ export interface IPerson {
bladeburner_analysis_mult: number;
+ augmentations: IPlayerOwnedAugmentation[];
+
getIntelligenceBonus(weight: number): number;
gainHackingExp(exp: number): void;
gainStrengthExp(exp: number): void;
diff --git a/src/PersonObjects/IPlayer.ts b/src/PersonObjects/IPlayer.ts
index a328d4799..be62e8283 100644
--- a/src/PersonObjects/IPlayer.ts
+++ b/src/PersonObjects/IPlayer.ts
@@ -34,8 +34,6 @@ import { IPerson } from "./IPerson";
import { WorkType, ClassType, CrimeType } from "../utils/WorkType";
export interface IPlayer extends IPerson {
- // Class members
- augmentations: IPlayerOwnedAugmentation[];
bitNodeN: number;
city: CityName;
companyName: string;
diff --git a/src/PersonObjects/Person.ts b/src/PersonObjects/Person.ts
index 69b077843..82f208c1d 100644
--- a/src/PersonObjects/Person.ts
+++ b/src/PersonObjects/Person.ts
@@ -15,189 +15,89 @@ export abstract class Person implements IPerson {
/**
* Stats
*/
- hacking;
- strength;
- defense;
- dexterity;
- agility;
- charisma;
- intelligence;
- hp;
- max_hp;
- money;
+ hacking = 1;
+ strength = 1;
+ defense = 1;
+ dexterity = 1;
+ agility = 1;
+ charisma = 1;
+ intelligence = 0;
+ hp = 10;
+ max_hp = 10;
/**
* Experience
*/
- hacking_exp;
- strength_exp;
- defense_exp;
- dexterity_exp;
- agility_exp;
- charisma_exp;
- intelligence_exp;
+ hacking_exp = 0;
+ strength_exp = 0;
+ defense_exp = 0;
+ dexterity_exp = 0;
+ agility_exp = 0;
+ charisma_exp = 0;
+ intelligence_exp = 0;
/**
* Multipliers
*/
- hacking_mult;
- strength_mult;
- defense_mult;
- dexterity_mult;
- agility_mult;
- charisma_mult;
+ hacking_mult = 1;
+ strength_mult = 1;
+ defense_mult = 1;
+ dexterity_mult = 1;
+ agility_mult = 1;
+ charisma_mult = 1;
- hacking_exp_mult;
- strength_exp_mult;
- defense_exp_mult;
- dexterity_exp_mult;
- agility_exp_mult;
- charisma_exp_mult;
+ hacking_exp_mult = 1;
+ strength_exp_mult = 1;
+ defense_exp_mult = 1;
+ dexterity_exp_mult = 1;
+ agility_exp_mult = 1;
+ charisma_exp_mult = 1;
- hacking_chance_mult;
- hacking_speed_mult;
- hacking_money_mult;
- hacking_grow_mult;
+ hacking_chance_mult = 1;
+ hacking_speed_mult = 1;
+ hacking_money_mult = 1;
+ hacking_grow_mult = 1;
- company_rep_mult;
- faction_rep_mult;
+ company_rep_mult = 1;
+ faction_rep_mult = 1;
- crime_money_mult;
- crime_success_mult;
+ crime_money_mult = 1;
+ crime_success_mult = 1;
- work_money_mult;
+ work_money_mult = 1;
- hacknet_node_money_mult;
- hacknet_node_purchase_cost_mult;
- hacknet_node_ram_cost_mult;
- hacknet_node_core_cost_mult;
- hacknet_node_level_cost_mult;
+ hacknet_node_money_mult = 1;
+ hacknet_node_purchase_cost_mult = 1;
+ hacknet_node_ram_cost_mult = 1;
+ hacknet_node_core_cost_mult = 1;
+ hacknet_node_level_cost_mult = 1;
- bladeburner_max_stamina_mult;
- bladeburner_stamina_gain_mult;
- bladeburner_analysis_mult;
- bladeburner_success_chance_mult;
-
- infiltration_base_rep_increase = 0;
- infiltration_rep_mult = 1;
- infiltration_trade_mult = 1;
- infiltration_sell_mult = 1;
- infiltration_timer_mult = 1;
- infiltration_damage_reduction_mult = 1;
+ bladeburner_max_stamina_mult = 1;
+ bladeburner_stamina_gain_mult = 1;
+ bladeburner_analysis_mult = 1;
+ bladeburner_success_chance_mult = 1;
/**
* Augmentations
*/
- augmentations: IPlayerOwnedAugmentation[];
- queuedAugmentations: IPlayerOwnedAugmentation[];
+ augmentations: IPlayerOwnedAugmentation[] = [];
/**
* City that the person is in
*/
city: CityName = CityName.Sector12;
- gainHackingExp: (exp: number) => void;
- gainStrengthExp: (exp: number) => void;
- gainDefenseExp: (exp: number) => void;
- gainDexterityExp: (exp: number) => void;
- gainAgilityExp: (exp: number) => void;
- gainCharismaExp: (exp: number) => void;
- gainIntelligenceExp: (exp: number) => void;
- gainStats: (retValue: ITaskTracker) => void;
- calculateSkill: (exp: number, mult: number) => number;
- regenerateHp: (amt: number) => void;
- queryStatFromString: (str: string) => number;
-
- constructor() {
- /**
- * Stats
- */
- this.hacking = 1;
- this.strength = 1;
- this.defense = 1;
- this.dexterity = 1;
- this.agility = 1;
- this.charisma = 1;
- this.intelligence = 1;
- this.hp = 10;
- this.max_hp = 10;
- this.money = 0;
-
- /**
- * Experience
- */
- this.hacking_exp = 0;
- this.strength_exp = 0;
- this.defense_exp = 0;
- this.dexterity_exp = 0;
- this.agility_exp = 0;
- this.charisma_exp = 0;
- this.intelligence_exp = 0;
-
- /**
- * Multipliers
- */
- this.hacking_mult = 1;
- this.strength_mult = 1;
- this.defense_mult = 1;
- this.dexterity_mult = 1;
- this.agility_mult = 1;
- this.charisma_mult = 1;
-
- this.hacking_exp_mult = 1;
- this.strength_exp_mult = 1;
- this.defense_exp_mult = 1;
- this.dexterity_exp_mult = 1;
- this.agility_exp_mult = 1;
- this.charisma_exp_mult = 1;
-
- this.hacking_chance_mult = 1;
- this.hacking_speed_mult = 1;
- this.hacking_money_mult = 1;
- this.hacking_grow_mult = 1;
-
- this.company_rep_mult = 1;
- this.faction_rep_mult = 1;
-
- this.crime_money_mult = 1;
- this.crime_success_mult = 1;
-
- this.work_money_mult = 1;
-
- this.hacknet_node_money_mult = 1;
- this.hacknet_node_purchase_cost_mult = 1;
- this.hacknet_node_ram_cost_mult = 1;
- this.hacknet_node_core_cost_mult = 1;
- this.hacknet_node_level_cost_mult = 1;
-
- this.bladeburner_max_stamina_mult = 1;
- this.bladeburner_stamina_gain_mult = 1;
- this.bladeburner_analysis_mult = 1;
- this.bladeburner_success_chance_mult = 1;
-
- /**
- * Augmentations
- */
- this.augmentations = [];
- this.queuedAugmentations = [];
-
- /**
- * City that the person is in
- */
- this.city = CityName.Sector12;
-
- this.gainHackingExp = generalMethods.gainHackingExp;
- this.gainStrengthExp = generalMethods.gainStrengthExp;
- this.gainDefenseExp = generalMethods.gainDefenseExp;
- this.gainDexterityExp = generalMethods.gainDexterityExp;
- this.gainAgilityExp = generalMethods.gainAgilityExp;
- this.gainCharismaExp = generalMethods.gainCharismaExp;
- this.gainIntelligenceExp = generalMethods.gainIntelligenceExp;
- this.gainStats = generalMethods.gainStats;
- this.calculateSkill = generalMethods.calculateSkill;
- this.regenerateHp = generalMethods.regenerateHp;
- this.queryStatFromString = generalMethods.queryStatFromString;
- }
+ gainHackingExp = generalMethods.gainHackingExp;
+ gainStrengthExp = generalMethods.gainStrengthExp;
+ gainDefenseExp = generalMethods.gainDefenseExp;
+ gainDexterityExp = generalMethods.gainDexterityExp;
+ gainAgilityExp = generalMethods.gainAgilityExp;
+ gainCharismaExp = generalMethods.gainCharismaExp;
+ gainIntelligenceExp = generalMethods.gainIntelligenceExp;
+ gainStats = generalMethods.gainStats;
+ calculateSkill = generalMethods.calculateSkill;
+ regenerateHp = generalMethods.regenerateHp;
+ queryStatFromString = generalMethods.queryStatFromString;
/**
* Updates this object's multipliers for the given augmentation
@@ -297,13 +197,6 @@ export abstract class Person implements IPerson {
this.bladeburner_stamina_gain_mult = 1;
this.bladeburner_analysis_mult = 1;
this.bladeburner_success_chance_mult = 1;
-
- this.infiltration_base_rep_increase = 0;
- this.infiltration_rep_mult = 1;
- this.infiltration_trade_mult = 1;
- this.infiltration_sell_mult = 1;
- this.infiltration_timer_mult = 1;
- this.infiltration_damage_reduction_mult = 1;
}
/**
diff --git a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
index 9623108ec..b44ec6516 100644
--- a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
+++ b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
@@ -382,7 +382,7 @@ export function recordMoneySource(this: PlayerObject, amt: number, source: strin
this.moneySourceB.record(amt, source);
}
-export function gainHackingExp(this: IPlayer, exp: number): void {
+export function gainHackingExp(this: IPerson, exp: number): void {
if (isNaN(exp)) {
console.error("ERR: NaN passed into Player.gainHackingExp()");
return;
diff --git a/src/PersonObjects/Sleeve/Sleeve.ts b/src/PersonObjects/Sleeve/Sleeve.ts
index dd7312729..9b49e6e22 100644
--- a/src/PersonObjects/Sleeve/Sleeve.ts
+++ b/src/PersonObjects/Sleeve/Sleeve.ts
@@ -238,7 +238,7 @@ export class Sleeve extends Person {
if (this.currentTaskTime >= this.currentTaskMaxTime) {
if (this.bbAction === "Infiltrate synthoids") {
- bb.infiltrateSynthoidCommunities();
+ bb.infiltrateSynthoidCommunities(p);
this.currentTaskTime = 0;
return retValue;
}
From 0d437e5b7302fe20b53dfbffe53dc6c78337c3fa Mon Sep 17 00:00:00 2001
From: Olivier Gagnon
Date: Fri, 20 May 2022 18:20:04 -0400
Subject: [PATCH 17/17] lint
---
src/Hospital/Hospital.ts | 1 -
src/NetscriptFunctions/Singularity.ts | 4 ++--
src/PersonObjects/Person.ts | 2 --
3 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/Hospital/Hospital.ts b/src/Hospital/Hospital.ts
index 057afcbef..c392df19c 100644
--- a/src/Hospital/Hospital.ts
+++ b/src/Hospital/Hospital.ts
@@ -1,6 +1,5 @@
import { IPlayer } from "../PersonObjects/IPlayer";
import { CONSTANTS } from "../Constants";
-import { IPerson } from "../PersonObjects/IPerson";
export function getHospitalizationCost(p: IPlayer): number {
if (p.money < 0) {
diff --git a/src/NetscriptFunctions/Singularity.ts b/src/NetscriptFunctions/Singularity.ts
index 0d8c04e77..8cf3ffc5a 100644
--- a/src/NetscriptFunctions/Singularity.ts
+++ b/src/NetscriptFunctions/Singularity.ts
@@ -29,7 +29,7 @@ import { Router } from "../ui/GameRoot";
import { SpecialServers } from "../Server/data/SpecialServers";
import { Page } from "../ui/Router";
import { Locations } from "../Locations/Locations";
-import { GetServer, AddToAllServers, createUniqueRandomIp } from "../Server/AllServers";
+import { GetServer } from "../Server/AllServers";
import { Programs } from "../Programs/Programs";
import { numeralWrapper } from "../ui/numeralFormat";
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
@@ -39,7 +39,7 @@ import { Factions, factionExists } from "../Faction/Factions";
import { Faction } from "../Faction/Faction";
import { netscriptDelay } from "../NetscriptEvaluator";
import { convertTimeMsToTimeElapsedString } from "../utils/StringHelperFunctions";
-import { getServerOnNetwork, safetlyCreateUniqueServer } from "../Server/ServerHelpers";
+import { getServerOnNetwork } from "../Server/ServerHelpers";
import { Terminal } from "../Terminal";
import { calculateHackingTime } from "../Hacking";
import { Server } from "../Server/Server";
diff --git a/src/PersonObjects/Person.ts b/src/PersonObjects/Person.ts
index 82f208c1d..8790a26b8 100644
--- a/src/PersonObjects/Person.ts
+++ b/src/PersonObjects/Person.ts
@@ -7,8 +7,6 @@ import { CONSTANTS } from "../Constants";
import { calculateSkill } from "./formulas/skill";
import { calculateIntelligenceBonus } from "./formulas/intelligence";
import { IPerson } from "./IPerson";
-import { Reviver } from "../utils/JSONReviver";
-import { ITaskTracker } from "./ITaskTracker";
// Base class representing a person-like object
export abstract class Person implements IPerson {