انتقل إلى الدليل

الوثائق 9.6.24

مرجع الـ Exports

كل export عام في Tosun AC 9.6.15، مع المعاملات والقيم المُعادة والآثار الجانبية، وما إذا كان يجب أن يكون المورد المستدعي موثوقًا. لشرح عملي قائم على المهام، ابدأ بدليل التكامل.

استدعاء export#

استدعِ exports الخادم من سكربتات الخادم في موردك، و exports العميل من سكربتات العميل فيه. اسم المورد يحتوي شرطة (-)، لذا استخدم دائمًا صيغة الأقواس exports['tosun-ac']. الصيغة exports.tosun-ac ليست Lua صالحة.

  • مرّر معرّفات الخادم كأرقام. عدة exports تستخدم المعرّف مباشرة كمفتاح في جدول.
  • بعض الـ exports تنفّذ استعلام قاعدة بيانات متزامنًا وتتوقف مؤقتًا (yield). استدعِها من thread أو من معالج حدث: getBans و getBanInfo و GetDetections و isAdmin وفحوص الطاقم الأخرى و IsExemptFromPunish و ForensicLinksOf و refreshPanelWhitelist. كما أن scanAllResources و scanSingleResource تتوقف مؤقتًا (yield) أيضًا.
  • الـ export المحمي الذي يرفض موردك يعيد false، حتى لو كان يعيد nil في العادة.
  • بعض الـ exports موجودة فقط عندما تكون ميزتها مفعّلة (راجع Exports تعتمد على الميزات). استدعاء export غير مسجّل يُصدر خطأً، لذا ضع هذه الاستدعاءات داخل pcall.
  • عدة exports غير موجودة في قوائم الـ exports في fxmanifest.lua (مثل MarkTeleport و punish و AllowWeapon). هذه القوائم للمعلومات فقط؛ والـ exports تعمل.
  • تذكر الجداول أدناه "نعم" في العمود الأخير عندما يجب أن يكون المورد المستدعي موثوقًا. راجع الموارد الموثوقة.
-- سكربت خادم في موردك الخاص
local status = exports['tosun-ac']:GetIntegrationStatus()
if not status.trusted then
    print(status.hint) -- سطر server.cfg الذي يجب إضافته
end

-- أبلغ الـ AC بالنقل، ثم انقل اللاعب
exports['tosun-ac']:MarkTeleport(src, 8000)
SetEntityCoords(GetPlayerPed(src), x, y, z)

-- سكربت عميل في موردك الخاص
exports['tosun-ac']:SetExempt(true, 60000, 'my_menu')

الموارد الموثوقة#

الـ exports المعلَّمة بـ "نعم" في عمود الثقة تغيّر الإعفاءات أو صلاحيات الطاقم أو الحظر أو صحة اللاعب أو الأسلحة أو المخزون أو الحجر أو الموارد والتواقيع أو الخادم كله. تقبل الاستدعاءات فقط من مورد موثوق. الاستدعاء المرفوض لا يفعل شيئًا ويعيد false.

يكون المستدعي موثوقًا عندما يكون وحدة تحكم الخادم، أو tosun-ac نفسه، أو موردًا مدرجًا في ts.ExportCallerWhitelist في الإعدادات، أو موردًا مدرجًا في الـ convar tosun_ac_trusted_resources. قائمة الإعدادات الافتراضية هي qbx_core و qb-core و es_extended و ox_inventory و ox_lib.

فضّل الـ convar. فهو موجود في server.cfg ويبقى بعد تحديثات الـ AC، بينما قد تضيع تعديلات ملف الإعدادات عند تحديث الـ AC. افصل الأسماء بفواصل أو مسافات. قائمة الثقة تُخزَّن مؤقتًا لمدة 10 ثوانٍ، لذا يسري التغيير أثناء التشغيل خلال 10 ثوانٍ.

عند أول رفض لكل زوج من المورد والـ export، يطبع الـ AC تحذيرًا واحدًا في وحدة تحكم الخادم مع سطر server.cfg الدقيق الذي يجب إضافته، ويكتب سطرًا واحدًا في سجلات اللوحة. سطر سجل اللوحة يكون دائمًا بالتركية.

وضع التدقيق: مع ts.EnforceExportCallerWhitelist = false تعمل الاستدعاءات غير الموثوقة، ويُطبع كل زوج من المورد والـ export مرة واحدة في وحدة تحكم الخادم (دون سطر في سجل اللوحة). الافتراضي true. استخدم وضع التدقيق فقط أثناء الإعداد لترى أي السكربتات تستدعي ماذا.

شغّل tosunac_integration في وحدة تحكم الخادم لطباعة وضع الفرض، والموارد الموثوقة مع مصدرها (config أو convar)، وآخر 20 استدعاءً مرفوضًا. ومن سكربت، استدعِ GetIntegrationStatus().

الثقة تزيل أيضًا ميزانية MarkTeleport: يمكن للموارد الموثوقة تعليم عمليات النقل دون حد الوقت لكل لاعب.

يسجّل Tosun AC أيضًا exports وأحداث شبكة داخلية لآلياته الخاصة (جسر اللوحة، التوقيع، الفحص، الترخيص، التجميع). ليست جزءًا من هذا المرجع وليست API مدعومة. بعضها محمي بفحص الثقة أو بفحص داخلي للمستدعي. لا تستدعها.

# server.cfg
set tosun_ac_trusted_resources "my-housing,my-clothing"

التكامل والإعفاءات#

exports على الخادم تُبلغ الـ AC بالإجراءات المشروعة في سكربتاتك، وتقرأ ما إذا كان اللاعب معفى.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
MarkTeleportsrc؛ ms? (الافتراضي 8000، ومحصور بين 1000 و ts.Integration.markTeleportMaxMs، الافتراضي 15000)؛ reason? (وسم في السجل)true إذا مُنح أو كان مغطى مسبقًا؛ false إذا كان اللاعب غير صالح أو غير متصل، أو لم تكفِ الميزانيةإعفاء جزئي (soft). استدعِه مباشرة قبل نقل اللاعب. يخفّف فحوص الحركة على الخادم، وفحوص godmode/invisible/noclip/focus، وفحوص العميل الخاصة باللاعب. عقوبات الأسلحة والمال والضرر وإساءة استخدام الأحداث والحقن والتعطيل ما زالت تُطبَّق. يُمسح عند قطع الاتصال.لا. الموارد غير الموثوقة تتشارك ميزانية 180000 ms لكل لاعب كل 10 دقائق (ts.Integration.markTeleportBudgetMs). الطلب الذي لا يتسع لها يُرفض بالكامل.
IsMovementExemptsrcbooleantrue ما دامت نافذة إعفاء جزئي من MarkTeleport أو DetectionExempt.serverEvents نشطة.لا
GetIntegrationStatusلا يوجد (يُكتشف المستدعي تلقائيًا){ version, resource, trusted, trustedVia ('config' أو 'convar' أو 'self' أو nil), enforcing, hint }يُخبر موردك ما إذا كان موثوقًا وكيف. hint هو سطر server.cfg الذي يجب إضافته عندما لا يكون موثوقًا. enforcing = false يعني وضع التدقيق.لا
SetPlayerExemptsrc؛ state (true يمنح، false يزيل)؛ durationMs? (الافتراضي 30000، الحد الأقصى 300000)؛ reason?true؛ و false إذا كان غير موثوق أو لم يكن src رقمًاإعفاء كامل: حصانة من عقوبات الخادم مع علامة إعفاء العميل. تُتخطّى معظم فحوص العميل؛ والاكتشافات التي ما زالت تصل إلى مسار الحظر في العميل تُخفَّض إلى إدخالات LOG موسومة بـ [exempt]. يتشارك مؤقتًا واحدًا مع whitelistPlayer و PausePlayerDetections و BypassDetection، لذا قد يقصّر منحٌ جديد منحًا أقدم، و state = false يلغيها. يُمسح عند قطع الاتصال.نعم
SetExempt (server)src؛ durationMs? (الافتراضي 30000، الحد الأقصى 300000)؛ reason?مثل SetPlayerExemptاسم بديل لـ SetPlayerExempt(src, true, durationMs, reason). الـ export الخاص بالعميل الذي يحمل الاسم نفسه يأخذ وسائط مختلفة.نعم
BypassDetectionsrc؛ detectionKey (إلزامي، لكن قيمته تُتجاهل)؛ durationMs? (الافتراضي 5000، من 500 إلى 60000)true؛ و false إذا كان غير موثوق، أو كان src مفقودًا أو 0، أو كان المفتاح nilاسم قديم. يمنح الإعفاء الكامل نفسه الذي يمنحه SetPlayerExempt؛ ولا يقتصر على اكتشاف واحد. الجدول الفارغ كمفتاح يعيد true لكنه لا يمنح شيئًا.نعم
PausePlayerDetectionssrc؛ durationMs? (الافتراضي 15000، الحد الأقصى 300000)true؛ و false إذا كان غير موثوق أو لم يكن src رقمًاحصانة من عقوبات الخادم مع علامة إيقاف مؤقت في العميل للاعب واحد.نعم
PauseAllDetectionsdurationMs? (الافتراضي 10000، الحد الأقصى 300000)true؛ و false إذا كان غير موثوقيوقف اكتشافات العميل مؤقتًا لكل لاعب متصل الآن. لا يوجد إعفاء على جانب الخادم. اللاعبون الذين ينضمون لاحقًا لا يُوقفون. لا يوجد تقييد لعدد الاستدعاءات.نعم
AllowWeaponsrc؛ weapon? (اسم مثل 'WEAPON_PISTOL'، أو hash، أو '*' أو nil لكل الأسلحة)؛ ms? (الافتراضي 600000، من 1000 إلى 3600000)true؛ و false إذا كان غير موثوق، أو كان اللاعب غير صالح أو غير متصل، أو كان رقم ما NaN/infيسمح للاعب بحمل واستخدام سلاح غير موجود في مخزونه. يخفّف فقط فحص السلاح مقابل المخزون (السلاح المحمول والضرر). يُمسح عند قطع الاتصال.نعم
IsExemptFromPunishsrcboolean (true = لا تعاقب)القاعدة المركزية التي تستخدمها وحدات الفرض. true للطاقم (عندما لا يكون ts.AdminBypassDetections هو false)، والإعفاءات النشطة، والقائمة البيضاء لوقت التشغيل وللوحة، واللاعبين المحميين. بسبب القاعدة الأخيرة يبقى الطاقم معفى هنا حتى مع AdminBypassDetections = false. دائمًا false مع ts.Debug. قد يستعلم من قاعدة البيانات.لا
IsPlayerProtectedsrcbooleantrue للطاقم، أو حالة الإدارة، أو الإعفاء النشط. يتجاهل ts.AdminBypassDetections و ts.Debug. لا يشمل القائمة البيضاء لوقت التشغيل أو للوحة؛ استخدم IsExemptFromPunish للقاعدة الكاملة. قد يستعلم من قاعدة البيانات.لا

