forked from OpenWF/SpaceNinjaServer
feat: sell/scrap CrewShipWeapons (#1655)
Closes #1646 Reviewed-on: OpenWF/SpaceNinjaServer#1655 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
parent
729061951f
commit
4cb1ea94e5
@ -6,9 +6,12 @@ import {
|
|||||||
addRecipes,
|
addRecipes,
|
||||||
addMiscItems,
|
addMiscItems,
|
||||||
addConsumables,
|
addConsumables,
|
||||||
freeUpSlot
|
freeUpSlot,
|
||||||
|
combineInventoryChanges
|
||||||
} from "@/src/services/inventoryService";
|
} from "@/src/services/inventoryService";
|
||||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
|
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
||||||
|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||||||
|
|
||||||
export const sellController: RequestHandler = async (req, res) => {
|
export const sellController: RequestHandler = async (req, res) => {
|
||||||
const payload = JSON.parse(String(req.body)) as ISellRequest;
|
const payload = JSON.parse(String(req.body)) as ISellRequest;
|
||||||
@ -48,6 +51,9 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
if (payload.Items.Hoverboards) {
|
if (payload.Items.Hoverboards) {
|
||||||
requiredFields.add(InventorySlot.SPACESUITS);
|
requiredFields.add(InventorySlot.SPACESUITS);
|
||||||
}
|
}
|
||||||
|
if (payload.Items.CrewShipWeapons) {
|
||||||
|
requiredFields.add(InventorySlot.RJ_COMPONENT_AND_ARMAMENTS);
|
||||||
|
}
|
||||||
const inventory = await getInventory(accountId, Array.from(requiredFields).join(" "));
|
const inventory = await getInventory(accountId, Array.from(requiredFields).join(" "));
|
||||||
|
|
||||||
// Give currency
|
// Give currency
|
||||||
@ -69,10 +75,14 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
ItemCount: payload.SellPrice
|
ItemCount: payload.SellPrice
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
} else if (payload.SellCurrency == "SC_Resources") {
|
||||||
|
// Will add appropriate MiscItems from CrewShipWeapons
|
||||||
} else {
|
} else {
|
||||||
throw new Error("Unknown SellCurrency: " + payload.SellCurrency);
|
throw new Error("Unknown SellCurrency: " + payload.SellCurrency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const inventoryChanges: IInventoryChanges = {};
|
||||||
|
|
||||||
// Remove item(s)
|
// Remove item(s)
|
||||||
if (payload.Items.Suits) {
|
if (payload.Items.Suits) {
|
||||||
payload.Items.Suits.forEach(sellItem => {
|
payload.Items.Suits.forEach(sellItem => {
|
||||||
@ -145,6 +155,24 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
inventory.Drones.pull({ _id: sellItem.String });
|
inventory.Drones.pull({ _id: sellItem.String });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (payload.Items.CrewShipWeapons) {
|
||||||
|
payload.Items.CrewShipWeapons.forEach(sellItem => {
|
||||||
|
const index = inventory.CrewShipWeapons.findIndex(x => x._id.equals(sellItem.String));
|
||||||
|
if (index != -1) {
|
||||||
|
const itemType = inventory.CrewShipWeapons[index].ItemType;
|
||||||
|
const recipe = Object.values(ExportDojoRecipes.fabrications).find(x => x.resultType == itemType)!;
|
||||||
|
const miscItemChanges = recipe.ingredients.map(x => ({
|
||||||
|
ItemType: x.ItemType,
|
||||||
|
ItemCount: Math.trunc(x.ItemCount * 0.8)
|
||||||
|
}));
|
||||||
|
addMiscItems(inventory, miscItemChanges);
|
||||||
|
combineInventoryChanges(inventoryChanges, { MiscItems: miscItemChanges });
|
||||||
|
|
||||||
|
inventory.CrewShipWeapons.splice(index, 1);
|
||||||
|
freeUpSlot(inventory, InventorySlot.RJ_COMPONENT_AND_ARMAMENTS);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
if (payload.Items.Consumables) {
|
if (payload.Items.Consumables) {
|
||||||
const consumablesChanges = [];
|
const consumablesChanges = [];
|
||||||
for (const sellItem of payload.Items.Consumables) {
|
for (const sellItem of payload.Items.Consumables) {
|
||||||
@ -191,7 +219,9 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
res.json({});
|
res.json({
|
||||||
|
inventoryChanges: inventoryChanges // "inventoryChanges" for this response instead of the usual "InventoryChanges"
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
interface ISellRequest {
|
interface ISellRequest {
|
||||||
@ -212,6 +242,7 @@ interface ISellRequest {
|
|||||||
OperatorAmps?: ISellItem[];
|
OperatorAmps?: ISellItem[];
|
||||||
Hoverboards?: ISellItem[];
|
Hoverboards?: ISellItem[];
|
||||||
Drones?: ISellItem[];
|
Drones?: ISellItem[];
|
||||||
|
CrewShipWeapons?: ISellItem[];
|
||||||
};
|
};
|
||||||
SellPrice: number;
|
SellPrice: number;
|
||||||
SellCurrency:
|
SellCurrency:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user