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.
Seperti yang ditunjukkan oleh aliran teks, sistem chat dalam pengalaman mengolah pesan chat melalui langkah-langkah berikut:
- 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.
- Jika input pemain adalah perintah obrolan, itu mengeksekusi acara TextChatCommand.Triggered untuk mengeksekusi tindakan yang telah Anda definisikan untuk perintah.
- 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.
- Server mengeksekusi TextChannel.ShouldDeliverCallback untuk menentukan apakah akan mengirim pesan ke pemain lain berdasarkan izin yang Anda tetapkan dan persyaratan filtering komunitas Roblox.
- Jika TextChannel.ShouldDeliverCallback menentukan bahwa pesan itu layak untuk dikirim ke pemain lain, server menerapkan filter dan mengeksekusi TextChannel.OnIncomingMessage dua kali:
- 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.
- 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.
Sisipkan instansi TextChatCommand di dalam TextChatService .
Ganti nama itu menjadi Perintah Ukuran .
Tetapkan Primernya Alias ke /super dan Sekunder Alias ke 1> /mini1> .
Sisipkan berikut Script ke dalam ServerScriptService untuk mendefinisikan panggilan untuk perintah obrolan yang menyesuaikan ukuran karakter.
Skriplocal 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)
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:
Di jendela Explorer, pilih TextChatService .
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.
Kesesuaian | Obrolan chat | Obrolan Teks Masa chat | Perbedaan |
---|---|---|---|
Kirim Pesan Obrolan | Players: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 Pesan | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Sistem 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 Kustom | ChatService/ChatCommand modul | TextChatCommand | Sistem chat teks dalam pengalaman memiliki kelas khusus yang mewakili perintah teks untuk kustomisasi daripada menggunakan modul chat legacy. |
Tampilkan Pesan Sistem | StarterGui:SetCore() menggunakan "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Panggilan TextChannel.OnIncomingMessage dapat mengembalikan instansi TextChatMessageProperties untuk menyesuaikan penampilanpesan. |
Nonaktifkan chat | Pengaturan Permainan di Studio dan ChatWindow/ChatSettings modul untuk menyembunyikan jendela chat | ChatWindowConfiguration.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.
Kesesuaian | Obrolan chat | Obrolan Teks Masa chat |
---|---|---|
Saring Pesan untuk Pemain Tunggal | Chat:FilterStringAsync() | tidak ada |
Saring Pesan Broadcasting | Chat: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
Kesesuaian | Obrolan chat | Obrolan Teks Masa chat |
---|---|---|
Aktifkan Jendela Obrolan | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Aktifkan Obrolan chat | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Tetapkan Propinsi Jendela Obrolan | Players:SetChatStyle() | ChatWindowConfiguration |
Tetapkan Propinsi Obrolan Gelembung | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
Aktifkan Gelembung NPC | Chat:Chat() | TextChatService:DisplayBubble() |