Ten przykład pokazuje, jak zaimplementować ekskluzywny czat dla użytkowników, którzy są blisko siebie w świecie 3D. Rozszerza on callback o funkcję używającą TextSource, aby zidentyfikować lokalizacje użytkownika, który może być potencjalnym odbiorcą wiadomości. Jeśli ta funkcja zwraca false, oznacza to, że użytkownik znajduje się dalej niż ustawiony dozwolony zasięg od nadawcy wiadomości, więc system nie dostarcza wiadomości do tego użytkownika.
Dodaj poniższe do Script w ServerScriptService:
Serwer
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Pobierz kanał czatu do czatu opartego na odległości
-- Możesz zastąpić ten ogólny kanał dedykowanym kanałem
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Funkcja do uzyskiwania pozycji postaci użytkownika
local function getPositionFromUserId(userId: number)
-- Uzyskaj gracza powiązanego z danym identyfikatorem użytkownika
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Jeśli gracz istnieje, uzyskaj pozycję jego postaci
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Zwróć domyślną pozycję, jeśli gracz lub postać nie mogą być znalezione
return Vector3.zero
end
-- Ustaw callback dla ogólnego kanału, aby kontrolować dostarczanie wiadomości
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Uzyskaj pozycje nadawcy wiadomości i celu
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Dostarcz wiadomość, jeśli odległość między nadawcą a celem jest mniejsza niż 50 jednostek
return (targetPos - sourcePos).Magnitude < 50
end