Obrolan Teks Masa chat

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Dengan sistem dalam pengalaman text chat di Roblox, pemain dapat berkomunikasi satu sama lain menggunakan pesan teks dalam sesi langsung. Sistem ini menyediakan set metode dan acara untuk mengekstensi dan menyesuaikan fungsionalitas obrolan, seperti menyediakan pesan berdasarkan kebutuhan yang disesuaikan , menambahkan

Panduan ini mencakup alur kerja chat dan pendekatan untuk menambahkan fungsionalitas sistem chat. Untuk informasi lebih lanjut tentang kustomisasi antarmuka pengguna chat (UI), lihat Kustomisasi Text Chat.

Mengirim Pekerjaan Obrolan

Sistem chat teks dalam pengalaman terdiri dari kedua kelas bervariabel yang dapat Anda ekstensikan untuk perilaku obrolan khusus dan objek data imut yang mewakili beberapa elemen obrolan yang dikembalikan oleh Kelasbervariabel.

Kelas Obrolan Mutable

Sistem chat teks dalam pengalaman memberikan Kelasberikut yang dapat diubah:

  • TextChatService — Klasik ini bertanggung jawab atas manajemen sistem chat secara keseluruhan, termasuk menangani filter pesan chat, moderasi, dan izin pengguna. Diakses dari server, ini menyediakan serangkaian metode dan acara yang dapat dipanggil oleh API chat teks atau tindakan pengguna melalui alur kerja chat.
  • TextChannel — Klas ini mewakili saluran chat teks yang mengirim pesan chat pemain dari klien ke server dan menampilikannya kepada pemain lain berdasarkan izin. Anda dapat menggunakannya untuk menciptakan, mengubah, dan mengelola saluran teks di pengalaman Anda. Selain itu, Anda dapat menciptakan beberapa saluran teks unt
  • TextChatCommand — Klas ini memungkinkan Anda untuk menciptakan perintah obrolan khusus yang memungkinkan pemain untuk menyebut tindakan atau perilaku tertentu dengan mengetik karakter khusus yang diikuti oleh nama perintah. Perintah obrolan berguna untuk menambahkan fungsionalitas dan interaktivitas tambahan ke pengalaman obrolan. Anda juga dapat menggunakannya untuk menciptakan

Objek Obrolan Tidak Dapat Diubah

Sistem chat teks dalam pengalaman meng包括 berikut objek yang tidak dapat diubah dengan hanya propperti baca yang dapat Anda modifikasi:

  • TextChatMessage : Objek ini mewakili pesan chat tunggal di saluran chat teks dengan informasi dasar seperti pengirim pesan, pesan asli, pesan disaring, dan tanggal pembuatan.
  • TextSource : Objek ini mewakili pengirim pesan di saluran chat teks dengan izin yang terperinci dari pemain di channel. Jika pemain berada di lebih dari satu saluran chat teks, mereka dapat memiliki banyak sumber teks juga.

Mengobrol FlowChart

Melalui pesan obrolan yang dikirim dan proses pengiriman, metode, panggilan, dan acara dari kelas obrolan yang dapat diubah bekerja berdampingan dengan objek obrolan yang tidak dapat diubah di tiga sisi model klien-server:

  • Klien pengirim, yang merupakan perangkat lokal pemain yang mengirim pesan.
  • Menerima klien, yang merupakan perangkat lokal pemain lain.
  • server, yang merupakan prosesor pusat untuk menerima pesan dari klien pengirim dan menangani pengiriman ke klien penerima.
A flowchart of the in-experience text chat workflow

