diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index b7a1059f..32c7973b 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -721,6 +721,30 @@ const addMissionComplete = (inventory: IInventoryDatabaseDocument, { Tag, Comple } }; +const addFocusXpIncreases = (inventory: IInventoryDatabaseDocument, focusXpPlus: number[] | undefined) => { + enum FocusType { + AP_UNIVERSAL, + AP_ATTACK, + AP_DEFENSE, + AP_TACTIC, + AP_POWER, + AP_PRECEPT, + AP_FUSION, + AP_WARD, + AP_UMBRA, + AP_ANY + } + + if (focusXpPlus) { + inventory.FocusXP ??= { AP_ATTACK: 0, AP_DEFENSE: 0, AP_TACTIC: 0, AP_POWER: 0, AP_WARD: 0 }; + inventory.FocusXP.AP_ATTACK += focusXpPlus[FocusType.AP_ATTACK]; + inventory.FocusXP.AP_DEFENSE += focusXpPlus[FocusType.AP_DEFENSE]; + inventory.FocusXP.AP_TACTIC += focusXpPlus[FocusType.AP_TACTIC]; + inventory.FocusXP.AP_POWER += focusXpPlus[FocusType.AP_POWER]; + inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD]; + } +}; + export const missionInventoryUpdate = async (data: IMissionInventoryUpdateRequest, accountId: string) => { const { RawUpgrades, @@ -731,7 +755,8 @@ export const missionInventoryUpdate = async (data: IMissionInventoryUpdateReques Consumables, Recipes, Missions, - FusionTreasures + FusionTreasures, + FocusXpIncreases } = data; const inventory = await getInventory(accountId); @@ -793,6 +818,7 @@ export const missionInventoryUpdate = async (data: IMissionInventoryUpdateReques if (Missions) { addMissionComplete(inventory, Missions); } + addFocusXpIncreases(inventory, FocusXpIncreases); const changedInventory = await inventory.save(); return changedInventory.toJSON(); diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 288bb99c..c109d87d 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -70,6 +70,7 @@ export interface IMissionInventoryUpdateRequest { Missions?: IMission; EvolutionProgress?: IEvolutionProgress[]; LastRegionPlayed?: TSolarMapRegion; + FocusXpIncreases?: number[]; FusionPoints?: number; // Not a part of the request, but we put it in this struct as an intermediate storage. }