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: implement purchasing of additional mod & customization slots (#206)

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

代码差异

5 个文件 +54 -8
Modified src/controllers/api/upgradesController.ts +48 -8
@@ -2,19 +2,28 @@ import { RequestHandler } from "express";
2 2 import { IUpgradesRequest } from "@/src/types/requestTypes";
3 3 import { IPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes";
4 4 import { IGenericItemDatabase, IMiscItem, TGenericItemKey } from "@/src/types/inventoryTypes/inventoryTypes";
5 import { addMiscItems, getInventory } from "@/src/services/inventoryService";
5 import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
6 6
7 7 export const upgradesController: RequestHandler = async (req, res) => {
8 8 const accountId = req.query.accountId as string;
9 9 const payload = JSON.parse(req.body.toString()) as IUpgradesRequest;
10 10 const inventory = await getInventory(accountId);
11 const InventoryChanges: any = {};
11 12 for (const operation of payload.Operations) {
12 addMiscItems(inventory, [
13 {
14 ItemType: operation.UpgradeRequirement,
15 ItemCount: -1
16 } satisfies IMiscItem
17 ]);
13 if (
14 operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/ModSlotUnlocker" ||
15 operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker"
16 ) {
17 updateCurrency(10, true, accountId);
18 } else {
19 addMiscItems(inventory, [
20 {
21 ItemType: operation.UpgradeRequirement,
22 ItemCount: -1
23 } satisfies IMiscItem
24 ]);
25 }
26
18 27 switch (operation.UpgradeRequirement) {
19 28 case "/Lotus/Types/Items/MiscItems/OrokinReactor":
20 29 case "/Lotus/Types/Items/MiscItems/OrokinCatalyst":
@@ -43,6 +52,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
43 52 if (item._id.toString() == payload.ItemId.$oid) {
44 53 item.Features ??= 0;
45 54 item.Features |= 32;
55 break;
46 56 }
47 57 }
48 58 break;
@@ -61,10 +71,40 @@ export const upgradesController: RequestHandler = async (req, res) => {
61 71 }
62 72 }
63 73 break;
74 case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker":
75 for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) {
76 if (item._id.toString() == payload.ItemId.$oid) {
77 item.ModSlotPurchases ??= 0;
78 item.ModSlotPurchases += 1;
79 InventoryChanges[payload.ItemCategory] = {
80 ItemId: {
81 $oid: payload.ItemId.$oid
82 },
83 ModSlotPurchases: item.ModSlotPurchases
84 };
85 break;
86 }
87 }
88 break;
89 case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker":
90 for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) {
91 if (item._id.toString() == payload.ItemId.$oid) {
92 item.CustomizationSlotPurchases ??= 0;
93 item.CustomizationSlotPurchases += 1;
94 InventoryChanges[payload.ItemCategory] = {
95 ItemId: {
96 $oid: payload.ItemId.$oid
97 },
98 CustomizationSlotPurchases: item.CustomizationSlotPurchases
99 };
100 break;
101 }
102 }
103 break;
64 104 default:
65 105 throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement);
66 106 }
67 107 }
68 108 await inventory.save();
69 res.end();
109 res.json({ InventoryChanges });
70 110 };
Modified src/models/inventoryModels/inventoryModel.ts +2 -0
@@ -193,6 +193,7 @@ const WeaponSchema = new Schema<IWeaponDatabase>(
193 193 Polarity: [polaritySchema],
194 194 FocusLens: String,
195 195 ModSlotPurchases: Number,
196 CustomizationSlotPurchases: Number,
196 197 UpgradeType: Schema.Types.Mixed, //todo
197 198 UpgradeFingerprint: String,
198 199 ItemName: String,
@@ -275,6 +276,7 @@ const suitSchema = new Schema<ISuitDatabase>(
275 276 Polarity: [polaritySchema],
276 277 Polarized: Number,
277 278 ModSlotPurchases: Number,
279 CustomizationSlotPurchases: Number,
278 280 FocusLens: String,
279 281 UnlockLevel: Number
280 282 },
Modified src/types/inventoryTypes/SuitTypes.ts +1 -0
@@ -17,6 +17,7 @@ export interface ISuitDatabase {
17 17 Polarity?: IPolarity[];
18 18 Polarized?: number;
19 19 ModSlotPurchases?: number;
20 CustomizationSlotPurchases?: number;
20 21 FocusLens?: string;
21 22 UnlockLevel?: number;
22 23 _id: Types.ObjectId;
Modified src/types/inventoryTypes/inventoryTypes.ts +2 -0
@@ -94,6 +94,8 @@ export interface IGenericItem {
94 94 Features?: number;
95 95 Polarity?: IPolarity[];
96 96 Polarized?: number;
97 ModSlotPurchases?: number;
98 CustomizationSlotPurchases?: number;
97 99 }
98 100
99 101 export interface IGenericItemDatabase extends Omit<IGenericItem, "ItemId"> {
Modified src/types/inventoryTypes/weaponTypes.ts +1 -0
@@ -17,6 +17,7 @@ export interface IWeaponDatabase {
17 17 Polarity?: IPolarity[];
18 18 FocusLens?: string;
19 19 ModSlotPurchases?: number;
20 CustomizationSlotPurchases?: number;
20 21 UpgradeType?: string;
21 22 UpgradeFingerprint?: string;
22 23 ItemName?: string;