RemoteEvent & RemoteFunction (Client-Server Communication)
Penjelasan
Karena Script (server) dan LocalScript (client) berjalan di mesin/proses yang benar-benar terpisah, mereka tidak bisa saling memanggil fungsi secara langsung — komunikasi harus lewat `RemoteEvent` (satu arah, tidak menunggu balasan) atau `RemoteFunction` (dua arah, menunggu hasil balik, tapi bisa memblokir dan lebih rentan disalahgunakan exploit). Keduanya biasanya diletakkan di `ReplicatedStorage` supaya bisa diakses kedua sisi. Aturan keamanan penting: server TIDAK BOLEH mempercayai data apa pun yang dikirim client lewat Remote tanpa validasi, karena client bisa dimanipulasi exploit — semua keputusan penting (skor, uang, kemenangan) harus divalidasi ulang di server, bukan sekadar menerima mentah-mentah nilai yang dikirim client.
Contoh Konsep
-- ReplicatedStorage berisi RemoteEvent bernama "BeliItem"
-- Script server
local remoteBeliItem = game.ReplicatedStorage.BeliItem
remoteBeliItem.OnServerEvent:Connect(function(pemain, idItem)
-- validasi di server, jangan percaya client mentah-mentah
if idItem == "pedang_kayu" then
print(pemain.Name .. " membeli " .. idItem)
end
end)
-- LocalScript client
local remoteBeliItem = game.ReplicatedStorage.BeliItem
remoteBeliItem:FireServer("pedang_kayu")
Praktikum
Buat RemoteEvent bernama "KirimSkor" yang dipanggil dari client untuk mengirim skor ke server, dan handler server yang memvalidasi skor tidak boleh negatif sebelum diterima.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Hindari RemoteFunction untuk operasi yang sering dipanggil karena sifatnya blocking (menunggu balasan) — pakai RemoteEvent plus event balik terpisah kalau butuh respons tanpa memblokir client.