diff --git a/scripts/verify-campaign-recruit-data.mjs b/scripts/verify-campaign-recruit-data.mjs index 1166afe..3558dc1 100644 --- a/scripts/verify-campaign-recruit-data.mjs +++ b/scripts/verify-campaign-recruit-data.mjs @@ -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')