From d930c3d957fdd10bf5043ea1e950159e804faa8d Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 30 Dec 2024 19:48:20 +0100 Subject: [PATCH 1/3] feat: fish dissection (#663) --- src/controllers/api/fishmongerController.ts | 38 +++++++++++++++++++++ src/routes/api.ts | 2 ++ 2 files changed, 40 insertions(+) create mode 100644 src/controllers/api/fishmongerController.ts diff --git a/src/controllers/api/fishmongerController.ts b/src/controllers/api/fishmongerController.ts new file mode 100644 index 00000000..3d572948 --- /dev/null +++ b/src/controllers/api/fishmongerController.ts @@ -0,0 +1,38 @@ +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { addMiscItems, getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { RequestHandler } from "express"; +import { ExportResources } from "warframe-public-export-plus"; + +export const fishmongerController: RequestHandler = async (req, res) => { + if (!req.query.dissect) { + throw new Error("expected fishmonger request to be for dissection"); + } + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + const body = getJSONfromString(String(req.body)) as IFishmongerRequest; + const miscItemChanges: IMiscItem[] = []; + for (const fish of body.Fish) { + for (const part of ExportResources[fish.ItemType].dissectionParts!) { + const partItem = miscItemChanges.find(x => x.ItemType == part.ItemType); + if (partItem) { + partItem.ItemCount += part.ItemCount; + } else { + miscItemChanges.push(part); + } + } + miscItemChanges.push({ ItemType: fish.ItemType, ItemCount: fish.ItemCount * -1 }); + } + addMiscItems(inventory, miscItemChanges); + await inventory.save(); + res.json({ + InventoryChanges: { + MiscItems: miscItemChanges + } + }); +}; + +interface IFishmongerRequest { + Fish: IMiscItem[]; +} diff --git a/src/routes/api.ts b/src/routes/api.ts index d30bd9b5..885aa84b 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -11,6 +11,7 @@ import { dronesController } from "@/src/controllers/api/dronesController"; import { endlessXpController } from "@/src/controllers/api/endlessXpController"; import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController"; import { findSessionsController } from "@/src/controllers/api/findSessionsController"; +import { fishmongerController } from "@/src/controllers/api/fishmongerController"; import { focusController } from "@/src/controllers/api/focusController"; import { fusionTreasuresController } from "@/src/controllers/api/fusionTreasuresController"; import { genericUpdateController } from "@/src/controllers/api/genericUpdateController"; @@ -113,6 +114,7 @@ apiRouter.post("/createGuild.php", createGuildController); apiRouter.post("/endlessXp.php", endlessXpController); apiRouter.post("/evolveWeapon.php", evolveWeaponController); apiRouter.post("/findSessions.php", findSessionsController); +apiRouter.post("/fishmonger.php", fishmongerController); apiRouter.post("/focus.php", focusController); apiRouter.post("/fusionTreasures.php", fusionTreasuresController); apiRouter.post("/genericUpdate.php", genericUpdateController); -- 2.47.2 From b8ef39badad6309e5dd48ad798d212a5ab3cf80e Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 30 Dec 2024 19:48:43 +0100 Subject: [PATCH 2/3] feat: implement setShipFavouriteLoadout.php (#662) --- .../api/setShipFavouriteLoadoutController.ts | 31 +++++++++++++++++++ src/routes/api.ts | 2 ++ 2 files changed, 33 insertions(+) create mode 100644 src/controllers/api/setShipFavouriteLoadoutController.ts diff --git a/src/controllers/api/setShipFavouriteLoadoutController.ts b/src/controllers/api/setShipFavouriteLoadoutController.ts new file mode 100644 index 00000000..d798e0ed --- /dev/null +++ b/src/controllers/api/setShipFavouriteLoadoutController.ts @@ -0,0 +1,31 @@ +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { RequestHandler } from "express"; +import { getPersonalRooms } from "@/src/services/personalRoomsService"; +import { IOid } from "@/src/types/commonTypes"; +import { Types } from "mongoose"; + +export const setShipFavouriteLoadoutController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const personalRooms = await getPersonalRooms(accountId); + const body = JSON.parse(String(req.body)) as ISetShipFavouriteLoadoutRequest; + if (body.BootLocation != "SHOP") { + throw new Error(`unexpected BootLocation: ${body.BootLocation}`); + } + const display = personalRooms.TailorShop.FavouriteLoadouts.find(x => x.Tag == body.TagName); + if (display) { + display.LoadoutId = new Types.ObjectId(body.FavouriteLoadoutId.$oid); + } else { + personalRooms.TailorShop.FavouriteLoadouts.push({ + Tag: body.TagName, + LoadoutId: new Types.ObjectId(body.FavouriteLoadoutId.$oid) + }); + } + await personalRooms.save(); + res.json({}); +}; + +interface ISetShipFavouriteLoadoutRequest { + BootLocation: string; + FavouriteLoadoutId: IOid; + TagName: string; +} diff --git a/src/routes/api.ts b/src/routes/api.ts index 885aa84b..0a94e506 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -55,6 +55,7 @@ import { setActiveShipController } from "@/src/controllers/api/setActiveShipCont import { setBootLocationController } from "@/src/controllers/api/setBootLocationController"; import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController"; import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController"; +import { setShipFavouriteLoadoutController } from "@/src/controllers/api/setShipFavouriteLoadoutController"; import { setSupportedSyndicateController } from "@/src/controllers/api/setSupportedSyndicateController"; import { setWeaponSkillTreeController } from "../controllers/api/setWeaponSkillTreeController"; import { shipDecorationsController } from "@/src/controllers/api/shipDecorationsController"; @@ -136,6 +137,7 @@ apiRouter.post("/saveLoadout.php", saveLoadoutController); apiRouter.post("/sell.php", sellController); apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController); apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController); +apiRouter.post("/setShipFavouriteLoadout.php", setShipFavouriteLoadoutController); apiRouter.post("/setWeaponSkillTree.php", setWeaponSkillTreeController); apiRouter.post("/shipDecorations.php", shipDecorationsController); apiRouter.post("/startDojoRecipe.php", startDojoRecipeController); -- 2.47.2 From cfc60d5c99aea05ae0bcc7686cec511bb2a2f586 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 30 Dec 2024 23:51:26 +0100 Subject: [PATCH 3/3] fix(webui): showing hidden recipes for "add items" --- src/controllers/custom/getItemListsController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/custom/getItemListsController.ts b/src/controllers/custom/getItemListsController.ts index 24b8c0ae..72fb05da 100644 --- a/src/controllers/custom/getItemListsController.ts +++ b/src/controllers/custom/getItemListsController.ts @@ -50,7 +50,7 @@ const getItemListsController: RequestHandler = (req, res) => { } const recipeNameTemplate = getString("/Lotus/Language/Items/BlueprintAndItem", lang); for (const [uniqueName, item] of Object.entries(ExportRecipes)) { - if (!item.secretIngredientAction) { + if (!item.hidden) { const resultName = getItemName(item.resultType); if (resultName) { miscitems.push({ -- 2.47.2