返回提交历史
Modified
src/controllers/api/claimCompletedRecipeController.ts
+10
-2
Modified
src/controllers/api/infestedFoundryController.ts
+3
-1
Modified
src/controllers/api/sellController.ts
+20
-1
Modified
src/controllers/api/startRecipeController.ts
+3
-2
Modified
src/services/inventoryService.ts
+6
-1
Modified
src/types/inventoryTypes/inventoryTypes.ts
+2
-0
XFEstudio/SpaceNinjaServer
fix: free slot when selling or otherwise getting rid of items (#1169)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1169
a029c288
代码差异
6 个文件
+44
-7
@@ -7,10 +7,17 @@ import { getRecipe } from "@/src/services/itemDataService";
7
7
import { IOid } from "@/src/types/commonTypes";
8
8
import { getJSONfromString } from "@/src/helpers/stringHelpers";
9
9
import { getAccountIdForRequest } from "@/src/services/loginService";
10
import { getInventory, updateCurrency, addItem, addMiscItems, addRecipes } from "@/src/services/inventoryService";
10
import {
11
getInventory,
12
updateCurrency,
13
addItem,
14
addMiscItems,
15
addRecipes,
16
occupySlot
17
} from "@/src/services/inventoryService";
11
18
import { IInventoryChanges } from "@/src/types/purchaseTypes";
12
19
import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
13
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
20
import { IMiscItem, InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
14
21
15
22
export interface IClaimCompletedRecipeRequest {
16
23
RecipeIds: IOid[];
@@ -53,6 +60,7 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
53
60
inventoryChanges[category].push(inventory[category][index].toJSON<IEquipmentClient>());
54
61
nonMiscItemIngredients.add(item.ItemType);
55
62
63
occupySlot(inventory, InventorySlot.WEAPONS, false);
56
64
inventoryChanges.WeaponBin ??= { Slots: 0 };
57
65
inventoryChanges.WeaponBin.Slots -= 1;
58
66
});
@@ -1,7 +1,7 @@
1
1
import { RequestHandler } from "express";
2
2
import { getAccountIdForRequest } from "@/src/services/loginService";
3
3
import { getJSONfromString } from "@/src/helpers/stringHelpers";
4
import { getInventory, addMiscItems, updateCurrency, addRecipes } from "@/src/services/inventoryService";
4
import { getInventory, addMiscItems, updateCurrency, addRecipes, freeUpSlot } from "@/src/services/inventoryService";
5
5
import { IOid } from "@/src/types/commonTypes";
6
6
import {
7
7
IConsumedSuit,
@@ -10,6 +10,7 @@ import {
10
10
IInfestedFoundryDatabase,
11
11
IInventoryClient,
12
12
IMiscItem,
13
InventorySlot,
13
14
ITypeCount
14
15
} from "@/src/types/inventoryTypes/inventoryTypes";
15
16
import { ExportMisc, ExportRecipes } from "warframe-public-export-plus";
@@ -264,6 +265,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
264
265
);
265
266
const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 1600_00);
266
267
addRecipes(inventory, recipeChanges);
268
freeUpSlot(inventory, InventorySlot.SUITS);
267
269
await inventory.save();
268
270
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
269
271
applyCheatsToInfestedFoundry(infestedFoundry);
@@ -1,6 +1,14 @@
1
1
import { RequestHandler } from "express";
2
2
import { getAccountIdForRequest } from "@/src/services/loginService";
3
import { getInventory, addMods, addRecipes, addMiscItems, addConsumables } from "@/src/services/inventoryService";
3
import {
4
getInventory,
5
addMods,
6
addRecipes,
7
addMiscItems,
8
addConsumables,
9
freeUpSlot
10
} from "@/src/services/inventoryService";
11
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
4
12
5
13
export const sellController: RequestHandler = async (req, res) => {
6
14
const payload = JSON.parse(String(req.body)) as ISellRequest;
@@ -34,56 +42,67 @@ export const sellController: RequestHandler = async (req, res) => {
34
42
if (payload.Items.Suits) {
35
43
payload.Items.Suits.forEach(sellItem => {
36
44
inventory.Suits.pull({ _id: sellItem.String });
45
freeUpSlot(inventory, InventorySlot.SUITS);
37
46
});
38
47
}
39
48
if (payload.Items.LongGuns) {
40
49
payload.Items.LongGuns.forEach(sellItem => {
41
50
inventory.LongGuns.pull({ _id: sellItem.String });
51
freeUpSlot(inventory, InventorySlot.WEAPONS);
42
52
});
43
53
}
44
54
if (payload.Items.Pistols) {
45
55
payload.Items.Pistols.forEach(sellItem => {
46
56
inventory.Pistols.pull({ _id: sellItem.String });
57
freeUpSlot(inventory, InventorySlot.WEAPONS);
47
58
});
48
59
}
49
60
if (payload.Items.Melee) {
50
61
payload.Items.Melee.forEach(sellItem => {
51
62
inventory.Melee.pull({ _id: sellItem.String });
63
freeUpSlot(inventory, InventorySlot.WEAPONS);
52
64
});
53
65
}
54
66
if (payload.Items.SpaceSuits) {
55
67
payload.Items.SpaceSuits.forEach(sellItem => {
56
68
inventory.SpaceSuits.pull({ _id: sellItem.String });
69
freeUpSlot(inventory, InventorySlot.SPACESUITS);
57
70
});
58
71
}
59
72
if (payload.Items.SpaceGuns) {
60
73
payload.Items.SpaceGuns.forEach(sellItem => {
61
74
inventory.SpaceGuns.pull({ _id: sellItem.String });
75
freeUpSlot(inventory, InventorySlot.SPACEWEAPONS);
62
76
});
63
77
}
64
78
if (payload.Items.SpaceMelee) {
65
79
payload.Items.SpaceMelee.forEach(sellItem => {
66
80
inventory.SpaceMelee.pull({ _id: sellItem.String });
81
freeUpSlot(inventory, InventorySlot.SPACEWEAPONS);
67
82
});
68
83
}
69
84
if (payload.Items.Sentinels) {
70
85
payload.Items.Sentinels.forEach(sellItem => {
71
86
inventory.Sentinels.pull({ _id: sellItem.String });
87
freeUpSlot(inventory, InventorySlot.SENTINELS);
72
88
});
73
89
}
74
90
if (payload.Items.SentinelWeapons) {
75
91
payload.Items.SentinelWeapons.forEach(sellItem => {
76
92
inventory.SentinelWeapons.pull({ _id: sellItem.String });
93
freeUpSlot(inventory, InventorySlot.SENTINELS);
77
94
});
78
95
}
79
96
if (payload.Items.OperatorAmps) {
80
97
payload.Items.OperatorAmps.forEach(sellItem => {
81
98
inventory.OperatorAmps.pull({ _id: sellItem.String });
99
freeUpSlot(inventory, InventorySlot.AMPS);
82
100
});
83
101
}
84
102
if (payload.Items.Hoverboards) {
85
103
payload.Items.Hoverboards.forEach(sellItem => {
86
104
inventory.Hoverboards.pull({ _id: sellItem.String });
105
freeUpSlot(inventory, InventorySlot.SPACESUITS);
87
106
});
88
107
}
89
108
if (payload.Items.Drones) {
@@ -3,10 +3,10 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers";
3
3
import { logger } from "@/src/utils/logger";
4
4
import { RequestHandler } from "express";
5
5
import { getRecipe } from "@/src/services/itemDataService";
6
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
6
import { addMiscItems, freeUpSlot, getInventory, updateCurrency } from "@/src/services/inventoryService";
7
7
import { unixTimesInMs } from "@/src/constants/timeConstants";
8
8
import { Types } from "mongoose";
9
import { ISpectreLoadout } from "@/src/types/inventoryTypes/inventoryTypes";
9
import { InventorySlot, ISpectreLoadout } from "@/src/types/inventoryTypes/inventoryTypes";
10
10
import { toOid } from "@/src/helpers/inventoryHelpers";
11
11
import { ExportWeapons } from "warframe-public-export-plus";
12
12
@@ -53,6 +53,7 @@ export const startRecipeController: RequestHandler = async (req, res) => {
53
53
pr[category] ??= [];
54
54
pr[category].push(inventory[category][equipmentIndex]);
55
55
inventory[category].splice(equipmentIndex, 1);
56
freeUpSlot(inventory, InventorySlot.WEAPONS);
56
57
} else {
57
58
addMiscItems(inventory, [
58
59
{
@@ -172,7 +172,7 @@ export const getInventory = async (
172
172
return inventory;
173
173
};
174
174
175
const occupySlot = (
175
export const occupySlot = (
176
176
inventory: TInventoryDatabaseDocument,
177
177
bin: InventorySlot,
178
178
premiumPurchase: boolean
@@ -193,6 +193,11 @@ const occupySlot = (
193
193
return inventoryChanges;
194
194
};
195
195
196
export const freeUpSlot = (inventory: TInventoryDatabaseDocument, bin: InventorySlot): void => {
197
// { count: -1, platinum: 0, Slots: 1 }
198
updateSlots(inventory, bin, 1, 0);
199
};
200
196
201
export const addItem = async (
197
202
inventory: TInventoryDatabaseDocument,
198
203
typeName: string,
@@ -452,9 +452,11 @@ export enum InventorySlot {
452
452
SUITS = "SuitBin",
453
453
WEAPONS = "WeaponBin",
454
454
SPACESUITS = "SpaceSuitBin",
455
SPACEWEAPONS = "SpaceWeaponBin",
455
456
MECHSUITS = "MechBin",
456
457
PVE_LOADOUTS = "PveBonusLoadoutBin",
457
458
SENTINELS = "SentinelBin",
459
AMPS = "OperatorAmpBin",
458
460
RJ_COMPONENT_AND_ARMAMENTS = "CrewShipSalvageBin"
459
461
}
460
462