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 cb55fc69..fcb6f0a4 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -750,11 +750,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); @@ -1423,6 +1418,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];