返回提交历史
Modified
src/controllers/api/sellController.ts
+33
-2
XFEstudio/SpaceNinjaServer
feat: sell/scrap CrewShipWeapons (#1655)
Closes #1646 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1655 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
4cb1ea94
代码差异
1 个文件
+33
-2
@@ -6,9 +6,12 @@ import {
6
6
addRecipes,
7
7
addMiscItems,
8
8
addConsumables,
9
freeUpSlot
9
freeUpSlot,
10
combineInventoryChanges
10
11
} from "@/src/services/inventoryService";
11
12
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
13
import { ExportDojoRecipes } from "warframe-public-export-plus";
14
import { IInventoryChanges } from "@/src/types/purchaseTypes";
12
15
13
16
export const sellController: RequestHandler = async (req, res) => {
14
17
const payload = JSON.parse(String(req.body)) as ISellRequest;
@@ -48,6 +51,9 @@ export const sellController: RequestHandler = async (req, res) => {
48
51
if (payload.Items.Hoverboards) {
49
52
requiredFields.add(InventorySlot.SPACESUITS);
50
53
}
54
if (payload.Items.CrewShipWeapons) {
55
requiredFields.add(InventorySlot.RJ_COMPONENT_AND_ARMAMENTS);
56
}
51
57
const inventory = await getInventory(accountId, Array.from(requiredFields).join(" "));
52
58
53
59
// Give currency
@@ -69,10 +75,14 @@ export const sellController: RequestHandler = async (req, res) => {
69
75
ItemCount: payload.SellPrice
70
76
}
71
77
]);
78
} else if (payload.SellCurrency == "SC_Resources") {
79
// Will add appropriate MiscItems from CrewShipWeapons
72
80
} else {
73
81
throw new Error("Unknown SellCurrency: " + payload.SellCurrency);
74
82
}
75
83
84
const inventoryChanges: IInventoryChanges = {};
85
76
86
// Remove item(s)
77
87
if (payload.Items.Suits) {
78
88
payload.Items.Suits.forEach(sellItem => {
@@ -145,6 +155,24 @@ export const sellController: RequestHandler = async (req, res) => {
145
155
inventory.Drones.pull({ _id: sellItem.String });
146
156
});
147
157
}
158
if (payload.Items.CrewShipWeapons) {
159
payload.Items.CrewShipWeapons.forEach(sellItem => {
160
const index = inventory.CrewShipWeapons.findIndex(x => x._id.equals(sellItem.String));
161
if (index != -1) {
162
const itemType = inventory.CrewShipWeapons[index].ItemType;
163
const recipe = Object.values(ExportDojoRecipes.fabrications).find(x => x.resultType == itemType)!;
164
const miscItemChanges = recipe.ingredients.map(x => ({
165
ItemType: x.ItemType,
166
ItemCount: Math.trunc(x.ItemCount * 0.8)
167
}));
168
addMiscItems(inventory, miscItemChanges);
169
combineInventoryChanges(inventoryChanges, { MiscItems: miscItemChanges });
170
171
inventory.CrewShipWeapons.splice(index, 1);
172
freeUpSlot(inventory, InventorySlot.RJ_COMPONENT_AND_ARMAMENTS);
173
}
174
});
175
}
148
176
if (payload.Items.Consumables) {
149
177
const consumablesChanges = [];
150
178
for (const sellItem of payload.Items.Consumables) {
@@ -191,7 +219,9 @@ export const sellController: RequestHandler = async (req, res) => {
191
219
}
192
220
193
221
await inventory.save();
194
res.json({});
222
res.json({
223
inventoryChanges: inventoryChanges // "inventoryChanges" for this response instead of the usual "InventoryChanges"
224
});
195
225
};
196
226
197
227
interface ISellRequest {
@@ -212,6 +242,7 @@ interface ISellRequest {
212
242
OperatorAmps?: ISellItem[];
213
243
Hoverboards?: ISellItem[];
214
244
Drones?: ISellItem[];
245
CrewShipWeapons?: ISellItem[];
215
246
};
216
247
SellPrice: number;
217
248
SellCurrency: