diff --git a/src/controllers/api/updateChallengeProgressController.ts b/src/controllers/api/updateChallengeProgressController.ts index 68ae6c55..b75e820a 100644 --- a/src/controllers/api/updateChallengeProgressController.ts +++ b/src/controllers/api/updateChallengeProgressController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getAccountForRequest } from "@/src/services/loginService"; -import { addChallenges, getInventory } from "@/src/services/inventoryService"; +import { addCalendarProgress, addChallenges, getInventory } from "@/src/services/inventoryService"; import { IChallengeProgress, ISeasonChallenge } from "@/src/types/inventoryTypes/inventoryTypes"; import { IAffiliationMods } from "@/src/types/purchaseTypes"; import { getEntriesUnsafe } from "@/src/utils/ts-utils"; @@ -25,13 +25,17 @@ export const updateChallengeProgressController: RequestHandler = async (req, res ); } for (const [key, value] of getEntriesUnsafe(challenges)) { + if (value === undefined) { + logger.error(`Challenge progress update key ${key} has no value`); + continue; + } switch (key) { case "ChallengesFixVersion": inventory.ChallengesFixVersion = value; break; case "SeasonChallengeHistory": - value!.forEach(({ challenge, id }) => { + value.forEach(({ challenge, id }) => { const itemIndex = inventory.SeasonChallengeHistory.findIndex(i => i.challenge === challenge); if (itemIndex !== -1) { inventory.SeasonChallengeHistory[itemIndex].id = id; @@ -41,6 +45,10 @@ export const updateChallengeProgressController: RequestHandler = async (req, res }); break; + case "CalendarProgress": + addCalendarProgress(inventory, value); + break; + case "ChallengeProgress": case "SeasonChallengeCompletions": case "ChallengePTS": @@ -63,5 +71,6 @@ interface IUpdateChallengeProgressRequest { ChallengeProgress?: IChallengeProgress[]; SeasonChallengeHistory?: ISeasonChallenge[]; SeasonChallengeCompletions?: ISeasonChallenge[]; + CalendarProgress?: { challenge: string }[]; crossPlaySetting?: string; } diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index cf5208ce..fafbca6c 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1832,6 +1832,15 @@ export const addChallenges = ( return affiliationMods; }; +export const addCalendarProgress = (inventory: TInventoryDatabaseDocument, value: { challenge: string }[]): void => { + const calendarProgress = getCalendarProgress(inventory); + const currentSeason = getWorldState().KnownCalendarSeasons[0]; + calendarProgress.SeasonProgress.LastCompletedChallengeDayIdx = currentSeason.Days.findIndex( + day => day.events.length != 0 && day.events[0].challenge == value[value.length - 1].challenge + ); + checkCalendarChallengeCompletion(calendarProgress, currentSeason); +}; + export const addMissionComplete = (inventory: TInventoryDatabaseDocument, { Tag, Completes, Tier }: IMission): void => { const { Missions } = inventory; const itemIndex = Missions.findIndex(item => item.Tag === Tag); diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index c4a62f2c..09bdc1c6 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -14,6 +14,7 @@ import { IRngResult, SRng, getRandomElement, getRandomReward } from "@/src/servi import { equipmentKeys, IMission, ITypeCount, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; import { addBooster, + addCalendarProgress, addChallenges, addConsumables, addCrewShipAmmo, @@ -33,10 +34,8 @@ import { addSkin, addStanding, applyClientEquipmentUpdates, - checkCalendarChallengeCompletion, combineInventoryChanges, generateRewardSeed, - getCalendarProgress, getDialogue, giveNemesisPetRecipe, giveNemesisWeaponRecipe, @@ -235,7 +234,7 @@ export const addMissionInventoryUpdates = async ( } for (const [key, value] of getEntriesUnsafe(inventoryUpdates)) { if (value === undefined) { - logger.error(`Inventory update key ${key} has no value `); + logger.error(`Inventory update key ${key} has no value`); continue; } switch (key) { @@ -671,12 +670,7 @@ export const addMissionInventoryUpdates = async ( break; } case "CalendarProgress": { - const calendarProgress = getCalendarProgress(inventory); - const currentSeason = getWorldState().KnownCalendarSeasons[0]; - calendarProgress.SeasonProgress.LastCompletedChallengeDayIdx = currentSeason.Days.findIndex( - day => day.events.length != 0 && day.events[0].challenge == value[value.length - 1].challenge - ); - checkCalendarChallengeCompletion(calendarProgress, currentSeason); + addCalendarProgress(inventory, value); break; } case "duviriCaveOffers": {