From c23eac5c87a0ee1a9ea481c83d4c43d6f406e1b9 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 13 Jun 2025 14:20:58 +0200 Subject: [PATCH 1/3] Update addStanding API --- src/controllers/api/fishmongerController.ts | 5 ++--- .../api/syndicateStandingBonusController.ts | 7 ++++--- src/services/inventoryService.ts | 7 ++++--- src/services/missionInventoryUpdateService.ts | 19 +++++++++---------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/controllers/api/fishmongerController.ts b/src/controllers/api/fishmongerController.ts index d85f7a4c..16fcc69b 100644 --- a/src/controllers/api/fishmongerController.ts +++ b/src/controllers/api/fishmongerController.ts @@ -30,15 +30,14 @@ export const fishmongerController: RequestHandler = async (req, res) => { miscItemChanges.push({ ItemType: fish.ItemType, ItemCount: fish.ItemCount * -1 }); } addMiscItems(inventory, miscItemChanges); - let affiliationMod; - if (gainedStanding && syndicateTag) affiliationMod = addStanding(inventory, syndicateTag, gainedStanding); + if (gainedStanding && syndicateTag) addStanding(inventory, syndicateTag, gainedStanding); await inventory.save(); res.json({ InventoryChanges: { MiscItems: miscItemChanges }, SyndicateTag: syndicateTag, - StandingChange: affiliationMod?.Standing || 0 + StandingChange: gainedStanding }); }; diff --git a/src/controllers/api/syndicateStandingBonusController.ts b/src/controllers/api/syndicateStandingBonusController.ts index 3170bc93..f5f0a5d2 100644 --- a/src/controllers/api/syndicateStandingBonusController.ts +++ b/src/controllers/api/syndicateStandingBonusController.ts @@ -5,7 +5,7 @@ import { IMiscItem, InventorySlot } from "@/src/types/inventoryTypes/inventoryTy import { IOid } from "@/src/types/commonTypes"; import { ExportSyndicates, ExportWeapons } from "warframe-public-export-plus"; import { logger } from "@/src/utils/logger"; -import { IInventoryChanges } from "@/src/types/purchaseTypes"; +import { IAffiliationMods, IInventoryChanges } from "@/src/types/purchaseTypes"; import { EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; export const syndicateStandingBonusController: RequestHandler = async (req, res) => { @@ -54,13 +54,14 @@ export const syndicateStandingBonusController: RequestHandler = async (req, res) inventoryChanges[slotBin] = { count: -1, platinum: 0, Slots: 1 }; } - const affiliationMod = addStanding(inventory, request.Operation.AffiliationTag, gainedStanding, true); + const affiliationMods: IAffiliationMods[] = []; + addStanding(inventory, request.Operation.AffiliationTag, gainedStanding, affiliationMods, true); await inventory.save(); res.json({ InventoryChanges: inventoryChanges, - AffiliationMods: [affiliationMod] + AffiliationMods: affiliationMods }); }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index ae9158c5..8e9bdd4a 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1202,8 +1202,9 @@ export const addStanding = ( inventory: TInventoryDatabaseDocument, syndicateTag: string, gainedStanding: number, + affiliationMods: IAffiliationMods[] = [], isMedallion: boolean = false -): IAffiliationMods => { +): void => { let syndicate = inventory.Affiliations.find(x => x.Tag == syndicateTag); const syndicateMeta = ExportSyndicates[syndicateTag]; @@ -1223,10 +1224,10 @@ export const addStanding = ( } syndicate.Standing += gainedStanding; - return { + affiliationMods.push({ Tag: syndicateTag, Standing: gainedStanding - }; + }); }; // TODO: AffiliationMods support (Nightwave). diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 21aff3b1..3a50cfcf 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -1236,19 +1236,18 @@ export const addMissionRewards = async ( SyndicateXPItemReward = medallionAmount; } else { if (rewardInfo.JobTier! >= 0) { - AffiliationMods.push( - addStanding( - inventory, - syndicateEntry.Tag, - Math.floor(currentJob.xpAmounts[rewardInfo.JobStage] / (rewardInfo.Q ? 0.8 : 1)) - ) + addStanding( + inventory, + syndicateEntry.Tag, + Math.floor(currentJob.xpAmounts[rewardInfo.JobStage] / (rewardInfo.Q ? 0.8 : 1)), + AffiliationMods ); } else { if (jobType.endsWith("Heists/HeistProfitTakerBountyOne") && rewardInfo.JobStage === 2) { - AffiliationMods.push(addStanding(inventory, syndicateEntry.Tag, 1000)); + addStanding(inventory, syndicateEntry.Tag, 1000, AffiliationMods); } if (jobType.endsWith("Hunts/AllTeralystsHunt") && rewardInfo.JobStage === 2) { - AffiliationMods.push(addStanding(inventory, syndicateEntry.Tag, 5000)); + addStanding(inventory, syndicateEntry.Tag, 5000, AffiliationMods); } if ( [ @@ -1259,7 +1258,7 @@ export const addMissionRewards = async ( "Heists/HeistExploiterBountyOne" ].some(ending => jobType.endsWith(ending)) ) { - AffiliationMods.push(addStanding(inventory, syndicateEntry.Tag, 1000)); + addStanding(inventory, syndicateEntry.Tag, 1000, AffiliationMods); } } } @@ -1284,7 +1283,7 @@ export const addMissionRewards = async ( let standingAmount = (tier + 1) * 1000; if (tier > 5) standingAmount = 7500; // InfestedLichBounty if (isSteelPath) standingAmount *= 1.5; - AffiliationMods.push(addStanding(inventory, syndicateTag, standingAmount)); + addStanding(inventory, syndicateTag, standingAmount, AffiliationMods); } if (syndicateTag == "HexSyndicate" && chemistry && tier < 6) { const seed = getWorldState().SyndicateMissions.find(x => x.Tag == "HexSyndicate")!.Seed; -- 2.47.2 From 521a8998bc1b5c6a8b3a5e609b57f508a1255eb5 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 13 Jun 2025 14:25:41 +0200 Subject: [PATCH 2/3] feat: handle classic syndicate alignments when trading in medals --- src/services/inventoryService.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 8e9bdd4a..9721bcfe 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1203,7 +1203,8 @@ export const addStanding = ( syndicateTag: string, gainedStanding: number, affiliationMods: IAffiliationMods[] = [], - isMedallion: boolean = false + isMedallion: boolean = false, + propagateAlignments: boolean = true ): void => { let syndicate = inventory.Affiliations.find(x => x.Tag == syndicateTag); const syndicateMeta = ExportSyndicates[syndicateTag]; @@ -1228,6 +1229,12 @@ export const addStanding = ( Tag: syndicateTag, Standing: gainedStanding }); + + if (syndicateMeta.alignments && propagateAlignments) { + for (const [tag, factor] of Object.entries(syndicateMeta.alignments)) { + addStanding(inventory, tag, gainedStanding * factor, affiliationMods, isMedallion, false); + } + } }; // TODO: AffiliationMods support (Nightwave). -- 2.47.2 From 4d3cbbb989f1626088fe598cb174559d6005d7cf Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 14 Jun 2025 05:41:00 +0200 Subject: [PATCH 3/3] Handle title decrease after applying alignment --- src/helpers/syndicateStandingHelper.ts | 11 +++++++++++ src/services/inventoryService.ts | 27 ++++++++++++++++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/helpers/syndicateStandingHelper.ts b/src/helpers/syndicateStandingHelper.ts index a412bdbf..ac478dda 100644 --- a/src/helpers/syndicateStandingHelper.ts +++ b/src/helpers/syndicateStandingHelper.ts @@ -10,3 +10,14 @@ export const getMaxStanding = (syndicate: ISyndicate, title: number): number => } return syndicate.titles.find(x => x.level == title)!.maxStanding; }; + +export const getMinStanding = (syndicate: ISyndicate, title: number): number => { + if (!syndicate.titles) { + // LibrarySyndicate + return 0; + } + if (title == 0) { + return syndicate.titles.find(x => x.level == -1)!.maxStanding; + } + return syndicate.titles.find(x => x.level == title)!.minStanding; +}; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 9721bcfe..ad53cad5 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -82,7 +82,7 @@ import { handleBundleAcqusition } from "./purchaseService"; import libraryDailyTasks from "@/static/fixed_responses/libraryDailyTasks.json"; import { getRandomElement, getRandomInt, getRandomWeightedReward, SRng } from "./rngService"; import { createMessage } from "./inboxService"; -import { getMaxStanding } from "@/src/helpers/syndicateStandingHelper"; +import { getMaxStanding, getMinStanding } from "@/src/helpers/syndicateStandingHelper"; import { getNightwaveSyndicateTag, getWorldState } from "./worldStateService"; import { generateNemesisProfile, INemesisProfile } from "../helpers/nemesisHelpers"; import { TAccountDocument } from "./loginService"; @@ -1217,6 +1217,10 @@ export const addStanding = ( const max = getMaxStanding(syndicateMeta, syndicate.Title ?? 0); if (syndicate.Standing + gainedStanding > max) gainedStanding = max - syndicate.Standing; + if (syndicate.Title == -2 && syndicate.Standing + gainedStanding < -71000) { + gainedStanding = -71000 + syndicate.Standing; + } + if (!isMedallion || syndicateMeta.medallionsCappedByDailyLimit) { if (gainedStanding > getStandingLimit(inventory, syndicateMeta.dailyLimitBin)) { gainedStanding = getStandingLimit(inventory, syndicateMeta.dailyLimitBin); @@ -1225,14 +1229,25 @@ export const addStanding = ( } syndicate.Standing += gainedStanding; - affiliationMods.push({ + const affiliationMod: IAffiliationMods = { Tag: syndicateTag, Standing: gainedStanding - }); + }; + affiliationMods.push(affiliationMod); - if (syndicateMeta.alignments && propagateAlignments) { - for (const [tag, factor] of Object.entries(syndicateMeta.alignments)) { - addStanding(inventory, tag, gainedStanding * factor, affiliationMods, isMedallion, false); + if (syndicateMeta.alignments) { + if (propagateAlignments) { + for (const [tag, factor] of Object.entries(syndicateMeta.alignments)) { + addStanding(inventory, tag, gainedStanding * factor, affiliationMods, isMedallion, false); + } + } else { + while (syndicate.Standing < getMinStanding(syndicateMeta, syndicate.Title ?? 0)) { + syndicate.Title ??= 0; + syndicate.Title -= 1; + affiliationMod.Title ??= 0; + affiliationMod.Title -= 1; + logger.debug(`${syndicateTag} is decreasing to title ${syndicate.Title} after applying alignment`); + } } } }; -- 2.47.2