From 79f19374831c4f2a939b58181986a7105b3d6934 Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 17 Jan 2025 14:43:33 +0100 Subject: [PATCH] fix: handle standing limits in fishmongerController (#795) --- src/controllers/api/fishmongerController.ts | 37 ++++++++++++------- .../api/syndicateStandingBonusController.ts | 14 +------ src/helpers/syndicateStandingHelper.ts | 12 ++++++ 3 files changed, 37 insertions(+), 26 deletions(-) create mode 100644 src/helpers/syndicateStandingHelper.ts diff --git a/src/controllers/api/fishmongerController.ts b/src/controllers/api/fishmongerController.ts index 789d158d0..37951333f 100644 --- a/src/controllers/api/fishmongerController.ts +++ b/src/controllers/api/fishmongerController.ts @@ -1,9 +1,10 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; -import { addMiscItems, getInventory } from "@/src/services/inventoryService"; +import { getMaxStanding } from "@/src/helpers/syndicateStandingHelper"; +import { addMiscItems, getInventory, getStandingLimit, updateStandingLimit } 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"; +import { ExportResources, ExportSyndicates } from "warframe-public-export-plus"; export const fishmongerController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -11,7 +12,7 @@ export const fishmongerController: RequestHandler = async (req, res) => { const body = getJSONfromString(String(req.body)) as IFishmongerRequest; const miscItemChanges: IMiscItem[] = []; let syndicateTag: string | undefined; - let standingChange = 0; + let gainedStanding = 0; for (const fish of body.Fish) { const fishData = ExportResources[fish.ItemType]; if (req.query.dissect == "1") { @@ -25,21 +26,29 @@ export const fishmongerController: RequestHandler = async (req, res) => { } } else { syndicateTag = fishData.syndicateTag!; - standingChange += fishData.standingBonus! * fish.ItemCount; + gainedStanding += fishData.standingBonus! * fish.ItemCount; } miscItemChanges.push({ ItemType: fish.ItemType, ItemCount: fish.ItemCount * -1 }); } addMiscItems(inventory, miscItemChanges); - if (standingChange && syndicateTag) { - const syndicate = inventory.Affiliations.find(x => x.Tag == syndicateTag); - if (syndicate !== undefined) { - syndicate.Standing += standingChange; - } else { - inventory.Affiliations.push({ - Tag: syndicateTag, - Standing: standingChange - }); + if (gainedStanding && syndicateTag) { + let syndicate = inventory.Affiliations.find(x => x.Tag == syndicateTag); + if (!syndicate) { + syndicate = inventory.Affiliations[inventory.Affiliations.push({ Tag: syndicateTag, Standing: 0 }) - 1]; } + const syndicateMeta = ExportSyndicates[syndicateTag]; + + const max = getMaxStanding(syndicateMeta, syndicate.Title ?? 0); + if (syndicate.Standing + gainedStanding > max) { + gainedStanding = max - syndicate.Standing; + } + if (gainedStanding > getStandingLimit(inventory, syndicateMeta.dailyLimitBin)) { + gainedStanding = getStandingLimit(inventory, syndicateMeta.dailyLimitBin); + } + + syndicate.Standing += gainedStanding; + + updateStandingLimit(inventory, syndicateMeta.dailyLimitBin, gainedStanding); } await inventory.save(); res.json({ @@ -47,7 +56,7 @@ export const fishmongerController: RequestHandler = async (req, res) => { MiscItems: miscItemChanges }, SyndicateTag: syndicateTag, - StandingChange: standingChange + StandingChange: gainedStanding }); }; diff --git a/src/controllers/api/syndicateStandingBonusController.ts b/src/controllers/api/syndicateStandingBonusController.ts index 5fafd89d2..60c3058fc 100644 --- a/src/controllers/api/syndicateStandingBonusController.ts +++ b/src/controllers/api/syndicateStandingBonusController.ts @@ -3,7 +3,8 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory, getStandingLimit, updateStandingLimit } from "@/src/services/inventoryService"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IOid } from "@/src/types/commonTypes"; -import { ExportSyndicates, ISyndicate } from "warframe-public-export-plus"; +import { ExportSyndicates } from "warframe-public-export-plus"; +import { getMaxStanding } from "@/src/helpers/syndicateStandingHelper"; export const syndicateStandingBonusController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -67,14 +68,3 @@ interface ISyndicateStandingBonusRequest { }; ModularWeaponId: IOid; // Seems to just be "000000000000000000000000", also note there's a "Category" query field } - -const getMaxStanding = (syndicate: ISyndicate, title: number): number => { - if (!syndicate.titles) { - // LibrarySyndicate - return 125000; - } - if (title == 0) { - return syndicate.titles.find(x => x.level == 1)!.minStanding; - } - return syndicate.titles.find(x => x.level == title)!.maxStanding; -}; diff --git a/src/helpers/syndicateStandingHelper.ts b/src/helpers/syndicateStandingHelper.ts new file mode 100644 index 000000000..a412bdbf4 --- /dev/null +++ b/src/helpers/syndicateStandingHelper.ts @@ -0,0 +1,12 @@ +import { ISyndicate } from "warframe-public-export-plus"; + +export const getMaxStanding = (syndicate: ISyndicate, title: number): number => { + if (!syndicate.titles) { + // LibrarySyndicate + return 125000; + } + if (title == 0) { + return syndicate.titles.find(x => x.level == 1)!.minStanding; + } + return syndicate.titles.find(x => x.level == title)!.maxStanding; +};