generated from nhcarrigan/template
feat: add schema version system with outdated save detection
Introduces a schema version field to GameState. Saves without the current schema version are flagged on load (showing a modal prompting reset or proceed), and cloud saves from outdated clients are rejected server-side. Removes all backfill code now that outdated saves are handled via the reset flow instead. New POST /game/reset endpoint creates a fresh save for players who choose to reset. Save version and current schema version are displayed in the sidebar below the app version.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import { useState } from "react";
|
||||
import { useGame } from "../../context/GameContext.js";
|
||||
|
||||
interface OutdatedSchemaModalProps {
|
||||
onDismiss: () => void;
|
||||
}
|
||||
|
||||
export const OutdatedSchemaModal = ({ onDismiss }: OutdatedSchemaModalProps): React.JSX.Element => {
|
||||
const { resetProgress } = useGame();
|
||||
const [isResetting, setIsResetting] = useState(false);
|
||||
|
||||
const handleReset = async (): Promise<void> => {
|
||||
setIsResetting(true);
|
||||
await resetProgress();
|
||||
setIsResetting(false);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="modal-overlay">
|
||||
<div className="modal offline-modal">
|
||||
<h2>⚠️ Outdated Save Data</h2>
|
||||
<p>
|
||||
Your save data is from an older version of Elysium and may cause bugs or unexpected
|
||||
behaviour. Cloud saves are <strong>disabled</strong> until you reset your progress.
|
||||
</p>
|
||||
<p>
|
||||
Resetting will start you fresh — all progress will be lost.
|
||||
</p>
|
||||
<div className="outdated-modal-actions">
|
||||
<button
|
||||
className="outdated-modal-reset-button"
|
||||
onClick={() => { void handleReset(); }}
|
||||
disabled={isResetting}
|
||||
type="button"
|
||||
>
|
||||
{isResetting ? "Resetting…" : "Reset Progress"}
|
||||
</button>
|
||||
<button
|
||||
className="modal-close-button"
|
||||
onClick={onDismiss}
|
||||
type="button"
|
||||
>
|
||||
Proceed with Bugs
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user