-
Notifications
You must be signed in to change notification settings - Fork 0
Multiplayer History Format
Halaman ini menjelaskan format penyimpanan riwayat pertandingan multiplayer di Rapid Texter GUI. Fitur ini eksklusif untuk versi GUI dan tidak tersedia di versi TUI.
File riwayat multiplayer disimpan di lokasi berikut:
| OS | Path |
|---|---|
| Windows | %APPDATA%\RapidTexter\multiplayer_history.json |
| Linux | ~/.local/share/RapidTexter/multiplayer_history.json |
Note
File ini terpisah dari riwayat single player yang digunakan bersama dengan versi TUI.
{
"entries": [
// Array of MultiplayerHistoryEntry
]
}Setiap entry merepresentasikan satu pertandingan multiplayer:
{
"timestamp": "01/01/2026 12:00:00",
"hostName": "Player1",
"players": [
// Array of PlayerResult
]
}Data performa masing-masing pemain:
{
"name": "Player1",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"wpm": 85,
"accuracy": 97.5,
"errors": 3,
"duration": 45.2,
"position": 1,
"isLocal": true,
"hasLeft": false
}| Field | Tipe | Keterangan |
|---|---|---|
timestamp |
String | Waktu pertandingan (format: dd/MM/yyyy HH:mm:ss) |
hostName |
String | Nama pembuat room (host) |
players |
Array | Daftar hasil semua pemain dalam pertandingan |
| Field | Tipe | Keterangan |
|---|---|---|
name |
String | Nama pemain |
uuid |
String | UUID unik pemain untuk identifikasi |
wpm |
Integer | Words Per Minute yang dicapai pemain |
accuracy |
Double | Persentase akurasi mengetik (0-100) |
errors |
Integer | Jumlah total kesalahan ketik |
duration |
Double | Durasi menyelesaikan race dalam detik |
position |
Integer | Peringkat finish (1 = juara 1, 2 = juara 2, dst.) |
isLocal |
Boolean |
true jika ini adalah pemain lokal (user) |
hasLeft |
Boolean |
true jika pemain disconnect sebelum race selesai |
Berikut adalah contoh file multiplayer_history.json dengan beberapa entry:
{
"entries": [
{
"timestamp": "15/01/2026 16:30:00",
"hostName": "Alea",
"players": [
{
"name": "Alea",
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"wpm": 92,
"accuracy": 98.5,
"errors": 1,
"duration": 38.5,
"position": 1,
"isLocal": true,
"hasLeft": false
},
{
"name": "Budi",
"uuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"wpm": 85,
"accuracy": 96.0,
"errors": 4,
"duration": 42.3,
"position": 2,
"isLocal": false,
"hasLeft": false
},
{
"name": "Citra",
"uuid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"wpm": 78,
"accuracy": 94.2,
"errors": 6,
"duration": 48.1,
"position": 3,
"isLocal": false,
"hasLeft": false
}
]
},
{
"timestamp": "15/01/2026 15:00:00",
"hostName": "Dani",
"players": [
{
"name": "Dani",
"uuid": "d4e5f6a7-b8c9-0123-defa-234567890123",
"wpm": 88,
"accuracy": 97.0,
"errors": 2,
"duration": 40.0,
"position": 1,
"isLocal": false,
"hasLeft": false
},
{
"name": "Alea",
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"wpm": 82,
"accuracy": 95.5,
"errors": 4,
"duration": 43.2,
"position": 2,
"isLocal": true,
"hasLeft": false
},
{
"name": "Eva",
"uuid": "e5f6a7b8-c9d0-1234-efab-345678901234",
"wpm": 0,
"accuracy": 0,
"errors": 0,
"duration": 0,
"position": 3,
"isLocal": false,
"hasLeft": true
}
]
}
]
}-
Entry Pertama (15/01/2026 16:30):
- 3 pemain dalam pertandingan
- User (Alea) menang dengan WPM 92, akurasi 98.5%
- Semua pemain menyelesaikan race (
hasLeft: false)
-
Entry Kedua (15/01/2026 15:00):
- 3 pemain dalam pertandingan
- User (Alea) berada di posisi ke-2
- Eva disconnect sebelum selesai (
hasLeft: true) - Statistik Eva adalah 0 karena tidak menyelesaikan race
Riwayat dapat di-sort berdasarkan:
| Sort By | Keterangan |
|---|---|
date |
Tanggal pertandingan (default) |
wpm |
WPM pemain lokal |
rank |
Peringkat pemain lokal |
Setiap opsi sorting dapat diatur ascending (naik) atau descending (turun).
// Mengakses data riwayat
MultiplayerHistoryManager.historyData
// Mengatur sorting
MultiplayerHistoryManager.sortBy = "wpm"
MultiplayerHistoryManager.sortAscending = false // Tertinggi dulu
// Mendapatkan total entry
MultiplayerHistoryManager.totalEntries
// Menghapus semua riwayat
MultiplayerHistoryManager.clearHistory()struct MultiplayerPlayerResult {
QString name; // Nama pemain
QString uuid; // UUID unik pemain
int wpm; // Words per minute
double accuracy; // Akurasi (0-100)
int errors; // Jumlah kesalahan
double duration; // Durasi dalam detik
int position; // Peringkat (1, 2, 3, ...)
bool isLocal; // true jika pemain lokal
bool hasLeft; // true jika disconnect
};struct MultiplayerHistoryEntry {
QString timestamp; // Format: dd/MM/yyyy HH:mm:ss
QString hostName; // Nama host/pembuat room
std::vector<MultiplayerPlayerResult> players;
// Cached untuk quick display
int localWpm; // WPM pemain lokal
int localRank; // Rank pemain lokal
};Important
Fitur Eksklusif GUI
Riwayat multiplayer hanya tersedia di versi GUI. Versi TUI tidak memiliki fitur multiplayer.
Tip
Backup Data
File multiplayer_history.json dapat di-backup secara manual. Cukup salin file tersebut ke lokasi aman.
Warning
Jangan Edit Manual
Mengedit file JSON secara manual dapat menyebabkan error saat loading. Jika file corrupt, aplikasi akan gagal memuat riwayat.