Goal
Save player progress reliably without corrupting or losing valuable state.
Schema Rules
- Store compact canonical state, not UI state.
- Include
schemaVersion. - Keep defaults centralized.
- Validate loaded data before using it.
- Write migrations that can handle old, missing, or partial data.
- Keep transient match/session state separate from permanent profile state.
Save Strategy
- Load once when the player joins.
- Keep an in-memory authoritative profile on the server.
- Save on meaningful intervals and player leave.
- Save on server shutdown with a bounded timeout.
- Debounce rapid save requests.
- Retry transient failures with backoff.
- Mark dirty profiles and avoid unnecessary writes.
Valuable State
Treat these carefully:
- Currency and premium currency.
- Inventory, pets, cosmetics, boosts, quest progress, achievements.
- Purchases and receipt-granted items.
- Trading or gifting results.
- Daily streaks and time-gated rewards.
MCP Review Workflow
- Use
script_grepforDataStore,UpdateAsync,SetAsync,GetAsync, profile, save, and load. - Read all persistence scripts with
script_read. - Map load, mutation, save, and shutdown flow.
- Patch with
multi_edit. - Playtest join/change/leave-like paths where possible and check
get_console_output.
Output
Return:
- Profile schema.
- Save/load flow.
- Migration plan.
- Failure modes handled.
- Manual tests still needed in published or multi-server conditions.
Next
Harden the save path against exploits with roblox-security-economy, then verify saves survive rejoin and shutdown with roblox-playtest-qa.