fix: guard claimedMilestones undefined on v1 saves
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 19s

Saves loaded before migrateSave runs (or stale localStorage) can have
claimedMilestones undefined — guard with ?? [] in all accessors.
This commit is contained in:
2026-03-28 18:33:19 +01:00
parent ed8cf87d4e
commit 4df6451dac

View File

@@ -186,8 +186,9 @@ export function computePrestigeDna(lifetimeTadpoles: number, prestigeCount: numb
// Milestones disponibles mais pas encore réclamés // Milestones disponibles mais pas encore réclamés
export function getClaimableMilestones(state: GameState): PrestigeMilestone[] { export function getClaimableMilestones(state: GameState): PrestigeMilestone[] {
const claimed = state.claimedMilestones ?? [];
return PRESTIGE_MILESTONES.filter( return PRESTIGE_MILESTONES.filter(
(m) => state.prestigeCount >= m.threshold && !state.claimedMilestones.includes(m.id) (m) => state.prestigeCount >= m.threshold && !claimed.includes(m.id)
); );
} }
@@ -201,11 +202,12 @@ export function claimMilestone(state: GameState, milestoneId: string): GameState
const milestone = PRESTIGE_MILESTONES.find((m) => m.id === milestoneId); const milestone = PRESTIGE_MILESTONES.find((m) => m.id === milestoneId);
if (!milestone) return null; if (!milestone) return null;
if (state.prestigeCount < milestone.threshold) return null; if (state.prestigeCount < milestone.threshold) return null;
if (state.claimedMilestones.includes(milestoneId)) return null; const claimed = state.claimedMilestones ?? [];
if (claimed.includes(milestoneId)) return null;
let newState = { let newState = {
...state, ...state,
claimedMilestones: [...state.claimedMilestones, milestoneId], claimedMilestones: [...claimed, milestoneId],
}; };
// Appliquer la récompense // Appliquer la récompense
@@ -224,13 +226,13 @@ export function claimMilestone(state: GameState, milestoneId: string): GameState
// Bonus gameplay cumulés depuis les milestones réclamés // Bonus gameplay cumulés depuis les milestones réclamés
export function getMilestoneStartNid(state: GameState): number { export function getMilestoneStartNid(state: GameState): number {
const claimed = state.claimedMilestones; const claimed = state.claimedMilestones ?? [];
if (claimed.includes("milestone_5")) return 1; // 1 Nid gratuit if (claimed.includes("milestone_5")) return 1; // 1 Nid gratuit
return 0; return 0;
} }
export function getMilestoneOfflineBonus(state: GameState): number { export function getMilestoneOfflineBonus(state: GameState): number {
const claimed = state.claimedMilestones; const claimed = state.claimedMilestones ?? [];
if (claimed.includes("milestone_15")) return 0.05; // +5% offline cap if (claimed.includes("milestone_15")) return 0.05; // +5% offline cap
return 0; return 0;
} }