Ví dụ này cho thấy cách triển khai một cuộc trò chuyện độc quyền cho những người dùng gần nhau trong thế giới 3D. Nó mở rộng callback với một hàm sử dụng TextSource để xác định vị trí của người dùng có thể là người nhận tin nhắn. Nếu hàm này trả về false, điều đó có nghĩa là người dùng ở xa hơn phạm vi hợp lệ đã đặt từ người gửi tin nhắn, vì vậy hệ thống không gửi tin nhắn cho người dùng đó.
Thêm đoạn mã sau vào một Script trong ServerScriptService:
Máy chủ
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Lấy kênh trò chuyện cho chat dựa trên khoảng cách
-- Bạn có thể thay thế kênh chung này bằng một kênh chuyên dụng
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Hàm để lấy vị trí của nhân vật người dùng
local function getPositionFromUserId(userId: number)
-- Lấy người chơi liên kết với ID người dùng đã cho
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Nếu người chơi tồn tại, lấy vị trí nhân vật của họ
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Trả về vị trí mặc định nếu không tìm thấy người chơi hoặc nhân vật
return Vector3.zero
end
-- Đặt callback cho kênh chung để kiểm soát việc gửi tin nhắn
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Lấy vị trí của người gửi tin nhắn và người nhận
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Gửi tin nhắn nếu khoảng cách giữa người gửi và người nhận nhỏ hơn 50 đơn vị
return (targetPos - sourcePos).Magnitude < 50
end