From 429d1e555e37672012f7cc933145aaed2a67b345 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 13 Sep 2025 17:30:34 +0200 Subject: [PATCH] fix: conservation standing changes not showing in progress screen --- .../api/missionInventoryUpdateController.ts | 7 +- src/services/missionInventoryUpdateService.ts | 94 ++++++++++--------- 2 files changed, 56 insertions(+), 45 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 9d1d59f2..3633e02a 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -2,7 +2,11 @@ import type { RequestHandler } from "express"; import { getJSONfromString } from "../../helpers/stringHelpers.ts"; import { getAccountForRequest } from "../../services/loginService.ts"; import type { IMissionInventoryUpdateRequest } from "../../types/requestTypes.ts"; -import { addMissionInventoryUpdates, addMissionRewards } from "../../services/missionInventoryUpdateService.ts"; +import { + addMissionInventoryUpdates, + addMissionRewards, + handleConservation +} from "../../services/missionInventoryUpdateService.ts"; import { getInventory } from "../../services/inventoryService.ts"; import { getInventoryResponse } from "./inventoryController.ts"; import { logger } from "../../utils/logger.ts"; @@ -94,6 +98,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) SyndicateXPItemReward, ConquestCompletedMissionsCount } = await addMissionRewards(account, inventory, missionReport, firstCompletion); + handleConservation(inventory, missionReport, AffiliationMods); // Conservation reports have GS_SUCCESS if (missionReport.EndOfMatchUpload) { inventory.RewardSeed = generateRewardSeed(); diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index e4f27127..e8a8a38f 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -517,48 +517,6 @@ export const addMissionInventoryUpdates = async ( } break; } - case "CapturedAnimals": { - for (const capturedAnimal of value) { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - const meta = ExportAnimals[capturedAnimal.AnimalType]?.conservation; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (meta) { - if (capturedAnimal.NumTags) { - addMiscItems(inventory, [ - { - ItemType: meta.itemReward, - ItemCount: capturedAnimal.NumTags * capturedAnimal.Count - } - ]); - } - if (capturedAnimal.NumExtraRewards) { - if (meta.woundedAnimalReward) { - addMiscItems(inventory, [ - { - ItemType: meta.woundedAnimalReward, - ItemCount: capturedAnimal.NumExtraRewards * capturedAnimal.Count - } - ]); - } else { - logger.warn( - `client attempted to claim unknown extra rewards for conservation of ${capturedAnimal.AnimalType}` - ); - } - } - if (meta.standingReward) { - const syndicateTag = - inventoryUpdates.Missions!.Tag == "SolNode129" ? "SolarisSyndicate" : "CetusSyndicate"; - const standing = - [2, 1.5, 1][capturedAnimal.CaptureRating] * meta.standingReward * capturedAnimal.Count; - logger.debug(`adding ${standing} standing to ${syndicateTag} for conservation`); - addStanding(inventory, syndicateTag, standing); - } - } else { - logger.warn(`ignoring conservation of unknown AnimalType: ${capturedAnimal.AnimalType}`); - } - } - break; - } case "KubrowPetEggs": { for (const egg of value) { inventory.KubrowPetEggs.push({ @@ -963,7 +921,7 @@ interface AddMissionRewardsReturnType { MissionRewards: IMissionReward[]; inventoryChanges?: IInventoryChanges; credits?: IMissionCredits; - AffiliationMods?: IAffiliationMods[]; + AffiliationMods: IAffiliationMods[]; SyndicateXPItemReward?: number; ConquestCompletedMissionsCount?: number; } @@ -1142,7 +1100,7 @@ export const addMissionRewards = async ( if (!rewardInfo) { //TODO: if there is a case where you can have credits collected during a mission but no rewardInfo, add credits needs to be handled earlier logger.debug(`Mission ${missions!.Tag} did not have Reward Info `); - return { MissionRewards: [] }; + return { MissionRewards: [], AffiliationMods: [] }; } //TODO: check double reward merging @@ -2254,6 +2212,54 @@ function getRandomMissionDrops( return drops; } +export const handleConservation = ( + inventory: TInventoryDatabaseDocument, + missionReport: IMissionInventoryUpdateRequest, + AffiliationMods: IAffiliationMods[] +): void => { + if (missionReport.CapturedAnimals) { + for (const capturedAnimal of missionReport.CapturedAnimals) { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + const meta = ExportAnimals[capturedAnimal.AnimalType]?.conservation; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (meta) { + if (capturedAnimal.NumTags) { + addMiscItems(inventory, [ + { + ItemType: meta.itemReward, + ItemCount: capturedAnimal.NumTags * capturedAnimal.Count + } + ]); + } + if (capturedAnimal.NumExtraRewards) { + if (meta.woundedAnimalReward) { + addMiscItems(inventory, [ + { + ItemType: meta.woundedAnimalReward, + ItemCount: capturedAnimal.NumExtraRewards * capturedAnimal.Count + } + ]); + } else { + logger.warn( + `client attempted to claim unknown extra rewards for conservation of ${capturedAnimal.AnimalType}` + ); + } + } + if (meta.standingReward) { + addStanding( + inventory, + missionReport.Missions!.Tag == "SolNode129" ? "SolarisSyndicate" : "CetusSyndicate", + [2, 1.5, 1][capturedAnimal.CaptureRating] * meta.standingReward * capturedAnimal.Count, + AffiliationMods + ); + } + } else { + logger.warn(`ignoring conservation of unknown AnimalType: ${capturedAnimal.AnimalType}`); + } + } + } +}; + const corruptedMods = [ "/Lotus/StoreItems/Upgrades/Mods/Melee/DualStat/CorruptedHeavyDamageChargeSpeedMod", // Corrupt Charge "/Lotus/StoreItems/Upgrades/Mods/Pistol/DualStat/CorruptedCritDamagePistol", // Hollow Point