Bu örnek, 3D dünyada birbirine yakın olan kullanıcılar için özel bir sohbeti nasıl uygulayacağınızı gösterir. Mesaj alıcısı olabilecek bir kullanıcının konumlarını belirlemek için TextSource kullanan bir fonksiyonla geri çağrıyı uzatır. Bu fonksiyon false dönerse, kullanıcının mesaj göndericisinden önceden belirlenmiş geçerli aralık dışında olduğu anlamına gelir, bu yüzden sistem o kullanıcıya mesajı iletmez.
Aşağıdakileri ServerScriptService içinde bir Script'e ekleyin:
Server
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Proksimiteye dayalı sohbet için sohbet kanalını alın
-- Bu genel kanalı özel bir kanal ile değiştirebilirsiniz
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Bir kullanıcının karakterinin konumunu almak için fonksiyon
local function getPositionFromUserId(userId: number)
-- Verilen kullanıcı kimliği ile ilişkilendirilmiş oyuncuyu alın
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Eğer oyuncu mevcutsa, karakterinin konumunu alın
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Eğer oyuncu veya karakter bulunamazsa, varsayılan bir konum döndür
return Vector3.zero
end
-- Genel kanal için mesaj iletimini kontrol etmek üzere geri çağrıyı ayarlayın
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Mesaj gönderen ve hedefin konumlarını alın
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Gönderen ile hedef arasındaki mesafe 50 birimden azsa mesaj ilet
return (targetPos - sourcePos).Magnitude < 50
end