From 6c2055a2465f8f84b7c1ca79e1e684ed1c080acd Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 17 Jun 2025 05:02:11 -0700 Subject: [PATCH] feat: echoes of umbra (#2177) Having this item in the inventory unlocks the helminth option which is helpfully called "remove cyst" to install and uninstall it on a frame. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2177 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/umbraController.ts | 27 ++++++++++++++++++++++++++ src/routes/api.ts | 2 ++ src/services/inventoryService.ts | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/controllers/api/umbraController.ts diff --git a/src/controllers/api/umbraController.ts b/src/controllers/api/umbraController.ts new file mode 100644 index 00000000..e89ca74d --- /dev/null +++ b/src/controllers/api/umbraController.ts @@ -0,0 +1,27 @@ +import { fromMongoDate, fromOid } from "@/src/helpers/inventoryHelpers"; +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { addMiscItem, getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { RequestHandler } from "express"; + +export const umbraController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId, "Suits MiscItems"); + const payload = getJSONfromString(String(req.body)); + for (const clientSuit of payload.Suits) { + const dbSuit = inventory.Suits.id(fromOid(clientSuit.ItemId))!; + if (clientSuit.UmbraDate) { + addMiscItem(inventory, "/Lotus/Types/Items/MiscItems/UmbraEchoes", -1); + dbSuit.UmbraDate = fromMongoDate(clientSuit.UmbraDate); + } else { + dbSuit.UmbraDate = undefined; + } + } + await inventory.save(); + res.end(); +}; + +interface IUmbraRequest { + Suits: IEquipmentClient[]; +} diff --git a/src/routes/api.ts b/src/routes/api.ts index 55c2fd7b..8b0a12bc 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -148,6 +148,7 @@ import { syndicateStandingBonusController } from "@/src/controllers/api/syndicat import { tauntHistoryController } from "@/src/controllers/api/tauntHistoryController"; import { tradingController } from "@/src/controllers/api/tradingController"; import { trainingResultController } from "@/src/controllers/api/trainingResultController"; +import { umbraController } from "@/src/controllers/api/umbraController"; import { unlockShipFeatureController } from "@/src/controllers/api/unlockShipFeatureController"; import { updateAlignmentController } from "@/src/controllers/api/updateAlignmentController"; import { updateChallengeProgressController } from "@/src/controllers/api/updateChallengeProgressController"; @@ -329,6 +330,7 @@ apiRouter.post("/syndicateSacrifice.php", syndicateSacrificeController); apiRouter.post("/syndicateStandingBonus.php", syndicateStandingBonusController); apiRouter.post("/tauntHistory.php", tauntHistoryController); apiRouter.post("/trainingResult.php", trainingResultController); +apiRouter.post("/umbra.php", umbraController); apiRouter.post("/unlockShipFeature.php", unlockShipFeatureController); apiRouter.post("/updateAlignment.php", updateAlignmentController); apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController); diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index ad53cad5..d598cbb1 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1580,7 +1580,7 @@ export const addMiscItem = ( inventory: TInventoryDatabaseDocument, type: string, count: number, - inventoryChanges: IInventoryChanges + inventoryChanges: IInventoryChanges = {} ): void => { const miscItemChanges: IMiscItem[] = [ {