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

الوثائق 9.6.24

الإعداد خطوة بخطوة

يستغرق الأمر نحو 20 دقيقة من خادم فارغ إلى حماية تعمل ومتصلة باللوحة. تنتهي كل خطوة بما يجب التحقق منه؛ وإذا فشل التحقق فأصلح المشكلة قبل الانتقال إلى الخطوة التالية.

قبل أن تبدأ#

تأكد من جاهزية ما يلي قبل البدء.

  • إصدار حديث من خادم FiveM (artifact) مع تفعيل OneSync (set onesync on). معظم الفحوص من جهة الخادم لا تعمل بدون OneSync، ويحذّر مضاد الغش من ذلك عند التشغيل.
  • تثبيت oxmysql وتشغيله. يصل مضاد الغش إلى قاعدة البيانات عبر oxmysql فقط، ولا يطلب أبدًا كلمة مرور MySQL منفصلة.
  • حساب في اللوحة على خطة تتضمن التنزيلات.
  • نسخة احتياطية من قاعدة البيانات ومجلد resources. عند التحديث، احتفظ أيضًا بنسخة منفصلة من مجلدات configs وadmins وeditable وlocales وbridge.
  • وسيلة لرفع الملفات إلى الخادم (FTP أو مدير ملفات txAdmin أو سطح المكتب البعيد) وأداة لتشغيل SQL (HeidiSQL أو phpMyAdmin).

1. أضف خادمك في اللوحة#

مفتاح الترخيص خاص بخادم واحد، لذلك يبدأ الإعداد بتعريف هذا الخادم في اللوحة.

  1. افتح صفحة «الخوادم» في لوحة العميل واختر «إضافة خادم».
  2. أدخل اسم الخادم واختر إطار العمل (QBCore أو Qbox أو ESX) وسكربت المخزون.
  3. في قسم «اتصال قاعدة البيانات»، اترك خيار «الاتصال عبر السكربت» محددًا. هذا الوضع لا يحتاج إلى كلمة مرور MySQL ولا إلى منفذ قاعدة بيانات مفتوح للعامة.
  4. احفظ، ثم افتح الخادم وانسخ القيمة الموجودة في بطاقة «مفتاح الترخيص». إذا كنت تدير عدة خوادم، فاستخدم المفتاح الخاص بكل خادم.
  5. التحقق: يظهر الخادم في القائمة ونسخت مفتاح الترخيص الخاص به.

2. نزّل حزمة الخادم#

تُبنى الحزمة للخادم المحدد عند تنزيلها، لذلك قد يستغرق ذلك بضع ثوانٍ.

تحتوي الحزمة على tosun-ac (المورد الرئيسي، إلزامي)، وtosun-ac-guardian (مورد صغير يحمي مضاد الغش من الإيقاف، يُنصح به)، وtosun_render (مكوّن فيديو الأدلة) إذا كان مضمّنًا. ويحتوي مجلد tosun-ac أيضًا على INSTALL.sql (ملف SQL واحد ينشئ كل الجداول) وKURULUM.txt (ملاحظة إعداد قصيرة) وINTEGRATION.md (دليل الربط مع السكربتات الأخرى).

تنزيل حزمة جديدة لا يحدّث الخادم العامل. لا يتغير شيء حتى تضع الملفات وتعيد تشغيل المورد.

  1. انتقل إلى صفحة «التنزيلات» في اللوحة.
  2. اختر خادمك ثم اضغط «تنزيل».
  3. فك ضغط ملف ZIP إلى مجلد على جهازك.

3. ضع الملفات في مكانها#

أنشئ مجلدًا باسم [tosun] داخل مجلد resources في الخادم. المجلدات بين قوسين مربعين تُستخدم في FiveM لتجميع الموارد فقط. انسخ إليه مجلدات tosun-ac وtosun-ac-guardian، وكذلك tosun_render إذا كان مضمّنًا.

لا تغيّر أسماء المجلدات. تصل السكربتات الأخرى إلى مضاد الغش عبر exports['tosun-ac']، ويراقب Guardian الاسم tosun-ac؛ وتغيير الاسم يعطّل عمليات الربط والحماية.