Seperti yang ditunjukkan oleh aliran teks, sistem chat dalam pengalaman mengolah pesan chat melalui langkah-langkah berikut:

  1. Seorang pemain mengirim pesan dari perangkat lokal mereka, menyebabkan metode TextChannel:SendAsync() . Metode ini memproses pesan dan menentukan apakah itu adalah pesan chat atau pesan chat normal.
  2. Jika input pemain adalah perintah obrolan, itu mengeksekusi acara TextChatCommand.Triggered untuk mengeksekusi tindakan yang telah Anda definisikan untuk perintah.
  3. Jika input pemain adalah pesan obrolan biasa, itu mengeksekuskan TextChatService.SendingMessage untuk menampilkan pesan asli ke pengirim di klien pengirim. Pada saat yang sama, TextChannel:SendAsync() mengirim pesan ke server.
  4. Server mengeksekusi TextChannel.ShouldDeliverCallback untuk menentukan apakah akan mengirim pesan ke pemain lain berdasarkan izin yang Anda tetapkan dan persyaratan filtering komunitas Roblox.
  5. Jika TextChannel.ShouldDeliverCallback menentukan bahwa pesan itu layak untuk dikirim ke pemain lain, server menerapkan filter dan mengeksekusi TextChannel.OnIncomingMessage dua kali:
    1. Pertama kali di klien pengirim untuk menyinyal bahwa server sedang memproses pesan melalui acara TextChatService.MessageReceived. Ini juga mengganti pesan lokal di klien pengirim dengan pesan yang diterima untuk ditampilkan di klien penerima. Pesan ini sama jika pesan asli tidak memerlukan filtering.
    2. Kali kedua adalah pada klien penerima untuk mengaktifkan acara TextChatService.MessageReceived untuk menampilkan pesan kepada pemain lain.

Ada beberapa daftar area dari alur kerja chat yang dapat Anda ekstensikan dan sesuaikan perilaku, tetapi langkah-langkah cara sistem beroperasi tetap sama.

Mengubah Perilaku Pengiriman Pesan

Selain tetap dengan perilaku pesan obrolan default, Anda dapat menggunakan TextChannel.ShouldDeliverCallback untuk menambahkan izin dan perilaku khusus untuk menentukan apakah pemain dapat menerima pesan untuk keterlibatan yang disesuaikan, seperti:

  • Mendukung obrolan berbasis kelompok yang hanya pemain di kelompok atau regu yang sama yang dapat berkomunikasi antara.
  • Mendukung obrolan berdasar lokasi di mana pemain hanya dapat mengirim pesan ke orang-orang yang dekat dengan mereka.
  • Mencegah pemain dengan beberapa属性 dari mengirim pesan ke pemain lain. Misalnya, nonaktifkan pemain dengan status kematian untuk mengirim pesan ke pemain yang masih hidup.
  • Menambahkan fitur kompetisi menebak di mana jawaban yang benar dalam obrolan tidak terlihat oleh pemain lain.

Contoh berikut menunjukkan cara menerapkan obrolan eksklusif untuk karakter pemain yang dekat satu sama lain di lokasi. Ini menggunakan fungsi TextSource untuk mengidentifikasi lokasi pemain yang potensialmente menerima pesan. Jika fungsi ini mengembalikan false, itu berarti bah


local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Contoh ini menggunakan channelumum; Anda dapat menggantikannya dengan saluran channel
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Definisikan fungsi untuk mendapatkan posisi karakter pemain
local function getPositionFromUserId(userId: number)
-- Dapatkan pemain yang terkait dengan ID pengguna yang diberikan
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Jika pemain ada, dapatkan posisi karakter mereka.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Return posisi default jika pemain atau karakter tidak dapat ditemukan
return Vector3.zero
end
-- Tetapkan panggilan untuk saluran umum untuk mengontrol pengiriman pesan
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Dapatkan posisi pengirim pesan dan target
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Jika jarak antara pengirim dan target kurang dari 50 unit, kirim pesan
return (targetPos - sourcePos).Magnitude < 50
end

Membuat Perintah Kustom

Sistem chat teks dalam pengalaman telah membangun komand chat bawaan untuk tujuan umum, seperti menciptakan saluran chat berdasarkan tim dan bermain emote avatar. Anda dapat mengaktifkannya dengan menet

