返回提交历史
Added
src/controllers/api/gildWeaponController.ts
+66
-0
Modified
src/routes/api.ts
+2
-0
Modified
src/types/inventoryTypes/commonInventoryTypes.ts
+1
-0
XFEstudio/SpaceNinjaServer
feat: gilded weapons (#410)
Co-authored-by: AMelonInsideLemon <AMelonInsideLemon@users.noreply.github.com>
94f6d1b9
代码差异
3 个文件
+69
-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
};
@@ -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);
@@ -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
}