Kerangka Kerja Hierarki
Sistem obrolan warisan menggunakan model klien-server .Komponen modul obrolan sisi server ChatChannel dan ChatSpeaker manajemen ditangani oleh ChatService di server, sementara klien bertanggung jawab untuk input dan tampilan pesan.Komunikasi antara server dan klien ditangani secara otomatis menggunakan RemoteEvents .
Layanan mesin Chat itu sendiri adalah unit penyimpanan penting untuk sistem obrolan: ketika tempat Roblox dimuat (baik di klien atau di Studio saat menjalankan atau bermain), komponen berikut secara otomatis dimuat ke layanan Chat jika Chat.LoadDefaultChat benar.
- Modul Obrolan — Ini Folder adalah koleksi modul yang diperlukan oleh ChatServiceRunner .Semua konten folder ini diperlukan oleh skrip dan digunakan untuk membuat perilaku khusus di server.
- Modul Obrolan Klien — Folder ini berisi berbagai ModuleScripts diperlukan oleh Skrip Obrolan .
- Modul Perintah — Berisi modul yang digunakan untuk menerapkan perintah obrolan sisi klien.
- Modul Pencipta Pesan — Berisi modul yang digunakan untuk menangani dan memformat pesan.
- ChatConstants — Berisi konstan yang dibagikan oleh server dan klien.
- Pengaturan Obrolan — Menyimpan berbagai pengaturan untuk mengkonfigurasi aspek berbeda dari Jendela Obrolan.
- Lokalisasi Obrolan — Struktur data yang menyimpan terjemahan teks.
- ChatServiceRunner — Ini Script menjalankan komponen server obrolan.Secara umum ini tidak perlu dimodifikasi untuk membuat perilaku dan fungsi obrolan khusus.
- BubbleChat — Menampilkan pesan obrolan pengguna di atas avatar dalam game mereka (jika diaktifkan).
- ChatScript — Ini LocalScript menjalankan komponen klien dari obrolan.Seperti ChatServiceRunner, ini tidak perlu dimodifikasi untuk menyesuaikan obrolan.Ketika permainan dijalankan ini secara otomatis diklon ke StarterPlayerScripts .
Modifikasi sistem obrolan
Untuk memodifikasi atau menyesuaikan sistem obrolan lama, Anda harus terlebih dahulu membuat salinan hierarki di atas.
Jalankan pengalaman menggunakan tombol Mainkan ( F5 ).
Pilih dan salin ( CtrlC atau ⌘C ) objek yang ditambahkan ke Chat .
Hentikan pengalaman menggunakan tombol Berhenti ( ShiftF5 ).
Pastikan bahwa Chat.LoadDefaultChat diaktifkan.
Alur kerja obrolan
Sebelum membuat modul untuk menyesuaikan obrolan, penting untuk memahami alur kerja yang dilalui pesan obrolan.Selain mengirim pesan teks, ada berbagai perintah yang dibangun ke dalam sistem obrolan, sehingga setiap pesan harus diperiksa untuk melihat apakah mereka perlu ditafsirkan sebagai perintah atau hanya sebuah pesan teks.Bahkan pesan teks dapat dimodifikasi dan disaring dalam prosesnya.
Setelah pengguna fokus pada input obrolan dan memasukkan karakter, beberapa pemeriksaan dilakukan segera pada klien.Jika karakternya adalah Esc, kotak input ditutup dan tidak ada tindakan yang diambil.Jika karakter adalah apa pun selain Enter , teks diteruskan melalui prosesor perintah Dalam Progres.Ini digunakan untuk mengevaluasi teks untuk melihat apakah ada tindakan yang perlu diambil.Sebagai contoh, ketika pengguna mulai berbisik dengan perintah /whisper, segera setelah nama pengguna dimasukkan setelah perintah, kotak input berubah untuk menunjukkan bahwa pengguna sekarang memasuki channelberbisik.
Di sisi klien obrolan, ada dua jenis pemroses: Dalam Progres dan Selesai.Yang pertama mengevaluasi setelah setiap karakter ditulis, sementara yang kedua hanya mengevaluasi saat pengguna telah selesai mengetik dan telah mencapai Enter .
Ketika pengguna selesai mengetik dan menekan Enter teks, input mereka dikirim melalui beberapa prosesor perintah lagi.Jika perintah Dalam Progres membuat status obrolan khusus, obrolan memeriksa status untuk melihat apakah perintah akhir harus dieksekusi dan apakah pesan harus melanjutkan.Jika pesan diizinkan untuk melanjutkan, maka teks dikirim melalui satu set prosesor lain yang disebut Selesai prosesor.Jika salah satu prosesor ini kembali benar, pesan berhenti dikirim.Jika tidak, pesan dikirim ke server.
Setelah pesan mencapai server, ia melalui serangkaian proses perintah lain.Sama seperti prosesor Selesai pada klien, jika salah satu prosesor ini kembali benar, maka pesan berhenti dijalankan.Jika tidak, pesan diteruskan melalui serangkaian filter (termasuk filter obrolan default Roblox).Setelah semua ini dilakukan, pesan dikirim ke semua saluran dan pembicara yang sesuai.
Modul server
Modul yang dimasukkan ke dalam ChatModule dapat digunakan untuk berbagai tujuan.Modul ini dapat digunakan untuk mengelola saluran obrolan dan pembicara, menambahkan fungsi filter dan perintah, menjalankan chatbot, atau apa pun yang perlu ditangani di server.Untuk berinteraksi dengan sistem obrolan, setiap modul diberikan objek Layanan Obrolan.
Ketika ChatServiceRunner dimulai, diperlukan setiap modul di dalam ChatModules .Ia mengharapkan setiap modul untuk mengembalikan fungsi seperti yang kemudian memanggil masing-masing modul satu per satu, menyampaikan objek ChatService ke masing-masing fungsi.Terlepas dari apa yang dimaksudkan dilakukan modul (menjalankan bot, menambahkan fungsi filter, dll), ia perlu mengikuti bentuk ini untuk berfungsi.
Fram kerangka modul sample
local function Run(ChatService)
-- Kode pergi ke sini
end
return Run
Tambahkan saluran
Salah satu hal termudah yang dapat dilakukan oleh ChatModule adalah mengelola saluran .Objek saluran dapat dibuat dengan metode AddChannel() dari ChatService.Perhatikan bahwa objek saluran hanya perlu digunakan saat memanggil anggota saluran itu (seperti properti dan fungsinya).Saat merujuk ke saluran dari konteks Layanan Obrolan atau Pembicara Obrolan, nama channeldigunakan untuk merujuknya.
local function Run(ChatService)
local myChannel = ChatService:AddChannel("MyChannel")
end
return Run
Konfigurasi saluran dasar
Saluran memiliki beberapa properti yang dapat digunakan untuk sedikit memodifikasinya.Sebagai contoh, modul ini membuat saluran dan mengatur Pesan Selamat Datang dan menyebabkan pengguna secara otomatis bergabung dengan saluran saat mereka memasuki pengalaman.
local function Run(ChatService)
local myChannel = ChatService:AddChannel("MyChannel")
-- Tetapkan pesan yang ditampilkan saat pengguna bergabung dengan channel
myChannel.WelcomeMessage = "Welcome to my channel!"
-- Menyebabkan pemain secara otomatis bergabung dengan saluran saat mereka memasuki game
myChannel.AutoJoin = true
end
return Run
Peristiwa saluran
Saluran memiliki beberapa peristiwa yang dapat berlangganan.Peristiwa ini terjadi ketika Pesan Obrolan diposting ke channel, ketika Pembicara Chat meninggalkan atau bergabung, atau ketika Pembicara dibisukan atau dibatalkan.Sebagai contoh, modul ini akan membuat saluran dengan nama MyChannel .Setiap kali seorang pembicara bergabung atau meninggalkan channel, pesan sistem akan dikirim ke semua pembicara di saluran memberi tahu mereka tentang acara tersebut.
local function Run(ChatService)
local myChannel = ChatService:AddChannel("MyChannel")
local function onSpeakerJoined(speakerName)
myChannel:SendSystemMessage(speakerName .. " has joined the channel.")
end
local function onSpeakerLeft(speakerName)
myChannel:SendSystemMessage(speakerName .. " has left the channel.")
end
myChannel.SpeakerJoined:Connect(onSpeakerJoined)
myChannel.SpeakerLeft:Connect(onSpeakerLeft)
end
return Run
Fungsi perintah
Hal lain kuat yang bisa dilakukan oleh ChatModule adalah chat perintah .Ketika pesan dikirim ke server, obrolan akan mengirim pesan melalui setiap fungsi perintah yang telah terdaftar ke ChatService dan channelyang relevan.Fungsi ini dikirimkan kepada speaker, pesan, dan saluran yang pesan dikirimkan kepada.Fungsi dapat mengambil tindakan apa pun yang diperlukannya dan kemudian kembali benar atau salah.Jika fungsi mengembalikan benar, maka pesan berhenti diproses oleh sistem obrolan.Ini tidak akan dikirim ke fungsi perintah lain atau tidak akan ditampilkan di jendela obrolan.Jika fungsi tersebut kembali false, maka pesan terus melalui semua fungsi perintah lainnya.Jika tidak ada fungsi perintah yang kembali benar, pesan kemudian akan dikirim melalui filter dan kemudian akan ditampilkan.
Fungsi perintah sering digunakan untuk menerapkan Perintah Admin, yaitu perintah teks yang dapat digunakan oleh pengguna tertentu untuk memanipulasi status pengalaman melalui teks khusus yang dikatakan dalam obrolan.
Dalam contoh ini, ChatModule digunakan untuk membuat Part jika pengguna mengetik /part di chat.Perhatikan bahwa fungsi ini akan mengembalikan benar jika bagian dibuat yang akan menghentikan pesan untuk melanjutkan dan tidak ada pesan yang ditampilkan.Jika bagian tidak dibuat, fungsi ini perlu mengembalikan false sehingga pesan dapat terus bekerja melalui sistem.
local Workspace = game:GetService("Workspace")
local function Run(ChatService)
local function createPart(speakerName, message, channelName)
if string.sub(message, 1, 5) == "/part" then
local newPart = Instance.new("Part")
newPart.Parent = Workspace
return true
end
return false
end
ChatService:RegisterProcessCommandsFunction("createPart", createPart)
end
return Run
Kedua Saluran Obrolan dan Layanan Obrolan sendiri dapat memiliki perintah obrolan. Pemroses perintah Layanan Obrolan akan dijalankan pada setiap pesan yang dikirim ke server, sementara perintah saluran hanya akan dijalankan jika pesan tersebut dikirim ke saluran perintah yang terdaftar.
Fungsikan filter
Pesan yang tidak dihentikan oleh Fungsi Perintah tidak akan melalui semua fungsi filter yang terdaftar ke ChatService dan saluran yang relevan.Setiap fungsi filter diberikan ke speaker, objek pesan, dan nama saluran.Setiap perubahan yang dilakukan pada objek pesan akan bertahan dan setiap fungsi filter berikutnya akan melihat pesan yang diperbarui.Perhatikan bahwa fungsi filter tidak perlu mengembalikan nilai.
Dalam contoh ini, fungsi filter sederhana terdaftar untuk membuat setiap pesan muncul dalam huruf kecil.
local function Run(ChatService)
local function makeLowercase(sender, messageObject, channelName)
messageObject.Message = string.lower(messageObject.Message)
end
ChatService:RegisterFilterMessageFunction("makeLowercase", makeLowercase)
end
return Run
Modul klien
Modul yang dimasukkan ke dalam ClientChatModules dapat digunakan untuk membuat perilaku khusus untuk klien.Modul ini dibagi menjadi dua folder berbeda: Modul Perintah dan Modul Pencipta Pesan.
Modul perintah
Modul Perintah bekerja sangat mirip dengan modul di server yang mendaftarkan Fungsi Perintah.Modul ini mendefinisikan fungsi yang akan dinyalakan setelah pengguna memasukkan teks.Teks itu dapat dibaca dan perintah dapat membiarkan pesan masuk ke server atau menghentikan kemajuan pesan.Perintah yang di evaluasi pada akhir pesan diberi label dengan COMPLETED_MESSAGE_PROCESSOR sementara perintah yang di evaluasi setelah setiap karakter diberi label dengan IN_PROGRESS_MESSAGE_PROCESSOR .
Dalam kedua jenis perintah, modul harus mengembalikan kamus yang mengatakan jenis prosesor yang harus digunakan perintah, dan fungsi apa yang harus dieksekusi saat prosesor dipanggil.Sebagai contoh, pemroses pesan selesai harus mengambil bentuk:
local util = require(script.Parent:WaitForChild("Util"))
function ProcessMessage(message, ChatWindow, ChatSettings)
end
return {
[util.KEY_COMMAND_PROCESSOR_TYPE] = util.COMPLETED_MESSAGE_PROCESSOR,
[util.KEY_PROCESSOR_FUNCTION] = ProcessMessage
}
Perhatikan bahwa KEY_COMMAND_PROCESSOR_TYPE enumerasi didefinisikan di dalam folder Util ModuleScript di dalam folder CommandModules .
Perintah pesan selesai
Perintah Pesan Selesai diuji saat pengguna telah selesai mengetik dan telah mengunjungi Enter .Fungsi prosesor diberikan objek Pesan Obrolan, ChatWindow klien, dan tabel Pengaturan Obrolan.Jika fungsi mengembalikan benar, maka pesan berhenti diproses dan tidak akan dikirim ke server.Jika tidak, itu akan dikirim melalui semua prosesor lain dan akhirnya ke server jika tidak ada prosesor lain yang menghentikannya.
Sebagai contoh, prosesor berikut akan menghapus pesan tertua di saluran saat ini jika pengguna memasukkan perintah /last .
local util = require(script.Parent:WaitForChild("Util"))
function ProcessMessage(message, ChatWindow, ChatSettings)
if string.sub(message, 1, 5) == "/last" then
local currentChannel = ChatWindow:GetCurrentChannel()
if currentChannel then
currentChannel:RemoveLastMessageFromChannel()
end
return true
end
return false
end
return {
[util.KEY_COMMAND_PROCESSOR_TYPE] = util.COMPLETED_MESSAGE_PROCESSOR,
[util.KEY_PROCESSOR_FUNCTION] = ProcessMessage
}
Perintah sedang berlangsung
Perintah sedang berlangsung diuji setiap kali pengguna mengetik karakter ke dalam input obrolan.Sebagai contoh, kode berikut memainkan clack setelah setiap penekanan tombol untuk membuatnya terdengar seperti pengguna mengetik di mesin ketik:
local util = require(script.Parent:WaitForChild("Util"))
local keyEffect = Instance.new("Sound")
keyEffect.SoundId = "rbxassetid://12221976"
keyEffect.Parent = script
function ProcessMessage(message, ChatWindow, ChatBar, ChatSettings)
keyEffect:Play()
end
return {
[util.KEY_COMMAND_PROCESSOR_TYPE] = util.IN_PROGRESS_MESSAGE_PROCESSOR,
[util.KEY_PROCESSOR_FUNCTION] = ProcessMessage
}
Perintah yang sedang berlangsung sering digunakan untuk membuat negara khusus khusus untuk mengirim pesan ke pengguna tertentu bukan hanya channelsaat ini.Sebagai contoh, sistem Obrolan Whisper dan Tim memeriksa apakah pengguna telah mengetik /whisper atau /team masing-masing dan mengirim pesan yang selesai hanya ke pengguna yang sesuai.
Status khusus diharapkan menjadi tabel dengan fungsi berikut:
- TextUpdated() — Dipanggil saat teks di kotak input berubah.
- GetMessage() — Dipanggil setelah pengguna selesai memasukkan pesan dan memukul Enter . Fungsi ini diharapkan untuk mengembalikan string.
- ProcessCompletedMessage() — Dipanggil saat pesan sedang diproses.Prosesor negara khusus akan selalu menembak sebelum prosesor pesan selesai.Seperti prosesor lain, fungsi ini harus kembali benar jika pesan harus berhenti dikirim, jika tidak maka harus kembali salah.
- Destroy() — Dipanggil setelah pesan dikirim. Harus digunakan untuk membersihkan apa pun yang disiapkan oleh negara khusus.
Untuk menggunakan negara khusus, fungsi ProcessMessage() dari modul perintah harus mengembalikan negara.Status kustom dasar akan mengambil bentuk berikut:
local util = require(script.Parent:WaitForChild("Util"))
local oneLineState = {}
oneLineState.__index = oneLineState
function oneLineState:TextUpdated()
local text = self.TextBox.Text
local length = string.len(text)
if length > 20 then
local chopLength = length - 20
local addToPrefix = string.sub(text, 1, chopLength)
self.Prefix = self.Prefix .. addToPrefix
self.TextBox.Text = string.sub(text, chopLength + 1)
end
end
function oneLineState:GetMessage()
local fullString = self.Prefix .. self.TextBox.Text
return fullString
end
function oneLineState:ProcessCompletedMessage()
return false
end
function oneLineState:Destroy()
self.Destroyed = true
end
function oneLineState.new(ChatWindow, ChatBar, ChatSettings)
local obj = {}
setmetatable(obj, oneLineState)
obj.Destroyed = false
obj.ChatWindow = ChatWindow
obj.ChatBar = ChatBar
obj.ChatSettings = ChatSettings
obj.TextBox = ChatBar:GetTextBox()
obj.MessageModeLabel = ChatBar:GetMessageModeTextLabel()
obj.Prefix = ""
return obj
end
local function ProcessMessage(message, ChatWindow, ChatBar, ChatSettings)
return oneLineState.new(ChatWindow, ChatBar, ChatSettings)
end
return {
[util.KEY_COMMAND_PROCESSOR_TYPE] = util.IN_PROGRESS_MESSAGE_PROCESSOR,
[util.KEY_PROCESSOR_FUNCTION] = ProcessMessage
}
Salah satu keuntungan utama menggunakan negara khusus adalah bahwa modul dapat mengedit bilah obrolan dan teks yang berisi saat pengguna mengetik keduanya dalam hal fungsi dan penampilan, dan kemudian dengan mudah mengatur ulangnya kemudian (setelah pesan dikirim negara khusus secara otomatis dihapus dan semuanya diatur kembali ke normal).Sebagai contoh, kode ini mengatur negara khusus yang hanya memungkinkan 20 karakter ditampilkan di kotak teks pada satu waktu.Jika pengguna terus mengetik, karakter di awal string dihapus sementara.Ketika pengguna mengirim pesan, semua karakter yang dihapus ditambahkan kembali ke pesan.
local util = require(script.Parent:WaitForChild("Util"))
local oneLineState = {}
oneLineState.__index = oneLineState
function oneLineState:TextUpdated()
local text = self.TextBox.Text
local length = string.len(text)
if length > 20 then
local chopLength = length - 20
local addToPrefix = string.sub(text, 1, chopLength)
self.Prefix = self.Prefix .. addToPrefix
self.TextBox.Text = string.sub(text, chopLength + 1)
end
end
function oneLineState:GetMessage()
local fullString = self.Prefix .. self.TextBox.Text
return fullString
end
function oneLineState:ProcessCompletedMessage()
return false
end
function oneLineState:Destroy()
self.Destroyed = true
end
function oneLineState.new(ChatWindow, ChatBar, ChatSettings)
local obj = {}
setmetatable(obj, oneLineState)
obj.Destroyed = false
obj.ChatWindow = ChatWindow
obj.ChatBar = ChatBar
obj.ChatSettings = ChatSettings
obj.TextBox = ChatBar:GetTextBox()
obj.MessageModeLabel = ChatBar:GetMessageModeTextLabel()
obj.Prefix = ""
return obj
end
local function ProcessMessage(message, ChatWindow, ChatBar, ChatSettings)
return oneLineState.new(ChatWindow, ChatBar, ChatSettings)
end
return {
[util.KEY_COMMAND_PROCESSOR_TYPE] = util.IN_PROGRESS_MESSAGE_PROCESSOR,
[util.KEY_PROCESSOR_FUNCTION] = ProcessMessage
}
Seperti disebutkan sebelumnya, setelah pesan dikirim, setiap negara khusus dihapus dan obrolan dipulihkan ke normal.Jika diperlukan untuk mengatur ulang status khusus sebelum mengirim pesan, status dapat diatur ulang dengan ChatBar:ResetCustomState().Perhatikan bahwa ini akan menghapus fokus dari kotak teks obrolan juga.
Modul pembuat pesan
Jenis modul lain yang dapat digunakan dalam komponen klien adalah modul Pencipta Pesan .Jenis modul ini digunakan untuk membuat elemen GUI di jendela obrolan untuk menampilkan pesan.Setiap jenis pembuat pesan mendefinisikan ketikpesan baru, sehingga pesan yang berbeda dapat dibuat dengan format yang berbeda.Selain itu, elemen GUI dapat ditambahkan ke tampilan pesan dengan cara ini yang memungkinkan gambar, tombol, dan banyak lagi.
Modul ini memerlukan pengaturan di beberapa lokasi berbeda.Untuk setiap ketikpesan, harus ada ModuleScript di dalam MessageCreatorModules .Juga, ChatConstants ModuleScriptTerakhir, modul hanya digunakan jika komponen server obrolan membuat pesan baru dengan ketikpesan yang diberikan.
Contoh berikut akan melalui membuat bot yang mengatakan waktu setiap 5 detik, dan pesan yang dikirim mendapat latar belakang merah.
Untuk memulai, ChatConstants ModuleScript perlu menambahkan bidang untuk jenis pesan baru.
-- Statistik Obrolanlocal module = {}--[[ Tipe Pesan ]]module.MessageTypeDefault = "Message"module.MessageTypeSystem = "System"module.MessageTypeMeCommand = "MeCommand"module.MessageTypeWelcome = "Welcome"module.MessageTypeSetCore = "SetCore"module.MessageTypeWhisper = "Whisper"module.MessageTypeTime = "Time"module.MajorVersion = 0module.MinorVersion = 2return module
Bot itu sendiri dibuat di ChatModule baru di server.Perhatikan bahwa fungsi filter digunakan untuk menambahkan jenis pesan baru ke pesan yang dikirim oleh bot.
-- ModuleScript Baru untuk ditempatkan di ChatModules
local Chat = game:GetService("Chat")
local ReplicatedModules = Chat:WaitForChild("ClientChatModules")
local ChatConstants = require(ReplicatedModules:WaitForChild("ChatConstants"))
local function Run(ChatService)
local timeBot = ChatService:AddSpeaker("TimeBot")
timeBot:JoinChannel("All")
local function addMessageType(speaker, messageObject, channelName)
if speaker == "TimeBot" then
messageObject.MessageType = ChatConstants.MessageTypeTime
end
end
ChatService:RegisterFilterMessageFunction("TimeBotFilter", addMessageType)
task.spawn(function()
while task.wait(5) do
timeBot:SayMessage("The current time is: " .. os.time(), "All", {})
end
end)
end
return Run
Terakhir, modul pembuat pesan harus dibuat.Modul ini harus mengembalikan kamus dengan dua elemen: jenis pesan, diindeks dengan KEY_MESSAGE_TYPE , dan fungsi untuk dipanggil saat membuat elemen GUI pesan, diindeks dengan KEY_CREATOR_FUNCTION .
Fungsi yang disimpan oleh KEY_CREATOR_FUNCTION perlu mengembalikan kamus dengan beberapa komponen.Pertama, perlu termasuk Frame dan TextLabel yang akan ditampilkan di jendela obrolan.Ini dapat dibuat dengan fungsi util:CreateBaseMessage().Kamus juga perlu menyertakan fungsi untuk dijalankan jika teks pesan diperbarui.Ketika pesan pertama kali muncul di klien, mereka memiliki teks penanda kosong saat pesan diproses dan disaring, sehingga objek pesan seperti ini perlu menangani apa yang terjadi saat mereka menerima panggilan untuk update.Selanjutnya, kamus perlu menyertakan fungsi untuk menentukan ketinggian frame.Fungsi ini sering memanggil fungsi util:GetMessageHeight() .Terakhir, kamus perlu menyertakan beberapa fungsi yang mendefinisikan bagaimana elemen harus memudar saat jendela memudar (fungsi utilitas untuk ini adalah util:CreateFadeFunctions() ).
-- ModuleScript baru yang harus dimasukkan dalam MessageCreatorModules
local messageCreatorModules = script.Parent
local util = require(messageCreatorModules:WaitForChild("Util"))
local clientChatModules = messageCreatorModules.Parent
local ChatSettings = require(clientChatModules:WaitForChild("ChatSettings"))
local ChatConstants = require(clientChatModules:WaitForChild("ChatConstants"))
local function CreateMessageLabel(messageData, channelName)
-- Buat objek GUI untuk Frame dan TextLabel untuk menyimpan pesan
local BaseFrame, BaseMessage = util:CreateBaseMessage("", ChatSettings.DefaultFont, ChatSettings.ChatWindowTextSize, ChatSettings.DefaultMessageColor)
-- Ubah latar belakang Frame menjadi merah
BaseFrame.BackgroundColor3 = Color3.new(1,0,0)
BaseFrame.BackgroundTransparency = 0
-- Tangani teks pesan penanda pembaruan
local function UpdateTextFunction(messageObject)
if messageObject.IsFiltered then
BaseMessage.Text = messageObject.Message
end
end
UpdateTextFunction(messageData)
-- Gunakan fungsi util untuk menentukan ketinggian frame
local function GetHeightFunction(xSize)
return util:GetMessageHeight(BaseMessage, BaseFrame, xSize)
end
-- Buat fungsi fade yang dipanggil saat jendela obrolan memudar
local FadeParameters = {}
FadeParameters[BaseMessage] = {
TextTransparency = {FadedIn = 0, FadedOut = 1},
TextStrokeTransparency = {FadedIn = 0.75, FadedOut = 1}
}
local FadeInFunction, FadeOutFunction, UpdateAnimFunction = util:CreateFadeFunctions(FadeParameters)
-- Kembalikan kamus yang mendefinisikan label pesan
return {
[util.KEY_BASE_FRAME] = BaseFrame,
[util.KEY_BASE_MESSAGE] = BaseMessage,
[util.KEY_UPDATE_TEXT_FUNC] = UpdateTextFunction,
[util.KEY_GET_HEIGHT] = GetHeightFunction,
[util.KEY_FADE_IN] = FadeInFunction,
[util.KEY_FADE_OUT] = FadeOutFunction,
[util.KEY_UPDATE_ANIMATION] = UpdateAnimFunction
}
end
return {
[util.KEY_MESSAGE_TYPE] = ChatConstants.MessageTypeTime,
[util.KEY_CREATOR_FUNCTION] = CreateMessageLabel
}