From 59982370cbad6f3e5c57d5501d08972c5d4e83b8 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Wed, 4 May 2022 14:48:49 -0500 Subject: [PATCH] Implement `CrimeType` enum --- src/Constants.ts | 27 +------------------ src/Crime/Crime.ts | 5 ++-- src/Crime/CrimeHelpers.ts | 2 +- src/Crime/Crimes.ts | 26 +++++++++--------- src/NetscriptFunctions.ts | 4 +-- src/PersonObjects/IPlayer.ts | 6 ++--- src/PersonObjects/Player/PlayerObject.ts | 8 +++--- .../Player/PlayerObjectGeneralMethods.tsx | 10 +++---- 8 files changed, 33 insertions(+), 55 deletions(-) diff --git a/src/Constants.ts b/src/Constants.ts index 78e2094f4..8f16dc794 100644 --- a/src/Constants.ts +++ b/src/Constants.ts @@ -63,7 +63,7 @@ export const CONSTANTS: { GameCyclesPerQuarterHour: number; MillisecondsPerFiveMinutes: number; GameCyclesPerFiveMinutes: number; - ClassDataStructuresBaseCost: number; + ClassDataStructuresBaseCost: number; ClassNetworksBaseCost: number; ClassAlgorithmsBaseCost: number; ClassManagementBaseCost: number; @@ -75,18 +75,6 @@ export const CONSTANTS: { ClassAlgorithmsBaseExp: number; ClassManagementBaseExp: number; ClassLeadershipBaseExp: number; - CrimeShoplift: string; - CrimeRobStore: string; - CrimeMug: string; - CrimeLarceny: string; - CrimeDrugs: string; - CrimeBondForgery: string; - CrimeTraffickArms: string; - CrimeHomicide: string; - CrimeGrandTheftAuto: string; - CrimeKidnap: string; - CrimeAssassination: string; - CrimeHeist: string; CodingContractBaseFactionRepGain: number; CodingContractBaseCompanyRepGain: number; CodingContractBaseMoneyGain: number; @@ -218,19 +206,6 @@ export const CONSTANTS: { ClassManagementBaseExp: 2, ClassLeadershipBaseExp: 4, - CrimeShoplift: "shoplift", - CrimeRobStore: "rob a store", - CrimeMug: "mug someone", - CrimeLarceny: "commit larceny", - CrimeDrugs: "deal drugs", - CrimeBondForgery: "forge corporate bonds", - CrimeTraffickArms: "traffick illegal arms", - CrimeHomicide: "commit homicide", - CrimeGrandTheftAuto: "commit grand theft auto", - CrimeKidnap: "kidnap someone for ransom", - CrimeAssassination: "assassinate a high-profile target", - CrimeHeist: "pull off the ultimate heist", - // Coding Contract // TODO: Move this into Coding contract implementation? CodingContractBaseFactionRepGain: 2500, diff --git a/src/Crime/Crime.ts b/src/Crime/Crime.ts index 4551677a2..383fbb174 100644 --- a/src/Crime/Crime.ts +++ b/src/Crime/Crime.ts @@ -3,6 +3,7 @@ import { IPlayer } from "../PersonObjects/IPlayer"; import { IPlayerOrSleeve } from "../PersonObjects/IPlayerOrSleeve"; import { IRouter } from "../ui/Router"; import { WorkerScript } from "../Netscript/WorkerScript"; +import { CrimeType } from "../utils/WorkType"; interface IConstructorParams { hacking_success_weight?: number; @@ -42,7 +43,7 @@ export class Crime { time = 0; // Corresponding type in CONSTANTS. Contains a description for the crime activity - type = ""; + type: CrimeType; // Weighting factors that determine how stats affect the success rate of this crime hacking_success_weight = 0; @@ -61,7 +62,7 @@ export class Crime { charisma_exp = 0; intelligence_exp = 0; - constructor(name = "", type = "", time = 0, money = 0, difficulty = 0, karma = 0, params: IConstructorParams = {}) { + constructor(name = "", type: CrimeType, time = 0, money = 0, difficulty = 0, karma = 0, params: IConstructorParams = {}) { this.name = name; this.type = type; this.time = time; diff --git a/src/Crime/CrimeHelpers.ts b/src/Crime/CrimeHelpers.ts index 8689645fc..dbbec2f35 100644 --- a/src/Crime/CrimeHelpers.ts +++ b/src/Crime/CrimeHelpers.ts @@ -9,7 +9,7 @@ export function determineCrimeSuccess(p: IPlayer, type: string): boolean { let found = false; for (const i of Object.keys(Crimes)) { const crime = Crimes[i]; - if (crime.type == type) { + if (crime.type === type) { chance = crime.successRate(p); found = true; break; diff --git a/src/Crime/Crimes.ts b/src/Crime/Crimes.ts index fecd7b8bb..daf7abb1c 100644 --- a/src/Crime/Crimes.ts +++ b/src/Crime/Crimes.ts @@ -3,8 +3,10 @@ import { Crime } from "./Crime"; import { CONSTANTS } from "../Constants"; import { IMap } from "../types"; +import {CrimeType} from "../utils/WorkType" + export const Crimes: IMap = { - Shoplift: new Crime("Shoplift", CONSTANTS.CrimeShoplift, 2e3, 15e3, 1 / 20, 0.1, { + Shoplift: new Crime("Shoplift", CrimeType.Shoplift, 2e3, 15e3, 1 / 20, 0.1, { dexterity_success_weight: 1, agility_success_weight: 1, @@ -12,7 +14,7 @@ export const Crimes: IMap = { agility_exp: 2, }), - RobStore: new Crime("Rob Store", CONSTANTS.CrimeRobStore, 60e3, 400e3, 1 / 5, 0.5, { + RobStore: new Crime("Rob Store", CrimeType.RobStore, 60e3, 400e3, 1 / 5, 0.5, { hacking_exp: 30, dexterity_exp: 45, agility_exp: 45, @@ -24,7 +26,7 @@ export const Crimes: IMap = { intelligence_exp: 7.5 * CONSTANTS.IntelligenceCrimeBaseExpGain, }), - Mug: new Crime("Mug", CONSTANTS.CrimeMug, 4e3, 36e3, 1 / 5, 0.25, { + Mug: new Crime("Mug", CrimeType.Mug, 4e3, 36e3, 1 / 5, 0.25, { strength_exp: 3, defense_exp: 3, dexterity_exp: 3, @@ -36,7 +38,7 @@ export const Crimes: IMap = { agility_success_weight: 0.5, }), - Larceny: new Crime("Larceny", CONSTANTS.CrimeLarceny, 90e3, 800e3, 1 / 3, 1.5, { + Larceny: new Crime("Larceny", CrimeType.Larceny, 90e3, 800e3, 1 / 3, 1.5, { hacking_exp: 45, dexterity_exp: 60, agility_exp: 60, @@ -48,7 +50,7 @@ export const Crimes: IMap = { intelligence_exp: 15 * CONSTANTS.IntelligenceCrimeBaseExpGain, }), - DealDrugs: new Crime("Deal Drugs", CONSTANTS.CrimeDrugs, 10e3, 120e3, 1, 0.5, { + DealDrugs: new Crime("Deal Drugs", CrimeType.Drugs, 10e3, 120e3, 1, 0.5, { dexterity_exp: 5, agility_exp: 5, charisma_exp: 10, @@ -58,7 +60,7 @@ export const Crimes: IMap = { agility_success_weight: 1, }), - BondForgery: new Crime("Bond Forgery", CONSTANTS.CrimeBondForgery, 300e3, 4.5e6, 1 / 2, 0.1, { + BondForgery: new Crime("Bond Forgery", CrimeType.BondForgery, 300e3, 4.5e6, 1 / 2, 0.1, { hacking_exp: 100, dexterity_exp: 150, charisma_exp: 15, @@ -69,7 +71,7 @@ export const Crimes: IMap = { intelligence_exp: 60 * CONSTANTS.IntelligenceCrimeBaseExpGain, }), - TraffickArms: new Crime("Traffick Arms", CONSTANTS.CrimeTraffickArms, 40e3, 600e3, 2, 1, { + TraffickArms: new Crime("Traffick Arms", CrimeType.TraffickArms, 40e3, 600e3, 2, 1, { strength_exp: 20, defense_exp: 20, dexterity_exp: 20, @@ -83,7 +85,7 @@ export const Crimes: IMap = { agility_success_weight: 1, }), - Homicide: new Crime("Homicide", CONSTANTS.CrimeHomicide, 3e3, 45e3, 1, 3, { + Homicide: new Crime("Homicide", CrimeType.Homicide, 3e3, 45e3, 1, 3, { strength_exp: 2, defense_exp: 2, dexterity_exp: 2, @@ -97,7 +99,7 @@ export const Crimes: IMap = { kills: 1, }), - GrandTheftAuto: new Crime("Grand Theft Auto", CONSTANTS.CrimeGrandTheftAuto, 80e3, 1.6e6, 8, 5, { + GrandTheftAuto: new Crime("Grand Theft Auto", CrimeType.GrandTheftAuto, 80e3, 1.6e6, 8, 5, { strength_exp: 20, defense_exp: 20, dexterity_exp: 20, @@ -113,7 +115,7 @@ export const Crimes: IMap = { intelligence_exp: 16 * CONSTANTS.IntelligenceCrimeBaseExpGain, }), - Kidnap: new Crime("Kidnap", CONSTANTS.CrimeKidnap, 120e3, 3.6e6, 5, 6, { + Kidnap: new Crime("Kidnap", CrimeType.Kidnap, 120e3, 3.6e6, 5, 6, { strength_exp: 80, defense_exp: 80, dexterity_exp: 80, @@ -128,7 +130,7 @@ export const Crimes: IMap = { intelligence_exp: 26 * CONSTANTS.IntelligenceCrimeBaseExpGain, }), - Assassination: new Crime("Assassination", CONSTANTS.CrimeAssassination, 300e3, 12e6, 8, 10, { + Assassination: new Crime("Assassination", CrimeType.Assassination, 300e3, 12e6, 8, 10, { strength_exp: 300, defense_exp: 300, dexterity_exp: 300, @@ -143,7 +145,7 @@ export const Crimes: IMap = { kills: 1, }), - Heist: new Crime("Heist", CONSTANTS.CrimeHeist, 600e3, 120e6, 18, 15, { + Heist: new Crime("Heist", CrimeType.Heist, 600e3, 120e6, 18, 15, { hacking_exp: 450, strength_exp: 450, defense_exp: 450, diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index c14694837..68cfc37be 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -2482,8 +2482,8 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { workMoneyGained: Player.workMoneyGained, createProgramName: Player.createProgramName, createProgramReqLvl: Player.createProgramReqLvl, - className: Player.className ?? "", // Avoids breaking scripts that for some reason rely on this - crimeType: Player.crimeType, + className: Player.className ?? "", // ditto + crimeType: Player.crimeType ?? "", // ditto (*2) work_money_mult: Player.work_money_mult, hacknet_node_money_mult: Player.hacknet_node_money_mult, hacknet_node_purchase_cost_mult: Player.hacknet_node_purchase_cost_mult, diff --git a/src/PersonObjects/IPlayer.ts b/src/PersonObjects/IPlayer.ts index e973ff967..303fad840 100644 --- a/src/PersonObjects/IPlayer.ts +++ b/src/PersonObjects/IPlayer.ts @@ -30,7 +30,7 @@ import { WorkerScript } from "../Netscript/WorkerScript"; import { HacknetServer } from "../Hacknet/HacknetServer"; import { ISkillProgress } from "./formulas/skill"; import { PlayerAchievement } from "../Achievements/Achievements"; -import { WorkType, ClassType } from "../utils/WorkType"; +import { WorkType, ClassType, CrimeType } from "../utils/WorkType"; export interface IPlayer { // Class members @@ -131,7 +131,7 @@ export interface IPlayer { timeWorkedCreateProgram: number; graftAugmentationName: string; timeWorkedGraftAugmentation: number; - crimeType: string; + crimeType: CrimeType | null; committingCrimeThruSingFn: boolean; singFnCrimeWorkerScript: WorkerScript | null; timeNeededToCompleteWork: number; @@ -224,7 +224,7 @@ export interface IPlayer { startCorporation(corpName: string, additionalShares?: number): void; startCrime( router: IRouter, - crimeType: string, + crimeType: CrimeType, hackExp: number, strExp: number, defExp: number, diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts index fefbdfca4..66b9f05f9 100644 --- a/src/PersonObjects/Player/PlayerObject.ts +++ b/src/PersonObjects/Player/PlayerObject.ts @@ -38,7 +38,7 @@ import { PlayerAchievement } from "../../Achievements/Achievements"; import { cyrb53 } from "../../utils/StringHelperFunctions"; import { getRandomInt } from "../../utils/helpers/getRandomInt"; import { CONSTANTS } from "../../Constants"; -import { WorkType, ClassType } from "../../utils/WorkType"; +import { WorkType, ClassType, CrimeType } from "../../utils/WorkType"; export class PlayerObject implements IPlayer { // Class members @@ -141,7 +141,7 @@ export class PlayerObject implements IPlayer { timeWorkedCreateProgram: number; graftAugmentationName: string; timeWorkedGraftAugmentation: number; - crimeType: string; + crimeType: CrimeType | null; committingCrimeThruSingFn: boolean; singFnCrimeWorkerScript: WorkerScript | null; timeNeededToCompleteWork: number; @@ -234,7 +234,7 @@ export class PlayerObject implements IPlayer { startCorporation: (corpName: string, additionalShares?: number) => void; startCrime: ( router: IRouter, - crimeType: string, + crimeType: CrimeType, hackExp: number, strExp: number, defExp: number, @@ -433,7 +433,7 @@ export class PlayerObject implements IPlayer { this.className = null; - this.crimeType = ""; + this.crimeType = null; this.timeWorked = 0; //in m; this.timeWorkedCreateProgram = 0; diff --git a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx index 8286af6de..218fcdc29 100644 --- a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx +++ b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx @@ -66,7 +66,7 @@ import { achievements } from "../../Achievements/Achievements"; import { FactionNames } from "../../Faction/data/FactionNames"; import { graftingIntBonus } from "../Grafting/GraftingHelpers"; -import { WorkType, FactionWorkType, ClassType } from "../../utils/WorkType"; +import { WorkType, FactionWorkType, ClassType, CrimeType } from "../../utils/WorkType"; export function init(this: IPlayer): void { /* Initialize Player's home computer */ @@ -143,7 +143,7 @@ export function prestigeAugmentation(this: PlayerObject): void { this.currentWorkFactionDescription = ""; this.createProgramName = ""; this.className = null; - this.crimeType = ""; + this.crimeType = null; this.workHackExpGainRate = 0; this.workStrExpGainRate = 0; @@ -1488,7 +1488,7 @@ export function finishClass(this: IPlayer, sing = false): string { export function startCrime( this: IPlayer, router: IRouter, - crimeType: string, + crimeType: CrimeType, hackExp: number, strExp: number, defExp: number, @@ -1536,7 +1536,7 @@ export function commitCrime(this: IPlayer, numCycles: number): boolean { export function finishCrime(this: IPlayer, cancelled: boolean): string { //Determine crime success/failure if (!cancelled) { - if (determineCrimeSuccess(this, this.crimeType)) { + if (determineCrimeSuccess(this, this.crimeType ?? "")) { //Handle Karma and crime statistics let crime = null; for (const i of Object.keys(Crimes)) { @@ -1669,7 +1669,7 @@ export function finishCrime(this: IPlayer, cancelled: boolean): string { this.committingCrimeThruSingFn = false; this.singFnCrimeWorkerScript = null; this.isWorking = false; - this.crimeType = ""; + this.crimeType = null; this.resetWorkStatus(); return ""; }