اختيار الإعفاء#

استخدم أضيق إعفاء يغطي سكربتك. عدة إعفاءات تتشارك علامة إعفاء العميل نفسها، لذا قد ينهي أحدها الآخر: ClearArea مع اسم منطقة يعيد ضبط العلامة التي يضبطها أيضًا SetPlayerExempt و MarkTeleport و BypassDetection.

Exportالحصانة من عقوبات الخادمفحوص العميلالمدةهل يلزم مورد موثوق؟
MarkTeleportفحوص الحركة والظهور فقطمعفاة (النافذة تُمدَّد فقط ولا تُقصَّر)8 ثوانٍ افتراضيًا، وثانية واحدة (1 s) حد أدنى؛ والحد الأقصى لكل استدعاء ts.Integration.markTeleportMaxMs (15 ثانية افتراضيًا)لا (ضمن ميزانية)
SetPlayerExempt, SetExempt (server)نعممعفاة30 ثانية افتراضيًا، والحد الأقصى 300 ثانيةنعم
BypassDetectionنعممعفاة5 ثوانٍ افتراضيًا، من 0.5 إلى 60 ثانيةنعم
PausePlayerDetectionsنعمموقوفة مؤقتًا15 ثانية افتراضيًا، والحد الأقصى 300 ثانيةنعم
PauseAllDetectionsلاموقوفة مؤقتًا للاعبين المتصلين الآن10 ثوانٍ افتراضيًا، والحد الأقصى 300 ثانيةنعم
whitelistPlayerنعملا توجد علامة للعميل3600 ثانية افتراضيًا، و -1 = حتى قطع الاتصالنعم
AddWhitelistنعم، حسب المعرّفلا توجد علامة للعميلحتى إعادة التشغيل، أو durationSecنعم
WhitelistAreaلامعفاة30 ثانية افتراضيًانعم
AllowWeaponفحص السلاح مقابل المخزون فقطبلا تغيير600 ثانية افتراضيًا، والحد الأقصى 3600 ثانيةنعم
Client SetExempt, PauseDetectionsلامعفاة أو موقوفة مؤقتًا على ذلك العميل30 ثانية أو 10 ثوانٍ افتراضيًا، والحد الأقصى 300 ثانيةلا (أي مورد على العميل)

الطاقم والصلاحيات#

اقرأ وغيّر من يعتبره الـ AC من الطاقم. قد تستعلم فحوص الطاقم من قاعدة البيانات، لذا استدعِها من thread أو من معالج حدث.

يعيد isAdmin القيمة true في الحالات التالية: منح يدوي عبر addAdmin؛ أو صلاحيات ACE txadmin و tx.admin و txadmin.menu و txadmin.advanced و command.txadmin و command.ts و command.ban و command.kick و tosun.admin و ts.admin وأي صلاحية في ts.AdminBypassAces؛ أو الـ principals group.admin و group.superadmin و group.moderator و group.god؛ أو command.kick/ban/resources/restart عندما يكون ts.txAdminAuth مفعّلًا؛ أو معرّفات في admins.lua و ts.AdminMenu.allowedIds و ts.AdminBypassIdentifiers؛ أو منح من اللوحة في قاعدة البيانات. صلاحية ACE الممنوحة أيضًا لـ builtin.everyone لا تُحتسب.

isAdmin و addAdmin مسجّلان مرتين في الكود المصدري. النسختان الموجودتان في anticheat_server.lua تُحمَّلان أخيرًا وهما اللتان تعملان؛ وهذا المرجع يصفهما.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
isAdminsrc (مرّر رقمًا)booleanحالة الإدارة من المصادر المذكورة أعلاه. نتائج قاعدة البيانات تُخزَّن مؤقتًا 5 ثوانٍ عندما تكون إيجابية و 30 ثانية عندما تكون سلبية. لا ينظر إلى ts.AdminBypassDetections.لا
isStaffPlayersrcbooleanفحص الطاقم الذي تستخدمه مسارات الحظر. المصادر نفسها كما في isAdmin، إضافة إلى صلاحيات ACE لأوامر txAdmin (command.kick/ban/resources/restart/screenshot/unban) ما لم يكن ts.txAdminAuth = false.لا
isAdminMenuAllowedsrcbooleanما إذا كان يمكن للاعب فتح قائمة الإدارة. false عندما تكون القائمة معطّلة. صلاحيات ACE الخاصة بـ txAdmin وحده (txadmin و tx.admin) و ts.AdminBypassAces و ts.AdminBypassIdentifiers لا تُحتسب. بلا تخزين مؤقت: استعلام واحد في قاعدة البيانات لكل استدعاء.لا
getAdminTypesrc'tx' أو 'config' أو falseتسمية مضللة: كل مسار إدارة إيجابي يضبط العلامة نفسها، لذا يحصل الطاقم دائمًا تقريبًا على 'tx'، و 'tx' لا تعني txAdmin. استخدم isAdmin بدلًا منه.لا
addAdminsrc (مرّر رقمًا)nil؛ و false عند الرفضمنح طاقم أثناء التشغيل: حصانة من العقوبة ووصول إلى قائمة الإدارة. لا يُحفظ في قاعدة البيانات. لا يُمسح عند قطع الاتصال: يبقى مرتبطًا بمعرّف الخادم ذاك حتى removeAdmin أو إعادة التشغيل.نعم
removeAdminsrcnil؛ و false عند الرفضيزيل المنح اليدوي والحالة المخزّنة مؤقتًا. منح ACE و txAdmin و admins.lua واللوحة لا تُلغى وتُحتسب مجددًا في الفحص التالي.نعم

القائمة البيضاء للاعبين والمناطق#

