chatde texto en la experiencia

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Con el sistema de chat de texto en la experiencia en Roblox, los jugadores pueden comunicarse entre sí usando mensajes de texto en sesiones en vivo. El sistema proporciona un conjunto de métodos y eventos para extender y personalizar las funciones de chat, como enviar mensajes basados ​​en solicitudes personalizadas , agregar permisos especiales o moderación a jugadores específicos y crear comandos personalizados

Este guía cubre el flujo de trabajo y las aproximaciones para extender las funcionalidades del sistema de chat. Para obtener más información sobre la personalización de la interfaz de usuario (UI) del chat, see Personalizar el chat del usuario .

Flujo de trabajo de chat

El sistema de chat de texto en la experiencia consiste en ambas clases mutables que puedes extender para obtener comportamientos de chat personalizados y objetos de datos immutables que representan ciertos elementos de chat devueltos por las Clases.

Clases de chat mutables

El sistema de chat de texto en la experiencia proporciona las siguientes Clases:

  • TextChatService — Esta clase única es responsable de administrar el sistema de chat general, incluida la gestión de filtro de mensajes de chat, moderación y permisos de usuario. Accesible desde el servidor, proporciona un conjunto de métodos y eventos que otras APIs de chat o acciones de usuario pueden invocar a través del flujo de trabajo de chat.
  • TextChannel — Esta clase representa un canal de chat de texto que pasa los mensajes de chat del jugador del cliente al servidor y los muestra a otros jugadores según los permisos. Puede usarlo para crear, modificar y administrar canales de texto en su experiencia. Además, puede crear múltiples canales de texto para agrupar a los jugadores por propósitos de chat, como permitir que los jugadores chateen con sus miembros del grupo que no son vis
  • TextChatCommand — Esta clase te permite crear comandos de chat personalizados que permiten a los jugadores invocar acciones o comportamientos específicos al escribir caracteres especiales después de un nombre de comando. Los comandos de chat son útiles para agregar funcionalidades y capacidades adicionales a la experiencia de chat. También los puedes usar para crear comandos de administrador para administrar y moderar tu experiencia con atajos.

Objetos de chat inmutables

El sistema de chat de texto en la experiencia incluye los siguientes objetos no mutables con propiedades de solo lectura que no puedes modificar:

  • TextChatMessage : Este objeto representa un mensaje de chat en un canal de chat de texto con información básica como el remitente del mensaje, el mensaje original, el mensaje filtrado y la hora de creación.
  • TextSource : Este objeto representa a un emisor de mensajes en un canal de chat de texto con permisos detallados de un jugador en el canal. Si un jugador está en múltiples canales de chat de texto, pueden tener múltiples fuentes de texto también.

Gráfico de flujo de chat

A través del mensaje de chat y el proceso de entrega, métodos, llamadas de retorno y eventos de clases de chat mutables trabajan junto con los objetos de chat imutables en tres lados del aplicación de modeladode cliente-servidor:

  • El cliente de envío, que es el dispositivo local de un jugador que envía un mensaje.
  • Recibiendo clientes, que son dispositivos locales de otros jugadores.
  • El servidor, que es el procesador central para recibir el mensaje del cliente de envío y maneja la entrega a los clientes de recepción.
A flowchart of the in-experience text chat workflow

