Recover saves with malformed battle reports

This commit is contained in:
2026-07-05 09:16:53 +09:00
parent d513aec22c
commit a09379d4f1
2 changed files with 37 additions and 6 deletions

View File

@@ -812,11 +812,7 @@ function normalizeCampaignState(state: Partial<CampaignState>): CampaignState {
normalized.sortieItemAssignments = normalizeSortieItemAssignments(recordOrEmpty(normalized.sortieItemAssignments));
normalized.reserveTrainingFocus = normalizeReserveTrainingFocusId(normalized.reserveTrainingFocus);
normalized.battleHistory = recordOrEmpty<CampaignBattleSettlement>(normalized.battleHistory);
if (isPlainObject(normalized.firstBattleReport)) {
normalized.firstBattleReport = cloneReport(normalized.firstBattleReport);
} else {
normalized.firstBattleReport = undefined;
}
normalized.firstBattleReport = normalizeFirstBattleReport(normalized.firstBattleReport);
return normalized;
}
@@ -878,6 +874,18 @@ function normalizeCampaignStep(step: unknown): CampaignStep {
return typeof step === 'string' && campaignStepIds.has(step as CampaignStep) ? step as CampaignStep : 'new';
}
function normalizeFirstBattleReport(report: unknown): FirstBattleReport | undefined {
if (!isPlainObject(report)) {
return undefined;
}
try {
return cloneReport(report as FirstBattleReport);
} catch {
return undefined;
}
}
function reserveTrainingFocusDefinition(focusId?: string) {
const normalizedId = normalizeReserveTrainingFocusId(focusId);
return campaignReserveTrainingFocusDefinitions.find((focus) => focus.id === normalizedId) ?? campaignReserveTrainingFocusDefinitions[0];