chore: always update rewardSeed in missionInventoryUpdate (#1833)
This should be slightly more faithful. Also logging a warning in case we have a mismatch as that shouldn't happen. Reviewed-on: OpenWF/SpaceNinjaServer#1833 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									0b75757277
								
							
						
					
					
						commit
						143b358a03
					
				@ -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);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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];
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user