قائمة بيضاء بمعرّف الخادم، وقائمة بيضاء بالمعرّفات، ومناطق مسمّاة. قوائم وقت التشغيل موجودة في الذاكرة فقط وتضيع عند إعادة التشغيل؛ أما القائمة البيضاء للوحة فمنفصلة.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
whitelistPlayersrc (مرّر رقمًا)؛ durationSec? (الافتراضي 3600؛ و -1 = حتى قطع الاتصال)nil؛ و false عند الرفضحصانة من عقوبات الخادم حسب معرّف الخادم. لا توجد علامة للعميل. تُمسح عند قطع الاتصال. SetPlayerExempt و PausePlayerDetections و BypassDetection تكتب فوقها.نعم
removeWhitelistsrcnil؛ و false عند الرفضينهي whitelistPlayer. وينهي أيضًا أي حصانة خادم من SetPlayerExempt أو PausePlayerDetections أو BypassDetection.نعم
AddWhitelisttarget (معرّف خادم، أو string معرّف)؛ durationSec? (nil أو 0 = حتى إعادة التشغيل)true؛ و false إذا كان فارغًا أو مرفوضًايضيف معرّفات إلى القائمة البيضاء في الذاكرة (لا تُحفظ في قاعدة البيانات). معرّف الخادم يضيف كل معرّفات ذلك اللاعب. تُحوَّل المعرّفات إلى أحرف صغيرة وتُزال البادئة license: أو license2: أو discord: أو steam: أو fivem:. القيمة المكوّنة من أرقام فقط تُقرأ كمعرّف خادم، لذا مرّر معرّفات Discord مع البادئة discord:.نعم
RemoveWhitelisttarget (معرّف خادم أو معرّف)true؛ و false إذا كان فارغًا أو مرفوضًايزيل إدخالات القائمة البيضاء لوقت التشغيل. جدول القائمة البيضاء للوحة لا يُمس.نعم
IsWhitelistedsrcbooleantrue إذا كان أي معرّف في القائمة البيضاء لوقت التشغيل أو في القائمة البيضاء المخزّنة مؤقتًا للوحة. لا يشمل whitelistPlayer أو SetPlayerExempt. دائمًا false مع ts.Debug.لا
refreshPanelWhitelistلا يوجدnilيعيد تحميل القائمة البيضاء للوحة الآن (استعلام متزامن). كما يعيد تحميلها بعد 12 ثانية من البدء وكل 60 ثانية.لا
WhitelistAreasrc؛ areaName (غير فارغ)؛ durationSec? (الافتراضي 30)true؛ و false إذا كان غير صالح أو مرفوضًايسجّل منطقة مسمّاة ويضبط علامة إعفاء العميل. تخفيف على جانب العميل فقط: لا توجد وحدة على الخادم تقرأ المنطقة، لذا لا توجد حصانة من عقوبات الخادم.نعم
ClearAreasrc؛ areaName? ('' أو nil = كل المناطق)true؛ و false إذا كان src هو 0 أو عند الرفضيزيل المنطقة. مع اسم يعيد أيضًا ضبط علامة إعفاء العميل، مما ينهي إعفاءات العميل الأخرى أيضًا. مع اسم فارغ تُترك العلامة كما هي.نعم
IsInAreasrc؛ areaName? (فارغ = أي منطقة)booleanمع اسم يتحقق من انتهاء الصلاحية. مع اسم فارغ يعيد true لأي إدخال، بما في ذلك المنتهية.لا

العقوبات والحظر#

عاقب اللاعبين عبر مسار عقوبات الـ AC، واحظر اللاعبين غير المتصلين، واقرأ سجلات الحظر. كل exports الكتابة هنا تتطلب الثقة.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
punishsrc (متصل)؛ reason؛ image? (رابط لقطة الشاشة أو بياناتها)؛ configKey?؛ punishment? ('BAN' أو 'KICK' أو 'LOG')nil؛ و false عند الرفضيشغّل مسار عقوبات الـ AC الكامل. اللاعبون المعفيون يُتخطَّون. راجع كيف يختار punish() العقوبة.نعم
bansrc (متصل)؛ reasonnil؛ و false عند الرفضالمسار نفسه مع مفتاح الإعداد 'Banned via Export' والعقوبة ts.punishType. ليس دائمًا حظرًا دائمًا: المدة هي ts.BanDurations['default'] (0 = دائم)، وإذا ضبط المالك ts.punishType على KICK أو LOG فإنه يطرد أو يسجّل بدلًا من ذلك. اللاعبون المعفيون يُتخطَّون بصمت.نعم
BanPlayerExtsrc (متصل)؛ reason? (الافتراضي 'Banned by script')true إذا أُرسل؛ و false إذا كان غير موثوق أو غير متصلمثل ban().نعم
KickPlayersrc (متصل)؛ reason? (الافتراضي 'Kicked by script')true؛ و false إذا كان غير موثوق أو غير متصلطرد بسيط بالرسالة '[Tosun AC] ' متبوعة بالسبب. لا يوجد فحص للإعفاء: الطاقم واللاعبون في القائمة البيضاء يُطردون أيضًا. لا يُسجَّل شيء.نعم
offlineBandata { playername, license, steam, discord, ip, HWID, HWID2 إلى HWID5 } (معرّفات مجردة)؛ reasonnil؛ و false عند الرفضسجل حظر دائم للاعب غير متصل. المعرّفات المفقودة تُحفظ كقيم بديلة لا تتطابق أبدًا عند الاتصال. اضبط دائمًا data.playername و reason: بدونهما يفشل الإدراج تحت STRICT sql_mode ولا يُبلَّغ المستدعي. يطبع سطرًا في وحدة التحكم. data = nil يُصدر خطأ Lua.نعم
offlineBanByLicenselicense (hex مجرد أو 'license:...')؛ reason? (الافتراضي 'Sebep yok'، بالتركية)؛ actor? (الافتراضي 'panel')؛ name?؛ citizenid?true, banID ('O' + 8 hex)؛ أو false, 'license required'؛ و false عند الرفضحظر license دائم مع سجل تاريخي في ac_offline_bans. يعود قبل انتهاء الكتابة في قاعدة البيانات، لذا لا يُبلَّغ عن أخطاء قاعدة البيانات. لا يطرد لاعبًا متصلًا. الـ license غير النصية (ليست string) تُصدر خطأ Lua.نعم
unbanbanIDدائمًا nilغير متزامن: إذا كان الحظر موجودًا يحذفه، ويرسل سجل Discord إلى webhook قائمة الإدارة، ويطلق حدث الخادم ts_anticheat:playerUnbanned. السجلات التاريخية في ac_offline_bans تبقى.نعم
getBanslimit? (الافتراضي 100، بلا حد أقصى)؛ offset? (الافتراضي 0)سجلات الحظر، الأحدث أولًاسجلات كاملة، بما فيها أعمدة IP و license و Steam و Discord و HWID. استعلام متزامن.لا
getBanInfobanIDسجل الحظر الكامل أو nilاستعلام متزامن.لا

كيف يختار punish() العقوبة#

تتشارك punish() و ban() و BanPlayerExt() مسارًا واحدًا. هذا هو الترتيب الذي يتبعه.

  1. يُتخطّى الطاقم عندما لا يكون ts.AdminBypassDetections هو false. يُتخطّى اللاعبون الذين لديهم إعفاء نشط أو الموجودون في القائمة البيضاء لوقت التشغيل أو للوحة. ts.Debug يوقف هذا التخطي. الاستدعاءات المتخطّاة لا تفعل شيئًا ولا تسجّل شيئًا.
  2. يجب أن يكون اللاعب متصلًا. وإلا يُطبع خطأ في وحدة تحكم الخادم ولا يحدث شيء.
  3. العقوبة: وسيط punishment الصالح له الأولوية. وإلا ts.DetectionPunishments[configKey]، ثم اسمه البديل، ثم مفتاح الاكتشاف، ثم ts.punishType، ثم BAN.
  4. كل نتيجة تطلق حدث الخادم ts_anticheat:playerBanned، وتنشر رسالة في الدردشة عندما يكون ts.chatMessages مفعّلًا، وتضيف مخالفة سحابية، وتكتب سجل الـ AC والسجل المباشر.
  5. LOG: يرسل سجل لقطة الشاشة إلى Discord.
  6. KICK: يتحقق من الطاقم مجددًا بغض النظر عن ts.AdminBypassDetections، لذا لا يُطرد الطاقم أبدًا. ثم يرسل سجل لقطة الشاشة ويطرد اللاعب.
  7. BAN: يُدرج الحظر بمدة من ts.BanDurations بالساعات (configKey، ثم الاسم البديل، ثم مفتاح الاكتشاف، ثم البادئة، ثم default؛ و 0 = دائم) مع bannedBy بقيمة 'anticheat:' متبوعة بالمفتاح. يطلق ts_anticheat:banCommitted، ويُبلغ اللوحة، ويطرد اللاعب (مع إعادة المحاولة بعد 3 ثوانٍ).
exports['tosun-ac']:punish(src, 'Money exploit', nil, 'my_shop_exploit', 'BAN')

الإشراف على لاعب واحد#

