feat: apply QuantityMultiplier for server-side vendor offers (#605)
This commit is contained in:
parent
2175e003cc
commit
d1d221bb58
@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
|
87
src/services/serversideVendorsService.ts
Normal file
87
src/services/serversideVendorsService.ts
Normal 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;
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user