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: gilded weapons (#410)

Co-authored-by: AMelonInsideLemon <AMelonInsideLemon@users.noreply.github.com>

94f6d1b9
AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
提交于

代码差异

3 个文件 +69 -0
Added src/controllers/api/gildWeaponController.ts +66 -0
@@ -0,0 +1,66 @@
1 import { RequestHandler } from "express";
2 import { getAccountIdForRequest } from "@/src/services/loginService";
3 import { getJSONfromString } from "@/src/helpers/stringHelpers";
4 import { getInventory } from "@/src/services/inventoryService";
5 import { WeaponTypeInternal } from "@/src/services/itemDataService";
6 import { ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
7
8 const modularWeaponCategory: (WeaponTypeInternal | "Hoverboards")[] = [
9 "LongGuns",
10 "Pistols",
11 "Melee",
12 "OperatorAmps",
13 "Hoverboards" // Not sure about hoverboards just coppied from modual crafting
14 ];
15
16 interface IGildWeaponRequest {
17 ItemName: string;
18 Recipe: string; // /Lotus/Weapons/SolarisUnited/LotusGildKitgunBlueprint
19 PolarizeSlot?: number;
20 PolarizeValue?: ArtifactPolarity;
21 ItemId: string;
22 Category: WeaponTypeInternal | "Hoverboards";
23 }
24
25 // In export there no recipes for gild action, so reputation and ressources only consumed visually
26
27 // eslint-disable-next-line @typescript-eslint/no-misused-promises
28 export const gildWeaponController: RequestHandler = async (req, res) => {
29 const accountId = await getAccountIdForRequest(req);
30 const data: IGildWeaponRequest = getJSONfromString(String(req.body));
31 data.ItemId = String(req.query.ItemId);
32 if (!modularWeaponCategory.includes(req.query.Category as WeaponTypeInternal | "Hoverboards")) {
33 throw new Error(`Unknown modular weapon Category: ${req.query.Category}`);
34 }
35 data.Category = req.query.Category as WeaponTypeInternal | "Hoverboards";
36
37 const inventory = await getInventory(accountId);
38 if (!inventory[data.Category]) {
39 throw new Error(`Category ${req.query.Category} not found in inventory`);
40 }
41 const weaponIndex = inventory[data.Category].findIndex(x => String(x._id) === data.ItemId);
42 if (weaponIndex === -1) {
43 throw new Error(`Weapon with ${data.ItemId} not found in category ${req.query.Category}`);
44 }
45
46 const weapon = inventory[data.Category][weaponIndex];
47 weapon.Features = EquipmentFeatures.GILDED; // maybe 9 idk if DOUBLE_CAPACITY is also given
48 weapon.ItemName = data.ItemName;
49 weapon.XP = 0;
50 if (data.Category != "OperatorAmps" && data.PolarizeSlot && data.PolarizeValue) {
51 weapon.Polarity = [
52 {
53 Slot: data.PolarizeSlot,
54 Value: data.PolarizeValue
55 }
56 ];
57 }
58 inventory[data.Category][weaponIndex] = weapon;
59 await inventory.save();
60
61 res.json({
62 InventoryChanges: {
63 [data.Category]: [weapon]
64 }
65 });
66 };
Modified src/routes/api.ts +2 -0
@@ -61,6 +61,7 @@ import { updateChallengeProgressController } from "@/src/controllers/api/updateC
61 61 import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
62 62 import { updateThemeController } from "../controllers/api/updateThemeController";
63 63 import { upgradesController } from "@/src/controllers/api/upgradesController";
64 import { gildWeaponController } from "../controllers/api/gildWeaponController";
64 65
65 66 const apiRouter = express.Router();
66 67
@@ -106,6 +107,7 @@ apiRouter.post("/findSessions.php", findSessionsController);
106 107 apiRouter.post("/focus.php", focusController);
107 108 apiRouter.post("/genericUpdate.php", genericUpdateController);
108 109 apiRouter.post("/getAlliance.php", getAllianceController);
110 apiRouter.post("/gildWeapon.php", gildWeaponController);
109 111 apiRouter.post("/guildTech.php", guildTechController);
110 112 apiRouter.post("/hostSession.php", hostSessionController);
111 113 apiRouter.post("/infestedFoundry.php", infestedFoundryController);
Modified src/types/inventoryTypes/commonInventoryTypes.ts +1 -0
@@ -86,6 +86,7 @@ export enum EquipmentFeatures {
86 86 DOUBLE_CAPACITY = 1,
87 87 UTILITY_SLOT = 2,
88 88 GRAVIMAG_INSTALLED = 4,
89 GILDED = 8,
89 90 ARCANE_SLOT = 32,
90 91 INCARNON_GENESIS = 512
91 92 }