TDD-002

Remote Events & Functions

Document Information

Purpose

Dokumen ini mengkatalogkan seluruh titik komunikasi client–server yang dibutuhkan sistem yang sudah Final di roadmap, supaya tidak ada aksi gameplay penting yang diputuskan sepihak oleh client (CDR-007 Server Authority, Anti-Exploit Awareness).

Nama Service/Controller pada kolom "Ditangani Oleh" merujuk ke Module Map di TDD-001.

Convention

Animal & Beast Signal

RemoteTipeArahPayloadValidasi Server
RequestCaptureAnimalRemoteEventC→SanimalInstanceIdJarak & line-of-sight ke hewan, hewan masih aktif/belum ditangkap pemain lain, cooldown senjata terpenuhi (AnimalService + EquipmentService).
AnimalCapturedRemoteEventS→C (target player)animalId, coinValue, prestigeValue— (broadcast hasil, sudah tervalidasi server).
BeastSignalTriggeredRemoteEventS→C (semua client server)animalId, worldPosition, windowSecondsDipicu server saat Hunter-Minute Pool mencapai threshold (BeastSignalService), untuk Minimap Marker & HUD (DN-004).
BeastSignalEndedRemoteEventS→C (semua client server)animalId, caughtByUserId (opsional)Dipicu saat First-Hit Wins tercapai atau window 3 menit habis.

Loadout, Inventory & Ekstraksi

Direvisi (Juli 2026). RequestEquipWeapon dan RequestRentBackpack dicabut — senjata tidak lagi dimiliki, dan yang disewa kini Varian (paket lengkap), bukan tier Backpack. Ekstraksi menjadi Remote tersendiri dengan aturan ketat.

RemoteTipeArahPayloadValidasi Server
RequestDepartToMapRemoteEventC→SvariantId, consumableSelectionLevel unlock Varian terpenuhi, Coin cukup untuk sewa, Consumable yang dipilih benar-benar dimiliki di Permanent Storage. Coin dipotong di sini, tanpa refund. Server membuat SessionLoadout di memori — tidak pernah ditulis ke DataStore (GDD-003 Session Boundary).
RequestPickupAnimalRemoteEventC→SanimalInstanceIdKapasitas loot tersisa ≥ Size Value hewan, dihitung dari SessionLoadout di server — tidak pernah dari client (InventoryService, CDR-007).
RequestExtractRemoteEventC→SPemain benar-benar berada di area Village. Server memindahkan hanya Animal Record + sisa Consumable milik pemain ke Permanent Storage memakai allowlist; senjata dan ammo bawaan Varian ditolak dan musnah bersama sesi.
RequestUseTeleportStoneRemoteEventC→SPemain benar-benar memiliki Teleport Stone di sesi aktif. Menjalankan rutin ekstraksi yang sama persis dengan RequestExtract, tanpa syarat berada di Village (MDD-003 UTL0005).
RequestUseConsumableRemoteEventC→SitemId(baru Juli 2026) Meminum Wild Honey / Spirit Water. Server memvalidasi stok, mengurangi 1, lalu mengisi segmen Boost Stamina yang sesuai. Client tidak pernah mengirim besar efek maupun durasi — keduanya dibaca server dari ItemData (CDR-007).
ConditionUpdatedRemoteEventS→Chp, boostHoney, boostWater(baru Juli 2026) Server mengabarkan kondisi pemain untuk digambar di HUD. Dikirim berkala, bukan tiap frame — bar bergerak dalam skala menit, jadi laju kabar yang jarang sudah memadai (CDR-008).
RequestUseEmergencySupplyDicabut (Juli 2026) — Emergency Supplies dihapus dari desain (GDD-003). Pemulihan Stamina kini murni aturan gerak/diam yang dihitung server, tanpa Remote. Nama tidak digunakan ulang.
InventoryUpdatedRemoteEventS→C (target player)backpackContents, storageSummary— (sync state, dipicu tiap perubahan Inventory).

Aturan keamanan yang mengikat implementasi: rutin ekstraksi wajib memakai allowlist (hanya kategori yang secara eksplisit diizinkan yang lolos), bukan blocklist — supaya kategori item baru yang lupa didaftarkan otomatis tertolak, bukan otomatis lolos ke Permanent Storage.

Economy & Market

RemoteTipeArahPayloadValidasi Server
RequestBuyItemRemoteEventC→SitemId, quantityHarga dihitung ulang dari EconomyData di server, Coin cukup, Level unlock terpenuhi. Tidak ada parameter lokasi — seluruh transaksi hanya di Lobby (DN-006 v2.0.0). Berlaku untuk Consumable, fuel Companion, Bonding Potion, dan kosmetik.
RequestSellAnimalRemoteEventC→SanimalInstanceId atau "sellAll"Record ada di Permanent Storage (bukan Backpack sesi — penjualan hanya di Lobby setelah ekstraksi), harga dari formula MDD-001, bukan dari client (EconomyService).
CoinBalanceUpdatedRemoteEventS→C (target player)newBalance, delta, reason— (sync state setelah transaksi apa pun yang mengubah Coin).
CrystalBalanceUpdatedRemoteEventS→C (target player)newBalance, delta, reason(baru) sync mata uang kedua (GDD-006 Currency).

Companion

Baru (Juli 2026, DN-010). Sistem berburu offline. Aturan mengikat: hasil patroli tidak boleh pernah dikirim ke client sebelum waktunya matang, dan Remote Collect tidak boleh menerima isi hasil dari client — client hanya mengirim niat.

