feat: apply QuantityMultiplier for server-side vendor offers (#605)

This commit is contained in:
Sainan 2024-12-22 23:28:44 +01:00 committed by GitHub
parent 2175e003cc
commit d1d221bb58
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 110 additions and 137 deletions

View File

@ -1,138 +1,14 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import ArchimedeanVendorManifest from "@/static/fixed_responses/getVendorInfo/ArchimedeanVendorManifest.json"; import { getVendorManifestByTypeName } from "@/src/services/serversideVendorsService";
import DeimosEntratiFragmentVendorProductsManifest from "@/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json";
import DeimosFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json";
import DeimosHivemindCommisionsManifestFishmonger from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json";
import DeimosHivemindCommisionsManifestPetVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json";
import DeimosHivemindCommisionsManifestProspector from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json";
import DeimosHivemindCommisionsManifestTokenVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json";
import DeimosHivemindCommisionsManifestWeaponsmith from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json";
import DeimosHivemindTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json";
import DeimosPetVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json";
import DeimosProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json";
import DuviriAcrithisVendorManifest from "@/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json";
import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json";
import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json";
import HubsIronwakeDondaVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json";
import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json";
import HubsPerrinSequenceWeaponVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json";
import MaskSalesmanManifest from "@/static/fixed_responses/getVendorInfo/MaskSalesmanManifest.json";
import OstronFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json";
import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json";
import OstronPetVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json";
import SolarisFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json";
import SolarisProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json";
import SolarisDebtTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json";
import SolarisDebtTokenVendorRepossessionsManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json";
import ZarimanCommisionsManifestArchimedean from "@/static/fixed_responses/getVendorInfo/ZarimanCommisionsManifestArchimedean.json";
export const getVendorInfoController: RequestHandler = (req, res) => { export const getVendorInfoController: RequestHandler = (req, res) => {
switch (req.query.vendor as string) { if (typeof req.query.vendor == "string") {
case "/Lotus/Types/Game/VendorManifests/Ostron/FishmongerVendorManifest": const manifest = getVendorManifestByTypeName(req.query.vendor);
res.json(OstronFishmongerVendorManifest); if (!manifest) {
break;
case "/Lotus/Types/Game/VendorManifests/Ostron/ProspectorVendorManifest":
res.json(OstronProspectorVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Ostron/PetVendorManifest":
res.json(OstronPetVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Ostron/MaskSalesmanManifest":
res.json(MaskSalesmanManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Solaris/FishmongerVendorManifest":
res.json(SolarisFishmongerVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Solaris/ProspectorVendorManifest":
res.json(SolarisProspectorVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorManifest":
res.json(SolarisDebtTokenVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorRepossessionsManifest":
res.json(SolarisDebtTokenVendorRepossessionsManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Hubs/PerrinSequenceWeaponVendorManifest":
res.json(HubsPerrinSequenceWeaponVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest":
res.json(HubsRailjackCrewMemberVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestWeaponsmith":
res.json(DeimosHivemindCommisionsManifestWeaponsmith);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestFishmonger":
res.json(DeimosHivemindCommisionsManifestFishmonger);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/FishmongerVendorManifest":
res.json(DeimosFishmongerVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestProspector":
res.json(DeimosHivemindCommisionsManifestProspector);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/ProspectorVendorManifest":
res.json(DeimosProspectorVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestPetVendor":
res.json(DeimosHivemindCommisionsManifestPetVendor);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/PetVendorManifest":
res.json(DeimosPetVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestTokenVendor":
res.json(DeimosHivemindCommisionsManifestTokenVendor);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/EntratiFragmentVendorProductsManifest":
res.json(DeimosEntratiFragmentVendorProductsManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindTokenVendorManifest":
res.json(DeimosHivemindTokenVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest":
res.json(HubsIronwakeDondaVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Zariman/ArchimedeanVendorManifest":
res.json(ArchimedeanVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Duviri/AcrithisVendorManifest":
res.json(DuviriAcrithisVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/Zariman/ZarimanCommisionsManifestArchimedean":
res.json(ZarimanCommisionsManifestArchimedean);
break;
case "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabVendorManifest":
res.json(EntratiLabsEntratiLabVendorManifest);
break;
case "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabsCommisionsManifest":
res.json(EntratiLabsEntratiLabsCommisionsManifest);
break;
default:
throw new Error(`Unknown vendor: ${req.query.vendor}`); throw new Error(`Unknown vendor: ${req.query.vendor}`);
} }
res.json(manifest);
} else {
res.status(400).end();
}
}; };

View File

@ -9,6 +9,7 @@ import {
updateCurrency, updateCurrency,
updateSlots updateSlots
} from "@/src/services/inventoryService"; } from "@/src/services/inventoryService";
import { getVendorManifestByOid } from "@/src/services/serversideVendorsService";
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
import { IPurchaseRequest, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes"; import { IPurchaseRequest, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes";
import { logger } from "@/src/utils/logger"; import { logger } from "@/src/utils/logger";
@ -32,6 +33,18 @@ export const getStoreItemTypesCategory = (typesItem: string) => {
export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountId: string) => { export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountId: string) => {
logger.debug("purchase request", purchaseRequest); logger.debug("purchase request", purchaseRequest);
if (purchaseRequest.PurchaseParams.Source == 7) {
const manifest = getVendorManifestByOid(purchaseRequest.PurchaseParams.SourceId!);
if (manifest) {
const offer = manifest.VendorInfo.ItemManifest.find(
x => x.StoreItem == purchaseRequest.PurchaseParams.StoreItem
);
if (offer) {
purchaseRequest.PurchaseParams.Quantity *= offer.QuantityMultiplier;
}
}
}
const purchaseResponse = await handleStoreItemAcquisition( const purchaseResponse = await handleStoreItemAcquisition(
purchaseRequest.PurchaseParams.StoreItem, purchaseRequest.PurchaseParams.StoreItem,
accountId, accountId,
@ -53,11 +66,8 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI
switch (purchaseRequest.PurchaseParams.Source) { switch (purchaseRequest.PurchaseParams.Source) {
case 7: case 7:
if (!purchaseRequest.PurchaseParams.SourceId) { if (purchaseRequest.PurchaseParams.SourceId! in ExportVendors) {
throw new Error("invalid request source"); const vendor = ExportVendors[purchaseRequest.PurchaseParams.SourceId!];
}
if (ExportVendors[purchaseRequest.PurchaseParams.SourceId]) {
const vendor = ExportVendors[purchaseRequest.PurchaseParams.SourceId];
const offer = vendor.items.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem); const offer = vendor.items.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem);
if (offer) { if (offer) {
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);

View File

@ -0,0 +1,87 @@
import { IOid } from "@/src/types/commonTypes";
import ArchimedeanVendorManifest from "@/static/fixed_responses/getVendorInfo/ArchimedeanVendorManifest.json";
import DeimosEntratiFragmentVendorProductsManifest from "@/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json";
import DeimosFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json";
import DeimosHivemindCommisionsManifestFishmonger from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json";
import DeimosHivemindCommisionsManifestPetVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json";
import DeimosHivemindCommisionsManifestProspector from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json";
import DeimosHivemindCommisionsManifestTokenVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json";
import DeimosHivemindCommisionsManifestWeaponsmith from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json";
import DeimosHivemindTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json";
import DeimosPetVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json";
import DeimosProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json";
import DuviriAcrithisVendorManifest from "@/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json";
import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json";
import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json";
import HubsIronwakeDondaVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json";
import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json";
import HubsPerrinSequenceWeaponVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json";
import MaskSalesmanManifest from "@/static/fixed_responses/getVendorInfo/MaskSalesmanManifest.json";
import OstronFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json";
import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json";
import OstronPetVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json";
import SolarisFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json";
import SolarisProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json";
import SolarisDebtTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json";
import SolarisDebtTokenVendorRepossessionsManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json";
import ZarimanCommisionsManifestArchimedean from "@/static/fixed_responses/getVendorInfo/ZarimanCommisionsManifestArchimedean.json";
interface IVendorManifest {
VendorInfo: {
_id: IOid;
TypeName: string;
ItemManifest: {
StoreItem: string;
QuantityMultiplier: number;
// has a few more fields but we don't care about those right now
}[];
};
}
const vendorManifests: IVendorManifest[] = [
ArchimedeanVendorManifest,
DeimosEntratiFragmentVendorProductsManifest,
DeimosFishmongerVendorManifest,
DeimosHivemindCommisionsManifestFishmonger,
DeimosHivemindCommisionsManifestPetVendor,
DeimosHivemindCommisionsManifestProspector,
DeimosHivemindCommisionsManifestTokenVendor,
DeimosHivemindCommisionsManifestWeaponsmith,
DeimosHivemindTokenVendorManifest,
DeimosPetVendorManifest,
DeimosProspectorVendorManifest,
DuviriAcrithisVendorManifest,
EntratiLabsEntratiLabsCommisionsManifest,
EntratiLabsEntratiLabVendorManifest,
HubsIronwakeDondaVendorManifest,
HubsRailjackCrewMemberVendorManifest,
HubsPerrinSequenceWeaponVendorManifest,
MaskSalesmanManifest,
OstronFishmongerVendorManifest,
OstronProspectorVendorManifest,
OstronPetVendorManifest,
SolarisFishmongerVendorManifest,
SolarisProspectorVendorManifest,
SolarisDebtTokenVendorManifest,
SolarisDebtTokenVendorRepossessionsManifest,
ZarimanCommisionsManifestArchimedean
];
export const getVendorManifestByTypeName = (typeName: string): IVendorManifest | undefined => {
for (const vendorManifest of vendorManifests) {
if (vendorManifest.VendorInfo.TypeName == typeName) {
return vendorManifest;
}
}
return undefined;
};
export const getVendorManifestByOid = (oid: string): IVendorManifest | undefined => {
for (const vendorManifest of vendorManifests) {
if (vendorManifest.VendorInfo._id.$oid == oid) {
return vendorManifest;
}
}
return undefined;
};