لا تحذف أي ملف داخل المجلدات. فحص سلامة الحزمة يكتشف الملفات الناقصة أو المعدّلة.

resources/
  [tosun]/
    tosun-ac/
    tosun-ac-guardian/
    tosun_render/

4. أنشئ جداول قاعدة البيانات#

يحفظ مضاد الغش الحظر والاكتشافات والسجلات والإعدادات في قاعدة بيانات اللعبة. أنشئ الجداول في قاعدة البيانات التي يتصل بها oxmysql، وهي نفسها التي تضم جداول إطار العمل.

لا يحذف INSTALL.sql بياناتك. تُنشأ الجداول باستخدام CREATE TABLE IF NOT EXISTS، لذلك تبقى الجداول الموجودة كما هي.

يحتاج مستخدم قاعدة البيانات الذي يستخدمه oxmysql إلى صلاحيتي CREATE وALTER على هذه القاعدة. إذا كانت الاستضافة المشتركة لا تسمح بهما، فشغّل ملف SQL بنفسك من لوحة تحكم الاستضافة.

  1. خذ نسخة احتياطية من قاعدة البيانات.
  2. في HeidiSQL، حدد قاعدة بيانات اللعبة، وافتح tosun-ac/INSTALL.sql عبر File → Load SQL file ثم شغّله (F9). في phpMyAdmin، استخدم تبويب الاستيراد (Import).
  3. إذا كنت تفضّل سطر الأوامر، فاستخدم الأمر أدناه.
  4. تحقق من وجود الجداول ts_anticheat وac_detections وadmin_logs الآن.
mysql -u USER -p DATABASE_NAME < INSTALL.sql

5. أضف الأعمدة الناقصة في التثبيتات القديمة#

إذا كنت قادمًا من إصدار أقدم، فجداولك موجودة لكنها قد تفتقد الأعمدة الأحدث. إذا ظهر في وحدة التحكم خطأ مثل Unknown column 'log_message' in 'field list'، فخذ نسخة احتياطية من قاعدة البيانات وشغّل الأوامر أدناه. فهي تضيف الأعمدة الناقصة فقط ولا تمس البيانات الموجودة.

هذه الصيغة خاصة بـ MariaDB. لا يدعم MySQL 8 عبارة IF NOT EXISTS هنا: اعرض الأعمدة أولًا باستخدام SHOW COLUMNS FROM admin_logs; ثم أضف الناقصة فقط باستخدام ADD COLUMN.

إذا استمر الخطأ، فقد يكون جدول admin_logs تابعًا لسكربت آخر. أرسل ناتج SHOW CREATE TABLE admin_logs; إلى الدعم.

ALTER TABLE admin_logs
  ADD COLUMN IF NOT EXISTS log_message LONGTEXT NULL,
  ADD COLUMN IF NOT EXISTS log_playerid LONGTEXT NULL,
  ADD COLUMN IF NOT EXISTS log_playername LONGTEXT NULL,
  ADD COLUMN IF NOT EXISTS log_type VARCHAR(20) NOT NULL DEFAULT 'LOG',
  ADD COLUMN IF NOT EXISTS log_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN IF NOT EXISTS created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

ALTER TABLE ac_detections
  ADD COLUMN IF NOT EXISTS player_id INT NULL,
  ADD COLUMN IF NOT EXISTS player_name VARCHAR(100) NOT NULL DEFAULT '',
  ADD COLUMN IF NOT EXISTS license VARCHAR(100) NULL,
  ADD COLUMN IF NOT EXISTS steam VARCHAR(50) NULL,
  ADD COLUMN IF NOT EXISTS discord VARCHAR(50) NULL,
  ADD COLUMN IF NOT EXISTS ip VARCHAR(40) NULL,
  ADD COLUMN IF NOT EXISTS detection_type VARCHAR(60) NOT NULL DEFAULT '',
  ADD COLUMN IF NOT EXISTS detail TEXT NULL,
  ADD COLUMN IF NOT EXISTS reason VARCHAR(512) NOT NULL DEFAULT '',
  ADD COLUMN IF NOT EXISTS punishment VARCHAR(10) NOT NULL DEFAULT 'LOG',
  ADD COLUMN IF NOT EXISTS ban_id VARCHAR(20) NULL,
  ADD COLUMN IF NOT EXISTS screenshot VARCHAR(512) NULL,
  ADD COLUMN IF NOT EXISTS config VARCHAR(100) NULL,
  ADD COLUMN IF NOT EXISTS config_key VARCHAR(100) NULL,
  ADD COLUMN IF NOT EXISTS server_id INT NULL,
  ADD COLUMN IF NOT EXISTS created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

