From 568b2913ba0cad7290047bb73ae1714245c84bf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=81nis?= Date: Wed, 23 Apr 2025 00:32:07 +0300 Subject: [PATCH 1/5] feat: conquest research points --- .../api/missionInventoryUpdateController.ts | 44 +++++++++++++++++-- src/types/requestTypes.ts | 7 ++- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index d8bf8ac9..5f43f07a 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -75,12 +75,10 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) const { MissionRewards, inventoryChanges, credits, AffiliationMods, SyndicateXPItemReward } = await addMissionRewards(inventory, missionReport, firstCompletion); - await inventory.save(); - const inventoryResponse = await getInventoryResponse(inventory, true); + //TODO: figure out when to send inventory. it is needed for many cases. const response: IMissionInventoryUpdateResponse = { - InventoryJson: JSON.stringify(inventoryResponse), InventoryChanges: inventoryChanges, MissionRewards, ...credits, @@ -89,10 +87,50 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) SyndicateXPItemReward, AffiliationMods }; + if (missionReport.ConquestMissionsCompleted !== undefined) { response.ConquestCompletedMissionsCount = missionReport.ConquestMissionsCompleted == 2 ? 0 : missionReport.ConquestMissionsCompleted + 1; + + + + let score = 1; + if(missionReport.RewardInfo?.ConquestHardModeActive === 1) + score += 3 + + if (missionReport.RewardInfo?.ConquestPersonalModifiersActive !== undefined) + score += missionReport.RewardInfo?.ConquestPersonalModifiersActive; + if (missionReport.RewardInfo?.ConquestEquipmentSuggestionsFulfilled !== undefined) + score += missionReport.RewardInfo?.ConquestEquipmentSuggestionsFulfilled; + + score *= missionReport.ConquestMissionsCompleted + 1 + + if(missionReport.ConquestMissionsCompleted == 2 && missionReport.RewardInfo?.ConquestHardModeActive === 1) + score += 1; + + const conquestType = missionReport.RewardInfo?.ConquestType; + const conquestNode = conquestType == "HexConquest" ? "EchoesHexConquestHardModeUnlocked" : "EntratiLabConquestHardModeUnlocked"; + if(score >= 25 && inventory.NodeIntrosCompleted.find(x => x == conquestNode) === undefined) + inventory.NodeIntrosCompleted.push(conquestNode); + + if(conquestType == "HexConquest") + { + inventory.EchoesHexConquestCacheScoreMission ??= 0; + + if(score > inventory.EchoesHexConquestCacheScoreMission ) + inventory.EchoesHexConquestCacheScoreMission = score; + }else + { + inventory.EntratiLabConquestCacheScoreMission ??= 0; + + if(score > inventory.EntratiLabConquestCacheScoreMission ) + inventory.EntratiLabConquestCacheScoreMission = score; + } } + + await inventory.save(); + const inventoryResponse = await getInventoryResponse(inventory, true); + response.InventoryJson = JSON.stringify(inventoryResponse); res.json(response); }; diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 652ea65e..441bf03e 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -151,7 +151,12 @@ export interface IRewardInfo { PurgatoryRewardQualifications?: string; rewardSeed?: number | bigint; periodicMissionTag?: string; - + ConquestType?: string; + ConquestCompleted?: number; + ConquestEquipmentSuggestionsFulfilled?: number; + ConquestPersonalModifiersActive?: number; + ConquestStickersActive?: number; + ConquestHardModeActive?: number; // for bounties, only EOM_AFK and node are given from above, plus: JobTier?: number; jobId?: string; -- 2.47.2 From 7e23810cad261ac9a8330f5fe891d5a1afef7811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=81nis?= Date: Wed, 23 Apr 2025 00:35:54 +0300 Subject: [PATCH 2/5] prettify --- .../api/missionInventoryUpdateController.ts | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 5f43f07a..8ad7ad32 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -75,8 +75,6 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) const { MissionRewards, inventoryChanges, credits, AffiliationMods, SyndicateXPItemReward } = await addMissionRewards(inventory, missionReport, firstCompletion); - - //TODO: figure out when to send inventory. it is needed for many cases. const response: IMissionInventoryUpdateResponse = { InventoryChanges: inventoryChanges, @@ -92,45 +90,41 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) response.ConquestCompletedMissionsCount = missionReport.ConquestMissionsCompleted == 2 ? 0 : missionReport.ConquestMissionsCompleted + 1; - - let score = 1; - if(missionReport.RewardInfo?.ConquestHardModeActive === 1) - score += 3 + if (missionReport.RewardInfo?.ConquestHardModeActive === 1) score += 3; if (missionReport.RewardInfo?.ConquestPersonalModifiersActive !== undefined) score += missionReport.RewardInfo?.ConquestPersonalModifiersActive; if (missionReport.RewardInfo?.ConquestEquipmentSuggestionsFulfilled !== undefined) score += missionReport.RewardInfo?.ConquestEquipmentSuggestionsFulfilled; - score *= missionReport.ConquestMissionsCompleted + 1 + score *= missionReport.ConquestMissionsCompleted + 1; - if(missionReport.ConquestMissionsCompleted == 2 && missionReport.RewardInfo?.ConquestHardModeActive === 1) + if (missionReport.ConquestMissionsCompleted == 2 && missionReport.RewardInfo?.ConquestHardModeActive === 1) score += 1; const conquestType = missionReport.RewardInfo?.ConquestType; - const conquestNode = conquestType == "HexConquest" ? "EchoesHexConquestHardModeUnlocked" : "EntratiLabConquestHardModeUnlocked"; - if(score >= 25 && inventory.NodeIntrosCompleted.find(x => x == conquestNode) === undefined) + const conquestNode = + conquestType == "HexConquest" ? "EchoesHexConquestHardModeUnlocked" : "EntratiLabConquestHardModeUnlocked"; + if (score >= 25 && inventory.NodeIntrosCompleted.find(x => x == conquestNode) === undefined) inventory.NodeIntrosCompleted.push(conquestNode); - - if(conquestType == "HexConquest") - { + + if (conquestType == "HexConquest") { inventory.EchoesHexConquestCacheScoreMission ??= 0; - if(score > inventory.EchoesHexConquestCacheScoreMission ) + if (score > inventory.EchoesHexConquestCacheScoreMission) inventory.EchoesHexConquestCacheScoreMission = score; - }else - { + } else { inventory.EntratiLabConquestCacheScoreMission ??= 0; - - if(score > inventory.EntratiLabConquestCacheScoreMission ) + + if (score > inventory.EntratiLabConquestCacheScoreMission) inventory.EntratiLabConquestCacheScoreMission = score; } } await inventory.save(); const inventoryResponse = await getInventoryResponse(inventory, true); - response.InventoryJson = JSON.stringify(inventoryResponse); + response.InventoryJson = JSON.stringify(inventoryResponse); res.json(response); }; -- 2.47.2 From 64de3e2bd5b2e230f15b8f906e51b2b42001eb27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=81nis?= Date: Wed, 23 Apr 2025 01:10:32 +0300 Subject: [PATCH 3/5] move archimedea handling to addMissionRewards --- .../api/missionInventoryUpdateController.ts | 63 +++++-------------- src/services/missionInventoryUpdateService.ts | 45 ++++++++++++- 2 files changed, 60 insertions(+), 48 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 8ad7ad32..e93c20bc 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -72,60 +72,29 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) return; } - const { MissionRewards, inventoryChanges, credits, AffiliationMods, SyndicateXPItemReward } = - await addMissionRewards(inventory, missionReport, firstCompletion); + const { + MissionRewards, + inventoryChanges, + credits, + AffiliationMods, + SyndicateXPItemReward, + ConquestCompletedMissionsCount + } = await addMissionRewards(inventory, missionReport, firstCompletion); - //TODO: figure out when to send inventory. it is needed for many cases. - const response: IMissionInventoryUpdateResponse = { + await inventory.save(); + const inventoryResponse = await getInventoryResponse(inventory, true); + + res.json({ + InventoryJson: JSON.stringify(inventoryResponse), InventoryChanges: inventoryChanges, MissionRewards, ...credits, ...inventoryUpdates, //FusionPoints: inventoryChanges?.FusionPoints, // This in combination with InventoryJson or InventoryChanges seems to just double the number of endo shown, so unsure when this is needed. SyndicateXPItemReward, - AffiliationMods - }; - - if (missionReport.ConquestMissionsCompleted !== undefined) { - response.ConquestCompletedMissionsCount = - missionReport.ConquestMissionsCompleted == 2 ? 0 : missionReport.ConquestMissionsCompleted + 1; - - let score = 1; - if (missionReport.RewardInfo?.ConquestHardModeActive === 1) score += 3; - - if (missionReport.RewardInfo?.ConquestPersonalModifiersActive !== undefined) - score += missionReport.RewardInfo?.ConquestPersonalModifiersActive; - if (missionReport.RewardInfo?.ConquestEquipmentSuggestionsFulfilled !== undefined) - score += missionReport.RewardInfo?.ConquestEquipmentSuggestionsFulfilled; - - score *= missionReport.ConquestMissionsCompleted + 1; - - if (missionReport.ConquestMissionsCompleted == 2 && missionReport.RewardInfo?.ConquestHardModeActive === 1) - score += 1; - - const conquestType = missionReport.RewardInfo?.ConquestType; - const conquestNode = - conquestType == "HexConquest" ? "EchoesHexConquestHardModeUnlocked" : "EntratiLabConquestHardModeUnlocked"; - if (score >= 25 && inventory.NodeIntrosCompleted.find(x => x == conquestNode) === undefined) - inventory.NodeIntrosCompleted.push(conquestNode); - - if (conquestType == "HexConquest") { - inventory.EchoesHexConquestCacheScoreMission ??= 0; - - if (score > inventory.EchoesHexConquestCacheScoreMission) - inventory.EchoesHexConquestCacheScoreMission = score; - } else { - inventory.EntratiLabConquestCacheScoreMission ??= 0; - - if (score > inventory.EntratiLabConquestCacheScoreMission) - inventory.EntratiLabConquestCacheScoreMission = score; - } - } - - await inventory.save(); - const inventoryResponse = await getInventoryResponse(inventory, true); - response.InventoryJson = JSON.stringify(inventoryResponse); - res.json(response); + AffiliationMods, + ConquestCompletedMissionsCount + }); }; /* diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 0b6cb5ff..257be812 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -586,6 +586,7 @@ interface AddMissionRewardsReturnType { credits?: IMissionCredits; AffiliationMods?: IAffiliationMods[]; SyndicateXPItemReward?: number; + ConquestCompletedMissionsCount?: number; } //TODO: return type of partial missioninventoryupdate response @@ -620,6 +621,7 @@ export const addMissionRewards = async ( const inventoryChanges: IInventoryChanges = {}; const AffiliationMods: IAffiliationMods[] = []; let SyndicateXPItemReward; + let ConquestCompletedMissionsCount; let missionCompletionCredits = 0; //inventory change is what the client has not rewarded itself, also the client needs to know the credit changes for display @@ -882,7 +884,48 @@ export const addMissionRewards = async ( } } - return { inventoryChanges, MissionRewards, credits, AffiliationMods, SyndicateXPItemReward }; + if (rewardInfo.ConquestCompleted !== undefined) { + let score = 1; + if (rewardInfo.ConquestHardModeActive === 1) score += 3; + + if (rewardInfo.ConquestPersonalModifiersActive !== undefined) + score += rewardInfo.ConquestPersonalModifiersActive; + if (rewardInfo.ConquestEquipmentSuggestionsFulfilled !== undefined) + score += rewardInfo.ConquestEquipmentSuggestionsFulfilled; + + score *= rewardInfo.ConquestCompleted + 1; + + if (rewardInfo.ConquestCompleted == 2 && rewardInfo.ConquestHardModeActive === 1) score += 1; + + const conquestType = rewardInfo.ConquestType; + const conquestNode = + conquestType == "HexConquest" ? "EchoesHexConquestHardModeUnlocked" : "EntratiLabConquestHardModeUnlocked"; + if (score >= 25 && inventory.NodeIntrosCompleted.find(x => x == conquestNode) === undefined) + inventory.NodeIntrosCompleted.push(conquestNode); + + if (conquestType == "HexConquest") { + inventory.EchoesHexConquestCacheScoreMission ??= 0; + + if (score > inventory.EchoesHexConquestCacheScoreMission) + inventory.EchoesHexConquestCacheScoreMission = score; + } else { + inventory.EntratiLabConquestCacheScoreMission ??= 0; + + if (score > inventory.EntratiLabConquestCacheScoreMission) + inventory.EntratiLabConquestCacheScoreMission = score; + } + + ConquestCompletedMissionsCount = rewardInfo.ConquestCompleted == 2 ? 0 : rewardInfo.ConquestCompleted + 1; + } + + return { + inventoryChanges, + MissionRewards, + credits, + AffiliationMods, + SyndicateXPItemReward, + ConquestCompletedMissionsCount + }; }; //creditBonus is not entirely accurate. -- 2.47.2 From e563b466a0c3b7357a8548513e8ad7c4f7299f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=81nis?= Date: Wed, 23 Apr 2025 01:15:49 +0300 Subject: [PATCH 4/5] get rid of unused import --- src/controllers/api/missionInventoryUpdateController.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index e93c20bc..b64718db 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -6,7 +6,6 @@ import { addMissionInventoryUpdates, addMissionRewards } from "@/src/services/mi import { getInventory } from "@/src/services/inventoryService"; import { getInventoryResponse } from "./inventoryController"; import { logger } from "@/src/utils/logger"; -import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes"; /* **** INPUT **** -- 2.47.2 From 4b0e3f03375459a94414417c13c71cb367a49bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=81nis?= Date: Wed, 23 Apr 2025 01:23:15 +0300 Subject: [PATCH 5/5] satisfies IMissionInventoryUpdateResponse --- src/controllers/api/missionInventoryUpdateController.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index b64718db..d3f0978b 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -6,6 +6,7 @@ import { addMissionInventoryUpdates, addMissionRewards } from "@/src/services/mi import { getInventory } from "@/src/services/inventoryService"; import { getInventoryResponse } from "./inventoryController"; import { logger } from "@/src/utils/logger"; +import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes"; /* **** INPUT **** @@ -93,7 +94,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) SyndicateXPItemReward, AffiliationMods, ConquestCompletedMissionsCount - }); + } satisfies IMissionInventoryUpdateResponse); }; /* -- 2.47.2