Reject duplicate recruit rewards

This commit is contained in:
2026-07-05 15:01:20 +09:00
parent 7203403897
commit ea8e9a5252

View File

@@ -42,6 +42,7 @@ try {
});
validateReachability(errors, recruitTemplates, recruitRewardRefs);
validateUniqueRecruitRewards(errors, recruitRewardRefs);
validateSortieRecruitAvailability(errors, scenarioEntries);
if (errors.length) {
@@ -168,6 +169,17 @@ function validateReachability(errors, recruitTemplates, recruitRewardRefs) {
});
}
function validateUniqueRecruitRewards(errors, recruitRewardRefs) {
const firstBattleByRecruitId = new Map();
recruitRewardRefs.forEach(({ battleId, unitId }) => {
if (firstBattleByRecruitId.has(unitId)) {
errors.push(`${battleId}: recruit "${unitId}" was already awarded by ${firstBattleByRecruitId.get(unitId)}`);
return;
}
firstBattleByRecruitId.set(unitId, battleId);
});
}
function validateSortieRecruitAvailability(errors, scenarioEntries) {
const firstBattleAllies = scenarioEntries[0]?.[1]?.units
?.filter((unit) => unit.faction === 'ally')