Trò chuyện văn bản trong kinh nghiệm

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Với hệ thống trò chuyện trong kinh nghiệm text chat trên Roblox, người chơi có thể giao tiếp với nhau bằng các tin nhắn dựa trên văn bản trong các phiên đấu trò chuyện trực tiếp. Hệ thống cung cấp một loạt các phương

Hướng dẫn này đề cập đến quy trình làm việc chat và phương pháp tiếp cận để mở rộng các chức năng của hệ thống chat. Để biết thêm thông tin về việc tùy chỉnh giao diệu người dùng chat (UI) tùy chỉnh, hãy xem Tùy chỉnh Chat.

Workflow trò chuyện

Hệ thống trò chuyện văn bản trong kinh nghiệm được tạo bởi cả hai lớp có thể mở mà bạn có thể mở rộng cho các hành vi giao tiếp tùy chỉnh và người dữ liệu immutable đại diện cho một số thành phần trò chuyện được trả lại bởi các lớp có thể mở.

Lớp Chat Đổi

Hệ thống trò chuyện văn bản trong kinh nghiệm cung cấp các lớp thay đổi đáng kể:

  • TextChatService — Class này có trách nhiệm quản lý toàn bộ hệ thống chat, bao gồm xử lý lọc tin nhắn, hòa giải và quyền truy cập người dùng. Từ máy chủ, nó cung cấp một loạt các phương thức và sự kiện mà các API trò chuyện văn bản hoặc người dùng khác có
  • TextChannel — Lớp này代表 một kênh trò chuyện text từ client đến server và hiển thị nó cho người khác dựa trên các quyền. Bạn có thể sử dụng nó để tạo, điều chỉnh và quản lý các kênh text trong trải nghiệm của bạn. Ngo
  • TextChatCommand — Lớp này cho phép bạn tạo các lệnh trò chuyện tùy chỉnh cho phép người chơi gọi các hành động hoặc hành vi nhất định bằng cách nhập các nhân vật đặc biệt theo một cái tên trò chuyện. Các lệnh trò chuyện hữu ích cho việc qu

Đối tượng trò chuyện bất biến

Hệ thống trò chuyện văn bản trong kinh nghiệm bao gồm các đối tượng chắc chắn không thể được chỉnh sửa bằng cách đọc chỉ đọc:

  • TextChatMessage : Đối tượng này đại diện cho một tin nhắn trò chuyện trong một kênh trò chuyện văn bản với các thông tin cơ bản như người gửi tin nhắn, tin nhắn ban đầu, tin nhắn lọc và ngày tạo.
  • TextSource : Đối tượng này đại diện cho một người gửi tin nhắn trong một kênh trò chuyện văn bản với các quyền truy cập chi tiết của một người trong kênh. Nếu một người đang ở trong nhiều kênh trò chuyện văn bản, họ có thể có nhiều nguồn tin nhắn khác nhau.

Hồ sơ trò chuyện

Thông qua quá trình gửi tin nhắn trong cuộc trò chuyện và quá trình giao nhận, các phương thức, hồi kết quả và sự kiện của lớp chat biến đổi làm việc cùng với các đối tượng chat immutable trên ba bên của mô hình 客戶端-服務器 :

  • Client gửi, là thiết bị địa phương của một người gửi tin nhắn.
  • Đang nhận các khách hàng, thiết bị lưu trữ địa phương của người chơi khác.
  • Máy máy chủ, which is the central processing unit for receiving the message from the sending client and handle the delivery to receiving clients.
A flowchart of the in-experience text chat workflow

