fix: 暂停每日任务未开发的沙漏和火箭奖励

This commit is contained in:
guanchao
2026-10-14 14:02:43 +08:00
parent 3c5c5b556a
commit e487b364ec
2 changed files with 31 additions and 8 deletions
+9 -8
View File
@@ -55,26 +55,27 @@ type Candidate = {
const reward = (type: RewardItem["type"], count: number): RewardItem => ({ type, count });
// 每组中的条目为等概率互斥选项,生成任务时选定一个并写入 rewards。
// 沙漏、火箭及其无限时长奖励尚未开放,暂不加入候选;类型定义保留以兼容历史数据。
export const DAILY_REWARD_OPTIONS: Record<string, Record<number, RewardItem[]>> = {
A: {
2: [reward("coin", 100), reward("hourglass", 1)],
3: [reward("coin", 150), reward("hourglass", 2)],
2: [reward("coin", 100)],
3: [reward("coin", 150)],
4: [reward("infinite_health", 900)],
5: [reward("coin", 200), reward("freeze", 1), reward("rocket", 1)],
5: [reward("coin", 200), reward("freeze", 1)],
6: [reward("coin", 300), reward("magic_wand", 1)],
},
B: {
3: [reward("coin", 150), reward("hourglass", 2)],
4: [reward("freeze", 1), reward("rocket", 1)],
3: [reward("coin", 150)],
4: [reward("freeze", 1)],
5: [reward("magic_wand", 1)],
6: [reward("hammer", 1)],
},
C: {
2: [reward("coin", 150), reward("hourglass", 2)],
2: [reward("coin", 150)],
3: [reward("infinite_health", 900)],
4: [reward("coin", 300), reward("rocket", 1)],
4: [reward("coin", 300)],
5: [reward("infinite_health", 1800)],
6: [reward("coin", 500), reward("infinite_rocket", 1800)],
6: [reward("coin", 500)],
},
D: {
2: [reward("infinite_health", 900)],
@@ -94,3 +94,25 @@ test('existing generated rewards survive configuration rollout until their next
const week=refreshTaskData(next,'existing',20,now+7*86400000).data;
assert.deepEqual(week.weeklyRewards,WEEKLY_REWARDS);
});
test('unfinished hourglass and rocket rewards stay out of daily and weekly configuration', () => {
const disabled = new Set(['hourglass', 'rocket', 'infinite_hourglass', 'infinite_rocket']);
const expected = {
A: {2:[['coin',100]],3:[['coin',150]],4:[['infinite_health',900]],5:[['coin',200],['freeze',1]],6:[['coin',300],['magic_wand',1]]},
B: {3:[['coin',150]],4:[['freeze',1]],5:[['magic_wand',1]],6:[['hammer',1]]},
C: {2:[['coin',150]],3:[['infinite_health',900]],4:[['coin',300]],5:[['infinite_health',1800]],6:[['coin',500]]},
D: {2:[['infinite_health',900]],3:[['coin',100]],4:[['infinite_health',900]],5:[['coin',200]],6:[['coin',300]]},
E: {2:[['infinite_health',900]],3:[['infinite_health',900]]},
};
for (const [group, tiers] of Object.entries(expected)) {
for (const [stars, rewards] of Object.entries(tiers)) {
assert.deepEqual(DAILY_REWARD_OPTIONS[group][stars], rewards.map(([type,count])=>({type,count})));
}
}
for (const task of Object.values(DAILY_TASK_POOLS).flat()) {
assert.ok(task.rewardOptions.length > 0, task.taskId);
assert.ok(task.rewardOptions.every(reward => !disabled.has(reward.type)), task.taskId);
}
assert.ok(WEEKLY_REWARDS.every(tier => tier.rewards.every(reward => !disabled.has(reward.type))));
});