6. اضبط server.cfg والإعدادات الأساسية#

أضف الأسطر أدناه إلى server.cfg. يجب أن تأتي أسطر set قبل أسطر ensure، لأن المورد يقرأ هذه القيم عند تشغيله. ويجب أن يبدأ oxmysql وإطار العمل قبل مضاد الغش.

استبدل qb-core بمورد إطار العمل لديك (qbx_core أو es_extended). أضف سطر tosun_render فقط إذا كانت حزمتك تتضمنه.

الإعداد tosun_ac_license هو الإعداد الإلزامي الوحيد. اتصال بيانات اللوحة وتعديل أرصدة الشخصيات المتصلة مفعّلان افتراضيًا، فلا تضف أسطرًا لهما. أما الأسطر القديمة set tosun_db_bridge_enabled وset tosun_db_bridge_money_write فتُتجاهل بدءًا من الحزمة 9.6.14 ويمكنك حذفها. ما زالت الحزم الأقدم تحتاج إلى هذه الأسطر لتفعيل الاتصال، لذا نزّل الحزمة الحالية من اللوحة.

إعدادات اختيارية: tosun_ac_panel_key (إعدادات الموقع ← مفتاح AntiCheat API؛ إذا تُرك فارغًا يجد مضاد الغش هذا المفتاح في قاعدة البيانات بنفسه) وtosun_ac_central_token (رمز بالمكوّن fivem من صفحة «رموز AC API»؛ إذا تُرك فارغًا يُستخدم مفتاح اللوحة).

استخدم set فقط للترخيص والمفاتيح. فالأمر setr يرسل القيمة إلى اللاعبين، والأمر sets ينشرها في قائمة الخوادم العامة. لا تضع المفاتيح في configs/anticheat_config.lua، لأن هذا الملف يُرسل أيضًا إلى اللاعبين. بدلًا من server.cfg يمكنك استخدام جدول credentials في configs/anticheat_server.lua، الذي يُحمَّل على الخادم فقط؛ وإذا مُلئ الاثنان، تكون الأولوية لـ server.cfg.

  • ts.Framework.framework: اتركه "auto"؛ يُكتشف QBCore وQbox وESX تلقائيًا. إذا فشل الاكتشاف، فاضبطه على "qb" أو "qbox" أو "esx" أو "standalone".
  • ts.punishType: استخدم 'LOG' في اليوم الأول لتسجيل الاكتشافات فقط، ثم غيّره إلى 'BAN' بعد مراجعتها في اللوحة.
  • ts.Debug: أبقه false. عند تفعيله يُكتشف الجميع، بمن فيهم فريق الإدارة.
  • اترك الحقول webPanelKey وCentral.token وlicenseLock.licenseKey فارغة.
set onesync on

set tosun_ac_license "YOUR_LICENSE_KEY"

ensure oxmysql
ensure qb-core
# ... موارد إطار العمل والمخزون الأخرى لديك ...
ensure tosun_render
ensure tosun-ac
ensure tosun-ac-guardian

7. امنح الصلاحيات لفريق الإدارة#

يُستثنى فريق الإدارة من الاكتشافات ويمكنه فتح قائمة الإدارة داخل اللعبة. الطريقة الموصى بها هي صلاحيات ACE في server.cfg.

تشمل tosun.admin قائمة الإدارة والاستثناء؛ وتسمح tosunac.admin بتشغيل tosunac_setup من داخل اللعبة. استبدل قيمة الترخيص بقيمتك.

بدلًا من ذلك، أضف معرّفات license: أو steam: أو discord: إلى قائمة Admins في tosun-ac/admins/anticheat_admins.lua، أو امنح الصلاحية من اللوحة.

من يكون مشرفًا في txAdmin فقط يُستثنى من الاكتشافات لكنه لا يستطيع فتح القائمة داخل اللعبة؛ فالقائمة تحتاج إلى إحدى الطرق السابقة.

