From b451c73598e31aad28566209ed7e789f7f1ce85c Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 9 May 2025 21:38:42 -0700 Subject: [PATCH] chore: handle mods picked up in mission on U19 (#2042) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2042 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- .../api/artifactTransmutationController.ts | 24 ++++++------------- src/services/missionInventoryUpdateService.ts | 10 ++++++-- src/types/inventoryTypes/inventoryTypes.ts | 12 +++++++++- src/types/requestTypes.ts | 4 ++-- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/controllers/api/artifactTransmutationController.ts b/src/controllers/api/artifactTransmutationController.ts index 4310c7c45..deb05cde6 100644 --- a/src/controllers/api/artifactTransmutationController.ts +++ b/src/controllers/api/artifactTransmutationController.ts @@ -1,9 +1,9 @@ -import { toOid } from "@/src/helpers/inventoryHelpers"; +import { fromOid, toOid } from "@/src/helpers/inventoryHelpers"; import { createVeiledRivenFingerprint, rivenRawToRealWeighted } from "@/src/helpers/rivenHelper"; import { addMiscItems, addMods, getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getRandomElement, getRandomWeightedReward, getRandomWeightedRewardUc } from "@/src/services/rngService"; -import { IOid } from "@/src/types/commonTypes"; +import { IUpgradeFromClient } from "@/src/types/inventoryTypes/inventoryTypes"; import { RequestHandler } from "express"; import { ExportBoosterPacks, ExportUpgrades, TRarity } from "warframe-public-export-plus"; @@ -24,7 +24,7 @@ export const artifactTransmutationController: RequestHandler = async (req, res) ]); payload.Consumed.forEach(upgrade => { - inventory.Upgrades.pull({ _id: upgrade.ItemId.$oid }); + inventory.Upgrades.pull({ _id: fromOid(upgrade.ItemId) }); }); const rawRivenType = getRandomRawRivenType(); @@ -57,8 +57,8 @@ export const artifactTransmutationController: RequestHandler = async (req, res) payload.Consumed.forEach(upgrade => { const meta = ExportUpgrades[upgrade.ItemType]; counts[meta.rarity] += upgrade.ItemCount; - if (upgrade.ItemId.$oid != "000000000000000000000000") { - inventory.Upgrades.pull({ _id: upgrade.ItemId.$oid }); + if (fromOid(upgrade.ItemId) != "000000000000000000000000") { + inventory.Upgrades.pull({ _id: fromOid(upgrade.ItemId) }); } else { addMods(inventory, [ { @@ -128,24 +128,14 @@ const getRandomRawRivenType = (): string => { }; interface IArtifactTransmutationRequest { - Upgrade: IAgnosticUpgradeClient; + Upgrade: IUpgradeFromClient; LevelDiff: number; - Consumed: IAgnosticUpgradeClient[]; + Consumed: IUpgradeFromClient[]; Cost: number; FusionPointCost: number; RivenTransmute?: boolean; } -interface IAgnosticUpgradeClient { - ItemType: string; - ItemId: IOid; - FromSKU: boolean; - UpgradeFingerprint: string; - PendingRerollFingerprint: string; - ItemCount: number; - LastAdded: IOid; -} - const specialModSets: string[][] = [ [ "/Lotus/Upgrades/Mods/Immortal/ImmortalOneMod", diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index a2d76ae1c..14d700ff6 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -400,8 +400,14 @@ export const addMissionInventoryUpdates = async ( break; case "Upgrades": value.forEach(clientUpgrade => { - const upgrade = inventory.Upgrades.id(fromOid(clientUpgrade.ItemId))!; - upgrade.UpgradeFingerprint = clientUpgrade.UpgradeFingerprint; // primitive way to copy over the riven challenge progress + const id = fromOid(clientUpgrade.ItemId); + if (id == "") { + // U19 does not provide RawUpgrades and instead interleaves them with riven progress here + addMods(inventory, [clientUpgrade]); + } else { + const upgrade = inventory.Upgrades.id(id)!; + upgrade.UpgradeFingerprint = clientUpgrade.UpgradeFingerprint; // primitive way to copy over the riven challenge progress + } }); break; case "WeaponSkins": diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 3ca59ffdf..b18696ccd 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -535,6 +535,16 @@ export interface IUpgradeDatabase extends Omit { _id: Types.ObjectId; } +export interface IUpgradeFromClient { + ItemType: string; + ItemId: IOidWithLegacySupport; + FromSKU?: boolean; + UpgradeFingerprint: string; + PendingRerollFingerprint: string; + ItemCount: number; + LastAdded: IOidWithLegacySupport; +} + export interface ICrewShipMembersClient { SLOT_A?: ICrewShipMemberClient; SLOT_B?: ICrewShipMemberClient; @@ -1053,7 +1063,7 @@ export interface IQuestStage { export interface IRawUpgrade { ItemType: string; ItemCount: number; - LastAdded?: IOid; + LastAdded?: IOidWithLegacySupport; } export interface ISeasonChallenge { diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index e47b5b86d..ab895bd1c 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -15,7 +15,7 @@ import { IPlayerSkills, IQuestKeyDatabase, ILoreFragmentScan, - IUpgradeClient, + IUpgradeFromClient, ICollectibleEntry, IDiscoveredMarker, ILockedWeaponGroupClient, @@ -111,7 +111,7 @@ export type IMissionInventoryUpdateRequest = { Standing: number; }[]; CollectibleScans?: ICollectibleEntry[]; - Upgrades?: IUpgradeClient[]; // riven challenge progress + Upgrades?: IUpgradeFromClient[]; // riven challenge progress WeaponSkins?: IWeaponSkinClient[]; StrippedItems?: { DropTable: string;