Contoh ini menunjukkan cara menerapkan obrolan eksklusif untuk pengguna yang saling dekat di dunia 3D. Ini memperluas callback dengan fungsi menggunakan TextSource untuk mengidentifikasi lokasi pengguna yang mungkin menjadi penerima pesan. Jika fungsi ini mengembalikan false, berarti bahwa pengguna berada lebih jauh dari jarak valid yang ditetapkan dari pengirim pesan, jadi sistem tidak mengirimkan pesan tersebut kepada pengguna itu.
Tambahkan yang berikut ke dalam Script di ServerScriptService:
Server
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Ambil saluran obrolan untuk obrolan berbasis kedekatan
-- Anda dapat mengganti saluran umum ini dengan saluran khusus
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Fungsi untuk mendapatkan posisi karakter pengguna
local function getPositionFromUserId(userId: number)
-- Ambil pemain yang terkait dengan ID pengguna yang diberikan
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Jika pemain ada, ambil posisi karakternya
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Kembali ke posisi default jika pemain atau karakter tidak dapat ditemukan
return Vector3.zero
end
-- Setel callback untuk saluran umum untuk mengontrol pengiriman pesan
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Ambil posisi pengirim pesan dan target
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Kirim pesan jika jarak antara pengirim dan target kurang dari 50 unit
return (targetPos - sourcePos).Magnitude < 50
end