افتح القائمة داخل اللعبة باستخدام /ts أو /tsmenu، أو اضغط F7. يمكنك تغيير المفتاح عبر ts.AdminMenu.openKeyControl.

add_ace group.admin tosun.admin allow
add_ace group.admin tosunac.admin allow
add_principal identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx group.admin

8. التشغيل الأول والتحقق#

في التثبيت الأول، أعد تشغيل الخادم بالكامل وليس المورد فقط، حتى تظهر مشاكل ترتيب التشغيل فورًا.

  1. أعد تشغيل الخادم وابحث في وحدة التحكم عن أخطاء tosun-ac باللون الأحمر.
  2. شغّل tosunac_doctor في وحدة تحكم الخادم؛ فهو يعرض الإعدادات الخطرة أو المتعارضة.
  3. شغّل tosunac_db_status لفحص اتصال بيانات اللوحة، وtosunac_integration لفحص الربط مع السكربتات الأخرى.
  4. ابحث عن السطر [AC-Guardian] Aktif في وحدة التحكم.
  5. إذا كنت متأكدًا من أن الخادم نظيف، فشغّل tosunac_setup. يفحص أولًا بحثًا عن الأبواب الخلفية، ثم يضيف الموارد النظيفة وأحداث الخادم إلى قائمة السماح. لا تشغّله إذا كنت تشك في وجود مورد مصاب: فهو يعتبر الحالة الحالية موثوقة.
  • يظهر الخادم متصلًا في اللوحة ويتحدّث عدد اللاعبين.
  • عند الدخول بحساب إداري، يفتح /ts القائمة.
  • تظهر أسطر جديدة في قسم السجلات في اللوحة.
  • بعد 10-15 دقيقة من اللعب بحساب عادي، لا تظهر في اللوحة اكتشافات غير متوقعة.
tosunac_doctor
tosunac_db_status
tosunac_integration
tosunac_setup

9. تحقّق من اتصال بيانات اللوحة#

هذا الاتصال مفعّل افتراضيًا، ولا تحتاج إلى إضافة أي سطر إلى server.cfg أو تفعيله من اللوحة. يستطيع مستخدمو اللوحة المصرّح لهم عرض بيانات اللاعبين والشخصيات والمخزون والمركبات والحظر والاكتشافات عند الحاجة. لا تُنسخ قاعدة البيانات، وتبقى كلمة مرور MySQL على خادمك. يقرأ الاتصال البيانات فقط؛ والاستثناء الوحيد هو تعديل أرصدة الشخصيات المتصلة الموضّح أدناه.

تعيد كل صفحة 25 سجلًا، ويُنفَّذ طلب واحد في كل مرة، ولا يتجاوز حجم الرد 64 KB. أثناء الخمول، لا ينفّذ الاتصال أي استعلام على قاعدة بيانات اللعبة. الجداول القياسية لـ QBCore وQbox وESX مدعومة؛ أما الجداول المخصصة فلا تُربط تلقائيًا.

تعديل الأرصدة مفعّل افتراضيًا أيضًا، ولا يستطيع استخدامه إلا مستخدمو اللوحة بدور المسؤول أو المالك (صلاحية الاقتصاد). لا يضيف التعديل مبلغًا إلى الرصيد، بل يضبط إجمالي النقد أو البنك على القيمة التي تدخلها. يجب أن تكون الشخصية متصلة. إذا لم يطابق الرصيد الحالي المتوقع، يُرفض الطلب بالرمز stale_balance ولا يتغير شيء. تعرض اللوحة ملخصًا للتأكيد قبل الإرسال، ويُسجَّل كل طلب في سجل التدقيق. لا يُعاد الطلب الذي لم تتضح نتيجته تلقائيًا أبدًا؛ تحقّق من الرصيد داخل اللعبة قبل المحاولة مرة أخرى.

للتحكم اليدوي المتقدم، أضف set tosun_db_bridge_manual "1" إلى server.cfg. عندها يُقرأ tosun_db_bridge_enabled وtosun_db_bridge_money_write من server.cfg كما في السابق، ويبقى كل منهما معطّلًا ما لم يُضبط على "1". وإذا فعّلت المرآة الكاملة القديمة عن قصد (ts.panelMirror.enabled = true في configs/anticheat_config.lua)، يبقى الاتصال معطّلًا تلقائيًا كي تواصل المرآة عملها.

