Yapılandırma
Yapılandırma
BUPA Chat'in yapılandırması shared/config/*.lua dosyaları arasında bölünmüştür. Bu dosyaların tamamı escrow_ignore içindedir, bu sayede satın alım sonrasında düzenlenebilir kalırlar. Bu sayfa genel, görünüm, emoji, animasyon (emote) ve mesaj ayarlarını ele alır. Kategoriler ve Discord'un kendilerine ait sayfaları vardır.
Genel — general.lua
Tuşlar, sesler, varsayılanlar ve maske sistemi.
config.chatKey = "T" -- sohbet girişini açma tuşu
config.chatVisibilityKey = "" -- görünürlük modunu değiştirmek için tuş ("" = atanmamış)
config.clearCommand = { "clear", "temizle" } -- sohbet geçmişini temizleyen komutlar
config.closeOnOutsideClick = true -- dışarı tıklamak girdiyi kapatır
config.typingSound = true -- yazarken klavye sesi
config.allowNoSlashCommands = true -- eğik çizgi (slash) kullanmadan komut çalıştırma
config.uiUpdateRate = 24 -- kafa göstergeleri için milisaniye güncelleme hızı
config.defaultAddTag = true -- etiket verilmediğinde ilk argüman etiket olur
config.showPrintsOnChat = false -- sunucu çıktılarını sohbete yansıt
config.discordTagCacheTime = 60 * 60 -- Discord rol önbelleği (saniye)
config.defaultChatCategory = "command" -- açılışta odaklanılan sekmeGiriş / çıkış mesajları standart convar'ları takip eder:
config.showJoinMessages = GetConvarInt('chat_showJoins', 1) == 0
config.showQuitMessages = GetConvarInt('chat_showQuits', 1) == 0Yetkili (Admin) sohbet adı kaynağı
admin kategorisi, karakter adından farklı bir ad kaynağı gösterebilir:
config.adminChatName = {
mode = "discord", -- "character" | "steam" | "discord"
discord = {
botToken = "", -- "discord" modu için gereklidir
guildId = "",
cacheTime = 600, -- takma ad önbellek saniyesi
fallback = "steam", -- bir takma ad bulunamadığında kullanılır
},
}Maskeye duyarlı adlar — config.noneMask
config.noneMask, sohbette bir oyuncunun adını gizlememesi gereken maske çizilebilir öğelerini (ped modeli, koleksiyonu ve indeksi ile) listeler. Etkin olduğunda, maskeli bir oyuncunun adı, kategori showWearingMask = true olarak ayarlanmadıkça veya giyilen maske bu izin verilenler listesinde bulunmadıkça Bilinmeyen olarak gösterilir.
Görünüm — display.lua
Özel mesajlar — config.pm
config.pm = {
active = true,
command = { "pm", "dm" }, -- özel mesaj gönder
webhookKey = "chatMessage", -- Discord log anahtarı
maxLength = 300,
sender = { --[[ gönderen kopyası için etiketler/renk/ad/id/meslek/discordEtiketi/saat ]] },
receiver = { --[[ alıcı kopyası için aynı yapı ]] },
}Gönderen ve alıcının her birinin bağımsız stilleri vardır (etiketler, color, showPlayerName, showPlayerId, showPlayerJob, discordTag, showHour).
Kafa metni & oyuncu ID gösterimi
config.headTextMaxStack = 4 -- bir oyuncu üzerinde üst üste binen maksimum kafa metni
config.playerIdDisplay = {
active = false, -- sohbet açıkken kafaların üzerinde ID'leri göster
showOwn = true, -- kendi ID'ni dahil et
dist = 5.0, -- maksimum görüntüleme mesafesi (m)
template = "[{serverId}] {discordId}", -- {serverId}{name}{steamId}{discordId}{fivemId}
headText = { bone = 31086, offset = vector3(0.3, 0.0, 0.0), maxRenderDist = 30.0 },
cssStyle = { color = "#fff", fontSize = "1.8vh", fontWeight = "600" },
}template şablonu şu yer tutucuları destekler: {serverId}, {name}, {steamId}, {discordId}, {fivemId}, \n satır sonları ve satır içi HTML/CSS.
Emojiler — emojis.lua
Emoji seçici tamamen veri odaklıdır. Her kategori { tab = "<icon emoji>", label = "<HEADER>", list = { ... } } şeklindedir ve her emoji { emoji, name, code } içerir.
config.emojis = {
{
tab = "😀", label = "SMILEYS",
list = {
{ emoji = "😀", name = "Grinning", code = ":grinning:" },
{ emoji = "😂", name = "Joy", code = ":joy:" },
-- ...
},
},
-- GESTURES (👍), SYMBOLS (❤️), OBJECTS (🚗)
}Dört grup ile birlikte gelir — Smileys, Gestures, Symbols ve Objects. Serbestçe ekleyin, kaldırın veya yeniden sıralayın; code, önizlemenin altında gösterilen aranabilir kısa kodudur.
Animasyonlar (Emotes) — emotes.lua
Yazma göstergesi — config.chatOpenEmote
Bir oyuncu yazarken kafasının üzerinde beliren animasyonlu noktalar:
config.chatOpenEmote = {
active = true,
texts = { { text = "•", time = 500 }, { text = "••", time = 500 }, { text = "•••", time = 500 } },
cssStyle = { color = "#fff", fontSize = "1.6vh" },
dist = 8.0, -- diğerlerinin bunu ne kadar uzaktan görebileceği (m)
}
config.emoteOneAt_a_Time = true -- her oyuncu için her emote komutunun tek aktif örneğiAnimasyon komutları — config.emoteCommands
/me, /do, /dice (/zar) ve /rps (/tkm) ile birlikte gelir. Her animasyon bir hareket oynatabilir, kafa metni oluşturabilir ve isteğe bağlı olarak sohbete yansıtılabilir:
{
command = "me",
desc = "EMOTE_ME_COMMAND_DESC",
webhookKey = "emoteCommand", -- Discord logu (isteğe bağlı)
dist = 8.0,
time = 10000, -- kafa metni süresi (ms)
template = "{text}", -- {text} {playerName} {playerCensoredName}
cssStyle = { color = "#b6a8ff", fontStyle = "italic" },
sendToChat = { active = true, tags = { { tag = "ME" } }, color = { 182, 168, 255 } },
}Ek alanlar: anim (dict, clip, flag, duration), headText (kemik/ofset/ölçek), params (yardım tuşlarıyla özel yazılmış argümanlar) ve hesaplanmış çıktı için msgCb(args) (/dice ve /rps tarafından kullanılır).
Mesajlar — messages.lua
Otomatik duyurular, hoş geldin mesajları ve txAdmin etkinlik biçimlendirmesi — hepsi varsayılan olarak kapalıdır.
config.autoMessages = {