Questo esempio mostra come implementare una chat esclusiva per gli utenti che sono vicini l'uno all'altro nel Mondodel gioco.Estende il richiamo con una funzione che utilizza TextSource per identificare le posizioni di un utente che potrebbe essere un potenziale ricevitore di messaggi.Se questa funzione restituisce false , significa che l'utente si trova più a lungo del raggio valido predefinito dal mittente del messaggio, quindi il sistema non consegna il messaggio a quell'utente.
Aggiungi quanto segue a un Script in ServerScriptService :
Server
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Ottieni il canale di chat per la chat basata sulla prossimità
-- Puoi sostituire questo canale generale con un canale dedicato
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Funzione per ottenere la posizione del personaggio di un utente
local function getPositionFromUserId(userId: number)
-- Ottieni il giocatore associato all'ID utente specificato
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Se il giocatore esiste, ottieni la posizione del suo personaggio
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Restituisci una posizione predefinita se il giocatore o il personaggio non può essere trovato
return Vector3.zero
end
-- Imposta il richiamo per il canale generale per controllare la consegna del messaggio
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Ottieni le posizioni del mittente e del destinatario del messaggio
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Consegna il messaggio se la distanza tra mittente e destinatario è inferiore a 50 unità
return (targetPos - sourcePos).Magnitude < 50
end