diff --git a/src/controllers/api/artifactTransmutationController.ts b/src/controllers/api/artifactTransmutationController.ts index 4310c7c4..deb05cde 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 a2d76ae1..14d700ff 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 3ca59ffd..b18696cc 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 e47b5b86..ab895bd1 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;