نفّذ إجراءات على لاعب واحد. اقرأ عمود الثقة بعناية: عدة exports هنا بلا فحص ثقة.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
freezePlayersrc (متصل)؛ freeze (boolean)true؛ و false إذا كان غير متصليجمّد اللاعب أو يفك تجميده وينشر إشعارًا في الدردشة بلغته. علامة التجميد لا تُمسح عند قطع الاتصال.لا
isPlayerFrozensrcbooleanيعكس freezePlayer فقط، وليس massFreeze.لا
slayPlayersrc (متصل)true؛ و false إذا كان غير متصليقتل اللاعب على عميله ويعرض إشعارًا.لا
warnPlayersrc (متصل)؛ reason?؛ actor? (الافتراضي 'console')true؛ و false إذا كان غير متصلتحذير في الدردشة للاعب وسجل في ac_player_warnings.لا
mutePlayersrc (متصل)؛ durationSec? (number؛ nil أو 0 = دائم)؛ reason?؛ actor? (الافتراضي 'system')true؛ و false إذا كان غير متصليمنع أحداث chatMessage القديمة الخاصة باللاعب ويحفظ سجلًا في ac_player_mutes. الكتم المؤقت ينتهي خلال 15 ثانية بعد انقضاء مدته. الكتم الدائم لا يُمسح عند قطع الاتصال وينتقل إلى اللاعب التالي الذي يحصل على معرّف الخادم نفسه، حتى unmutePlayer أو إعادة التشغيل. إشعارات الدردشة للاعب مكتوبة بالتركية بشكل ثابت في الكود.لا
unmutePlayersrctrue؛ و false إذا كان src هو nilيزيل الكتم ويُبلغ اللاعب إن كان متصلًا (إشعار دردشة بالتركية الثابتة في الكود).لا
isPlayerMutedsrcbooleanللقراءة فقط.لا
setPlayerHealthsrc (متصل)؛ hp? (الافتراضي 100، من 0 إلى 200)true؛ و false إذا كان غير متصل أو عند الرفضيضبط الصحة على العميل ويضبط الحد الأقصى للصحة على 200.نعم
setPlayerArmorsrc (متصل)؛ armor? (الافتراضي 0، من 0 إلى 100)true؛ و false إذا كان غير متصل أو عند الرفضيضبط الدرع على العميل.نعم
giveWeaponsrc (متصل)؛ weapon? (الافتراضي 'WEAPON_PISTOL')؛ ammo? (الافتراضي 60)true؛ و false إذا كان غير متصل أو عند الرفضيستخدم ox_inventory إذا كان قيد التشغيل؛ وإلا مخزون QB (إطار العمل 'qb' أو 'qbox' فقط، وليس 'qbcore')؛ وإلا addWeapon في ESX؛ وإلا إعطاء native. يعيد true حتى عندما يرفض المخزون العنصر. لا يستدعي AllowWeapon، لذا قد يُرصد السلاح المعطى عبر native بفحص السلاح مقابل المخزون (الإجراء الافتراضي log).نعم
stripWeaponssrc (متصل)true؛ و false إذا كان غير متصل أو عند الرفضيزيل كل الأسلحة من الـ ped. عناصر المخزون لا تُمس.نعم
clearInventorysrc (متصل)true؛ و false إذا كان غير متصل أو عند الرفضيمسح المخزون عبر ox_inventory. بدون ox_inventory يعرض إشعارًا فقط ولا يمسح شيئًا، لكنه يعيد true مع ذلك.نعم
spectatePlayeradminSrc؛ targetSrctrue؛ و false إذا كان أحد الوسائط nil أو لم يكن للهدف pedليس مراقبة حقيقية: ينقل adminSrc إلى الهدف. كل استدعاء يمنح adminSrc أيضًا إعفاء حركة لمدة 15 ثانية خارج الميزانية.لا

إجراءات على مستوى الخادم#

إجراءات تؤثر في كل لاعب أو في كل اتصال جديد.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
lockdownStatusلا يوجدactive (boolean)، reason (string)للقراءة فقط.لا
setLockdownstate (boolean)؛ reason (مرّر string عند التفعيل)nil؛ و false عند الرفضأثناء نشاطه يُرفض كل اتصال جديد برسالة LOCKDOWN والسبب. لا يوجد تجاوز للطاقم. أثناء التشغيل فقط. يبث سطرًا في الدردشة. استدعاؤه مع state بقيمة true وبدون سبب يفعّل الإغلاق ثم يُصدر خطأ Lua.نعم
emergencyLockdownreason? (سبب الإغلاق الافتراضي 'Acil durum'، بالتركية)عدد اللاعبين المطرودين؛ و false عند الرفضيفعّل الإغلاق (lockdown) ويطرد كل لاعب ليس من الطاقم برسالة بلغته.نعم
massFreezestate (boolean)عدد اللاعبين؛ و false عند الرفضيجمّد كل اللاعبين أو يفك تجميدهم، بما في ذلك الطاقم، ويبث سطرًا في الدردشة. سطر الدردشة مكتوب بالتركية بشكل ثابت في الكود.نعم
healAllلا يوجدعدد اللاعبين الذين أُرسل إليهم العلاج؛ و false عند الرفضيضبط الصحة على الحد الأقصى والدرع على 100 لكل لاعب لديه ped.نعم
setSpeedLimitkmh (القيمة 0 تعطّله)الحد المطبَّق؛ و false عند الرفضيحدّ سرعة المركبات للاعبين المتصلين الآن. اللاعبون الذين ينضمون لاحقًا لا يحصلون على الحد.نعم
applyWeatherWithFrameworkweather (بلا تحقق من الصحة)true، وقائمة الطرق التي جُرّبتيجرّب qb-weather و Renewed-Weathersync و cd_easytime، ثم wd_weather و weathersync و vSync و qb-weathersync، وإلا يبث إلى كل عميل. موجود فقط عندما تكون قائمة الإدارة مفعّلة.لا
applyTimeWithFrameworkhour؛ minute (بلا حصر للقيم)true، وقائمة الطرق التي جُرّبتسلسلة البدائل نفسها للساعة. موجود فقط عندما تكون قائمة الإدارة مفعّلة.لا

الحجر وحماية البيانات المرسلة (payload)#

اعزل لاعبًا مشبوهًا، واحمِ أحداث الشبكة الخاصة بك من بيانات التعطيل (crash payloads) والإغراق (spam).

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
quarantinesrc (متصل)؛ reason? (الافتراضي 'supheli davranis'، بالتركية)؛ seconds? (الافتراضي 300، من 30 إلى 1800)true (حتى لو كان محجورًا مسبقًا)؛ و false للاعبين المعفيين أو غير الصالحين، أو فشل الـ bucket، أو مستدعٍ غير موثوقينقل اللاعب إلى routing bucket معزول (الافتراضي من 9001 إلى 9500، مع قفل صارم للكيانات وبلا تعداد سكاني). يسجّل اكتشافًا من نوع QUARANTINE وينشر إشعارًا في الدردشة للاعب ما لم يكن notifyPlayer = false. الإشعار مكتوب بالتركية بشكل ثابت في الكود. يُفرج عنه تلقائيًا عند انتهاء المدة.نعم
releaseQuarantinesrctrue إذا أُفرج عنه؛ و false إذا لم يكن محجورًا أو عند الرفضيعيد الـ routing bucket الأصلي، ويسجّل، ويُبلغ اللاعب (إشعار دردشة بالتركية الثابتة في الكود، ما لم يكن notifyPlayer = false).نعم
isQuarantinedsrcbooleanللقراءة فقط.لا
quarantineListلا يوجد{ id, name, reason, remaining }[] (قيمة remaining بالثواني)للقراءة فقط.لا
crashGuardInspectvalue (أي بيانات)nil إذا كانت آمنة؛ وإلا وصف للمشكلة بالتركيةيتحقق من أرقام NaN/Inf، والمتجهات غير الصالحة، والنصوص التي تتجاوز 32768 حرفًا، والتداخل الأعمق من 8، وأكثر من 2000 عنصر، ونحو 64 KB إجمالًا، والمفاتيح التي تتجاوز 512 حرفًا، والأنواع غير المدعومة، والتكرار الذاتي (recursion). بلا آثار جانبية.لا
crashGuardRejectsrc (متصل)؛ payloadtrue إذا كانت البيانات سيئة (أسقطها)؛ و false إذا كانت سليمة أو كان src غير صالحالفحص نفسه مع إضافة مخالفة (strike) للاعب. 3 مخالفات خلال 60 ثانية تطبّق ts.crashGuard.action: 'kick' (الافتراضي) أو 'ban'، وأي قيمة أخرى = وحدة التحكم والسجل فقط. اللاعبون المعفيون يُتخطَّون.لا
RateLimitsrc؛ key? (الافتراضي 'default')؛ max? (الافتراضي 10، الحد الأدنى 1)؛ windowMs? (الافتراضي 10000، الحد الأدنى 100)true = مسموح؛ false = فوق الحدعدّاد بنافذة ثابتة لكل لاعب ومفتاح. المفاتيح مشتركة بين كل الموارد، لذا أضف إليها اسم موردك كبادئة. src بقيمة 0 أو غير صالح يعيد true دائمًا. يُمسح عند قطع الاتصال.لا
RegisterNetEvent('myres:buy', function(data)
    local src = source
    if not exports['tosun-ac']:RateLimit(src, 'myres:buy', 5, 10000) then return end
    if exports['tosun-ac']:crashGuardReject(src, data) then return end
    -- عالج عملية الشراء
end)

