GDD-012
Persistence System
Document Metadata
Purpose
Dokumen ini mendefinisikan sistem penyimpanan data pemain, termasuk apa yang disimpan, kapan disimpan, dan bagaimana data dipulihkan.
Persistence Philosophy
Persistence adalah fondasi kepercayaan pemain. Progres pemain harus aman, konsisten, dan dapat dipulihkan setiap saat. Kehilangan progres akibat disconnect atau error adalah risiko yang harus diminimalisir.
Data to Persist
- Coin — total Coin yang dimiliki pemain.
- Crystal — (baru) mata uang kedua, disimpan sejajar Coin.
- Permanent Storage — Animal Record hasil ekstraksi dan hasil Collect Companion.
- Collection —
countper spesies (jumlah yang pernah ditangkap, tidak berkurang saat dijual/dipakai) dan progres Statue Miniatur. - Progression — Level, EXP, Lifetime Prestige, achievement.
- Cosmetics — Skin, Mount, Character, Accessory yang dimiliki, beserta yang sedang dipakai.
- Companion — (baru) daftar Companion yang dimiliki (Level, biome spesialisasi, kapasitas), stok fuel, dan state patroli aktif.
- Caravan — (baru) pesanan yang sedang tersedia bagi pemain, pengiriman yang sedang berjalan, dan progres peluang Crystal.
- Trophy Room — Capacity Tier dan Statue Miniatur yang dipajang.
- Weekly Mission & Daily Login — progres dan status klaim.
- Settings — preferensi pemain.
Yang Tidak Disimpan
- Isi Backpack sesi — hidup di memori server, musnah bersama sesi (kecuali lewat grace period, lihat Disconnect Handling).
- Varian yang disewa — tidak pernah menjadi kepemilikan; "reset ke default" adalah konsekuensi otomatis dari tidak pernah disimpan, bukan aksi penghapusan.
- Senjata, ammo, dan Utility — seluruhnya bawaan Varian dan bersifat session-bound. Field kepemilikan senjata permanen dihapus.
State Berjangka Waktu (Companion & Caravan)
- Disimpan sebagai timestamp selesai, bukan hitung mundur. Menyimpan "sisa 8 menit" akan salah begitu pemain logout; menyimpan "selesai pada pukul X" tetap benar kapan pun profil dibaca ulang. Berlaku untuk patroli Companion dan pengiriman Caravan.
- Hasil patroli sudah ditentukan sejak Start dan disimpan di sisi server. Yang boleh dikirim ke client hanya slot yang sudah melewati waktu matang — sisanya tidak pernah keluar dari server (DN-010 Keamanan Data).
- Perhitungan kematangan dilakukan saat profil dibaca, bukan lewat proses berjalan terus-menerus — sehingga tidak ada beban server untuk pemain yang sedang offline (CDR-008).
- Slot patroli yang belum matang saat pemain menekan STOP hangus dan tidak disimpan.
Save Triggers
- Auto-save — berkala selama permainan berlangsung.
- On Exit — saat pemain keluar dari game atau server.
- On Important Event — setelah transaksi penting: jual beli, rank up, dapat hewan langka.
- On Safe State — saat pemain kembali ke Lobby (termasuk tepat setelah ekstraksi di Village).
- On Timed Action — (baru) saat memulai patroli Companion atau mengirim Caravan, karena keduanya menuliskan timestamp yang harus bertahan meski pemain langsung logout setelahnya.
Data Structure
Struktur konkret dan typed ada di TDD-003 DataStore Schema; daftar di bawah adalah gambaran tingkat desain saja.
- profile — userId, username, createdAt, lastLogin.
- economy — coin, crystal.
- inventory — storage (permanen). Tidak ada field isi Backpack sesi.
- collection — count per spesies, progres Statue Miniatur.
- progression — level, exp, lifetimePrestige, achievements.
- cosmetics — ownedMounts, ownedCharacters, ownedSkins, ownedAccessories, equipped.
- companion — ownedCompanions (level, biome, kapasitas), fuelCounts, activePatrol (timestamp selesai + hasil tersegel di server).
- caravan — availableOrders, activeShipments (timestamp selesai), tradeValueAccumulated (untuk peluang Crystal).
- trophyRoom — capacityTier, displayed.
- weeklyMission & dailyLogin — progres dan status klaim.
- settings — preferensi pemain.
Data Safety
- Data inti tidak boleh hilang karena disconnect.
- Auto-save harus dilakukan sebelum pemain keluar dari server.
- Validasi server untuk setiap transaksi penting.
- Backup data harus dipertimbangkan untuk menghindari kehilangan progres.
- Jika terjadi konflik, gunakan data terbaru yang valid.
Disconnect Handling
- Progres permanen tidak pernah hilang akibat disconnect — Coin, Crystal, koleksi, kosmetik, Level, dan Prestige tetap aman.
- Sesi Map dibekukan 10 menit. Reconnect dalam batas itu mengembalikan pemain ke dalam Map dengan isi Backpack utuh — ekstraksi ke Village tetap wajib ditempuh, sehingga disconnect tidak memberi keuntungan apa pun.
- Lewat 10 menit atau keluar sengaja — sesi dimusnahkan, isi Backpack dan sewa Varian hangus.
- Server shutdown — isi Backpack hangus, tetapi sewa dikembalikan (bukan kesalahan pemain).
- Patroli Companion dan pengiriman Caravan tidak terpengaruh disconnect sama sekali — keduanya berbasis timestamp dan memang dirancang berjalan saat pemain offline.
Data Migration
Struktur data harus dirancang agar dapat berkembang tanpa merusak data lama. Penambahan field baru harus memiliki default value yang aman. Perubahan struktur besar harus memiliki mekanisme migrasi.
MVP Persistence Scope
- Coin, Inventory, Equipment (Backpack tidak termasuk — sewa per-trip, lihat GDD-003).
- Collection dan Hunter Rank.
- Weekly Mission progress yang di-update saat pemain kembali ke Lobby.
- Misi level awal untuk pemain baru.
- Future feature fields untuk mount ownership, mount requirement, dan trade eligibility.
- Auto-save periodik dan on exit.
- Recovery setelah disconnect.
Post-MVP Persistence Scope
- History transaksi.
- Statistik detail.
- Achievement progress.
- Social data, friends, leaderboard.
- Backup dan restore sistem.
Dependencies
- GDD-000 — Document Information.
- GDD-003 — Inventory System.
- GDD-004 — Equipment System.
- GDD-006 — Economy System.
- GDD-009 — Player Progression System.
- GDD-010 — Loot & Collection System.
- CDR-007 — Technical Philosophy.
- CDR-008 — Performance Philosophy.