From 982aa81eef6e3b8b78b0531f2f2c83b473c20278 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 8 Sep 2025 04:13:24 +0200 Subject: [PATCH] feat: purchase additional conclave loadout slots --- src/helpers/purchaseHelpers.ts | 23 ----------------------- src/services/purchaseService.ts | 23 ++++++++++++++++++----- src/types/purchaseTypes.ts | 16 ---------------- 3 files changed, 18 insertions(+), 44 deletions(-) delete mode 100644 src/helpers/purchaseHelpers.ts diff --git a/src/helpers/purchaseHelpers.ts b/src/helpers/purchaseHelpers.ts deleted file mode 100644 index 3e5c0783..00000000 --- a/src/helpers/purchaseHelpers.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { SlotPurchase, SlotPurchaseName } from "../types/purchaseTypes.ts"; - -export const slotPurchaseNameToSlotName: SlotPurchase = { - SuitSlotItem: { name: "SuitBin", purchaseQuantity: 1 }, - TwoSentinelSlotItem: { name: "SentinelBin", purchaseQuantity: 2 }, - TwoWeaponSlotItem: { name: "WeaponBin", purchaseQuantity: 2 }, - SpaceSuitSlotItem: { name: "SpaceSuitBin", purchaseQuantity: 1 }, - TwoSpaceWeaponSlotItem: { name: "SpaceWeaponBin", purchaseQuantity: 2 }, - MechSlotItem: { name: "MechBin", purchaseQuantity: 1 }, - TwoOperatorWeaponSlotItem: { name: "OperatorAmpBin", purchaseQuantity: 2 }, - RandomModSlotItem: { name: "RandomModBin", purchaseQuantity: 3 }, - TwoCrewShipSalvageSlotItem: { name: "CrewShipSalvageBin", purchaseQuantity: 2 }, - CrewMemberSlotItem: { name: "CrewMemberBin", purchaseQuantity: 1 } -}; - -export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => { - return slotPurchaseName in slotPurchaseNameToSlotName; -}; - -export const parseSlotPurchaseName = (slotPurchaseName: string): SlotPurchaseName => { - if (!isSlotPurchaseName(slotPurchaseName)) throw new Error(`invalid slot name ${slotPurchaseName}`); - return slotPurchaseName; -}; diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index 1a3a9b08..60caea76 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -1,4 +1,3 @@ -import { parseSlotPurchaseName, slotPurchaseNameToSlotName } from "../helpers/purchaseHelpers.ts"; import { getSubstringFromKeyword } from "../helpers/stringHelpers.ts"; import { addBooster, @@ -15,7 +14,8 @@ import type { IPurchaseRequest, IPurchaseResponse, IInventoryChanges, - IPurchaseParams + IPurchaseParams, + SlotNames } from "../types/purchaseTypes.ts"; import { PurchaseSource } from "../types/purchaseTypes.ts"; import { logger } from "../utils/logger.ts"; @@ -489,6 +489,20 @@ export const handleStoreItemAcquisition = async ( return purchaseResponse; }; +const slotPurchaseNameToSlotName: Record = { + SuitSlotItem: { name: "SuitBin", purchaseQuantity: 1 }, + TwoSentinelSlotItem: { name: "SentinelBin", purchaseQuantity: 2 }, + TwoWeaponSlotItem: { name: "WeaponBin", purchaseQuantity: 2 }, + SpaceSuitSlotItem: { name: "SpaceSuitBin", purchaseQuantity: 1 }, + TwoSpaceWeaponSlotItem: { name: "SpaceWeaponBin", purchaseQuantity: 2 }, + MechSlotItem: { name: "MechBin", purchaseQuantity: 1 }, + TwoOperatorWeaponSlotItem: { name: "OperatorAmpBin", purchaseQuantity: 2 }, + RandomModSlotItem: { name: "RandomModBin", purchaseQuantity: 3 }, + TwoCrewShipSalvageSlotItem: { name: "CrewShipSalvageBin", purchaseQuantity: 2 }, + CrewMemberSlotItem: { name: "CrewMemberBin", purchaseQuantity: 1 }, + PvPLoadoutSlotItem: { name: "PvpBonusLoadoutBin", purchaseQuantity: 1 } +}; + // // extra = everything above the base +2 slots (depending on slot type) // // new slot above base = extra + 1 and slots +1 // // new frame = slots -1 @@ -500,9 +514,8 @@ const handleSlotPurchase = ( ignorePurchaseQuantity: boolean ): IPurchaseResponse => { logger.debug(`slot name ${slotPurchaseNameFull}`); - const slotPurchaseName = parseSlotPurchaseName( - slotPurchaseNameFull.substring(slotPurchaseNameFull.lastIndexOf("/") + 1) - ); + const slotPurchaseName = slotPurchaseNameFull.substring(slotPurchaseNameFull.lastIndexOf("/") + 1); + if (!(slotPurchaseName in slotPurchaseNameToSlotName)) throw new Error(`invalid slot name ${slotPurchaseName}`); logger.debug(`slot purchase name ${slotPurchaseName}`); const slotName = slotPurchaseNameToSlotName[slotPurchaseName].name; diff --git a/src/types/purchaseTypes.ts b/src/types/purchaseTypes.ts index d9b19c8f..e6d5ba1e 100644 --- a/src/types/purchaseTypes.ts +++ b/src/types/purchaseTypes.ts @@ -120,18 +120,6 @@ export type IBinChanges = { Extra?: number; }; -export type SlotPurchaseName = - | "SuitSlotItem" - | "TwoSentinelSlotItem" - | "TwoWeaponSlotItem" - | "SpaceSuitSlotItem" - | "TwoSpaceWeaponSlotItem" - | "MechSlotItem" - | "TwoOperatorWeaponSlotItem" - | "RandomModSlotItem" - | "TwoCrewShipSalvageSlotItem" - | "CrewMemberSlotItem"; - export const slotNames = [ "SuitBin", "WeaponBin", @@ -148,7 +136,3 @@ export const slotNames = [ ] as const; export type SlotNames = (typeof slotNames)[number]; - -export type SlotPurchase = { - [P in SlotPurchaseName]: { name: SlotNames; purchaseQuantity: number }; -}; -- 2.47.2