Com o no-experience text chat sistema no Roblox, os jogadores podem se comunicar entre si usando mensagens baseadas em texto em sessões ao vivo. O sistema fornece um conjunto de métodos e eventos para expandir e personalizar as funcionalidades de chat, como enviar mensagens baseadas em exigências personalizadas , adicionar permissões ou moderação específicas a jogadores específicos e criar comandos personal
Este guia abrange o fluxo de trabalho do chat e abordagens para expandir as funcionalidades do sistema de chat. Para mais informações sobre personalização da interface do usuário do chat (UI), see Personalizando a interface do usuário do chat.
Fluxo de Chat
O sistema de chat de texto na experiência consiste em ambas as classe mute que você pode estender para comportamentos de chat personalizados e objetos de dados imutáveis representando certos elementos de chat retornados por Classesmute.
Classe de Chat Mutável
O sistema de chat de texto na experiência fornece as seguintes Classesmutáveis:
- TextChatService — Esta classe única é responsável por gerenciar o sistema de chat geral, incluindo filtragem de mensagens de chat, moderação e permissões do usuário. Acessível do servidor, fornece um conjunto de métodos e eventos que outros APIs de chat ou ações do usuário podem invocar através do fluxo de trabalho de entrega de chat.
- TextChannel — Esta classe representa um canal de chat de texto que passa mensagens de chat do jogador do cliente para o servidor e as exibe para outros jogadores com base em permissões. Você pode usá-lo para Criar, modificar e gerenciar canais de texto em sua experiência. Além disso, você pode criar vários canais de texto para agrupar jogadores por chat, como permitir que os jogadores chatem com seus membros de grupo que não são visíve
- TextChatCommand — Esta classe permite que você crie comandos de chat personalizados que permitem que os jogadores invoquem ações ou comportamentos específicos ao digitar caracteres especiais seguidos por um nome de comando. Os comandos de chat são úteis para adicionar funcionalidades e interatividade adicionais à experiência de chat. Você também pode usá-los para criar comandos de gerenciamento e moderação para gerenciar e moderar sua experiência com atalhos.
Objetos de Bate-papo Imutáveis
O sistema de chat de texto na experiência inclui os seguintes objetos imutáveis com propriedades de leitura que você não pode modificar:
- TextChatMessage : Este objeto representa uma única mensagem de chat em um canal de chat de texto com informações básicas, como o remetente da mensagem, a mensagem original, a mensagem filtrada e a hora de criação.
- TextSource : Este objeto representa um remetente de mensagens em um canal de chat de texto com permissões detalhadas de um jogador no canal. Se um jogador estiver em vários canais de chat de texto, eles podem ter várias fontes de texto também.
Gráfico de Chat
Através do processo de envio e entrega de mensagens de chat, métodos, chamadas de retorno e eventos de objetos de chat mutáveis trabalham ao lado de objetos de chat imutáveis em três lados do modelo cliente-servidor:
- O cliente de envio, que é o dispositivo local de um jogador enviando uma mensagem.
- Recebendo clientes, que são dispositivos locais de outros jogadores.
- O servidor, que é o processador central para receber a mensagem do cliente de envio e gerenciar a entrega aos clientes de recebimento.
Como mostra o fluxograma, o sistema de chat de texto na experiência processa uma mensagem de chat através dos seguintes passos:
- Um jogador envia uma mensagem do seu dispositivo local, acionando o método TextChannel:SendAsync(). Este método processa a mensagem e determina se é uma comando de chat ou uma mensagem de chat regular.
- Se a entrada do jogador for um comando de chat, ele dispara o evento TextChatCommand.Triggered para executar a ação que você definiu para o comando.
- Se a entrada do jogador for uma mensagem de chat regular, ele dispara TextChatService.SendingMessage para exibir a mensagem original para o remetente no cliente de remetimento. No mesmo tempo, o passe TextChannel:SendAsync() passa a mensagem para o servidor.
- O servidor dispara TextChannel.ShouldDeliverCallback para determinar se o mensagem será entregue a outros jogadores com base nas permissões que você configurou e nos requisitos de filtro da comunidade Roblox.
- Se TextChannel.ShouldDeliverCallback determinar que a mensagem é elegível para ser entregue a outros jogadores, o servidor aplica quaisquer filtros e executa TextChannel.OnIncomingMessage duas vezes:
- A primeira vez no cliente de envio para sinalizar que o servidor está processando a mensagem através do evento TextChatService.MessageReceived. Isso também substitui a mensagem local no cliente de envio com a mensagem recebida para exibir nos clientes de recebimento. A mensagem pode ser idêntica se a mensagem original não exigir filtragem.
- A segunda vez é no cliente de destino para iniciar o evento TextChatService.MessageReceived para exibir a mensagem para outros jogadores.
Existem várias áreas do fluxo de trabalho do sistema de chat que você pode estender e personalizar o comportamento, mas os passos de como o sistema opera permanecem os mesmos.
Personalizando Comportamentos de Entrega de Mensagens
Além de seguir o padrão de comportamento de entrega de mensagens de chat, você pode usar TextChannel.ShouldDeliverCallback para adicionar permissões e comportamentos específicos para determinar se os jogadores podem receber uma mensagem para engajamento personalizado, como:
- Suporte a chat baseado em grupo que apenas jogadores no mesmo grupo ou esquadrão podem comunicar entre si.
- Suporte ao chat de proximidade, onde os jogadores só podem enviar mensagens para aqueles próximos.
- Impedindo jogadores com certos atributos de enviar mensagens para outros. Por exemplo, desabilite os jogadores com um status de morte para enviar mensagens para jogadores vivos.
- Adicionar a função de competição de adivinhação, onde respostas corretas no chat não são visíveis para outros jogadores.
O seguinte exemplo mostra como implementar chat exclusivo para personagens de jogador que estão perto um do outro em locais. Ele estende o retorno de chamada com uma função usando TextSource para identificar os locais de um jogador que pode ser um receptor de mensagens em potencial. Se essa função retornar false, significa que o personagem do jogador localiza mais do que o alcance pres
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Este exemplo usa o canal geral; você pode substituir isso por um canal dedicado
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Defina uma função para obter a posição de um personagem de um jogador
local function getPositionFromUserId(userId: number)
-- Obtenha o jogador associado ao ID de usuário fornecido
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Se o jogador existir, obtenha a posição de seu personagem.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Retornar uma posição padrão se o jogador ou personagem não puder ser encontrado
return Vector3.zero
end
-- Defina o retorno de chamada 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 alvo da mensagem
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Se a distância entre o remetente e o alvo for menor que 50 unidades, entregue a mensagem
return (targetPos - sourcePos).Magnitude < 50
end
Criando Comandos Personalizados
O sistema de chat de texto na experiência tem comandos de chat incorporados para propósitos comuns, como criar canais de chat baseados em equipe e jogar emote de avatar. Você pode ativá-los configurando TextChatService.CreateDefaultCommands e
O seguinte exemplo mostra como criar um comando de chat que permite que os jogadores aumentem ou diminuam o tamanho de seu personagem ao inserir /super ou /mini.
Insira uma instância de TextChatCommand dentro de TextChatService .
Renomeie para Comando de Tamanho .
Defina sua propriedade PrimárioAliás para /super e sua propriedade SecundárioAliás para 1> /mini1>.
Insira o seguinte Script dentro de ServerScriptService para definir um retorno de chamada para o comando de chat que escala o tamanho do personagem.
Scriptlocal TextChatService = game:GetService("TextChatService")local Players = game:GetService("Players")local sizeCommand: TextChatCommand = TextChatService:WaitForChild("SizeCommand")sizeCommand.Triggered:Connect(function(textSource, message)local scaleMult = 1local messageWords = string.split(message, " ")if messageWords[1] == "/super" thenscaleMult = 2elseif messageWords[1] == "/mini" thenscaleMult = 0.5endlocal player = Players:GetPlayerByUserId(textSource.UserId)if player thenlocal character = player.Characterif character thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfor _, child in humanoid:GetChildren() doif child:IsA("NumberValue") thenchild.Value *= scaleMultendendendendendend)
Migrando do chat/conversaLegado
Esta seção ajuda você a migrar do sistema de chat de legado ao implementar métodos alternativos para implementar funcionalidades e comportamentos de chat comuns usando o sistema de chat de texto na experiência.
Para alternar o sistema de chat de uma experiência existente do sistema de chat de legado para o sistema de chat de texto na experiência:
Na janela Explorer, selecione TextChatService .
Na janela Propriedades, encontre o menu suspenso ChatVersion e selecione TextChatService .
Funcionalidades Básicas
Embora ambos os sistemas compartilhem as mesmas funcionalidades básicas de chat, as implementações de chat de texto na experiência são, em geral, mais sustentáveis e fáceis de itens.
Funcionalidade | chat/conversade Legado | chat/conversade Texto Na Experiência | Diferenças |
---|---|---|---|
Enviar uma mensagem de chat | Players:Chat() | TextChannel:SendAsync() | O método TextChatService:SendAsync() suporta mais recursos de chat avançados, como formatação de texto rico e prioridade de mensagem. Ele também inclui filtro de construção incorporado para ajudar a prevenir mensagens inapropriadas. |
implementar retornos de chamada de mensagens | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | O sistema de chat de legado vincula uma função a eventos do sistema de chat para entregar mensagens. Os dois métodos do sistema de chat de texto na experiência têm mais flexibilidade e opções de personalização. |
Adicionar Comandos de Chat Personalizados | ChatService/ChatCommand módulo | TextChatCommand | O sistema de chat de texto na experiência tem uma classe dedicada representando um comando de texto para personalização, em vez de usar um módulo de chat legado. |
Exibir uma Mensagem do Sistema | StarterGui:SetCore() usando "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | O retorno de chamada TextChannel.OnIncomingMessage pode retornar uma instância TextChatMessageProperties para personalizar a aparência da mensagem. |
Desativar chat/conversa | Configurações do Jogo no Studio e ChatWindow/ChatSettings módulo para ocultar a janela de chat | ChatWindowConfiguration.Enabled |
Filtragem de Mensagens
O sistema de chat de texto na experiência automaticamente filtra automaticamente as mensagens de chat com base nas informações de conta de cada jogador, para que você não precise implementar manualmente a filtragem de texto para todos os tipos de mensagens de chat.
Funcionalidade | chat/conversade Legado | chat/conversade Texto Na Experiência |
---|---|---|
Filtrar Mensagem para um Jogador Individual | Chat:FilterStringAsync() | não aplicável |
Filtrar Mensagens de Difusão | Chat:FilterStringForBroadcast() | não aplicável |
Janela e Bubble chat/conversa
Tanto a janela de chat quanto o comportamento e bate-papo de bolha e opções de personalização do sistema de chat na experiência são idênticas às do sistema de chat de legado. Como o sistema de chat
Funcionalidade | chat/conversade Legado | chat/conversade Texto Na Experiência |
---|---|---|
Habilitar Janelas de Bate-papo | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Habilitar chat/conversade Bola | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Configurar Propriedades da Janela de Bate-papo | Players:SetChatStyle() | ChatWindowConfiguration |
Configurar Propriedades do Chat de Bubble | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
Ativar bolhas NPC | Chat:Chat() | TextChatService:DisplayBubble() |