Como muestra el flujo de trabajo, el sistema de chat de texto en la experiencia procesa un mensaje de chat a través de los siguientes pasos:

  1. Un jugador envía un mensaje desde su dispositivo local, que activa el método TextChannel:SendAsync(). Este método procesa el mensaje y determina si es un comando de chat o un mensaje de chat regular.
  2. Si la entrada del jugador es un comando de chat, se activa el evento TextChatCommand.Triggered para realizar la acción que has definido para el comando.
  3. Si la entrada del jugador es un mensaje de chat regular, se activa TextChatService.SendingMessage para mostrar el mensaje original al remitente en el cliente de envío. Al mismo tiempo, el pase TextChannel:SendAsync() pasa el mensaje al servidor.
  4. El servidor TextChannel.ShouldDeliverCallback para determinar si enviar el mensaje a otros jugadores se basa en las autorizaciones que ha establecido y en los requisitos de filtrado de la comunidad de Roblox.
  5. Si TextChannel.ShouldDeliverCallback determina que el mensaje es elegible para enviarse a otros jugadores, el servidor aplica cualquier filtro y dispara TextChannel.OnIncomingMessage dos veces:
    1. La primera vez en el cliente de envío para señalar que el servidor está procesando el mensaje a través del evento TextChatService.MessageReceived. Esto también reemplaza el mensaje local en el cliente de envío con el mensaje entrante para mostrar en los clientes de recepción. El mensaje puede ser idéntico si el mensaje original no requiere filtrado.
    2. La segunda vez es en el cliente de destino para activar el evento TextChatService.MessageReceived para mostrar el mensaje a otros jugadores.

Hay varias áreas del flujo de trabajo del chat que puedes extender y personalizar el comportamiento, pero los pasos de cómo el sistema opera siguen siendo los mismos.

Personalizar Comportamientos de Entrega de Mensajes

Además de seguir con el comportamiento de entrega de mensajes de chat predeterminado, puede usar TextChannel.ShouldDeliverCallback para agregar permisos y comportamientos específicos para determinar si los jugadores pueden recibir un mensaje para un compromiso personalizado, como:

  • Soporte para el chat basado en grupos que solo los jugadores en el mismo grupo o escuadrón pueden comunicarse entre sí.
  • Soporte del chat basado en la proximidad donde los jugadores solo pueden enviar mensajes a aquellos cerca de ellos.
  • Evitar a los jugadores con ciertos atributos de enviar mensajes a otros. Por ejemplo, desactivar a los jugadores con un estado de muerte para enviar mensajes a jugadores vivos.
  • Añadiendo la función de competencia de adivinación donde las respuestas correctas en el chat no son visibles para otros jugadores.

El siguiente ejemplo muestra cómo implementar un chat exclusivo para los personajes de los jugadores que están cerca el uno del otro en las ubicaciones. Extiende el llamado con una función que usa TextSource para identificar las ubicaciones de un jugador que podría ser un receptor de mensajes potencial. Si esta función devuelve false , significa que el personaje del jugador se encuentra más lejos del rango pre


local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Este ejemplo usa el canal general; puede reemplazar esto con un canal dedicado
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Defina una función para obtener la posición de un personaje de un jugador
local function getPositionFromUserId(userId: number)
-- Obtener el jugador asociado con el ID de usuario dado
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Si el jugador existe, obtenga la posición de su personaje.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Devolver una posición predeterminada si el jugador o personaje no se puede encontrar
return Vector3.zero
end
-- Establece el callback para el canal general para controlar la entrega de mensajes
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Obtener las posiciones del remitente y del destinatario
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Si la distancia entre el emisor y el destinatario es menor a 50 unidades, entregue el mensaje
return (targetPos - sourcePos).Magnitude < 50
end

Creando Comandos Personalizados

El sistema de chat de texto en la experiencia tiene comandos de chat incorporados para propósitos comunes, como crear canales de chat basados ​​en equipos y jugar avatar emote. Puede habilitarlos estableciendo TextChatService.CreateDefaultCommands

