forked from OpenWF/SpaceNinjaServer
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