diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 28292ba4..d85f6d11 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -605,6 +605,8 @@ const inventorySchema = new Schema( PremiumCreditsFree: Number, //Endo FusionPoints: Number, + //Regal Aya + PrimeTokens: Number, //Slots SuitBin: slotsBinSchema, diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index ea4673f0..fa1ff3d9 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -12,6 +12,7 @@ import { import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPurchaseRequest, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes"; import { logger } from "@/src/utils/logger"; +import worldState from "@/static/fixed_responses/worldState.json"; import { ExportBundles, ExportGear, ExportVendors, TRarity } from "warframe-public-export-plus"; export const getStoreItemCategory = (storeItem: string) => { @@ -64,7 +65,7 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI for (const item of offer.itemPrices) { const invItem: IMiscItem = { ItemType: item.ItemType, - ItemCount: item.ItemCount * -1 + ItemCount: item.ItemCount * purchaseRequest.PurchaseParams.Quantity * -1 }; addMiscItems(inventory, [invItem]); @@ -74,7 +75,7 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI x => x.ItemType == item.ItemType ); if (change) { - change.ItemCount -= item.ItemCount; + change.ItemCount += invItem.ItemCount; } else { (purchaseResponse.InventoryChanges.MiscItems as IMiscItem[]).push(invItem); } @@ -84,6 +85,36 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI } } break; + case 18: { + if (purchaseRequest.PurchaseParams.SourceId! != worldState.PrimeVaultTraders[0]._id.$oid) { + throw new Error("invalid request source"); + } + const offer = + worldState.PrimeVaultTraders[0].Manifest.find( + x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem + ) ?? + worldState.PrimeVaultTraders[0].EvergreenManifest.find( + x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem + ); + if (offer) { + const inventory = await getInventory(accountId); + if (offer.RegularPrice) { + const invItem: IMiscItem = { + ItemType: "/Lotus/Types/Items/MiscItems/SchismKey", + ItemCount: offer.RegularPrice * purchaseRequest.PurchaseParams.Quantity * -1 + }; + + addMiscItems(inventory, [invItem]); + + purchaseResponse.InventoryChanges.MiscItems ??= []; + (purchaseResponse.InventoryChanges.MiscItems as IMiscItem[]).push(invItem); + } else { + inventory.PrimeTokens -= offer.PrimePrice! * purchaseRequest.PurchaseParams.Quantity; + } + await inventory.save(); + } + break; + } } return purchaseResponse; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index fd207bc9..bb93d8e0 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -125,6 +125,7 @@ export interface IInventoryResponse { PremiumCredits: number; PremiumCreditsFree: number; FusionPoints: number; + PrimeTokens: number; SuitBin: ISlots; WeaponBin: ISlots; SentinelBin: ISlots; diff --git a/src/types/purchaseTypes.ts b/src/types/purchaseTypes.ts index 9a7edd1e..c09dff33 100644 --- a/src/types/purchaseTypes.ts +++ b/src/types/purchaseTypes.ts @@ -5,7 +5,7 @@ export interface IPurchaseRequest { export interface IPurchaseParams { Source: number; - SourceId?: string; // for Source 7 + SourceId?: string; // for Source 7 & 18 StoreItem: string; StorePage: string; SearchTerm: string;