fix: ensure nightwave weekly challenges are unique

This commit is contained in:
Sainan 2025-07-06 07:17:39 +02:00
parent 2a80307c26
commit ae1026df67

View File

@ -395,34 +395,48 @@ const getSeasonDailyChallenge = (pools: IRotatingSeasonChallengePools, day: numb
};
};
const getSeasonWeeklyChallenge = (pools: IRotatingSeasonChallengePools, week: number, id: number): ISeasonChallenge => {
const weekStart = EPOCH + week * 604800000;
const weekEnd = weekStart + 604800000;
const challengeId = week * 7 + id;
const rng = new SRng(new SRng(challengeId).randomInt(0, 100_000));
return {
_id: { $oid: "67e1bb2d9d00cb47" + challengeId.toString().padStart(8, "0") },
Activation: { $date: { $numberLong: weekStart.toString() } },
Expiry: { $date: { $numberLong: weekEnd.toString() } },
Challenge: rng.randomElement(pools.weekly)!
};
};
const getSeasonWeeklyHardChallenge = (
const pushSeasonWeeklyChallenge = (
activeChallenges: ISeasonChallenge[],
pools: IRotatingSeasonChallengePools,
week: number,
id: number
): ISeasonChallenge => {
): void => {
const weekStart = EPOCH + week * 604800000;
const weekEnd = weekStart + 604800000;
const challengeId = week * 7 + id;
const rng = new SRng(new SRng(challengeId).randomInt(0, 100_000));
return {
let challenge: string;
do {
challenge = rng.randomElement(pools.weekly)!;
} while (activeChallenges.some(x => x.Challenge == challenge));
activeChallenges.push({
_id: { $oid: "67e1bb2d9d00cb47" + challengeId.toString().padStart(8, "0") },
Activation: { $date: { $numberLong: weekStart.toString() } },
Expiry: { $date: { $numberLong: weekEnd.toString() } },
Challenge: rng.randomElement(pools.hardWeekly)!
};
Challenge: challenge
});
};
const pushSeasonWeeklyHardChallenge = (
activeChallenges: ISeasonChallenge[],
pools: IRotatingSeasonChallengePools,
week: number,
id: number
): void => {
const weekStart = EPOCH + week * 604800000;
const weekEnd = weekStart + 604800000;
const challengeId = week * 7 + id;
const rng = new SRng(new SRng(challengeId).randomInt(0, 100_000));
let challenge: string;
do {
challenge = rng.randomElement(pools.hardWeekly)!;
} while (activeChallenges.some(x => x.Challenge == challenge));
activeChallenges.push({
_id: { $oid: "67e1bb2d9d00cb47" + challengeId.toString().padStart(8, "0") },
Activation: { $date: { $numberLong: weekStart.toString() } },
Expiry: { $date: { $numberLong: weekEnd.toString() } },
Challenge: challenge
});
};
const pushWeeklyActs = (
@ -433,8 +447,8 @@ const pushWeeklyActs = (
const weekStart = EPOCH + week * 604800000;
const weekEnd = weekStart + 604800000;
activeChallenges.push(getSeasonWeeklyChallenge(pools, week, 0));
activeChallenges.push(getSeasonWeeklyChallenge(pools, week, 1));
pushSeasonWeeklyChallenge(activeChallenges, pools, week, 0);
pushSeasonWeeklyChallenge(activeChallenges, pools, week, 1);
if (pools.hasWeeklyPermanent) {
activeChallenges.push({
_id: { $oid: "67e1b96e9d00cb47" + (week * 7 + 0).toString().padStart(8, "0") },
@ -454,14 +468,14 @@ const pushWeeklyActs = (
Expiry: { $date: { $numberLong: weekEnd.toString() } },
Challenge: "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentKillEnemies"
});
activeChallenges.push(getSeasonWeeklyHardChallenge(pools, week, 2));
activeChallenges.push(getSeasonWeeklyHardChallenge(pools, week, 3));
pushSeasonWeeklyHardChallenge(activeChallenges, pools, week, 2);
pushSeasonWeeklyHardChallenge(activeChallenges, pools, week, 3);
} else {
activeChallenges.push(getSeasonWeeklyChallenge(pools, week, 2));
activeChallenges.push(getSeasonWeeklyChallenge(pools, week, 3));
activeChallenges.push(getSeasonWeeklyChallenge(pools, week, 4));
activeChallenges.push(getSeasonWeeklyHardChallenge(pools, week, 5));
activeChallenges.push(getSeasonWeeklyHardChallenge(pools, week, 6));
pushSeasonWeeklyChallenge(activeChallenges, pools, week, 2);
pushSeasonWeeklyChallenge(activeChallenges, pools, week, 3);
pushSeasonWeeklyChallenge(activeChallenges, pools, week, 4);
pushSeasonWeeklyHardChallenge(activeChallenges, pools, week, 5);
pushSeasonWeeklyHardChallenge(activeChallenges, pools, week, 6);
}
};