Chat baseado em proximidade

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Este exemplo mostra como implementar um chat exclusivo para usuários que estão próximos uns dos outros no mundo do jogo.Ela estende o retorno de chamada com uma função usando para identificar as localizações de um usuário que pode ser um receptor de mensagens potencial.Se essa função retornar false, significa que o usuário localiza mais do que o alcance válido predefinido do remetente da mensagem, portanto, o sistema não entrega a mensagem a esse usuário.

Adicione o seguinte a um Script em ServerScriptService :

Servidor

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Obtenha o canal de chat para chat baseado em proximidade
-- Você pode substituir este canal geral por um canal dedicado
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Função para obter a posição do personagem de um usuário
local function getPositionFromUserId(userId: number)
-- Obtenha o jogador associado ao ID de usuário dado
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Se o jogador existir, obter a posição do personagem dele
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Retorne uma posição padrão se o jogador ou personagem não puder ser encontrado
return Vector3.zero
end
-- Defina o chamado de volta para o canal geral para controlar a entrega de mensagens
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Obtenha as posições do remetente e do destinatário da mensagem
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Entregar mensagem se a distância entre o remetente e o alvo for menor que 50 unidades
return (targetPos - sourcePos).Magnitude < 50
end