#Data & Persistence
#Where data is stored
| Store | Contents |
|---|---|
BackflipProfiles_v1 | One profile per player, keyed by UserId |
BackflipProfiles_v1_<board> | Ordered stores for the three leaderboards |
The names come from Config.DataStoreName. Changing it starts every player from zero, so only change it for a deliberate wipe.
#Saved fields
Cash, Speed, rebirths, the collector bank, animals, eggs and their timers, hotbar, trails, upgrade levels, Spins and wheel timer, daily streak, playtime, quests, Index discoveries, settings, passes, pending purchases and processed receipt IDs. Per-session values (current plot, carried egg, held item) are reset on join.
#When it saves
- every
AutosaveSeconds(60 s), - after granting a developer product,
- when the player leaves,
- for every player when the server shuts down (up to 25 s).
#Session lock
When a profile loads, the server writes a session ID that expires after SessionLeaseSeconds (180 s) and renews it on every save. If another server still holds a valid lease, the player sees "Your profile is open on another server. Rejoin in a moment." This prevents two servers from overwriting each other.
#New fields
Profiles are reconciled against the defaults on load. A field you add to the default profile is filled in for existing players automatically. SchemaVersion is 1.
#Studio
Without Enable Studio Access to API Services, the DataStore call fails. The game then immediately uses a temporary profile, shows "Studio test session: DataStore access is unavailable; progress is temporary." and does not save. Products are not granted in this mode.
On a live server a failed load is retried three times before the player is asked to rejoin, so progress is never replaced with an empty profile.