RemoteTipeArahPayloadValidasi Server
RequestStartPatrolRemoteEventC→ScompanionIdCompanion dimiliki, jumlah Chum mencukupi kebutuhan Companion tersebut (tabel DN-010; klien tidak mengirim jumlah maupun fuelId — server membacanya sendiri), tidak sedang berpatroli. Server men-generate seluruh hasil sesi seketika (seed = Player ID + waktu Start) dan menyimpannya di server saja, lalu menulis timestamp selesai.
RequestStopPatrolRemoteEventC→ScompanionIdSedang berpatroli. Slot yang sudah melewati waktu matang dibuka; slot yang belum matang dihapus permanen.
RequestCollectPatrolRemoteEventC→ScompanionIdTanpa payload isi. Server membaca hasil yang ia generate sendiri, memfilter hanya slot yang sudah matang, lalu menulis ke Permanent Storage lewat fungsi yang sama dengan ekstraksi Map.
RequestEvolveCompanionRemoteEventC→SspeciesIdSpesies berjenis karnivora (kolom Type MDD-001), Animal Record cukup, Bonding Potion cukup, Crystal cukup (CompanionService).
PatrolStateUpdatedRemoteEventS→C (target player)companionId, endsAt, hanya slot yang sudah matang— Slot yang belum matang tidak pernah ikut dikirim, dalam bentuk apa pun.

Caravan Trade Market

Baru (Juli 2026, DN-011). Seluruh state per-pemain — tidak ada state lintas server setelah kuota global dibatalkan.

RemoteTipeArahPayloadValidasi Server
RequestFulfillOrderInstantRemoteEventC→SorderIdPesanan benar-benar aktif untuk pemain ini, stok Permanent Storage lengkap sesuai paket (lengkap atau tidak sama sekali). Nilai dihitung server dari Base Price × pengali, bukan dari client.
RequestSendCaravanRemoteEventC→SorderIdSama seperti di atas, plus slot Caravan tersedia. Menulis timestamp selesai, bukan hitung mundur.
RequestClaimCaravanRemoteEventC→SshipmentIdTimestamp selesai sudah terlewat. Menambah Coin, akumulasi nilai transaksi, dan Crystal bila melewati milestone.
CaravanStateUpdatedRemoteEventS→C (target player)availableOrders, activeShipments (endsAt), tradeValueAccumulated— (sync state).

Mount & Character

RemoteTipeArahPayloadValidasi Server
RequestPurchaseMount / RequestPurchaseCharacter (jalur Coin)RemoteEventC→SmountId / characterIdLevel unlock terpenuhi, Coin cukup, belum dimiliki (MountCharacterService, DN-005/DN-009). Hanya berlaku untuk item yang punya jalur Coin — 3 Character gratis (Valdrik/Nayra/Bonoo) tidak lewat remote ini sama sekali, otomatis dimiliki sejak profil dibuat.
RequestEquipMount / RequestEquipCharacterRemoteEventC→SmountId / characterIdItem sudah dimiliki pemain.
RequestEvolveMountRemoteEventC→SspeciesIdSpesies berjenis herbivora (kolom Type MDD-001), Animal Record ≥10, Bonding Potion ≥10, Crystal ≥ Rarity Value spesies (MountCharacterService, DN-005 v4.0.0). Menggantikan RequestBondCompanion, yang namanya menyesatkan sejak Companion berarti sistem lain.
MountEvolvedRemoteEventS→C (target player)mountId hasil (MNT0004–0006)— (hasil evolusi yang sudah divalidasi).
ProcessReceipt (MarketplaceService)Callback bawaan Roblox, bukan RemoteEvent customS (dipanggil Roblox setelah pembelian Robux)productId, userIdWajib pola resmi Roblox untuk seluruh pembelian Robux — Crystal (stok terbatas), Companion eksklusif, dan jalur Robux Mount/Character (MNT0001–0003/0009, CHR0004–0005) yang tersedia kapan saja tanpa syarat Level/Hunter Rank. Tidak boleh diganti RemoteEvent custom — itu bisa dipalsukan client.

Trophy Room, Progression & Weekly Mission

RemoteTipeArahPayloadValidasi Server
RequestDisplayTrophyRemoteEventC→SspeciesId, pedestalSlotCollection Data count > 0 untuk spesies, slot dalam batas Room Capacity Tier (TrophyRoomService).
RequestUpgradeRoomCapacityRemoteEventC→StargetTierCoin cukup sesuai MDD-007.
LevelUpRemoteEventS→C (target player)newLevel, unlockedThisLevelDipicu ProgressionService saat EXP melewati threshold MDD-006.
HunterRankUpRemoteEventS→C (target player)newRankIdDipicu saat Lifetime Prestige melewati threshold DN-001.
WeeklyMissionProgressUpdatedRemoteEventS→C (target player)objectiveProgress, isCompleteDihitung server dari Animal Record yang diekstraksi, bukan dari client (WeeklyMissionService).
RequestClaimMissionRewardRemoteEventC→SisComplete true & belum diklaim minggu ini.

Session & Persistence

RemoteTipeArahPayloadValidasi Server
PlayerDataLoadedRemoteEventS→C (target player)full profile snapshot (lihat TDD-003)Dikirim sekali setelah PersistenceService selesai load & PlayerAdded selesai; UI client tidak boleh render sebelum event ini diterima.

Scope Note

Katalog ini adalah rangka awal (sesuai catatan roadmap #10 "cukup rangka awal") — mencakup satu jalur utama per sistem yang sudah Final. Remote untuk kasus tepi (mis. batalkan Bonding, refund pembelian) belum dirancang dan akan ditambah saat implementasi nyata dimulai di Roblox Studio.

Dependencies