From c421c7021c71982bdd7331bf4fab3b0d3a40f7e3 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 22 Dec 2024 23:28:59 +0100 Subject: [PATCH] feat: implement aya costs for varzia offers (#606) --- src/models/inventoryModels/inventoryModel.ts | 2 ++ src/services/purchaseService.ts | 31 ++++++++++++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 1 + src/types/purchaseTypes.ts | 2 +- 4 files changed, 35 insertions(+), 1 deletion(-) 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 fb05d9c2..3252cc20 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -13,6 +13,7 @@ import { getVendorManifestByOid } from "@/src/services/serversideVendorsService" 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) => { @@ -94,6 +95,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;