Như bảng chảy chỉ thị, hệ thống trò chuyện trong kinh nghiệm chuyển thông điệp trò chuyện qua các bước sau đây:

  1. Một người chơi gửi một thông điện từ thiết bị của họ, kích hoạt phương thức TextChannel:SendAsync() . Phương thức này xử lý thông điện và xác định có phải là một lệnh trò chuyện hoặc một tin nhắn trò chuyện thông thường.
  2. Nếu đầu ghi hộp thoại là một lệnh trò chuyện, nó sẽ kích hoạt sự kiện TextChatCommand.Triggered để thực hiện hành động bạn đã định cho lệnh.
  3. Nếu đầu vào của người chơi là một tin nhắn trò chuyện thông thường, nó sẽ bắn TextChatService.SendingMessage để hiển thị tin nhắn gốc cho người gửi trên máy chủ. Tương tự như vậy, TextChannel:SendAsync() đã gửi tin nhắn đến máy chủ.
  4. Máy chủ kích hoạt TextChannel.ShouldDeliverCallback để xác định có nên gửi tin nhắn cho người chơi khác dựa trên các quyền bị đặt và yêu cầu lọc cộng đồng Roblox của bạn.
  5. Nếu TextChannel.ShouldDeliverCallback xác định rằng thông điệp đủ điều kiện để được gửi đến các người chơi khác, máy chủ áp dụng bất kỳ lọc nào và kích hoạt TextChannel.OnIncomingMessage hai lần:
    1. Lần đầu tiên trên client gửi tín hiệu rằng máy chủ đang xử lý tin nhắn thông qua sự kiện TextChatService.MessageReceived . Điều này cũng thay thế tin nhắn local trên client với tin nhắn đang đến để hiển thị trên các client nhận. Tin nhắn có thể giống nhau nếu tin nhắn ban đầu k
    2. Lần thứ hai là trên khách hàng để kích hoạt sự kiện TextChatService.MessageReceived để hiển thị thông điệp cho người chơi khác.

Có một số khu vực của workflow chat system mà bạn có thể kéo dài và tùy chỉnh hành vi, nhưng các bước của cách hệ thống hoạt động vẫn giống như nhau.

Tùy chỉnh hành vi giao hàng tin nhắn

Ngoài việc tuân theo mặc định trình chuyển tin nhắn trò chuyện, bạn có thể sử dụng TextChannel.ShouldDeliverCallback để thêm các quyền và hành vi cụ thể để xác định có thể nhận được một tin nhắn cho sự tương tác tùy chỉnh, chẳng hạn như:

  • Hỗ trợ trò chuyện dựa trên nhóm mà chỉ người chơi trong cùng một nhóm hoặc đội có thể trò chuyện với nhau.
  • Hỗ trợ chat dựa trên gần nơi người chơi chỉ có thể gửi tin nhắn cho những người gần họ nhất.
  • Ngăn chặn người chơi có các thuộc tính nhất định khỏi gửi tin nhắn đến người khác. Ví dụ, hạn chế người chơi có trạng thái chết để gửi tin nhắn đến người chơi sống.
  • Thêm tính năng dự đoán khiến các câu trả lời đúng trong trò chuyện không hiển thị cho người chơi khác.

Ví dụ sau đây cho thấy cách thực hiện chat độc quyền cho các nhân vật người chơi gần nhau ở các vị trí. Nó mở rộng hàm bằng cách sử dụng TextSource để xác định vị trí của một người chơ


local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- ví dụ này sử dụng kênh chung; bạn có thể thay thế nó bằng một kênh dành riêng
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Định nghĩa một hàm để nhận vị trí của một người chơivật
local function getPositionFromUserId(userId: number)
-- Nhận người chơi được gắn với ID người dùng được cung cấp
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Nếu người chơi tồn tại, lấy vị trí của họ.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Quay vị trí mặc định nếu người chơi hoặc nhân vật không thể được tìm thấy
return Vector3.zero
end
-- Cài đặt gọi xe cho kênh chung để kiểm soát việc giao hàng tin nhắn
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Nhận vị trí của người gửi tin nhắn và mục tiêu
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Nếu khoảng cách giữa người gửi và người nhận là dưới 50 đơn vị, gửi thông tin nhắn
return (targetPos - sourcePos).Magnitude < 50
end

Tạo Các Lệnh Tùy Chỉnh

Hệ thống trò chuyện trong kinh nghiệm có các lệnh trò chuyện được tích hợp sẵn cho mục đích thông thường, chẳng hạn n

Các ví dụ sau đây cho thấy cách tạo một lệnh trò chuyện cho phép người chơi tăng hoặc giảm kích thước nhân vật của họ khi họ nhập /super hoặc /mini .

  1. Lập một TextChatCommand instance bên trong TextChatService .

  2. Đổi tên nó thành SizeCommand .

  3. Đặt thuộc tính PrimaryAlias của nó thành /super và thuộc tính SecondaryAlias của nó thành 1> /mini1> .

  4. Làm theo các bước sau đây Script dentro ServerScriptService để xác định một hàm để gọi cho lệnh trò chuyện thay đổi kích thước nhân vật.

    Tập lệnh

    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)