يستخدم موقع مجتمعك الاتصال نفسه. من دون إعدادات قاعدة بيانات اللعبة تقرأ صفحات اللاعبين والحظورات والاكتشافات من خادم اللعبة، ولا حاجة إلى مستخدم MySQL أو منفذ قاعدة بيانات مفتوح. يوضح قسم قاعدة البيانات والجسر ← «موقع المجتمع بالترخيص فقط» ما يعرضه هذا الوضع ومتى يستحق إضافة اتصال SQL المباشر الاختياري.

  1. في اللوحة، افتح «الخوادم» ← خادمك ← بطاقة Tosun Connect. ما دام المورد يعمل، يجب أن تعرض البطاقة «Connection ready» (الاتصال جاهز).
  2. يمكنك أيضًا التحقق من الاتصال باستخدام tosunac_db_status في وحدة تحكم الخادم.
  3. لإيقاف الاتصال لخادم واحد، اختر «Disable connection» (تعطيل الاتصال) في البطاقة نفسها. يؤدي ذلك إلى إيقاف كل عمليات القراءة وتعديل الأرصدة لهذا الخادم، ويمكنك إعادة تفعيله من البطاقة نفسها.

10. اجعل سكربتاتك الأخرى متوافقة#

السكربتات التي تنقل اللاعبين أو تمنحهم أسلحة أو تجمّدهم قد تبدو كغش ما لم تُبلغ مضاد الغش بذلك. أكثر الحالات شيوعًا وحلولها:

يمكن لأي سكربت استدعاء MarkTeleport. أما AllowWeapon وSetExempt فيمنحان استثناءات واسعة، لذلك لا يُقبلان إلا من الموارد التي تثق بها. أضف أسماء السكربتات التي تستخدمهما مفصولة بفواصل، واحتفظ بأي أسماء موجودة مسبقًا في القائمة.

  • ينقل لاعبًا (منزل، كراج، سجن، مستشفى): استدعِ exports['tosun-ac']:MarkTeleport(src) مباشرة قبل نقل اللاعب.
  • يفتح قائمة قصيرة تجمّد اللاعب (ملابس، حلاق): exports['tosun-ac']:MarkTeleport(src, 15000).
  • يمنح سلاحًا دون وضعه في المخزون (ساحة قتال، بينتبول): exports['tosun-ac']:AllowWeapon(src, "WEAPON_PISTOL", ms). يتطلب موردًا موثوقًا.
  • يحتاج إلى استثناء لاعب بالكامل لفترة (مشهد سينمائي، إعادة ظهور مخصصة): exports['tosun-ac']:SetExempt(src, ms, "reason"). يتطلب موردًا موثوقًا.
set tosun_ac_trusted_resources "my-clothing,my-housing,my-arena"

11. التحديث#

حدّث أثناء الصيانة واحتفظ بإعداداتك الخاصة.

إذا كان مفتاح اللوحة موجودًا سابقًا في anticheat_config.lua، فربما أُرسل إلى اللاعبين. أنشئ مفتاحًا جديدًا في اللوحة وحدّث server.cfg أيضًا؛ فالتحديث لا يلغي المفاتيح القديمة.

  1. نزّل الحزمة الجديدة من اللوحة.
  2. خذ نسخة احتياطية من مجلد tosun-ac على الخادم، واحتفظ بتعديلاتك في مجلدات configs وadmins وeditable وlocales وbridge بشكل منفصل.
  3. احذف المجلدات القديمة tosun-ac وtosun-ac-guardian وtosun_render وضع الجديدة مكانها. النسخ فوق المجلدات القديمة يترك الملفات المحذوفة في مكانها.
  4. أعد إعداداتك الخاصة. للحفاظ على الأسطر المضافة في الإصدار الجديد، انقل القيم التي غيّرتها فقط بدلًا من استبدال الملف كاملًا.
  5. إذا ذكرت ملاحظات الإصدار تغييرات في قاعدة البيانات، فكرّر الخطوتين 4 و5.
  6. أعد تشغيل الخادم وكرّر عمليات التحقق في الخطوة 8.