اللاعبون والاكتشافات#

ابحث عن اللاعبين والمعرّفات وسجلات الحظر حسب اللاعب ودرجات التهديد والحسابات المرتبطة. بعض النتائج تحتوي بيانات شخصية مثل عناوين IP.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
GetPlayerInfosrc (متصل){ id, name, ping, license, discord, steam, citizenid, isAdmin, coords, endpoint } أو nilمعرّفات بلا بادئة (license يرجع إلى license2 عند غيابه). endpoint هو عنوان IP للاعب. citizenid يُملأ فقط مع إطار العمل 'qb' أو 'qbcore' أو 'esx'؛ ويكون فارغًا مع 'qbox'. قد يستعلم isAdmin من قاعدة البيانات.لا
GetNearbyPlayerssrc؛ radius? (الافتراضي 30.0){ id, name, distance }[]اللاعبون القريبون من src حسب موقع الـ ped على جانب الخادم (OneSync)، باستثناء src.لا
getOnlinePlayersلا يوجد{ id, name, ping, license, discord, steam, isAdmin }[]المعرّفات هنا تحتفظ ببادئتها (license:... و discord:... و steam:...). قد يستعلم isAdmin من قاعدة البيانات لكل لاعب.لا
GetDetectionssrc (متصل)؛ limit? (الافتراضي 25){ banID, reason, banDate, banUntil }[] أو {}اسم تاريخي: يعيد سجلات BAN الخاصة باللاعب المطابقة حسب license، وليس الاكتشافات.لا
GetCloudThreatScoresrcمن 0 إلى 100درجة للعرض: 8 لكل مخالفة في الجلسة (بحد أقصى 40، وفقط ما دامت آخرها أحدث من 10 دقائق)، و 10 لكل تسجيل حضور فائت لـ shield (بحد أقصى 30)، و 12 لكل نقطة تهديد من native-guard (بحد أقصى 30). القيمة 0 عندما يكون ts.cloudBridge.enabled = false.لا
NoteCloudViolationsrc؛ reason?؛ punishment? ('LOG' أو 'KICK' أو 'BAN')nilيضيف مخالفة إلى درجة اللاعب؛ ولا يفعل شيئًا عندما يكون ts.cloudBridge.enabled = false. كل ملاحظة KICK أو BAN تضيف 25 إلى درجة الاستخبارات (بحد أقصى 100، ما دامت آخرها أحدث من 10 دقائق)؛ وعند 50 أو أكثر يُبلَّغ عن الـ license إلى قاعدة بيانات التهديدات المشتركة بين الخوادم في اللوحة (يتطلب رابط اللوحة والرمز). الانضمامات اللاحقة تُمنع فقط عندما يكون ts.cloudBridge.threatIntelAction = 'kick' (الافتراضي 'log'). الـ AC يستدعيه بالفعل مع كل عقوبة.لا
ForensicLinksOflicense (hex مجرد، بلا البادئة license:)الـ licenses المرتبطة (قائمة strings)؛ و {} إذا كان غير معروفيجد الحسابات البديلة التي تتشارك قيم Steam أو Discord أو HWID (و IP فقط مع ts.forensics.linkByIp = true)، حتى ts.forensics.maxHops (الافتراضي 3، الحد الأقصى 5). استعلامات حاجبة (blocking). يعمل مع تعطيل forensics، لكن عندها لا تُسجَّل روابط جديدة.لا
checkIpReputationip{ vpn, proxy, hosting, country, org, expiresAt } أو nilقراءة من الذاكرة المؤقتة فقط. يعيد بيانات فقط لعناوين IP التي فُحصت عند الاتصال خلال ts.v12.ipCheckCacheHours (24). لا يوجد بحث مباشر.لا
webBridgeFindByLicenselicense (string، مع license: أو بدونها)معرّف خادم لاعب متصل أو nilيجد لاعبًا متصلًا. عمليًا يطابق أي معرّف تطابقًا تامًا، مثل license2:... أو discord:....لا
webBridgeFindByCitizencid (citizenid في QB أو identifier في ESX)معرّف خادم لاعب متصل أو nilيعمل مع إطار العمل 'qb' و 'qbcore' و 'esx' فقط؛ ويعيد nil مع 'qbox'.لا

الإشعارات واللغة#

أرسل إشعارات الهاتف واستخدم جداول الترجمة في الـ AC. phoneNotify و phoneNotifyAdmins موجودان فقط عندما يكون ts.AdminMenu.enable مفعّلًا.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
phoneNotifysrc (متصل)؛ title؛ body؛ opts? { icon, color, app }true؛ و false إذا كان غير متصليرسل إلى أول هاتف قيد التشغيل: qb-phone أو qs-smartphone أو lb-phone أو yseries أو gks_phone أو npwd أو roadphone، وإلا إلى الدردشة. يُكتشف الهاتف مرة واحدة، لذا يُتجاهل الهاتف الذي يبدأ لاحقًا حتى إعادة التشغيل.لا
phoneNotifyAdminstitle؛ body؛ opts?nilphoneNotify إلى كل عضو متصل من الطاقم. قد يستعلم من قاعدة البيانات لكل لاعب.لا
getPlayerLocalesrcرمز اللغة؛ والافتراضي ts.Locale ('tr')للقراءة فقط. على جانب الخادم فقط.لا
setPlayerLocalesrc؛ lang (حرفان أو 3 أحرف صغيرة مع وجود ملف locales)true إذا ضُبطت؛ و false في غير ذلكيضبط لغة اللاعب على جانب الخادم. بخلاف الأمر ts_setlang، لا يزامن اللغة مع العميل. يُمسح عند قطع الاتصال.لا
translatekey؛ ... (قيم لـ {0} و {1}، أو جدول واحد لـ {name})النص المترجم؛ أو البديل الإنجليزي؛ أو المفتاح نفسه إذا كان مفقودًايستخدم ts.Locale. رمز من حرفين أو 3 أحرف في النهاية مع وجود ملف لغة يختار اللغة. القوالب التي تستخدم %s تعود دون تنسيق؛ نسّقها بنفسك.لا
translateForPlayersrc؛ key؛ ...نص بلغة اللاعبمثل translate، لكن باستخدام لغة اللاعب. بلا رمز لغة في النهاية.لا

لقطات الشاشة#

