Avec le dans l'expérience text chat système sur Roblox, les joueurs peuvent communiquer entre eux en utilisant des messages basés sur le texte dans les sessions en direct. Le système fournit un ensemble de méthodes et d'événements pour étendre et personnaliser les fonctionnalités de chat, telles que la livraison de messages basés sur besoins personnalisés , l'ajout de permissions ou de modération spéciales à des joueurs spécifiques et
Ce guide couvre le workflow de chat et les approches pour étendre les fonctionnalités du système de chat. Pour plus d'informations sur la personnalisation de l'interface utilisateur du chat (UI), voir Personnalisation du chat textuel.
Flux de travail de chat
Le système de chat textuel de l'expérience consiste en deux classe mutable que vous pouvez étendre pour des comportements de chat personnalisés et objets de données immuables représentant certains éléments de chat retournés par les Classes.
Classes de chat mutables
Le système de chat textuel dans l'expérience fournit les Classessuivantes :
- TextChatService — Ce classeur unique est responsable de la gestion du système de chat global, y compris la gestion du filtre de message de chat, la modération et les permissions de l'utilisateur. Accéssible depuis le serveur, il fournit un ensemble de méthodes et d'événements que d'autres API de chat ou actions d'utilisateur peuvent invoquer via le workflow de livraison de chat.
- TextChannel — Cette classe représente un canal de chat textuel qui transmet les messages de chat envoyés par le client au serveur et les affiche à d'autres joueurs en fonction des permissions. Vous pouvez l'utiliser pour créer, modifier et gérer les canaux de texte dans votre expérience. De plus, vous pouvez créer plusieurs canaux de texte pour regrouper les joueurs pour discuter, tels que permettre aux joueurs de discuter avec leurs membres du groupe qui ne sont pas visibles pour les autres.
- TextChatCommand — Cette classe vous permet de créer des commandes de chat personnalisées qui permettent aux joueurs d'inviter des actions ou des comportements spécifiques en tapant des caractères spéciaux suivis d'un nom de commande. Les commandes de chat sont utiles pour ajouter des fonctionnalités et de l'interactivité supplémentaires à l'expérience de chat. Vous pouvez également les utiliser pour créer des commandes d'administration pour gérer et modérer votre expérience avec des raccourcis.
Objets de discussion immuables
Le système de chat textuel dans l'expérience inclut les objets suivants avec des propriétés de lecture seule que vous ne pouvez pas modifier :
- TextChatMessage : Cet objet représente un seul message de chat dans un canal de chat textuel avec des informations de base telles que l'expéditeur du message, le message d'origine, le message filtré et la création température.
- TextSource : Ce objet représente un expéditeur de messages dans un canal de chat textuel avec des permissions détaillées d'un joueur dans le chat (chat privé). Si un joueur est dans plusieurs canaux de chat textuel, ils peuvent avoir plusieurs sources de texte aussi.
Tableau de bord de chat
Grâce au message de chat et au processus de livraison, aux méthodes, aux rappels et aux événements des classes de chat mutables, les objets de chat immuables côtoient les objets de chat immuables sur trois côtés du modèlisationclient-serveur :
- Le client d'expédition, qui est le périphérique local d'un joueur envoyant un message.
- Receiving clients, qui sont les appareils locaux des autres joueurs.
- Le serveur, qui est le processeur central pour recevoir le message du client d'envoi et gère la livraison aux clients de réception.
Comme le montre le tableau de bord, le système de chat textuel de l'expérience traite un message de chat à travers les étapes suivantes :
- Un joueur envoie un message à partir de leur appareil local, déclenchant la méthode TextChannel:SendAsync(). Ce méthode traite le message et détermine si c'est un commande de chat ou un message de chat régulier.
- Si l'entrée du joueur est un commande de chat, il déclenche l'événement TextChatCommand.Triggered pour exécuter l'action que vous avez définie pour le commande.
- Si l'entrée du joueur est un message de chat régulier, il lance TextChatService.SendingMessage pour afficher le message original à l'expéditeur sur le client d'expédition. En même temps, le TextChannel:SendAsync() passe le message au serveur.
- Le serveur lance TextChannel.ShouldDeliverCallback pour déterminer si livrer le message à d'autres joueurs en fonction des permissions que vous avez configurées et des exigences de filtrage de la communauté Roblox.
- Si TextChannel.ShouldDeliverCallback détermine que le message est éligible à l'expédition à d'autres joueurs, le serveur applique tout filtre et l'exécute deux fois :
- La première fois sur le client d'envoi pour signaler que le serveur traite le message via l'événement TextChatService.MessageReceived. Cela remplace également le message local sur le client d'envoi par le message entrant pour afficher sur les clients recevants. Le message peut être identique si le message d'origine ne nécessite pas de filtrage.
- La deuxième fois, c'est sur le client de réception pour déclencher l'événement TextChatService.MessageReceived pour afficher le message à d'autres joueurs.
Il existe plusieurs zones du flux de travail du système de chat que vous pouvez étendre et personnaliser le comportement, mais les étapes de l'opération du système restent les mêmes.
Personnalisation du comportement de livraison des messages
En plus de rester avec le comportement de livraison de message de chat par défaut, vous pouvez utiliser TextChannel.ShouldDeliverCallback pour ajouter des permissions et des comportements spécifiques pour déterminer si les joueurs peuvent recevoir un message pour un participationpersonnalisé, comme :
- Supporter le chat basé sur le groupe auquel seuls les joueurs du même groupe ou de l'escouade peuvent communiquer.
- Supporter le chat basé sur la proximité où les joueurs ne peuvent envoyer de messages qu'aux personnes qui sont près d'eux.
- Empêche les joueurs avec certains attributs d'envoyer des messages à d'autres. Par exemple, empêche les joueurs avec un statut de mort d'envoyer des messages aux joueurs vivants.
- Ajouter la fonction de compétition de devinage où les réponses correctes dans le chat ne sont visibles pour d'autres joueurs.
L'exemple suivant montre comment implémenter un chat exclusif pour les personnages de joueur qui sont proches les uns des autres dans les lieux. Il étend le rappel avec une fonction en utilisant TextSource pour identifier les lieux d'un joueur potentiel qui pourrait être un récepteur de message potentiel. Si cette fonction renvoie false, cela signifie que le personnage du joueur se trouve plus loin que la
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Cet exemple utilise le chat (chat privé)général ; vous pouvez le remplacer par un chat (chat privé)dédié
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Définissez une fonction pour obtenir la position d'un personnage de joueur
local function getPositionFromUserId(userId: number)
-- Obtenez le joueur associé à l'ID utilisateur donné
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Si le joueur existe, obtenez la position de leur personnage.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Renvoie une position par défaut si le joueur ou le personnage ne peut pas être trouvé
return Vector3.zero
end
-- Définissez le rappel pour le canal général pour contrôler la livraison des messages
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Obtenez les positions du messageur et de la cible
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Si la distance entre l'expéditeur et la cible est inférieure à 50 unités, livre le message
return (targetPos - sourcePos).Magnitude < 50
end
Créer des commandes personnalisées
Le système de chat textuel dans l'expérience a des commandes de chat intégrées pour des buts communs, tels que la création de canaux de chat basés sur l'équipe et le jeu d'avatar. Vous pouvez les activer en définissant Class.TextChatService
L'exemple suivant montre comment créer un commande de chat qui permet aux joueurs d'augmenter ou de diminuer la taille de leur personnage lorsqu'ils saisissent /super ou /mini.
Insérez une instance de TextChatCommand à l'intérieur de TextChatService.
Renommez-le en Commande de taille .
Définissez sa propriété PrimaryAlias sur /super et sa propriété SecondaryAlias sur 1> /mini1>.
Insérez le suivant Script à l'intérieur de ServerScriptService pour définir un rappel pour le commande de chat qui met l'échelle de la taille du personnage.
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)
Migrer depuis le chat legacy
Cette section vous aide à migrer du système de chat hérité par le biais de méthodes alternatives pour l'implémentation des fonctionnalités et des comportements de chat communs en utilisant le système de chat textuel dans l'expérience.
Pour basculer le système de chat d'une expérience existante du système de chat legacy au système de chat textuel dans l'expérience :
Dans la fenêtre Explorateur, sélectionnez TextChatService .
Dans la fenêtre propriétés, trouvez le ChatVersion menu déroulant et sélectionnez TextChatService .
Fonctionnalités de base
Bien que les deux systèmes partagent les mêmes fonctionnalités de chat de base, les implémentations de chat textuel dans l'expérience sont en général plus durables et plus faciles à itérer.
Fonctionnalité | chatde légacy | chattextuel dans l'expérience | Différences |
---|---|---|---|
Envoyer un message de chat | Players:Chat() | TextChannel:SendAsync() | La méthode TextChatService:SendAsync() prend en charge des fonctionnalités de chat plus avancées telles que la mise en forme du texte riche et la priorité des messages. Elle inclut également un filtrage intégré pour aider à empêcher les messages inappropriés d'être envoyés. |
Mettre en œuvre les appels de messagerie | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Le système de chat legacy attache une fonction au chat system events pour livrer des messages. Les deux méthodes du système de chat textuel dans l'expérience ont plus de flexibilités et d'options de personnalisation. |
Ajouter des commandes de chat personnalisées | ChatService/ChatCommand module | TextChatCommand | Le système de chat textuel dans l'expérience a une classe dédiée représentant une commande de texte pour la personnalisation plutôt que d'utiliser un module de chat legacy. |
Afficher un message du système | StarterGui:SetCore() en utilisant "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Le TextChannel.OnIncomingMessage rappel peut retourner une instance TextChatMessageProperties pour personnaliser l'apparence du message. |
Désactiver chat | Paramètres du jeu dans Studio et ChatWindow/ChatSettings module pour cacher la fenêtre de chat | ChatWindowConfiguration.Enabled |
Filtrage des messages
Le système de chat textuel de l'expérience filtre automatiquement les messages de chat en fonction de l'information du compte de chaque joueur, afin que vous n'ayez pas à implémenter manuellement le filtrage de texte pour tous les types de messages de chat.
Fonctionnalité | chatde légacy | chattextuel dans l'expérience |
---|---|---|
Filtrer le message pour le joueur individuel | Chat:FilterStringAsync() | n/a |
Filtrer les messages de broadcasting | Chat:FilterStringForBroadcast() | n/a |
chatde fenêtre et bulle
Tanto la fenêtre de discussion que le comportement et les options de chat à bulles dans le système de chat textuel dans l'expérience sont identiques à ceux du système de chat légendaire. Comme le système de chat légendaire ne permet que la person
Fonctionnalité | chatde légacy | chattextuel dans l'expérience |
---|---|---|
Activer la fenêtre de discussion | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Activer le chat bulle | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Définir les propriétés de la fenêtre de discussion | Players:SetChatStyle() | ChatWindowConfiguration |
Définir les propriétés de chat à bulles | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
Activer bulles NPC | Chat:Chat() | TextChatService:DisplayBubble() |