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

XFESpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/XFESpaceNinjaServer

feat: void relic refinement (#455)

e88decd9
Sainan <sainan@calamity.gg>
提交于

代码差异

2 个文件 +66 -0
Added src/controllers/api/projectionManagerController.ts +64 -0
@@ -0,0 +1,64 @@
1 import { RequestHandler } from "express";
2 import { getAccountIdForRequest } from "@/src/services/loginService";
3 import { addMiscItems, getInventory } from "@/src/services/inventoryService";
4 import { ExportRelics, IRelic } from "warframe-public-export-plus";
5
6 // eslint-disable-next-line @typescript-eslint/no-misused-promises
7 export const projectionManagerController: RequestHandler = async (req, res) => {
8 const accountId = await getAccountIdForRequest(req);
9 const inventory = await getInventory(accountId);
10 const request = JSON.parse(String(req.body)) as IProjectionUpgradeRequest;
11 const [era, category, currentQuality] = parseProjection(request.projectionType);
12 const upgradeCost = (request.qualityTag - qualityKeywordToNumber[currentQuality]) * 25;
13 const newProjectionType = findProjection(era, category, qualityNumberToKeyword[request.qualityTag]);
14 addMiscItems(inventory, [
15 {
16 ItemType: request.projectionType,
17 ItemCount: -1
18 },
19 {
20 ItemType: newProjectionType,
21 ItemCount: 1
22 },
23 {
24 ItemType: "/Lotus/Types/Items/MiscItems/VoidTearDrop",
25 ItemCount: -upgradeCost
26 }
27 ]);
28 await inventory.save();
29 res.json({
30 prevProjection: request.projectionType,
31 upgradedProjection: newProjectionType,
32 upgradeCost: upgradeCost
33 });
34 };
35
36 interface IProjectionUpgradeRequest {
37 projectionType: string;
38 qualityTag: number;
39 }
40
41 type VoidProjectionQuality = "VPQ_BRONZE" | "VPQ_SILVER" | "VPQ_GOLD" | "VPQ_PLATINUM";
42
43 const qualityNumberToKeyword: VoidProjectionQuality[] = ["VPQ_BRONZE", "VPQ_SILVER", "VPQ_GOLD", "VPQ_PLATINUM"];
44 const qualityKeywordToNumber: Record<VoidProjectionQuality, number> = {
45 VPQ_BRONZE: 0,
46 VPQ_SILVER: 1,
47 VPQ_GOLD: 2,
48 VPQ_PLATINUM: 3
49 };
50
51 // e.g. "/Lotus/Types/Game/Projections/T2VoidProjectionProteaPrimeDBronze" -> ["Lith", "W5", "VPQ_BRONZE"]
52 const parseProjection = (typeName: string): [string, string, VoidProjectionQuality] => {
53 const relic: IRelic | undefined = ExportRelics[typeName];
54 if (!relic) {
55 throw new Error(`Unknown projection ${typeName}`);
56 }
57 return [relic.era, relic.category, relic.quality];
58 };
59
60 const findProjection = (era: string, category: string, quality: VoidProjectionQuality): string => {
61 return Object.entries(ExportRelics).find(
62 ([_, relic]) => relic.era == era && relic.category == category && relic.quality == quality
63 )![0];
64 };
Modified src/routes/api.ts +2 -0
@@ -40,6 +40,7 @@ import { missionInventoryUpdateController } from "@/src/controllers/api/missionI
40 40 import { modularWeaponCraftingController } from "@/src/controllers/api/modularWeaponCraftingController";
41 41 import { modularWeaponSaleController } from "@/src/controllers/api/modularWeaponSaleController";
42 42 import { nameWeaponController } from "@/src/controllers/api/nameWeaponController";
43 import { projectionManagerController } from "../controllers/api/projectionManagerController";
43 44 import { purchaseController } from "@/src/controllers/api/purchaseController";
44 45 import { queueDojoComponentDestructionController } from "@/src/controllers/api/queueDojoComponentDestructionController";
45 46 import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
@@ -118,6 +119,7 @@ apiRouter.post("/login.php", loginController);
118 119 apiRouter.post("/missionInventoryUpdate.php", missionInventoryUpdateController);
119 120 apiRouter.post("/modularWeaponCrafting.php", modularWeaponCraftingController);
120 121 apiRouter.post("/nameWeapon.php", nameWeaponController);
122 apiRouter.post("/projectionManager.php", projectionManagerController);
121 123 apiRouter.post("/purchase.php", purchaseController);
122 124 apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
123 125 apiRouter.post("/saveLoadout.php", saveLoadoutController);