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

fix: free slot when selling or otherwise getting rid of items (#1169)

Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1169

a029c288
Sainan <sainan@calamity.inc>
提交于

代码差异

6 个文件 +44 -7
Modified src/controllers/api/claimCompletedRecipeController.ts +10 -2
@@ -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 });
Modified src/controllers/api/infestedFoundryController.ts +3 -1
@@ -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);
Modified src/controllers/api/sellController.ts +20 -1
@@ -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) {
Modified src/controllers/api/startRecipeController.ts +3 -2
@@ -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 {
Modified src/services/inventoryService.ts +6 -1
@@ -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,
Modified src/types/inventoryTypes/inventoryTypes.ts +2 -0
@@ -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