From c684bed573cf22e324ff98f8f190d2676f66e269 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 25 Apr 2025 10:17:24 +0200 Subject: [PATCH] chore: always update rewardSeed in missionInventoryUpdate This should be slightly more faithful. Also logging a warning in case we have a mismatch as that shouldn't happen. --- .../api/missionInventoryUpdateController.ts | 4 +++- src/services/missionInventoryUpdateService.ts | 10 +++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index bde1c3cf..ff181e0b 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -3,7 +3,7 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { IMissionInventoryUpdateRequest } from "@/src/types/requestTypes"; import { addMissionInventoryUpdates, addMissionRewards } from "@/src/services/missionInventoryUpdateService"; -import { getInventory } from "@/src/services/inventoryService"; +import { generateRewardSeed, getInventory } from "@/src/services/inventoryService"; import { getInventoryResponse } from "./inventoryController"; import { logger } from "@/src/utils/logger"; import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes"; @@ -63,6 +63,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) missionReport.MissionStatus !== "GS_SUCCESS" && !(missionReport.RewardInfo?.jobId || missionReport.RewardInfo?.challengeMissionId) ) { + inventory.RewardSeed = generateRewardSeed(); await inventory.save(); const inventoryResponse = await getInventoryResponse(inventory, true); res.json({ @@ -81,6 +82,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res) ConquestCompletedMissionsCount } = await addMissionRewards(inventory, missionReport, firstCompletion); + inventory.RewardSeed = generateRewardSeed(); await inventory.save(); const inventoryResponse = await getInventoryResponse(inventory, true); diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 05b94b0a..ca457cc6 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -742,11 +742,6 @@ export const addMissionRewards = async ( return { MissionRewards: [] }; } - if (rewardInfo.rewardSeed) { - // We're using a reward seed, so give the client a new one in the response. On live, missionInventoryUpdate seems to always provide a fresh one in the response. - inventory.RewardSeed = generateRewardSeed(); - } - //TODO: check double reward merging const MissionRewards: IMissionReward[] = getRandomMissionDrops(inventory, rewardInfo, wagerTier, firstCompletion); logger.debug("random mission drops:", MissionRewards); @@ -1406,6 +1401,11 @@ function getRandomMissionDrops( if (rewardManifests.length != 0) { logger.debug(`generating random mission rewards`, { rewardManifests, rotations }); } + if (RewardInfo.rewardSeed) { + if (RewardInfo.rewardSeed != inventory.RewardSeed) { + logger.warn(`RewardSeed mismatch:`, { client: RewardInfo.rewardSeed, database: inventory.RewardSeed }); + } + } const rng = new SRng(BigInt(RewardInfo.rewardSeed ?? generateRewardSeed()) ^ 0xffffffffffffffffn); rewardManifests.forEach(name => { const table = ExportRewards[name];