12. حل المشكلات#

أكثر الأعراض شيوعًا وطريقة إصلاحها:

عند طلب الدعم، أرفق رقم الإصدار (version في fxmanifest.lua) والخطأ الكامل من وحدة التحكم وناتج tosunac_doctor. لا تشارك أبدًا الترخيص أو مفاتيح API؛ ولن يطلبها منك الدعم.

  • Unknown column '…' in 'field list': الجداول من إصدار أقدم. شغّل أوامر SQL في الخطوة 5.
  • Table '…' doesn't exist: لم يُستورد INSTALL.sql، أو استُورد إلى قاعدة بيانات خاطئة. استورده إلى قاعدة البيانات التي يتصل بها oxmysql.
  • أخطاء oxmysql وتوقف مضاد الغش في الثانية الأولى: انقل ensure oxmysql فوق ensure tosun-ac.
  • تحذير بأن الترخيص غير صالح: أُدخل ترخيص خادم آخر، أو جاء سطر set بعد ensure، أو استُخدم setr. انسخ الترخيص مجددًا من بطاقة الخادم الصحيح.
  • قائمة الإدارة لا تفتح: الشخص مشرف في txAdmin فقط. أضف أسطر ACE من الخطوة 7 ثم أعد الدخول.
  • اكتُشف لاعب بريء: افتح الاكتشاف في اللوحة لمعرفة الفحص الذي أطلقه، ثم أضف الاستدعاء من الخطوة 10 إلى السكربت المعني. وفي الأثناء، اضبط عقوبة هذا الفحص على LOG في اللوحة.
  • يظهر الخادم غير متصل في اللوحة: اقرأ ناتج tosunac_doctor؛ وإذا كان tosun_ac_panel_key مضبوطًا، فتأكد من أنه يطابق المفتاح في اللوحة.
  • تعذّر تنزيل الحزمة: اقرأ التنبيه في صفحة «التنزيلات»؛ فقد لا تتضمن خطتك التنزيلات، أو لم يُضف الخادم بعد.

أول دخول بصفتك مالك الموقع#

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

  1. طابق عنوان الموقع مع سجل الاستئجار المحدد.
  2. اختبر تسجيل الدخول والعودة لإدارة الموقع الصحيح في نافذة خاصة.
  3. اربط خادم FiveM الخاص بك؛ كلمة مرور الموقع وترخيص Tosun وكلمة مرور MySQL قيم مختلفة.
  4. استخدم استعادة الحساب والتحقق من الملكية عند التعذر، وليس كلمة مرور مدير مشتركة.

انسخ ترخيص Tosun للخادم الصحيح#

افتح قسم الخوادم في TosunDev واختر خادم FiveM الخاص بك ثم انسخ ترخيص Tosun AC لهذا السجل. القيمة tac_live_ ليست ترخيص Cfx.re أو sv_licenseKey أو رمز Discord أو مفتاح API للوحة.

  1. استبدل YOUR_SERVER_LICENSE داخل علامتي الاقتباس في server.cfg بترخيصك.
  2. ضع tosun_ac_license قبل ensure tosun-ac؛ استخدم set فقط، وليس setr أو sets.
  3. يمكن بدلاً من ذلك ضبط credentials.licenseKey في configs/anticheat_server.lua. لقيمة convar غير الفارغة الأولوية.
  4. لا تنشر الترخيص في الصور أو المحادثات أو shared config أو ملفات العميل.
set tosun_ac_license "YOUR_SERVER_LICENSE"
# Alternative: configs/anticheat_server.lua
# credentials.licenseKey = "YOUR_SERVER_LICENSE"

ملف SQL واحد وقاعدة البيانات الصحيحة#