Migrating từ Legacy Trò chuyện

Bộ phận này giúp bạn di chuyển từ hệ thống chat truyền thống đến migrae hệ thống chat trực tuyến bằng cách cung cấp các phương thức thay thế để thực hiện các chức năng và hành vi trò chuyện phổ biến bằng cách sử dụng hệ thống trò chuyện trong trải nghiệm.

Để chuyển hệ thống trò chuyện của một trải nghiệm hiện tại từ hệ thống trò chuyện thừa kế đến hệ thống trò chuyện trong trải nghiệm:

  1. Trong cửa sổ Explorer, hãy chọn TextChatService .

  2. Trong cửa sổ Tùy chỉnh, tìm thấy dòng ChatVersion và chọn TextChatService .

Các chức năng cơ bản

Mặc dù cả hai hệ thống đều chia sẻ cùng một loạt các chức năng trò chuyện cơ bản, nhưng trong trải nghiệm người dùng, hệ thống trò chuyện trong kinh nghiệm thực hiện được tối ưu hóa hơn và dễ dàng hơn để lặp lại.

Chức năngCuộc trò chuyện di Trò chuyệnTrò chuyện văn bản trong kinh nghiệmSự khác biệt
Gửi tin nhắn trò chuyệnPlayers:Chat()TextChannel:SendAsync()Các phương thức TextChatService:SendAsync() hỗ trợ các tính năng trò chuyện cao cấp hơn như biểu tượng hình ảnh và ưu tiên thông điệp. Nó cũng bao gồm lọc tích hợp để giúp ngăn cản các thông điệp không phù hợp được khoản
Thực hiện gọi lại tin nhắnChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageHệ thống trò chuyện thừa kế liên kết một chức năng để trò chuyện hệ thống sự kiện để gửi các thông điệp. Hai phương thức của hệ thống trò chuyện trong kinh nghiệm có nhiều độ linh động hơn và lựa chọn tùy chỉnh hơn.
Thêm Các Lệnh Chat Tùy ChỉnhChatService/ChatCommand hệTextChatCommandHệ thống trò chuyện trong kinh nghiệm có một lớp dành riêng đại diện cho một lệnh chữ để tùy chỉnh thay vì sử dụng một mô-đun trò chuyện di sản.
Hiển thị một tin nhắn hệ thốngStarterGui:SetCore() bằng cách sử dụng "ChatMakeSystemMessage"TextChannel:DisplaySystemMessage()Cuộc gọi TextChannel.OnIncomingMessage có thể trả lại một TextChatMessageProperties instância để tùy chỉnh nhận dạng tin nhắn.
Vô hiệu hóa trò Trò chuyệnCài đặt trò chơi trong Studio và ChatWindow/ChatSettings module để ẩn cửa sổ trò chuyệnChatWindowConfiguration.Enabled

Lọc Tin Nhắn

Hệ thống trò chuyện trong kinh nghiệm tự động lọc các tin nhắn trò chuyện dựa trên thông tin tài khoản của mỗi người chơi, so you don't need to manually implement text filtering for all kinds of chat messages.

Chức năngCuộc trò chuyện di Trò chuyệnTrò chuyện văn bản trong kinh nghiệm
Lọc Tin Nhắn cho Người chơi cụ thểChat:FilterStringAsync()n/a
Lọc Tin Nhắn Phát sóngChat:FilterStringForBroadcast()n/a

Cửa sổ và Bubble Trò chuyện

Cả cửa sổ trò chuyện và trò chuyện bong bóng hành vi và tùy chỉnh tùy chọn của hệ thống trò

Chức năngCuộc trò chuyện di Trò chuyệnTrò chuyện văn bản trong kinh nghiệm
Mở Cửa Sổ Trò ChuyệnClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Bật Bubble Trò chuyệnClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Cài đặt Thông số cửa sổ trò chuyệnPlayers:SetChatStyle()ChatWindowConfiguration
Tùy chỉnh các thuộc tính của Bubble ChatClass.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0>BubbleChatConfiguration
Bật Bong Bóng NPCChat:Chat()TextChatService:DisplayBubble()