From 8e4f5077804af4e5cac109dc8fea735259365845 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 9 Apr 2025 20:42:19 +0200 Subject: [PATCH 1/3] feat: track EudicoHeists in CompletedJobChains --- src/services/missionInventoryUpdateService.ts | 22 +++++++++++++++++++ src/types/requestTypes.ts | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index ab5bdcdb..818a32b4 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -143,6 +143,28 @@ export const addMissionInventoryUpdates = async ( if (inventoryUpdates.RewardInfo.NemesisAbandonedRewards) { inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards; } + if (inventoryUpdates.MissionStatus == "GS_SUCCESS" && inventoryUpdates.RewardInfo.jobId) { + // e.g. for Profit-Taker Phase 1: + // JobTier: -6, + // jobId: '/Lotus/Types/Gameplay/Venus/Jobs/Heists/HeistProfitTakerBountyOne_-6_SolarisUnitedHub1_663a71c80000000000000025_EudicoHeists', + // This is sent multiple times, with JobStage and CheckpointCounter incremented each time (starting at 0 and 1, respectively), + // but only the final upload has GS_SUCCESS. + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [bounty, tier, hub, id, tag] = inventoryUpdates.RewardInfo.jobId.split("_"); + if (tag == "EudicoHeists") { + let chain = inventory.CompletedJobChains.find(x => x.LocationTag == tag); + if (!chain) { + chain = + inventory.CompletedJobChains[ + inventory.CompletedJobChains.push({ LocationTag: tag, Jobs: [] }) - 1 + ]; + } + if (!chain.Jobs.includes(bounty)) { + chain.Jobs.push(bounty); + } + } + } } for (const [key, value] of getEntriesUnsafe(inventoryUpdates)) { if (value === undefined) { diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 173d150d..249e2a0d 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -143,6 +143,11 @@ export interface IRewardInfo { PurgatoryRewardQualifications?: string; rewardSeed?: number; periodicMissionTag?: string; + JobTier?: string; + jobId?: string; + JobStage?: string; + Q?: boolean; + CheckpointCounter?: number; } export type IMissionStatus = "GS_SUCCESS" | "GS_FAILURE" | "GS_DUMPED" | "GS_QUIT" | "GS_INTERRUPTED"; -- 2.47.2 From 2187b1cae5d1eb378627082ac8e59e49729ddc64 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 9 Apr 2025 20:47:28 +0200 Subject: [PATCH 2/3] some better noting --- src/services/missionInventoryUpdateService.ts | 3 +-- src/types/requestTypes.ts | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 818a32b4..dcef5646 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -147,8 +147,7 @@ export const addMissionInventoryUpdates = async ( // e.g. for Profit-Taker Phase 1: // JobTier: -6, // jobId: '/Lotus/Types/Gameplay/Venus/Jobs/Heists/HeistProfitTakerBountyOne_-6_SolarisUnitedHub1_663a71c80000000000000025_EudicoHeists', - // This is sent multiple times, with JobStage and CheckpointCounter incremented each time (starting at 0 and 1, respectively), - // but only the final upload has GS_SUCCESS. + // This is sent multiple times, with JobStage starting at 0 and incrementing each time, but only the final upload has GS_SUCCESS. // eslint-disable-next-line @typescript-eslint/no-unused-vars const [bounty, tier, hub, id, tag] = inventoryUpdates.RewardInfo.jobId.split("_"); diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 249e2a0d..1f00fa45 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -143,11 +143,13 @@ export interface IRewardInfo { PurgatoryRewardQualifications?: string; rewardSeed?: number; periodicMissionTag?: string; + + // for bounties, only EOM_AFK and node are given from above, plus: JobTier?: string; jobId?: string; JobStage?: string; - Q?: boolean; - CheckpointCounter?: number; + Q?: boolean; // always false? + CheckpointCounter?: number; // starts at 1, is incremented with each job stage upload, and does not reset when starting a new job } export type IMissionStatus = "GS_SUCCESS" | "GS_FAILURE" | "GS_DUMPED" | "GS_QUIT" | "GS_INTERRUPTED"; -- 2.47.2 From e361d7ee5c5b7f68a2443af40814e679283db256 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 9 Apr 2025 20:55:17 +0200 Subject: [PATCH 3/3] make the array optional --- src/models/inventoryModels/inventoryModel.ts | 2 +- src/services/missionInventoryUpdateService.ts | 1 + src/types/inventoryTypes/inventoryTypes.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 1b990228..47c8da96 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -1414,7 +1414,7 @@ const inventorySchema = new Schema( //https://warframe.fandom.com/wiki/Heist //ProfitTaker(1-4) Example:"LocationTag": "EudicoHeists", "Jobs":Mission name - CompletedJobChains: [completedJobChainsSchema], + CompletedJobChains: { type: [completedJobChainsSchema], default: undefined }, //Night Wave Challenge SeasonChallengeHistory: [seasonChallengeHistorySchema], diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index dcef5646..e0641adf 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -152,6 +152,7 @@ export const addMissionInventoryUpdates = async ( // eslint-disable-next-line @typescript-eslint/no-unused-vars const [bounty, tier, hub, id, tag] = inventoryUpdates.RewardInfo.jobId.split("_"); if (tag == "EudicoHeists") { + inventory.CompletedJobChains ??= []; let chain = inventory.CompletedJobChains.find(x => x.LocationTag == tag); if (!chain) { chain = diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index c25b7123..244e71bd 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -292,7 +292,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu RecentVendorPurchases?: IRecentVendorPurchaseClient[]; NodeIntrosCompleted: string[]; GuildId?: IOid; - CompletedJobChains: ICompletedJobChain[]; + CompletedJobChains?: ICompletedJobChain[]; SeasonChallengeHistory: ISeasonChallenge[]; EquippedInstrument?: string; InvasionChainProgress: IInvasionChainProgress[]; -- 2.47.2