نقطة استيراد SQL الوحيدة في ZIP الجديد هي tosun-ac/INSTALL.sql. لا تستورد نسخة قديمة ثانية من الجداول نفسها. الهدف قاعدة لعبة FiveM/oxmysql وليس قاعدة حسابات وقالب الموقع المستأجر. تُصلح الأعمدة القديمة الناقصة قبل القيم الافتراضية، مع الحفاظ على الحظر والإعدادات الخاصة.

  1. خذ نسخة احتياطية من قاعدة اللعبة وتحقق من اسمها المستخدم في oxmysql.
  2. استورد INSTALL.sql وحده في HeidiSQL/phpMyAdmin، أو حدد القاعدة صراحة في أمر mysql.
  3. يفحص tosunac_db_check الاستعلام، ويعرض tosunac_db_status حالة الجسر. الجسر مفعّل افتراضيًا ولا يحتاج إلى أي سطر في server.cfg. تكون الحالة enabled=false طبيعية في الوضع اليدوي (set tosun_db_bridge_manual "1") دون tosun_db_bridge_enabled "1"، أو عند تفعيل المرآة الكاملة القديمة عمدًا (ts.panelMirror.enabled = true في configs/anticheat_config.lua)؛ الترخيص لا ينشئ اتصال MySQL.
  4. اتصال اللوحة (Tosun Connect) وتعديل رصيد الشخصيات المتصلة مفعّلان افتراضيًا. لا تضف tosun_db_bridge_enabled أو tosun_db_bridge_money_write إلى server.cfg؛ الأسطر القديمة تُتجاهل ابتداءً من الحزمة 9.6.14 ويمكن حذفها (ما زالت الحزم الأقدم تحتاج إليها إلى أن تثبّت الحزمة الحالية). لا يعدّل الرصيد إلا مستخدمو اللوحة بدور admin أو owner: يجب أن تكون الشخصية متصلة، وأن يطابق الرصيدُ المتوقع الرصيدَ الحالي (وإلا تُعاد stale_balance ولا يتغير شيء)، وتعرض اللوحة ملخصًا للتأكيد قبل الإرسال، ويُسجَّل كل طلب في سجل التدقيق، ولا يُعاد الطلب تلقائيًا إذا كانت النتيجة غير مؤكدة؛ تحقق أولًا من الرصيد داخل اللعبة. العملية تضبط المجموع ولا تضيف إليه. لإيقاف الاتصال بالكامل لخادم واحد (يوقف ذلك جميع قراءات اللوحة وتعديلات الرصيد لهذا الخادم): اللوحة → الخوادم → الخادم → بطاقة Tosun Connect → Disable connection؛ ويمكنك إعادة تفعيله من البطاقة نفسها. احفظ كلمة مرور القاعدة على خادم اللعبة.
mysql -u YOUR_DB_USER -p YOUR_GAME_DATABASE < tosun-ac/INSTALL.sql

# txAdmin console:
tosunac_db_check
tosunac_db_status

من ZIP إلى تشغيل الموارد في txAdmin#

ضع tosun-ac وtosun-ac-guardian وtosun_render في المستوى نفسه داخل resources، مع fxmanifest.lua في جذر كل مورد. discord-bot تطبيق Node.js وليس مورداً لـ FiveM. ملف Render الجديد يحدد gta5 فقط دون common.

  1. احتفظ بقيمة mysql_connection_string العاملة؛ شغّل oxmysql والإطار والمخزون الموجودين قبل Render وAC وGuardian.
  2. نفّذ refresh في txAdmin واتبع ترتيب التشغيل أدناه. الاسم البديل tosun-render مدعوم، لكن اسم المجلد القياسي tosun_render.
  3. يجب أن يعرض tosun_render_status حالة started وتوفر الملفات. اختبر التقاط الصورة أيضاً مع لاعب تجريبي.
  4. اقرأ الخطأ الأول وافحص الاعتماد أو المجلد أو ترخيص الخادم المحدد حسب الرسالة.
set tosun_ac_license "YOUR_SERVER_LICENSE"

ensure oxmysql
# Start your existing framework/inventory here.
ensure tosun_render
ensure tosun-ac
ensure tosun-ac-guardian

# txAdmin console:
tosun_render_status
tosunac_doctor
tosunac_db_check
tosunac_db_status

تحقق من الصلاحيات ومن سحبها#