El siguiente ejemplo muestra cómo crear un comando de chat que permite a los jugadores aumentar o disminuir el tamaño de su personaje cuando ingresan /super o /mini .

  1. Inserta una instancia de TextChatCommand dentro de TextChatService .

  2. Renombrarlo a Comando de tamaño .

  3. Establece su propiedad PrimarioAliado a /super y su propiedad SecundarioAliado a 1> /mini1> .

  4. Inserta el siguiente Script dentro de ServerScriptService para definir un llamado de retorno de llamada para el comando de chat que escala el tamaño del personaje.

    Script

    local TextChatService = game:GetService("TextChatService")
    local Players = game:GetService("Players")
    local sizeCommand: TextChatCommand = TextChatService:WaitForChild("SizeCommand")
    sizeCommand.Triggered:Connect(function(textSource, message)
    local scaleMult = 1
    local messageWords = string.split(message, " ")
    if messageWords[1] == "/super" then
    scaleMult = 2
    elseif messageWords[1] == "/mini" then
    scaleMult = 0.5
    end
    local player = Players:GetPlayerByUserId(textSource.UserId)
    if player then
    local character = player.Character
    if character then
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    for _, child in humanoid:GetChildren() do
    if child:IsA("NumberValue") then
    child.Value *= scaleMult
    end
    end
    end
    end
    end
    end)

Migrando desde el chat legado

Esta sección te ayuda a migrar del sistema de chat de legado por proporcionar métodos alternativos para implementar funciones y comportamientos de chat comunes usando el sistema de chat de texto en la experiencia

Para cambiar el sistema de chat de una experiencia existente desde el sistema de chat de legado a la in-experience text chat system:

  1. En la ventana Explorador, seleccione TextChatService .

  2. En la ventana Propiedades, encuentra el menú desplegable ChatVersion y selecciona TextChatService .

Funcionalidades básicas

Aunque ambos sistemas comparten las mismas funcionalidades básicas de chat, las implementaciones de chat de texto en la experiencia en general son más sostenibles y más fáciles de repetir.

FuncionalidadLegado del chatchatde texto en la experienciaDiferencias
Enviar un mensaje de chatPlayers:Chat()TextChannel:SendAsync()El método TextChatService:SendAsync() apoya más características de chat avanzadas, como la formación de texto rico y la prioridad del mensaje. También incluye filtrado integrado para ayudar a evitar que se envíen mensajes inapropiados.
implementar retornos de llamadas de mensajeríaChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageEl sistema de chat de legado vincula una función a los eventos del sistema de chat para proporcionar mensajes. Los dos métodos del sistema de chat de texto en la experiencia tienen más flexibilidades y opciones de personalización.
Agregar Comandos de Chat PersonalizadosChatService/ChatCommand móduloTextChatCommandEl sistema de chat de texto en la experiencia tiene una clase dedicada que representa un comando de texto para la personalización en lugar de usar un módulo de chat legado.
Mostrar un mensaje del sistemaStarterGui:SetCore() usando "ChatMakeSystemMessage"TextChannel:DisplaySystemMessage()El TextChannel.OnIncomingMessage llamado de retorno puede devolver una instancia de TextChatMessageProperties para personalizar la aspecto, lookdel mensaje.
Desactivar chatConfiguración del juego en Studio y ChatWindow/ChatSettings módulo para ocultar la ventana de chatChatWindowConfiguration.Enabled

Filtrado de mensajes

El sistema de chat de texto en la experiencia filtra automáticamente los mensajes de chat según la información de la cuenta de cada jugador, para que no tengas que implementar manualmente el filtrado de texto para todos los tipos de mensajes de chat.

FuncionalidadLegado del chatchatde texto en la experiencia
Filtrar mensaje para jugador individualChat:FilterStringAsync()n / a
Filtrar mensajes de anunciosChat:FilterStringForBroadcast()n / a

Ventana y chatde Burbujas

Tanto la ventana de chat como el comportamiento y las opciones de personalización de la in-experience text chat system son idénticas a las del sistema de chat legado. Como el sistema de chat legado solo permite personalizar usando módulos de chat o el contenedor

FuncionalidadLegado del chatchatde texto en la experiencia
Habilitar ventana de chatClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Habilitar chatde BocadillosClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Establecer propiedades de ventana de chatPlayers:SetChatStyle()ChatWindowConfiguration
Establecer propiedades de chat de burbujaClass.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0>BubbleChatConfiguration
Activar burbujas de NPCChat:Chat()TextChatService:DisplayBubble()