Roblox'ta deneyim içi sohbet text chat sistemi ile, oyuncular canlı oturumlarda birbirleriyle mesaj gönderebilir. Sistem, sohbet işlevlerini genişletmek ve özelleştirmek için bir dizi yöntem ve etkinliği sağlar, bunlar arasında özelleştirilmiş gereksinimler
Bu rehber, sohbet iş akışını ve sohbet sisteminin işlevlerini genişletmek için sohbet iş akışını ve yaklaşımlarını kapsar. For more information on customizing the chat user interface (UI), see Kullanıcı Arayüzü'nü Kişiselleştirme .
Sohbet İşlemleri
Tecrübesiz metin sohbet sistemi, özelleştirilmiş sohbet davranışları için genişletilebilen değiştirilebilir sınıf ve özelleştirilebilen veri nesneleri olarak ikiye ayrılır.
Değiştirilebilir Chat Sınıfları
Tecrübeli olmayan metin sohbet sistemi, şu değiştirilebilir sınıfları sağlar:
- TextChatService — Bu tekli sınıf, sohbet mesaj filtreleme, moderasyon ve kullanıcı izinleri dahil olmak üzere genel sohbet sistemini yönetmekle sorumludur. sunucuerişilebilir, bir dizi metod ve etkinliği sağlar, diğer text chat API'leri veya oyuncu eylemleri aracılığıyla sohbet işlemi işlemi işlemi işlemi işlemi
- TextChannel — Bu sınıf, oyuncu tarafından gönderilen sohbet mesajlarını sunucudan oyuncuya gösteren bir text chat kanalını temsil eder ve onları diğer oyunculara göre gruplara gösterir. Bunu kullanarak, deneyiminizdeki text채널 grupları oluşturabilir, modifiye edebilir ve yöneteb
- TextChatCommand — Bu sınıf, oyuncuların özel karakterleri bir komut adını takib ederek özel eylemleri veya davranışları çağırmasını sağlayan özel sohbet komutları oluşturmanızı sağlar. Chat komutları, oyun deneyimine eklenmesi için ek güvenlik ve etkileşim yönetimi için yararlıdır. Ayrıca, kısayollarl
Değiştirilemez Chat Objeleri
Tecrübeli olmayan metin sohbet sistemi, değiştiremezsiniz modu okuma-yalın aşağıdaki özellikleri içerir:
- TextChatMessage : Bu nesne, bir text chat kanalındaki bir mesajı temsil eder ve mesajın gönderenine, orijinal mesajına, filtrelenmiş mesajına ve yaratılış zamanına ilişkin temel bilgileri içerir.
- TextSource : Bu nesne, bir oyuncunun kanalındaki bir mesaj göndericisini temsil eder. Eğer bir oyuncu birden fazla mesaj kanalında ise, birden fazla kaynaktır da olabilir.
Sohbet Grafiği
Sohbet mesajı gönderme ve teslim süreci, yöntemler, çağrılar ve etkinlikler değiştirilebilir sohbet sınıfı objelerinin üç taraflı klient-sunucu modelindeki değiştirilemez sohbet objeleriyle birlikte çalışır:
- mesajgönderen oyuncunun yerel cihazı olan gönderici.
- Diğer oyuncuların yerel cihazları olan alıcıları alıyor.
- Mesajı gönderen müşteriden alma mesajını alan merkezi işlemci ve teslimatı alan müşterilere işleyen sunucudur.
Akış şeması gösterdiği gibi, deneyim dışı metin sohbet sistemi, bir sohbet mesajını şu adımlar aracılığıyla işleyin:
- Bir oyuncu lokal cihazından bir mesaj gönderir ve TextChannel:SendAsync() metodunu tetikler. Bu metod, mesajı işleyip, sohbet emri veya normal bir sohbet mesajı olduğunu belirler.
- Oyuncu bir sohbet komutu giriyorsa, komutu yerine getirmek için TextChatCommand.Triggered etkinliğini başlatır.
- Oyuncu girişi normal bir sohbet mesajısa, TextChatService.SendingMessage ile göndericiye orijinal mesajı gösterir. Aynı anda, TextChannel:SendAsync() ile mesaj sunucusuna geçer.
- Sunucu TextChannel.ShouldDeliverCallback ı çalıştırır ve mesajı Roblox topluluk filtreleme gereksinimlerine dayanarak diğer oyunculara göndereceğiniz konusunda karar verir.
- Eğer TextChannel.ShouldDeliverCallback ile mesajın diğer oyunculara gönderileceğine karar verirse, sunucu herhangi bir filtreyi uygular ve TextChannel.OnIncomingMessage'i iki kez çalıştırır:
- İşlemci, TextChatService.MessageReceived etkinliği aracılığıyla mesajı işlemek için ilk kez göndericiye işaret verir. Bu ayrıca, göndericiye gelen mesajı görüntüleyiciye gösteren geleneksel mesajı da değiştirir. Mesaj aynı olabilir, eğer orijinal mesaj filtrelenmesi gerekmezse.
- İkinci gün, mesajı diğer oyunculara göstermek için TextChatService.MessageReceived etkinliğini tetiklemek için alıcı klientte.
Sohbet sistemi iş akışının birkaç alanında davranışı genişletebilir ve özelleştirebilirsiniz, ancak sistemin nasıl işlediğini gösteren adımlar aynı kalır.
Mesaj Teslim Davranışlarını Özelleştirme
Varsayılan sohbet mesajı teslim davranışına bağlı kalarak, TextChannel.ShouldDeliverCallback kullanılır, izinleri ve belirli davranışları ekleyerek oyuncuların özelleştirilmiş etkileşim için bir mesaj alıp alamayacağını belirlemek için:
- Oyuncuların aynı grubun veya takımın iletişim kurabileceği grup tabanlı sohbeti desteklemek.
- Oyuncuların sadece yakınlarına mesaj gönderebildiği yakınlık temelli sohbeti desteklemek.
- Oyuncuların bazı özelliklere sahip mesajlar göndermelerini engellemek. Örneğin, ölüm durumu olan oyuncuların mesajlarını yaşayan oyunculara göndermesine izin vermez.
- Chat'ta doğru cevapların diğer oyunculara görünmez olmasını sağlayan tahmin etme özelliği ekleniyor.
Aşağıdaki örnek, bir yerlerdeki oyuncu karakterleri arasındaki özel sohbeti nasıl uygulayacağını gösterir. Bu, TextSource kullanarak bir oyuncu karakterinin yerini belirlemek için çağrıyı genişletir. Eğer bu işlev false
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Bu örnek genel kanalı kullanır; bunu özel bir kanal ile değiştirebilirsiniz
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Bir oyuncunun karakterinin konumunu almak için bir işlev tanımlayın
local function getPositionFromUserId(userId: number)
-- Verilen kullanıcı ID'si ile ilgili olan oyuncuyu al
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Oyuncu varsa, onun karakterinin konumunu alın.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Oyuncu veya karakter bulunamadığında varsayılan bir konum döndür
return Vector3.zero
end
-- Genel kanalın mesaj teslimini kontrol etmesi için çağrıyı ayarla
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Mesaj göndericisinin ve hedefinin konumlarını alın
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Gönderici ve hedef arasındaki mesafe 50'den daha küçükse, mesajı gönder
return (targetPos - sourcePos).Magnitude < 50
end
Özel Komutlar Oluşturulması
Tecrübeli metin sohbet sistemi, takım tabanlı sohbet kanalları oluşturmak ve avatar ifadegibi ortak amaçlar için içgörü komutlarına sahiptir. Onları etkinleşt
Aşağıdaki örnek, oyuncuların karakterlerinin boyutunu artırmak veya azaltmak için /super veya /mini ile girdiğinde nasıl bir sohbet komutu oluşturacağını gösteriyor.
Class.TextChatService içinde bir TextChatService istemcisi ekle.
Bunu Boyut Komutu olarak yeniden adlandırın.
Özelliklerini PrimaryAlias olarak belirleyin ve /super olarak mini olarak.
Karakter boyutunu artıran sohbet komutunun bir çağrısını tanımlamak için ServerScriptService içine Class.Script ekle.
Kodlocal 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)
Miras Sohbet'tan Geçiş
Bu bölüm, geçmiş sohbet sisteminden gelen herhangi bir sohbet işlevini ve davranışını uygulamak için alternatif yöntemler sağlayarak sizi yardımcı eder.
Mevcut bir deneyimin var varsayılan sohbet sisteminden in-experience text chat sistemine geçmek için:
In the Explorer window, select TextChatService .
Özellikler Penceresinde, SohbetVersiyonu menüsünü bulun ve TextChatService seçin.
Temel Fonksiyonlar
Her iki sistem de aynı temel sohbet işlevlerini paylaşsa da, deneyim içi sohbet sistemlerinin uygulanımları genel olarak daha sürdürülebilir ve daha kolay itilenir.
Fonksiyonluluk | Miras Sohbet | Tecrübeli Olmayan Teks Sohbet | Farklılıklar |
---|---|---|---|
Bir sohbet mesajı gönder | Players:Chat() | TextChannel:SendAsync() | Class.TextChatService:SendAsync() metodu, zengin metin biçimi biçimlendirme ve mesaj önceliği gibi daha gelişmiş sohbet özelliklerini destekler. Ayrıca, yanlış mesajların gönderilmesini önlemek için içgörsel filtrelemeyi de destekler. |
Mesajların Geri Çağrılarını Gerçekleştir | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Miras chat sistemi, mesajların gönderilmesi için chat sistemi olaylarına bir işlev bağlar. Deneyimli metin sohbet sisteminin iki yöntemi daha fazla esneklik ve özelleştirme seçeneği sunar. |
Özel Chat Komutları Ekle | ChatService/ChatCommand modülü | TextChatCommand | Tecrübeli olmayan text chat sistemi, kullanıcının özelleştirme için bir metin komutu kullanması yerine kullanıcı temsil eden bir sınıfı vardır. |
Bir Sistem Mesajını Görüntüle | StarterGui:SetCore() using "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Class.TextChannel.OnIncomingMessage çağrısı, bir mesajın görünümünü özelleştirmek için bir TextChatMessageProperties instansı dönderebilir. |
Sohbeti Kapat | Oyun Ayarları Studio ve ChatWindow/ChatSettings modülü kullanılarak sohbet penceresini gizlemek için | ChatWindowConfiguration.Enabled |
Mesaj Filtreleme
Tecrübeli olmayan metin sohbet sistemi, her oyuncunun hesabına göre sohbet mesajlarını otomatik olarak filtreler, böylece tüm türlerdeki sohbet mesajları için manuel olarak metin filtrelemeyi gerektirmez.
Fonksiyonluluk | Miras Sohbet | Tecrübeli Olmayan Teks Sohbet |
---|---|---|
Bireysel Oyuncu için Mesajı Filtrele | Chat:FilterStringAsync() | yok |
Yayınlanan Mesajları Filtreleme | Chat:FilterStringForBroadcast() | yok |
Pencere ve Balon Sohbeti
Chat penceresi ve balon sohbeti davranışı ve özelleştirme seçenekleri, miras chat sisteminin özelleştirmeyi kullanıyor olmas
Fonksiyonluluk | Miras Sohbet | Tecrübeli Olmayan Teks Sohbet |
---|---|---|
Sohbet Penceresini Etkinleştir | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Konuşma balonlarını Sohbet | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Sohbet Penceresi Özelliklerini Ayarla | Players:SetChatStyle() | ChatWindowConfiguration |
Konuşma balonu özelliklerini ayarla | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
NPC Balonlarını Etkinleştir | Chat:Chat() | TextChatService:DisplayBubble() |