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: 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
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

1 个文件 +33 -2
Modified src/controllers/api/sellController.ts +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: