TDD-004

Telemetry Schema

Document Information

Purpose

Dokumen ini menetapkan peristiwa apa yang dicatat, bentuk datanya, ke mana ia ditulis, dan angka apa yang diturunkan darinya.

Kenapa ia kritis, bukan pelengkap. Sejumlah keputusan besar sengaja ditunda ke playtest — terutama Skala Dunia (S), yang menyentuh Fear Radius, jangkauan senjata, Jarak Baca, dan seluruh kecepatan sekaligus (GDD-007). Playtest tanpa instrumentasi pulang membawa kesan, dan kesan tidak dapat menyelesaikan perdebatan skala. RBB-002 mengunci konsekuensinya: telemetri ditulis bersamaan dengan sistemnya, tidak pernah ditempel belakangan.

Sumber turunan: Rencana Bangun Bertahap Fase 0 · GDD-007 Skala Dunia · TDD-001 arsitektur modul.

Ke Mana Data Ditulis

JalurPutusan
HttpService → endpoint eksternalDipakai. Satu POST JSON per batch. Untuk playtest tertutup, penerimanya cukup Google Apps Script Web App yang menulis ke Spreadsheet — gratis, tanpa server yang harus dijaga, dan median dapat dihitung dengan satu rumus di sel.
AnalyticsService bawaan RobloxTidak dipakai sebagai jalur utama — parameter kustomnya terlalu terbatas untuk memasangkan dua peristiwa lewat animalId, dan itu justru inti pengukuran kita.
DataStoreTidak dipakai. Ia penyimpanan profil, bukan aliran peristiwa, dan tidak dapat dikueri.
UlarMenggigitbiome, Stamina saat digigit, berujung Sekarat atau tidak(baru Agustus 2026, DN-013) Menjawab pertanyaan kepadatan ular. Satuannya gigitan per sesi, bukan jumlah ular — dan hanya telemetri yang dapat mengukurnya. Fase 1 ke atas; Fase 0 belum memuat ular.

Syarat teknis: Allow HTTP Requests wajib aktif di pengaturan game, dan HttpService hanya berjalan di tempat yang sudah dipublikasikan — bukan di Studio tanpa izin. Ini perlu disiapkan sebelum playtest, bukan pada hari playtest.

Jalur pindahnya sudah aman. Bentuk peristiwa di bawah tidak mengandaikan penerimanya apa pun. Mengganti Spreadsheet dengan basis data sungguhan kelak berarti mengubah satu URL, bukan menulis ulang instrumentasinya.

Batching

Amplop — Field yang Selalu Ada

FieldTipeIsi
eventstringNama peristiwa
sessionIdstringGUID, dibuat saat pemain masuk. Mengikat seluruh peristiwa satu sesi.
playerHashstringUserId yang di-hash dengan salt proyek — stabil antar sesi, tetapi bukan identitas mentah. Lihat catatan privasi.
tnumberDetik sejak sesi dimulai, presisi 0,1 — bukan waktu jam. Selisih antar peristiwa yang dipakai, bukan tanggalnya.
buildstringVersi build, mis. "F0.3"
SnumberNilai Skala Dunia yang berlaku saat itu.

Field S adalah yang paling mudah dilupakan dan paling mahal bila hilang. Seluruh tujuan playtest ini adalah mencoba beberapa nilai S. Tanpa mencatatnya di tiap peristiwa, data sebelum dan sesudah perubahan tercampur menjadi satu kolam — dan pertanyaan yang ingin dijawab justru menjadi tidak terjawab oleh datanya sendiri.

Privasi. UserId mentah tidak pernah dikirim keluar. playerHash memberi kesinambungan antar sesi tanpa memindahkan identitas Roblox ke layanan luar. Isi Chat Clan, nama clan, dan seluruh teks buatan pemain tidak pernah masuk telemetri — tidak ada peristiwa yang membawa teks bebas.

Empat Peristiwa Fase 0

Inilah yang dibangun bersamaan dengan sistem berburu pertama, dan yang menjawab pertanyaan Skala Dunia.

HewanTerlihat

FieldTipeIsi
animalIdstringID instance hewan itu di dunia, bukan ID spesies. Inilah yang memasangkan penglihatan dengan tembakan.
speciesstringANM0001, dst
jaraknumberStuds saat pertama terlihat
statusHewanstringNetral / Makan / AngkatKepala

Definisi “terlihat” harus dikunci, dan ini bukan soal remeh. Bila peristiwa ini menyala tiap kali hewan masuk bidang pandang kamera, seorang pemain yang berputar di tempat akan mencatat puluhan penglihatan dan median waktu pendekatan menjadi omong kosong. Aturannya:

TembakanDilepas

FieldTipeIsi
animalIdstringTarget. Wajib — inilah pasangannya dengan HewanTerlihat.
speciesstringANM0001, dst
senjatastringWPN0001–0004
jaraknumberStuds saat pelepasan
rasioJangkauannumberjarak ÷ jangkauan senjata — 0,0 sampai 1,0. Ini yang menguji Peluang Tangkap tanpa bergantung pada nilai S.
kenabooleanHasil yang ditentukan server saat pelepasan
sikapTubuhstringSprint / Jalan / Jongkok / Tiarap
diRumputbooleanApakah pemain berada di zona rumput tinggi

HewanKabur

FieldTipeIsi
animalIdstring
speciesstring
sebabstringTerdeteksi / TembakanMeleset / AlarmBeruntun
jaraknumberJarak pemain saat hewan kabur
frEfektifnumberFear Radius efektif setelah seluruh pengali — memvalidasi Aturan Penumpukan Deteksi dengan angka nyata, bukan hitungan kertas

SesiSelesai

FieldTipeIsi
durasinumberDetik
tangkapannumberJumlah hewan yang berhasil diekstraksi
jarakBerjalannumberStuds
varianstringBPK yang disewa
sebabKeluarstringEkstraksi / Keluar / Terputus

Dikirim pada PlayerRemoving dan BindToClose. Tanpa keduanya, sesi yang berakhir karena server ditutup akan hilang seluruhnya — dan sesi terpanjang justru yang paling sering berakhir begitu.

Angka yang Diturunkan

Peristiwa mentah tidak berguna sampai diketahui apa yang dihitung darinya. Kelimanya dihitung dari empat peristiwa di atas, tanpa tambahan.

AngkaCara hitungMenjawab
Waktu pendekatan medianTembakanDilepas.t − HewanTerlihat.t, dipasangkan lewat animalIdSkala Dunia (S) — target 30–60 detik
Rasio penglihatan yang berujung tembakanJumlah animalId berpasangan ÷ seluruh HewanTerlihatBerapa banyak hewan yang dilihat lalu diabaikan atau hilang
Sebaran rasioJangkauanHistogram dari TembakanDilepasApakah pemain benar-benar memakai paruh luar jangkauan, atau selalu merayap mendekat
Meleset nyata vs dirancangRasio kena=false per pita rasioJangkauan, dibandingkan (10 − Handling) × 5%Apakah rumus Peluang Tangkap terasa seperti angkanya
Sebaran sebab pada HewanKaburHitung per kategoriApakah kegagalan didominasi deteksi atau tembakan meleset — keduanya menuntut perbaikan yang berbeda

Hanya penglihatan yang berpasangan yang masuk median. Hewan yang dilihat lalu tidak pernah ditembak tidak punya waktu pendekatan — memasukkannya sebagai nol atau sebagai durasi sesi sama-sama merusak angkanya. Ia dihitung terpisah, sebagai baris kedua di tabel ini.

Tidak ada sampling. Pada skala playtest tertutup (puluhan pemain), seluruh peristiwa dicatat. Sampling baru menjadi pertimbangan bila jumlah pemain harian menembus ribuan — dan bila hari itu tiba, yang disampel adalah HewanTerlihat, satu-satunya yang volumenya tumbuh cepat.

Peristiwa Fase Berikutnya

Sengaja belum dibuatkan skema. Bentuknya ditetapkan saat sistemnya dibangun, mengikuti RBB-002 — menulis skema untuk sistem yang belum ada berarti menebak field yang akan berubah sebelum dipakai.

FasePeristiwaMenjawab
1LevelNaik · VarianDisewa · EkstraksiSelesaiApakah tangga Varian terasa seperti kemajuan
2TutorialLangkah · TawaranDilihat · TawaranDibeli · CaravanDikirim · PatroliDiklaimDi langkah mana pemain baru berhenti, dan apakah rantai Day 1 tersambung
3SesiHarian · FiturDibukaRetensi hari 7 dan hari 28

TutorialLangkah adalah yang paling menentukan di antara semuanya. Seluruh rancangan FTUE menit 0–30 berdiri di atas asumsi bahwa pemain menyelesaikan tiap langkah. Satu peristiwa per langkah mengubah asumsi itu menjadi corong yang dapat dilihat — dan titik bocornya biasanya bukan di tempat yang diduga.

Aturan

KodeAturan
TEL-001Seluruh telemetri dikirim dari server. Client tidak pernah mengirim peristiwa — ia dapat dipalsukan, dan angka palsu lebih buruk daripada tidak ada angka.
TEL-002Kegagalan telemetri tidak pernah boleh mengganggu permainan. Selalu di dalam pcall; bila gagal, sangga dibuang dan sesi lanjut.
TEL-003Setiap peristiwa membawa nilai S yang berlaku. Tanpa ini, data dari beberapa nilai skala tercampur dan pertanyaan yang ingin dijawab menjadi tidak terjawab.
TEL-004Tidak ada teks buatan pemain yang masuk telemetri — tidak isi chat, tidak nama clan, tidak apa pun yang diketik. UserId dikirim hanya sebagai hash ber-salt.
TEL-005Peristiwa yang harus dipasangkan wajib membawa ID instance, bukan ID spesies. Tanpa animalId, waktu pendekatan tidak dapat dihitung sama sekali.

Dependencies