اطلب لقطات شاشة للاعبين من أجل اللوحة. exports كتابة السجلات في الـ AC داخلية وغير مدرجة هنا.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
v6ScreenWatchRequestserverId (متصل)؛ mode? (الافتراضي 'once')؛ requestedBy? (الافتراضي 'panel')؛ panelUrl?؛ forceBase64?معرّف الطلب؛ أو nil, 'invalid_id'؛ أو nil, 'offline'يضع لقطة شاشة في الطابور ويطلب من العميل رفعها إلى اللوحة برمز خاص بكل عملية رفع. يجب أن يكون panelUrl بـ https وأن يطابق ts_public_panel_url أو ts.webPanelURL، وإلا لا يُطلب من العميل شيء. الطلبات المعلّقة تنتهي بعد 30 ثانية وتُزال بعد 90 ثانية.لا
v6ScreenWatchPollrid{ pending = true } ما دام معلّقًا؛ وإلا الإدخال مع status ('done' أو 'failed' أو 'expired') و url؛ أو nil, 'not_found'للقراءة فقط.لا
v6ScreenWatchLatestserverIdآخر إدخال طلب أو nilللقراءة فقط.لا
RequestShieldScreenshotsrc (متصل)true؛ و false إذا كان غير متصليطلب لقطة شاشة من shield العميل (الطلب صالح 60 ثانية). يُرسل رد موقَّع إلى اللوحة ويطلق حدث الخادم ts_anticheat:shield:screenshot_saved(src, b64).لا
screenCapturesrc (متصل)؛ requestedBy? (الافتراضي 'panel')true؛ و false إذا كان غير متصلقديم. يتطلب المورد screenshot-basic والـ convar ts_screen_upload مضبوطًا بـ setr (الافتراضي http://localhost/api/screen_upload.php). الـ AC لا يحفظ النتيجة. استخدم v6ScreenWatchRequest أو RequestShieldScreenshot بدلًا منه.لا

الحالة والتشخيص#

اقرأ حالة الـ AC للوحات المتابعة وفحوص السلامة.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
GetStatusلا يوجد{ version, online, detections, debug, framework }version هو إصدار المورد من fxmanifest. detections يعدّ فقط التقارير من قناة عميل قديمة غير موقَّعة ويبقى قريبًا من 0 مع تفعيل التوقيع (الافتراضي)؛ وليس عدد الاكتشافات أو الحظر. لا يوجد حقل لمدة التشغيل (uptime).لا
getConfig (server)configType? ('webhooks' أو أي شيء آخر)نسخة منقّحة من الإعدادات؛ ومع 'webhooks' يُعاد جدول Webhooks للمستدعين الموثوقين و {} لغيرهمتُسقط النسخة الدوال، والمفاتيح التي تحتوي secret أو password أو token أو webhook، والمفاتيح التي تنتهي بـ key (باستثناء الأسماء المنتهية بـ hotkey والاسم المجرد key)، وأي شيء متداخل لأعمق من 6 مستويات. تُخزَّن مؤقتًا 5 ثوانٍ.فقط مع 'webhooks'
licenseStatusلا يوجد{ checked, ok, reason, serverId, licenseSet }حالة قفل الترخيص. reason تكون 'disabled' عندما لا يكون ts.licenseLock.enabled هو true، و 'not_checked' قبل أول فحص بعد 1.5 ثانية من البدء.لا
GetServerAuthorityStatusلا يوجد{ enabled, checks = { [id] = { available, enabled, action } } }يعرض فحوص سلطة الخادم التي يدعمها إصدار هذا الخادم وكيف هي مضبوطة. المعرّفات: superJump و damageMod و meleeMod و defenseMod و weapon و godmode و invisible و noclip و focus.لا
getRuntimeStatsلا يوجد{ uptime_sec, connect_buckets, subnet_buckets, license_tracking }عدّادات تقوية الاتصالات.لا
getBatchStatsلا يوجد{ log_pending, detection_pending, webhook_pending }أحجام الطوابير في كاتب الدفعات الذي يعمل كل 5 ثوانٍ.لا
getCleanupStatsلا يوجد{ runs, last_run_at, last_summary, cleaned }للقراءة فقط.لا
runCleanupلا يوجدجدول الإحصاءات؛ و false عند الرفضيشغّل تنظيف الاحتفاظ الآن: سجلات اللاعبين المتصلين القديمة، والاكتشافات القديمة، وسجلات الإدارة، وتدقيق اللوحة، وسمعة IP، وطوابير الأوامر ولقطات الشاشة، ومحاولات تسجيل الدخول، والجلسات المنتهية (الحدود من إعدادات keep في ts.v12). عمليات الحذف غير متزامنة، لذا لا تشمل الإحصاءات المُعادة هذا التشغيل بعد.نعم

حارس الموارد (Resource guard)#

اقرأ وغيّر خط الأساس للموارد المعتمدة. كل هذه الـ exports تُسجَّل حتى عندما يكون resource guard معطّلًا.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
getBaselineلا يوجد{ [resource] = { manifest_hash, deep_hash } }خط الأساس المعتمد.لا
getResourcesلا يوجد{ [resource] = true }الموارد المعروفة.لا
getSuspiciousلا يوجد{ [resource] = { reason, state, hash, manifest, at } }الموارد المرصودة على أنها متغيّرة أو مشبوهة.لا
getStatsلا يوجد{ lastScan, violations, driftedResources }عدّادات الحارس.لا
rescanResourcesلا يوجدحالة الحارس الكاملة (ready و resources و hashes و suspicious و drift_count و violation_count و last_scan وغيرها)يعيد بناء لقطة الموارد بشكل متزامن.لا
approveResourceresourceName؛ approvedBy? (الافتراضي 'web_panel')true؛ أو false, 'resource_missing'؛ و false عند الرفضيضيف hash الـ manifest الحالي إلى خط الأساس، ويمسح علامتي الاشتباه والحظر، ويحفظ في قاعدة البيانات، ويحدّث كل العملاء.نعم
blockResourceresourceName؛ reason? (الافتراضي 'Manuel blok'، بالتركية)true؛ و false عند الرفضيعلّم المورد كمحظور، ويزيله من خط الأساس، ويحفظ في قاعدة البيانات، ويوقفه إذا كان قيد التشغيل.نعم
tsAutoSetupلا يوجدtrue (حتى لو كان هناك إعداد قيد التشغيل)؛ و false عند الرفضمثل أمر وحدة التحكم tosunac_setup: يكتشف إطار العمل، ويشغّل فحص الأبواب الخلفية (مهلة 120 ثانية) وفحص التواقيع، ويعتمد فقط الموارد قيد التشغيل التي نتائج فحص الأبواب الخلفية والتواقيع لها مكتملة ونظيفة وبلا تغيير، ثم يشغّل فحص الأحداث. يتوقف دون اعتماد أي شيء إذا كان backdoor guard معطّلًا أو مشغولًا.نعم

فحوص التواقيع والأبواب الخلفية والأحداث#

شغّل الفحوص وأدِر التواقيع واستثناءات الإيجابيات الكاذبة وتخطّيات escrow. قد تستغرق الفحوص وقتًا؛ شغّلها من thread.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
scanAllResourcesلا يوجد{ total, scanned, infected, clean, errors, cached, skipped }؛ أو nil, 'already_scanning'فحص التواقيع لكل مورد. يتوقف مؤقتًا (yield). يعيد ضبط قائمة الموارد المصابة. يحظر الموارد المصابة عندما يكون ts.ResourceGuard.autoBlockInfected مفعّلًا.لا
scanSingleResourcenameinfected (boolean)، reasonreason تكون إحدى القيم: self و escrow_signature_skip و whitelisted و snapshot_unavailable و incomplete و clean و cached_clean و infected و cached_infected و blocked. قد يتوقف مؤقتًا (yield).لا
getInfectedFilesلا يوجدخريطة الملفات المصابةنتيجة آخر فحص.لا
addCheatSignaturepattern (نمط لاسم المورد)؛ signatureName?؛ severity? (الافتراضي 'critical')true؛ و false إذا كان فارغًا أو مرفوضًايضيف النمط في الذاكرة وفي قاعدة البيانات. قيم severity: info (منخفض)، warning (متوسط)، low، medium، high أو critical؛ والقيم غير المعروفة تصبح high.نعم
invalidateSignatureCacheلا يوجدtrueيمسح ذاكرة الأنماط المؤقتة ونتائج الفحص المحفوظة، لذا يعيد الفحص التالي قراءة كل مورد.لا
reloadSignatureExceptionsلا يوجدtrueيُبطل ذاكرتي الاستثناءات وتخطّي escrow المؤقتتين ونتائج الفحص المحفوظة. يُعاد تحميلها عند الاستخدام التالي.لا
reloadSignatureScanCachesلا يوجدtrueيعيد تحميل الأنماط والقائمة البيضاء والاستثناءات وتخطّيات escrow من قاعدة البيانات الآن.لا
addSignatureEscrowSkipresourceName؛ note?true؛ و false إذا كان فارغًا، أو بلا MySQL، أو عند الرفضيتخطى فحص التواقيع بالكامل لذلك المورد (للكود المحمي بـ escrow).نعم
removeSignatureEscrowSkipidOrName (معرّف السجل أو اسم المورد)true؛ و false إذا كان غير صالح، أو بلا MySQL، أو عند الرفضيزيل تخطّي escrow.نعم
addSignatureExceptionresourceName؛ filePath? ('' = كل الملفات)؛ signatureName؛ note?true؛ و false إذا كانت حقول مفقودة، أو بلا MySQL، أو عند الرفضيعلّم إصابة توقيع في ذلك المورد على أنها إيجابية كاذبة.نعم
removeSignatureExceptionid (number)true؛ و false إذا لم يكن رقميًا، أو بلا MySQL، أو عند الرفضيحذف الاستثناء.نعم
tsScanBackdoorscallback?(report) حيث report = { complete, resources, finished_at, trigger }true إذا بدأ؛ و false إذا كان هناك فحص قيد التشغيليشغّل فحص الأبواب الخلفية في thread. تذهب النتائج إلى قاعدة البيانات واللوحة. مع تفعيل ts.BackdoorGuard.autoQuarantine، الإصابات الحرجة توقف المورد.لا
tsScanEventsلا يوجدtrue إذا بدأ؛ و false إذا كان هناك فحص قيد التشغيليبني جردًا ثابتًا للأحداث والمشغّلات (triggers) في كل الموارد ويرسله إلى اللوحة.لا

أحداث المصائد (honeypot)#

حوّل أسماء الأحداث إلى مصائد أو حرّرها. كلاهما يكتب في ac_protected_events ويعيد التحميل من قاعدة البيانات.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
fakeTriggerTrapeventName؛ type ('client' أو 'server')true إذا أُرسل؛ و false إذا كان غير موثوق أو كان type غير صالحيجعل الحدث مصيدة (active = 1). أعد تشغيل الـ AC (ensure tosun-ac) للحصول على التأثير الكامل.نعم
fakeTriggerWhitelisteventNametrue إذا أُرسل (حتى مع اسم فارغ، وهو لا يفعل شيئًا)؛ و false إذا كان غير موثوقيعطّل المصيدة لذلك الحدث (active = 0). المعالجات المسجّلة مسبقًا قد تحتاج إلى إعادة تشغيل الـ AC؛ ووحدة التحكم تذكر ذلك.نعم

Exports تعتمد على الميزات#

تُسجَّل هذه الـ exports فقط عندما تكون ميزتها مفعّلة. إذا كانت الميزة معطّلة، فإن استدعاءها يُصدر خطأً.

Exportsتُسجَّل فقط عندما
quarantine, releaseQuarantine, isQuarantined, quarantineListts.quarantine.enabled ليس false
crashGuardInspect, crashGuardRejectts.crashGuard.enabled ليس false
runCleanup, getCleanupStatsts.v12.enableAutoCleanup ليس false
tsScanBackdoorsts.BackdoorGuard.enabled ليس false
tsScanEventsts.EventScanner.enabled ليس false
applyWeatherWithFramework, applyTimeWithFrameworkقائمة الإدارة مفعّلة (ts.AdminMenu موجود ولا يكون enable ولا enabled بقيمة false)
phoneNotify, phoneNotifyAdminsts.AdminMenu.enable مفعّل

Exports على جانب العميل#

استدعِ هذه الـ exports من سكربتات العميل. يمكن لأي مورد على العميل استدعاؤها؛ لا يوجد فحص ثقة. تؤثر فقط في الفحوص على ذلك العميل ولا تغيّر أبدًا الفرض على الخادم.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
SetExempt (client)state (boolean)؛ durationMs? (الافتراضي 30000، الحد الأقصى 300000)؛ reason? (مفتاح، الافتراضي 'unknown')nilيضيف أو يزيل إعفاءً محليًا تحت ذلك السبب. المنح الجديد يستبدل وقت الانتهاء للسبب نفسه. تُتخطّى معظم فحوص العميل أثناء نشاطه؛ والاكتشافات التي ما زالت تصل إلى مسار الحظر في العميل تُخفَّض إلى إدخالات LOG موسومة بـ [exempt]. state = false يزيل ذلك السبب فقط.لا
PauseDetectionsdurationMs? (الافتراضي 10000، الحد الأقصى 300000)nilيوقف فحوص العميل المحلية مؤقتًا. كل استدعاء يستبدل وقت الانتهاء، لذا PauseDetections(0) ينهي الإيقاف المؤقت والقيمة الأقصر تقصّره.لا
IsPlayerAdminلا يوجدbooleanعلامة طاقم محلية، تُحدَّث كل ثانيتين من حالة الإدارة التي يتحقق منها الخادم، وليس من state bag يستطيع العميل الكتابة فيه.لا
IsExemptلا يوجدbooleantrue إذا كان اللاعب من الطاقم، أو كان إعفاء أو إيقاف مؤقت من الخادم نشطًا، أو كان PauseDetections نشطًا، أو كان أي سبب من SetExempt نشطًا.لا
GetExemptionsلا يوجد{ [reason] = remainingMs }يعرض فقط أسباب SetExempt و state bag tsAcExempt. لا يعرض PauseDetections ولا إعفاءات الخادم ولا حالة الطاقم؛ استخدم IsExempt للإجابة الكاملة.لا
SetSpawnedstate (boolean)niltrue يعلّم اللاعب بأنه ظهر (spawned). false يوقف مؤقتًا فحوص الحركة والفحوص البصرية، مثلًا عند اختيار الشخصية؛ ويُطبَّق مرة واحدة على الأكثر كل 5 دقائق، وتُستأنف الفحوص بعد نحو 30 ثانية من الحركة المرئية العادية.لا
getConfig (client)لا يوجدجدول إعدادات العميلتُزامَن مع العملاء فقط الإعدادات الآمنة لجانب العميل.لا
-- اختيار الشخصية
exports['tosun-ac']:SetSpawned(false)
-- ... اللاعب يختار شخصية ...
exports['tosun-ac']:SetSpawned(true)

Exports بلغة JavaScript#

يسجّل Tosun AC بعض exports بلغة JavaScript على الخادم لفحص الموارد والتحقق من الترخيص. هي داخلية، وغير مشمولة بفحص الموارد الموثوقة، وليست API مدعومة. لا تستدعها. لا توجد exports عامة بلغة JavaScript.

ملفات الجسر: الإعداد#

ملفات الجسر الاختيارية في tosun-ac/bridge تمنح موردك جدولًا عامًا TosunAC مع دوال مساعدة قصيرة. تستدعي الـ exports داخل pcall، لذا يستمر سكربتك في العمل عندما يكون الـ AC متوقفًا. يرى الـ AC موردك على أنه المستدعي.

  1. أضف الجسر إلى ملف fxmanifest.lua في موردك: server_script '@tosun-ac/bridge/tosun_ac_server.lua'، وعند الحاجة client_script '@tosun-ac/bridge/tosun_ac_client.lua'.
  2. إذا كان لمجلد الـ AC اسم آخر، فأضف setr tosun_ac_resource "folder-name" إلى server.cfg. استخدم setr: لأن جسر العميل يقرأ هذا الـ convar على العميل.
  3. اختياري: set tosun_ac_bridge_server_ms (الافتراضي 60000)، و set tosun_ac_bridge_cooldown_ms (الافتراضي 750، و 0 يعطّله)، و setr tosun_ac_bridge_client_ms (الافتراضي 60000).
  4. للحصول على إعفاءات خادم كاملة، أضف موردك إلى tosun_ac_trusted_resources. بدون الثقة يرجع TosunAC.PlayerExempt إلى إعفاء جزئي (soft) ويطبع تلميحًا لمرة واحدة في وحدة تحكم الخادم (نص التلميح بالتركية).
-- ملف fxmanifest.lua الخاص بموردك
server_script '@tosun-ac/bridge/tosun_ac_server.lua'
client_script '@tosun-ac/bridge/tosun_ac_client.lua'

# server.cfg
setr tosun_ac_resource "tosun-ac"
set tosun_ac_trusted_resources "my-resource"

-- سكربت الخادم
local ok, mode = TosunAC.PlayerExempt(src, 'long', 'clothing')
-- قيمة mode هي 'full' (موثوق) أو 'soft' (الحركة فقط، بحد أقصى 15 ثانية)

الجسر: الدوال المساعدة على الخادم#

معرّفة في bridge/tosun_ac_server.lua داخل موردك. الإعدادات المسبقة: SHORT 30000 و MEDIUM 60000 و LONG 120000 و XL 180000 ms (TosunAC.Presets). قيمة TosunAC.Version هي '1.2'.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
TosunAC.MarkTeleportplayerId (1 أو أكثر)؛ durationMs? (الافتراضي 8000)true فقط إذا أعاد الـ export القيمة trueيستدعي MarkTeleport مع السبب 'bridge:teleport'.لا (إذا كان موردك غير موثوق، تُطبَّق ميزانية MarkTeleport لكل لاعب)
TosunAC.PlayerExemptplayerId؛ durationMs (من 500 إلى 300000)، أو اسم إعداد مسبق، أو nil (= tosun_ac_bridge_server_ms)؛ tag? (الافتراضي اسم موردك)true, 'full'؛ أو true, 'soft'؛ أو falseيجرّب SetPlayerExempt. إذا رُفض، يرجع إلى MarkTeleport لمدة تصل إلى 15 ثانية. فترة تهدئة لكل لاعب (الافتراضي 750 ms، مشتركة مع PlayerExemptPreset) تعيد false واحدًا. في وضع التدقيق تكون النتيجة 'full' حتى للموارد غير المدرجة.فقط مع 'full'
TosunAC.PlayerExemptPresetplayerId؛ presetName? (الافتراضي 'MEDIUM'، دون التأثر بحالة الأحرف)؛ tag?مثل PlayerExemptPlayerExempt بمدة إعداد مسبق. الأسماء غير المعروفة تستخدم MEDIUM. يتجاهل tosun_ac_bridge_server_ms.فقط مع 'full'
TosunAC.PlayerExemptOffplayerId؛ tag? (لا يستخدمه الـ AC)true إذا قُبليستدعي SetPlayerExempt(playerId, false). الموارد غير الموثوقة تحصل على false، ولا تُنهى نافذة الإعفاء الجزئي.نعم
TosunAC.IsTrustedلا يوجدbooleanGetIntegrationStatus().trusted. يعيد false للموارد غير المدرجة حتى في وضع التدقيق، حيث تمر الاستدعاءات المحمية مع ذلك.لا
TosunAC.IsAvailableلا يوجدbooleantrue عندما يكون مورد الـ AC قيد التشغيل.لا

الجسر: الدوال المساعدة على العميل#

معرّفة في bridge/tosun_ac_client.lua داخل موردك. تغلّف export العميل SetExempt، لذا تمنح تخفيفًا على جانب العميل فقط.

Exportالمعاملاتالقيمة المُعادةما يفعلههل يلزم مورد موثوق؟
TosunAC.ExemptdurationMs (من 500 إلى 300000)، أو اسم إعداد مسبق، أو nil (= tosun_ac_bridge_client_ms)؛ tag? (الافتراضي اسم موردك)nilيستدعي SetExempt في العميل بالمفتاح 'bridge:' متبوعًا بـ tag.لا
TosunAC.ExemptOfftag? (يجب أن يطابق tag المستخدم في Exempt)nilيزيل ذلك الإعفاء.لا
TosunAC.ExemptPresetname? (الافتراضي 'MEDIUM')nilExempt بمدة إعداد مسبق و tag الافتراضي. بلا معامل tag.لا
TosunAC.RunWithExemptdurationMs؛ tag؛ fntrue مع نتائج fn؛ أو false, err؛ أو false إذا لم تكن fn دالةيُعفي، ثم يشغّل fn داخل pcall، ثم يستدعي ExemptOff(tag).لا
TosunAC.RunWithExemptPresetpresetName؛ fnمثل RunWithExemptRunWithExempt بمدة إعداد مسبق و tag الافتراضي.لا
TosunAC.IsAvailableلا يوجدbooleantrue عندما يكون مورد الـ AC قيد التشغيل.لا
tosun-ac:bridge:clientExempt (net event)durationMs?؛ tag?لا شيءمسجّل داخل كل مورد يتضمن جسر العميل. يمكن لسكربت الخادم إرساله عبر TriggerClientEvent لتشغيل TosunAC.Exempt على ذلك العميل. إذا كانت عدة موارد تتضمن الجسر، يطبّق كل منها إعفاءه الخاص. لا شيء في tosun-ac يرسله.لا (سكربتات الخادم، أو سكربتات العميل المحلية عبر TriggerEvent)

Exports يمكن لأي مورد استدعاؤها#

هذه الـ exports بلا فحص ثقة ولها آثار جانبية. يمكن لكل مورد على الخادم استدعاؤها. شغّل فقط الموارد التي تثق بها؛ ولاحظ أن أي مورد على الخادم يستطيع أصلًا طرد اللاعبين أو إطلاق أحداث العميل عبر natives في FiveM.

  • MarkTeleport: إعفاء حركة، محدود بميزانية لكل لاعب.
  • spectatePlayer: ينقل لاعبًا ويمنح إعفاء حركة لمدة 15 ثانية خارج الميزانية مع كل استدعاء.
  • NoteCloudViolation: يرفع درجة التهديد للاعب وقد يُبلغ عن الـ license إلى قاعدة بيانات التهديدات المشتركة بين الخوادم.
  • warnPlayer و mutePlayer: يكتبان سجلات التحذير والكتم.
  • freezePlayer و slayPlayer: ينفّذان إجراءً على لاعب مباشرة.
  • crashGuardReject: يضيف مخالفات قد تؤدي إلى الطرد أو الحظر.
  • screenCapture و v6ScreenWatchRequest و RequestShieldScreenshot: تطلب لقطات شاشة.
  • rescanResources و scanAllResources و scanSingleResource و tsScanBackdoors و tsScanEvents: تبدأ الفحوص. قد يحظر scanAllResources موارد، وقد يوقف tsScanBackdoors موارد، عندما يكون الحظر التلقائي أو الحجر التلقائي مفعّلًا.
  • applyWeatherWithFramework و applyTimeWithFramework: يغيّران الطقس والوقت للجميع.
  • invalidateSignatureCache و reloadSignatureExceptions و reloadSignatureScanCaches و refreshPanelWhitelist: تعيد تحميل الذاكرة المؤقتة.
  • setPlayerLocale و unmutePlayer: يغيّران حالة اللاعب.
  • phoneNotify و phoneNotifyAdmins: يرسلان رسائل هاتف أو دردشة إلى اللاعبين.

أسماء قديمة ومضللة#

هذه الـ exports ما زالت تعمل، لكن أسماءها أو وثائقها القديمة توحي بشيء لا تفعله.

  • الأدلة القديمة (INTEGRATION.md للإصدار 9.6.6، و CONFIG-EXPORTS-MULTILANG.md للإصدار 8.6.1، وملف إعادة التوجيه المختصر TOSUN-AC-EXPORTS.md) قديمة. حيث تختلف، يطابق هذا المرجع كود الإصدار 9.6.15.
  • SetPlayerExempt و PausePlayerDetections و PauseAllDetections و BypassDetection و AddWhitelist و RemoveWhitelist و WhitelistArea و ClearArea و addAdmin و fakeTriggerTrap و fakeTriggerWhitelist تتطلب موردًا موثوقًا، مع أن CONFIG-EXPORTS-MULTILANG.md يدرجها دون هذا الشرط.
  • القائمة الموثوقة الافتراضية هي qbx_core و qb-core و es_extended و ox_inventory و ox_lib. يُغفل INSTALLER-READY.md كلًا من qb-core و es_extended.
  • GetIntegrationStatus() يعيد أيضًا حقل version.
  • punish و ban و BanPlayerExt و KickPlayer و offlineBan و offlineBanByLicense تتطلب موردًا موثوقًا.
  • ban() و BanPlayerExt() يتبعان ts.punishType و ts.BanDurations['default']، لذا ليسا دائمًا حظرًا دائمًا.
  • KickPlayer لا يتحقق من الإعفاءات. في مسار punish، يستثني KICK الطاقم دائمًا، بينما يتبع BAN و LOG الإعداد ts.AdminBypassDetections.
  • أثناء إعفاء العميل تُتخطّى معظم فحوص العميل بالكامل. فقط الاكتشافات التي ما زالت تصل إلى مسار الحظر تصبح إدخالات LOG موسومة بـ [exempt].
  • NoteCloudViolation يمنع الانضمامات اللاحقة فقط مع ts.cloudBridge.threatIntelAction = 'kick'.
  • مع جسر العميل، يجب ضبط الـ convars tosun_ac_resource و tosun_ac_bridge_client_ms عبر setr، وليس set.
  • الحد الأقصى لكل استدعاء في MarkTeleport (ts.Integration.markTeleportMaxMs) يُطبَّق على المستدعين الموثوقين أيضًا. ميزانية 180 ثانية كل 10 دقائق وحدها خاصة بالمستدعين غير الموثوقين.
Exportما يجب معرفتهاستخدم بدلًا منه
BypassDetectionمفتاح الاكتشاف يُتجاهل. يمنح إعفاءً كاملًا لمدة من 0.5 إلى 60 ثانية.SetPlayerExempt بمدة قصيرة، أو MarkTeleport لعمليات النقل
GetDetectionsيعيد سجلات حظر اللاعب، وليس الاكتشافات.getBans أو getBanInfo
getAdminType'tx' لا تعني txAdmin؛ والطاقم يحصل دائمًا تقريبًا على 'tx'.isAdmin أو isStaffPlayer
SetExempt (server)اسم بديل لـ SetPlayerExempt(src, true, ...). الوسائط تختلف عن SetExempt الخاص بالعميل.SetPlayerExempt
WhitelistAreaتخفيف على جانب العميل فقط؛ بلا حصانة من عقوبات الخادم.SetPlayerExempt للحصانة على الخادم
screenCaptureالـ AC لا يحفظ النتيجة.v6ScreenWatchRequest أو RequestShieldScreenshot
GetStatus().detectionsليس عددًا للاكتشافات أو للحظر.لا تستخدمه كعدّاد
isAdmin, addAdminمسجّل مرتين في الكود المصدري. نسختا anticheat_server.lua هما اللتان تعملان.استدعِهما بشكل عادي