Configuration
التكوين (Configuration)
تكوين BUPA Chat مقسم عبر shared/config/*.lua. جميع هذه الملفات موجودة في escrow_ignore، لذا فهي تظل قابلة للتعديل بعد الشراء. تستعرض هذه الصفحة إعدادات العامة، العرض، الرموز التعبيرية (Emojis)، الحركات التعبيرية (Emotes)، والرسائل. الفئات وDiscord لهما صفحاتهما الخاصة.
العام (General) — general.lua
المفاتيح، الأصوات، القيم الافتراضية ونظام الأقنعة.
config.chatKey = "T" -- مفتاح فتح إدخال الدردشة
config.chatVisibilityKey = "" -- مفتاح تبديل وضع الرؤية ("" = غير مرتبطة)
config.clearCommand = { "clear", "temizle" } -- الأوامر التي تمسح سجل الدردشة
config.closeOnOutsideClick = true -- النقر في الخارج يغلق نافذة الإدخال
config.typingSound = true -- صوت لوحة المفاتيح أثناء الكتابة
config.allowNoSlashCommands = true -- تشغيل الأوامر بدون شرطة مائلة في البداية
config.uiUpdateRate = 24 -- معدل تحديث الواجهة بالميلي ثانية لمؤشرات الرأس
config.defaultAddTag = true -- الوسيط الأول يصبح وسماً (tag) عند عدم توفير وسوم
config.showPrintsOnChat = false -- عكس رسائل السيرفر (prints) داخل الدردشة
config.discordTagCacheTime = 60 * 60 -- تخزين رتب Discord المؤقت (بالثواني)
config.defaultChatCategory = "command" -- علامة التبويب المركزة عند الفتحرسائل الدخول / الخروج تتبع المتغيرات القياسية (convars):
config.showJoinMessages = GetConvarInt('chat_showJoins', 1) == 0
config.showQuitMessages = GetConvarInt('chat_showQuits', 1) == 0مصدر اسم مسؤول الدردشة (Admin)
فئة admin يمكنها إظهار مصدر اسم مختلف عن اسم الشخصية:
config.adminChatName = {
mode = "discord", -- "character" | "steam" | "discord"
discord = {
botToken = "", -- مطلوب لوضع "discord"
guildId = "",
cacheTime = 600, -- ثواني التخزين المؤقت لللقب
fallback = "steam", -- يُستخدم عندما يتعذر جلب اللقب
},
}الأسماء الواعية للأقنعة — config.noneMask
config.noneMask تُدرج عناصر الأقنعة القابلة للارتداء (بواسطة نموذج الـ ped، المجموعة، والمؤشر) التي يجب ألا تخفي اسم اللاعب في الدردشة. عندما يكون نشطاً، يتم عرض اسم اللاعب الملثم كـ Unknown (مجهول) ما لم تقم الفئة بتعيين showWearingMask = true، أو كان القناع المرتدى موجوداً في قائمة السماح هذه.
العرض (Display) — display.lua
الرسائل الخاصة (Private messages) — config.pm
config.pm = {
active = true,
command = { "pm", "dm" }, -- إرسال رسالة خاصة
webhookKey = "chatMessage", -- مفتاح سجل Discord
maxLength = 300,
sender = { --[[ وسوم/لون/اسم/معرف/وظيفة/وسم_ديسكورد/ساعة لنسخة المرسل ]] },
receiver = { --[[ نفس الهيكل لنسخة المستلم ]] },
}لكل من المرسل والمستلم تنسيق مستقل (الوسوم، color, showPlayerName, showPlayerId, showPlayerJob, discordTag, showHour).
نص الرأس وعرض معرف اللاعب (Head text & player ID)
config.headTextMaxStack = 4 -- الحد الأقصى لنصوص الرأس المتكدسة على لاعب واحد
config.playerIdDisplay = {
active = false, -- إظهار المعرفات فوق الرؤوس أثناء فتح الدردشة
showOwn = true, -- تضمين معرفك الخاص
dist = 5.0, -- أقصى مسافة عرض (بالمتر)
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 العناصر النائبة {serverId}, {name}, {steamId}, {discordId}, {fivemId}, فواصل الأسطر \n و HTML/CSS المضمنة.
الرموز التعبيرية (Emojis) — emojis.lua
منتقي الرموز التعبيرية قائم بالكامل على البيانات. كل فئة تكون بالشكل { tab = "<icon emoji>", label = "<HEADER>", list = { ... } } وكل رمز تعبيري يكون { emoji, name, code }.
config.emojis = {
{
tab = "😀", label = "SMILEYS",
list = {
{ emoji = "😀", name = "Grinning", code = ":grinning:" },
{ emoji = "😂", name = "Joy", code = ":joy:" },
-- ...
},
},
-- GESTURES (👍), SYMBOLS (❤️), OBJECTS (🚗)
}يأتي مع أربع مجموعات — Smileys (الوجوه الضاحكة)، Gestures (الإيماءات)، Symbols (الرموز) و Objects (الأشياء). قم بالإضافة أو الإزالة أو إعادة الترتيب بحرية؛ code هو الرمز القصير القابل للبحث والذي يظهر أسفل معاينة الصورة.
الحركات التعبيرية (Emotes) — emotes.lua
مؤشر الكتابة — config.chatOpenEmote
نقاط متحركة فوق رأس اللاعب أثناء قيامه بالكتابة:
config.chatOpenEmote = {
active = true,
texts = { { text = "•", time = 500 }, { text = "••", time = 500 }, { text = "•••", time = 500 } },
cssStyle = { color = "#fff", fontSize = "1.6vh" },
dist = 8.0, -- مدى رؤية الآخرين لها (بالمتر)
}
config.emoteOneAtATime = true -- نسخة نشطة واحدة فقط لكل أمر حركة تعبيرية لكل لاعبأوامر الحركات التعبيرية — config.emoteCommands
يأتي مع /me, /do, /dice (/zar) و /rps (/tkm). يمكن لكل حركة تعبيرية تشغيل أنيميشن، عرض نص فوق الرأس، وعكسه اختياريًا في الدردشة:
{
command = "me",
desc = "EMOTE_ME_COMMAND_DESC",
webhookKey = "emoteCommand", -- سجل Discord (اختياري)
dist = 8.0,
time = 10000, -- مدة نص الرأس (بالميلي ثانية)
template = "{text}", -- {text} {playerName} {playerCensoredName}
cssStyle = { color = "#b6a8ff", fontStyle = "italic" },
sendToChat = { active = true, tags = { { tag = "ME" } }, color = { 182, 168, 255 } },
}حقول إضافية: anim (dict, clip, flag, duration)، headText (العظمة/الإزاحة/الحجم)، `