Contoh berikut menunjukkan cara membuat perintah obrolan yang memungkinkan pemain untuk meningkatkan atau menurunkan ukuran karakter mereka saat mereka memasukkan /super atau /mini.

  1. Sisipkan instansi TextChatCommand di dalam TextChatService .

  2. Ganti nama itu menjadi Perintah Ukuran .

  3. Tetapkan Primernya Alias ke /super dan Sekunder Alias ke 1> /mini1> .

  4. Sisipkan berikut Script ke dalam ServerScriptService untuk mendefinisikan panggilan untuk perintah obrolan yang menyesuaikan ukuran karakter.

    Skrip

    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)

Migrasi Dari Obrolan chat

Bagian ini membantu Anda dalam migrasi dari sistem obrolan warisan dengan memberikan metode alternatif untuk menerapkan fungsionalitas dan perilaku obrolan yang umum menggunakan sistem chat teks dalam pengalaman.

Untuk mengubah sistem chat dari pengalaman yang sudah ada dari sistem chat warisan ke sistem chat teks dalam pengalaman:

  1. Di jendela Explorer, pilih TextChatService .

  2. Di jendela Proprieti, temukan dropdown ChatVersion dan pilih TextChatService .

Fungsi Dasar

Meskipun kedua sistem berbagi fungsionalitas obrolan dasar yang sama, implementasi chat obrolan pengalaman bersamaan lebih berkelanjutan dan lebih mudah untuk ditukar.

KesesuaianObrolan chatObrolan Teks Masa chatPerbedaan
Kirim Pesan ObrolanPlayers:Chat()TextChannel:SendAsync()Metode TextChatService:SendAsync() mendukung fitur obrolan yang lebih maju seperti format teks kaya dan prioritas pesan. Ini juga termasuk filter built-in untuk membantu mencegah pesan yang tidak pantas dikirim.
Mengaktifkan Panggilan PesanChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageSistem obrolan warisan mengikat fungsi untuk acara obrolan untuk memberikan pesan. Dua metode dari sistem chat teks dalam pengalaman memiliki lebih banyak fleksibilitas dan opsi kustomisasi.
Tambahkan Komandos Obrolan KustomChatService/ChatCommand modulTextChatCommandSistem chat teks dalam pengalaman memiliki kelas khusus yang mewakili perintah teks untuk kustomisasi daripada menggunakan modul chat legacy.
Tampilkan Pesan SistemStarterGui:SetCore() menggunakan "ChatMakeSystemMessage"TextChannel:DisplaySystemMessage()Panggilan TextChannel.OnIncomingMessage dapat mengembalikan instansi TextChatMessageProperties untuk menyesuaikan penampilanpesan.
Nonaktifkan chatPengaturan Permainan di Studio dan ChatWindow/ChatSettings modul untuk menyembunyikan jendela chatChatWindowConfiguration.Enabled

Filtrasi Pesan

Sistem obrolan teks dalam pengalaman secara otomatis menyaring pesan obrolan berdasarkan informasi akun setiap pemain, sehingga Anda tidak perlu mengimplemenasi filter teks untuk semua jenis pesan obrolan.

KesesuaianObrolan chatObrolan Teks Masa chat
Saring Pesan untuk Pemain TunggalChat:FilterStringAsync()tidak ada
Saring Pesan BroadcastingChat:FilterStringForBroadcast()tidak ada

Jendela dan Obrolan chat

Kedua jendela chat dan obrolan gelembung perilaku dan kustomisasi opsi dari sistem chat teks dalam pengalaman sama dengan yang dari sistem chat legendaris. Karena

KesesuaianObrolan chatObrolan Teks Masa chat
Aktifkan Jendela ObrolanClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Aktifkan Obrolan chatClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Tetapkan Propinsi Jendela ObrolanPlayers:SetChatStyle()ChatWindowConfiguration
Tetapkan Propinsi Obrolan GelembungClass.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0>BubbleChatConfiguration
Aktifkan Gelembung NPCChat:Chat()TextChatService:DisplayBubble()