返回提交历史
Modified
src/controllers/api/upgradesController.ts
+48
-8
Modified
src/models/inventoryModels/inventoryModel.ts
+2
-0
Modified
src/types/inventoryTypes/SuitTypes.ts
+1
-0
Modified
src/types/inventoryTypes/inventoryTypes.ts
+2
-0
Modified
src/types/inventoryTypes/weaponTypes.ts
+1
-0
XFEstudio/XFESpaceNinjaServer
feat: implement purchasing of additional mod & customization slots (#206)
a081d065
代码差异
5 个文件
+54
-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
};
@@ -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
},
@@ -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;
@@ -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"> {
@@ -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;