Require visible unlock reward labels
This commit is contained in:
@@ -16,7 +16,7 @@ const sortieFlowAfterBattleIds = extractSortieFlowAfterBattleIds(campaignFlowSou
|
||||
const sortieFlowCampaignSteps = extractSortieFlowCampaignSteps(campaignFlowSource);
|
||||
const sortieFlowNextBattleIds = extractSortieFlowNextBattleIds(campaignFlowSource, battleScenarioIds);
|
||||
const sortieFlowTitleBattleIds = extractSortieFlowTitleBattleIds(campaignFlowSource, battleScenarioIds);
|
||||
const campaignRewardUnlockBattleIds = extractCampaignRewardUnlockBattleIds(battlesSource, battleScenarioIds);
|
||||
const campaignRewardUnlocks = extractCampaignRewardUnlocks(battlesSource, battleScenarioIds);
|
||||
const sortieFlowDisplayFields = ['eyebrow', 'title', 'description', 'rewardHint'];
|
||||
|
||||
const failures = [];
|
||||
@@ -104,9 +104,11 @@ for (const flowKey of sortieFlowKeys) {
|
||||
assert(/\bunavailableNotice\s*:/.test(flowBody), `Non-battle sortie flow ${flowKey} must provide an unavailableNotice for repeat clicks`);
|
||||
}
|
||||
|
||||
for (const [battleId, unlockBattleId] of campaignRewardUnlockBattleIds.entries()) {
|
||||
for (const [battleId, unlock] of campaignRewardUnlocks.entries()) {
|
||||
const { battleId: unlockBattleId, label } = unlock;
|
||||
const nextBattleId = sortieFlowNextBattleIds.get(battleId);
|
||||
assert(battleIds.has(unlockBattleId), `Battle ${battleId} campaign reward unlocks unknown battle id: ${unlockBattleId}`);
|
||||
assert(label.length > 0, `Battle ${battleId} campaign reward unlock ${unlockBattleId} must provide a visible unlockLabel`);
|
||||
assert(nextBattleId, `Battle ${battleId} campaign reward unlocks ${unlockBattleId} but has no sortie flow next battle`);
|
||||
assert(
|
||||
nextBattleId === unlockBattleId,
|
||||
@@ -253,14 +255,18 @@ function extractSortieFlowAfterBattleIds(source, scenarioIds) {
|
||||
return entries;
|
||||
}
|
||||
|
||||
function extractCampaignRewardUnlockBattleIds(source, scenarioIds) {
|
||||
function extractCampaignRewardUnlocks(source, scenarioIds) {
|
||||
const entries = new Map();
|
||||
const declarationPattern = /export const (\w+BattleScenario)\b[\s\S]*?^\};/gm;
|
||||
for (const match of source.matchAll(declarationPattern)) {
|
||||
const battleId = scenarioIds.get(match[1]);
|
||||
const unlockMatch = /unlockBattleId:\s*'([^']+)'/.exec(match[0]);
|
||||
const labelMatch = /unlockLabel:\s*'([^']+)'/.exec(match[0]);
|
||||
if (battleId && unlockMatch) {
|
||||
entries.set(battleId, unlockMatch[1]);
|
||||
entries.set(battleId, {
|
||||
battleId: unlockMatch[1],
|
||||
label: (labelMatch?.[1] ?? '').trim()
|
||||
});
|
||||
}
|
||||
}
|
||||
return entries;
|
||||
|
||||
Reference in New Issue
Block a user