يتم التحقق من ACE ومعرفات المديرين وصلاحيات اللوحة على الخادم. all ليست معرفاً أو منحاً للصلاحية. يتطلب allowedIds قيماً كاملة مثل license:... أو discord:... أو fivem:... من قائمة معرفات اللاعب على الخادم.

  1. امنح مديراً تجريبياً الصلاحيات المطلوبة فقط وافحص القائمة وإجراء مسموحاً.
  2. اسحب صلاحية اللوحة واختبر اللاعب نفسه؛ الفحص الافتراضي الجديد كل خمس ثوانٍ تقريباً، مع مراقبة تأخير الشبكة.
  3. افحص أيضاً منح ACE/admins.lua المستقلة؛ بيانات اللاعبين المتصلين ليست مصدراً للصلاحية.
  4. يجب أن يبقى اللاعب العادي دون وصول؛ اختبر الإجراءات الحساسة ببيانات تجريبية.
ts.AdminMenu.allowedIds = {
    "license:YOUR_EXACT_PLAYER_IDENTIFIER",
    "discord:YOUR_DISCORD_USER_ID"
}
# Examples are placeholders, not grants.

ثبّت بوت Discord كخدمة منفصلة من الحزمة#

يعمل discord-bot على Node.js ولا يبدأ بأمر ensure. أنشئ تطبيقك في Discord Developer Portal واستخدم Application ID وGuild ID ومعرفات الأدوار والقنوات الخاصة بك. احتفظ بالرمز في ملف بيئة خاص.

حساب قاعدة الموقع مقيد افتراضياً بـ localhost لدى المزود. تشغيل البوت على جهاز FiveM آخر لا يفتح الاتصال تلقائياً. استخدم خدمة مُدارة على مضيف الموقع أو اتصالاً خاصاً معتمداً لحساب موقعك وحده. لا تستخدم root للمزود ولا تفتح MySQL للجميع. اختبر الأوامر القديمة التي تستعلم مباشرة عن جداول اللعبة بشكل منفصل.

بصفتك مالك الموقع احفظ token وClient ID وGuild ID في إدارة الموقع → بوت Discord. نزّل الملف الخاص عبر Download private bot setup واحفظه باسم .env في مجلد بوتك. يحتوي مفاتيح الموقع المحدد فقط بخلاف المثال الفارغ في ZIP. لا تشاركه ولا ترفعه إلى مستودع المصدر.

  1. ثبّت إصدار Node.js LTS مدعوماً من 22 فما فوق وجهز أمثلة الإعداد بسكربت التثبيت.
  2. ادع البوت بنطاقي bot وapplications.commands وامنح الصلاحيات المطلوبة فقط.
  3. اضبط قاعدة الموقع وواجهة HTTPS. مفتاح توقيع الأوامر خاص بهذا البوت والموقع؛ ليس ترخيص Tosun ولا مفتاح SaaS الرئيسي.
  4. نفّذ npm run doctor قبل التشغيل. تحقق بعد ذلك من حالة الاتصال والأدوار؛ doctor لا يسجل الدخول إلى Discord.
cd discord-bot
sh setup.sh
# Configure the private .env and site bot settings first.
npm run doctor
npm start

تجنب تكرار التحليل المكلف بعد إعادة التشغيل#

يتم فحص بصمات SHA256 لمحتوى الموارد عند كل تشغيل. تعيد الملفات وقواعد الفحص غير المتغيرة استخدام نتائج موثقة في KVP الخادم بدلاً من تكرار تحليل التواقيع والأحداث المكلف. تغييرات الملفات أو الاستثناءات أو القواعد تستدعي تحليلاً جديداً. ما زالت البصمات تقرأ الملفات؛ لا نضمن قيمة resmon ثابتة.

  1. احتفظ بذاكرة KVP في التحديث العادي؛ تُحلل السجلات التالفة أو غير القابلة للتحقق مجدداً.
  2. يجمع كتالوج البداية أسماء الأحداث المكتوبة صراحة في Lua/JS. الأسماء الديناميكية والملفات غير المقروءة أو escrow وDLL لا تُعتمد كفحص كامل.
  3. تنتظر التهيئة التلقائية اليدوية اكتمال التحليل. الموارد الناقصة أو المشبوهة أو المتغيرة أو المنتهية المهلة لا تُعتمد تلقائياً.
  4. اختبر دخول اللاعبين واللعب العادي وإجراءات المدير على خادم تجريبي، وقيّم resmon مع عدد اللاعبين وحمل الإطار.