XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

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

d1d221bb
Sainan <sainan@calamity.inc>
提交于

代码差异

3 个文件 +110 -137
Modified src/controllers/api/getVendorInfoController.ts +8 -132
@@ -1,138 +1,14 @@
1 1 import { RequestHandler } from "express";
2 import ArchimedeanVendorManifest from "@/static/fixed_responses/getVendorInfo/ArchimedeanVendorManifest.json";
3 import DeimosEntratiFragmentVendorProductsManifest from "@/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json";
4 import DeimosFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json";
5 import DeimosHivemindCommisionsManifestFishmonger from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json";
6 import DeimosHivemindCommisionsManifestPetVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json";
7 import DeimosHivemindCommisionsManifestProspector from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json";
8 import DeimosHivemindCommisionsManifestTokenVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json";
9 import DeimosHivemindCommisionsManifestWeaponsmith from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json";
10 import DeimosHivemindTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json";
11 import DeimosPetVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json";
12 import DeimosProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json";
13 import DuviriAcrithisVendorManifest from "@/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json";
14 import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json";
15 import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json";
16 import HubsIronwakeDondaVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json";
17 import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json";
18 import HubsPerrinSequenceWeaponVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json";
19 import MaskSalesmanManifest from "@/static/fixed_responses/getVendorInfo/MaskSalesmanManifest.json";
20 import OstronFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json";
21 import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json";
22 import OstronPetVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json";
23 import SolarisFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json";
24 import SolarisProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json";
25 import SolarisDebtTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json";
26 import SolarisDebtTokenVendorRepossessionsManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json";
27 import ZarimanCommisionsManifestArchimedean from "@/static/fixed_responses/getVendorInfo/ZarimanCommisionsManifestArchimedean.json";
2 import { getVendorManifestByTypeName } from "@/src/services/serversideVendorsService";
28 3
29 4 export const getVendorInfoController: RequestHandler = (req, res) => {
30 switch (req.query.vendor as string) {
31 case "/Lotus/Types/Game/VendorManifests/Ostron/FishmongerVendorManifest":
32 res.json(OstronFishmongerVendorManifest);
33 break;
34
35 case "/Lotus/Types/Game/VendorManifests/Ostron/ProspectorVendorManifest":
36 res.json(OstronProspectorVendorManifest);
37 break;
38
39 case "/Lotus/Types/Game/VendorManifests/Ostron/PetVendorManifest":
40 res.json(OstronPetVendorManifest);
41 break;
42
43 case "/Lotus/Types/Game/VendorManifests/Ostron/MaskSalesmanManifest":
44 res.json(MaskSalesmanManifest);
45 break;
46
47 case "/Lotus/Types/Game/VendorManifests/Solaris/FishmongerVendorManifest":
48 res.json(SolarisFishmongerVendorManifest);
49 break;
50
51 case "/Lotus/Types/Game/VendorManifests/Solaris/ProspectorVendorManifest":
52 res.json(SolarisProspectorVendorManifest);
53 break;
54
55 case "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorManifest":
56 res.json(SolarisDebtTokenVendorManifest);
57 break;
58
59 case "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorRepossessionsManifest":
60 res.json(SolarisDebtTokenVendorRepossessionsManifest);
61 break;
62
63 case "/Lotus/Types/Game/VendorManifests/Hubs/PerrinSequenceWeaponVendorManifest":
64 res.json(HubsPerrinSequenceWeaponVendorManifest);
65 break;
66
67 case "/Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest":
68 res.json(HubsRailjackCrewMemberVendorManifest);
69 break;
70
71 case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestWeaponsmith":
72 res.json(DeimosHivemindCommisionsManifestWeaponsmith);
73 break;
74
75 case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestFishmonger":
76 res.json(DeimosHivemindCommisionsManifestFishmonger);
77 break;
78
79 case "/Lotus/Types/Game/VendorManifests/Deimos/FishmongerVendorManifest":
80 res.json(DeimosFishmongerVendorManifest);
81 break;
82
83 case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestProspector":
84 res.json(DeimosHivemindCommisionsManifestProspector);
85 break;
86
87 case "/Lotus/Types/Game/VendorManifests/Deimos/ProspectorVendorManifest":
88 res.json(DeimosProspectorVendorManifest);
89 break;
90
91 case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestPetVendor":
92 res.json(DeimosHivemindCommisionsManifestPetVendor);
93 break;
94
95 case "/Lotus/Types/Game/VendorManifests/Deimos/PetVendorManifest":
96 res.json(DeimosPetVendorManifest);
97 break;
98
99 case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestTokenVendor":
100 res.json(DeimosHivemindCommisionsManifestTokenVendor);
101 break;
102
103 case "/Lotus/Types/Game/VendorManifests/Deimos/EntratiFragmentVendorProductsManifest":
104 res.json(DeimosEntratiFragmentVendorProductsManifest);
105 break;
106
107 case "/Lotus/Types/Game/VendorManifests/Deimos/HivemindTokenVendorManifest":
108 res.json(DeimosHivemindTokenVendorManifest);
109 break;
110
111 case "/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest":
112 res.json(HubsIronwakeDondaVendorManifest);
113 break;
114
115 case "/Lotus/Types/Game/VendorManifests/Zariman/ArchimedeanVendorManifest":
116 res.json(ArchimedeanVendorManifest);
117 break;
118
119 case "/Lotus/Types/Game/VendorManifests/Duviri/AcrithisVendorManifest":
120 res.json(DuviriAcrithisVendorManifest);
121 break;
122
123 case "/Lotus/Types/Game/VendorManifests/Zariman/ZarimanCommisionsManifestArchimedean":
124 res.json(ZarimanCommisionsManifestArchimedean);
125 break;
126
127 case "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabVendorManifest":
128 res.json(EntratiLabsEntratiLabVendorManifest);
129 break;
130
131 case "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabsCommisionsManifest":
132 res.json(EntratiLabsEntratiLabsCommisionsManifest);
133 break;
134
135 default:
5 if (typeof req.query.vendor == "string") {
6 const manifest = getVendorManifestByTypeName(req.query.vendor);
7 if (!manifest) {
136 8 throw new Error(`Unknown vendor: ${req.query.vendor}`);
9 }
10 res.json(manifest);
11 } else {
12 res.status(400).end();
137 13 }
138 14 };
Modified src/services/purchaseService.ts +15 -5
@@ -9,6 +9,7 @@ import {
9 9 updateCurrency,
10 10 updateSlots
11 11 } from "@/src/services/inventoryService";
12 import { getVendorManifestByOid } from "@/src/services/serversideVendorsService";
12 13 import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
13 14 import { IPurchaseRequest, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes";
14 15 import { logger } from "@/src/utils/logger";
@@ -32,6 +33,18 @@ export const getStoreItemTypesCategory = (typesItem: string) => {
32 33 export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountId: string) => {
33 34 logger.debug("purchase request", purchaseRequest);
34 35
36 if (purchaseRequest.PurchaseParams.Source == 7) {
37 const manifest = getVendorManifestByOid(purchaseRequest.PurchaseParams.SourceId!);
38 if (manifest) {
39 const offer = manifest.VendorInfo.ItemManifest.find(
40 x => x.StoreItem == purchaseRequest.PurchaseParams.StoreItem
41 );
42 if (offer) {
43 purchaseRequest.PurchaseParams.Quantity *= offer.QuantityMultiplier;
44 }
45 }
46 }
47
35 48 const purchaseResponse = await handleStoreItemAcquisition(
36 49 purchaseRequest.PurchaseParams.StoreItem,
37 50 accountId,
@@ -53,11 +66,8 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI
53 66
54 67 switch (purchaseRequest.PurchaseParams.Source) {
55 68 case 7:
56 if (!purchaseRequest.PurchaseParams.SourceId) {
57 throw new Error("invalid request source");
58 }
59 if (ExportVendors[purchaseRequest.PurchaseParams.SourceId]) {
60 const vendor = ExportVendors[purchaseRequest.PurchaseParams.SourceId];
69 if (purchaseRequest.PurchaseParams.SourceId! in ExportVendors) {
70 const vendor = ExportVendors[purchaseRequest.PurchaseParams.SourceId!];
61 71 const offer = vendor.items.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem);
62 72 if (offer) {
63 73 const inventory = await getInventory(accountId);
Added src/services/serversideVendorsService.ts +87 -0
@@ -0,0 +1,87 @@
1 import { IOid } from "@/src/types/commonTypes";
2
3 import ArchimedeanVendorManifest from "@/static/fixed_responses/getVendorInfo/ArchimedeanVendorManifest.json";
4 import DeimosEntratiFragmentVendorProductsManifest from "@/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json";
5 import DeimosFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosFishmongerVendorManifest.json";
6 import DeimosHivemindCommisionsManifestFishmonger from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json";
7 import DeimosHivemindCommisionsManifestPetVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json";
8 import DeimosHivemindCommisionsManifestProspector from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json";
9 import DeimosHivemindCommisionsManifestTokenVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json";
10 import DeimosHivemindCommisionsManifestWeaponsmith from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json";
11 import DeimosHivemindTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json";
12 import DeimosPetVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json";
13 import DeimosProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosProspectorVendorManifest.json";
14 import DuviriAcrithisVendorManifest from "@/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json";
15 import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json";
16 import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json";
17 import HubsIronwakeDondaVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json";
18 import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json";
19 import HubsPerrinSequenceWeaponVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json";
20 import MaskSalesmanManifest from "@/static/fixed_responses/getVendorInfo/MaskSalesmanManifest.json";
21 import OstronFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json";
22 import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json";
23 import OstronPetVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json";
24 import SolarisFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json";
25 import SolarisProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json";
26 import SolarisDebtTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json";
27 import SolarisDebtTokenVendorRepossessionsManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json";
28 import ZarimanCommisionsManifestArchimedean from "@/static/fixed_responses/getVendorInfo/ZarimanCommisionsManifestArchimedean.json";
29
30 interface IVendorManifest {
31 VendorInfo: {
32 _id: IOid;
33 TypeName: string;
34 ItemManifest: {
35 StoreItem: string;
36 QuantityMultiplier: number;
37 // has a few more fields but we don't care about those right now
38 }[];
39 };
40 }
41
42 const vendorManifests: IVendorManifest[] = [
43 ArchimedeanVendorManifest,
44 DeimosEntratiFragmentVendorProductsManifest,
45 DeimosFishmongerVendorManifest,
46 DeimosHivemindCommisionsManifestFishmonger,
47 DeimosHivemindCommisionsManifestPetVendor,
48 DeimosHivemindCommisionsManifestProspector,
49 DeimosHivemindCommisionsManifestTokenVendor,
50 DeimosHivemindCommisionsManifestWeaponsmith,
51 DeimosHivemindTokenVendorManifest,
52 DeimosPetVendorManifest,
53 DeimosProspectorVendorManifest,
54 DuviriAcrithisVendorManifest,
55 EntratiLabsEntratiLabsCommisionsManifest,
56 EntratiLabsEntratiLabVendorManifest,
57 HubsIronwakeDondaVendorManifest,
58 HubsRailjackCrewMemberVendorManifest,
59 HubsPerrinSequenceWeaponVendorManifest,
60 MaskSalesmanManifest,
61 OstronFishmongerVendorManifest,
62 OstronProspectorVendorManifest,
63 OstronPetVendorManifest,
64 SolarisFishmongerVendorManifest,
65 SolarisProspectorVendorManifest,
66 SolarisDebtTokenVendorManifest,
67 SolarisDebtTokenVendorRepossessionsManifest,
68 ZarimanCommisionsManifestArchimedean
69 ];
70
71 export const getVendorManifestByTypeName = (typeName: string): IVendorManifest | undefined => {
72 for (const vendorManifest of vendorManifests) {
73 if (vendorManifest.VendorInfo.TypeName == typeName) {
74 return vendorManifest;
75 }
76 }
77 return undefined;
78 };
79
80 export const getVendorManifestByOid = (oid: string): IVendorManifest | undefined => {
81 for (const vendorManifest of vendorManifests) {
82 if (vendorManifest.VendorInfo._id.$oid == oid) {
83 return vendorManifest;
84 }
85 }
86 return undefined;
87 };