دليل

فريموركات FiveM والـ bridges

كل سكربت يحمل طبقة الـ bridges نفسها. تكتشف ما يعمل على سيرفرك، وتختار هدفًا، وتخبرك بما اختارته. لا شيء لتثبيته، ولا شيء لترقيعه، والملفات التي تقوم بالعمل قابلة للقراءة.

فريموركات FiveM والـ bridges

ما الفريموركات المدعومة فعلًا

لدى ESX وQBCore وvRP فرع مخصّص، مُختبر مقابل الـ exports الحقيقية. ووضع standalone لا يحتاج أي فريمورك، وcustom فرع فارغ تملؤه بنفسك. أما Qbox وox_core فيمرّان عبر مسار standalone أو custom بدل هدف مُختبر، ونقول ذلك بدل ادّعاء دعم لم نتحقّق منه.

  • esx، مُختبر مقابل es_extended
  • qbcore، مُختبر مقابل qb-core
  • vrp، نخاطبه عبر ناقل الأحداث لا عبر مكتبته
  • standalone، بلا أي فريمورك
  • custom، نقطة توسيع موثّقة

كيف يعمل الاكتشاف

يعمل الاكتشاف عند الإقلاع ويفحص الـ export الحقيقي، لا مجرد كون الريسورس مُشغّلة. والفريمورك الذي يبدأ بعدنا لا يثبّتنا على إجابة خاطئة: يعيد الـ bridge المحاولة، ثم يستسلم ويرجع إلى standalone. يرفع كل bridge راية Ready، وينتظر باقي السكربت هذه الراية بدل تأخير مُخمَّن. وقد تسبّب Wait مُخمَّن سابقًا في عدم تسجيل أي قطعة ملابس على سيرفر بطيء.

lua
-- config/config.lua
Config.Framework = 'auto'  -- auto | qbcore | esx | vrp | standalone | custom
Config.Notif     = 'auto'  -- auto | qbcore | esx | oxlib | okok | vrp | standalone | custom
Config.Interact  = 'auto'  -- auto | avenida_interact | ox_target | qb-target | standalone | custom
Config.Clothing  = 'auto'  -- auto | qb-clothing | illenium-appearance | fivem-appearance | esx_skin | vrp | standalone-table | custom
Config.Inventory = 'auto'  -- auto | ox_inventory | qb-inventory | esx | standalone | custom

كيف تعرف ما الذي اختاره

اضبط Config.Debug = true وأعد التشغيل. يطبع الكونسول سطرًا لكل فئة bridge يذكر الهدف المختار. أعده إلى false بمجرد أن تطابق الأسطر سيرفرك، فأوامر التشخيص التي يفتحها تكلّف تقطّعًا في الفريمات.

فرض هدف بدل اكتشافه

استبدل auto بالاسم الذي تريده. عندها يُتجاوَز الاكتشاف كليًا لتلك الفئة، وهو المطلوب على تركيبة معدّلة بشدّة يعطي فيها الفحص إجابة خاطئة. الفئات الخمس مستقلّة: يمكنك فرض الفريمورك وترك الإشعارات على auto.

ما فائدة فرع custom

يحمل كل ملف bridge فرع custom مع تعليق يدلّك على مكان وصل كودك الخاص. ولا يُختار تلقائيًا أبدًا، بل حين تسمّيه فقط، لأن ارتدادًا يهبط بصمت في فرع فارغ سيكون أسوأ من ارتداد يهبط في standalone.

لماذا نخاطب vRP عبر الأحداث

الاعتماد الصارم في الـ manifest، أي سطر @vrp/lib/utils.lua الذي تراه في كل مكان، يمنع السكربت من الإقلاع على كل سيرفر لا يوجد فيه vRP. لذلك يخاطب الـ bridge ناقل أحداث vRP مباشرة. والفائدة الجانبية حقيقية: اختلافات الأعراف بين نسخ vRP تسكن في ذلك الـ helper، فالذهاب المباشر يلغيها كلها. أما vRP 2 وvRP 0.5 فغير مدعومين، ويقول السكربت ذلك في الكونسول بدل أن يتصرّف بشكل خاطئ بصمت.

أسئلة

هل يعمل على Qbox أو ox_core؟

يعمل، عبر مسار standalone أو custom، لكن ليس عبر فرع نختبره. وQbox قريب من QBCore بما يكفي ليعمل فرض qbcore على معظم النسخ. نفضّل كتابة ذلك على ادّعاء دعم لم نتحقّق منه.

ماذا يحدث إذا بدأ الفريمورك بعد السكربت؟

لا شيء ينكسر. يعيد الاكتشاف المحاولة بدل تثبيت إجابة خاطئة من النظرة الأولى، وينتظر السكربت راية Ready قبل أن يلمس أي شيء. أما الريسورس غير المثبّتة أصلًا فتُستبعد فورًا، حتى لا تدفع السيرفرات الأخرى ثمن الانتظار.

هل أستطيع تشغيل سكربتين منكم جنبًا إلى جنب؟

نعم، وهي مبنية لذلك. يملك كل واحد نصفه من فتحة الزخرفة الوحيدة على الـ ped ويعيد الباقي بعد كل إعادة رسم. ما لا يجب فعله هو تشغيل السكربتات المنفصلة والحزمة في الوقت نفسه، والكونسول ينبّهك عند الإقلاع إن فعلت.

هل أحتاج ox_lib؟

لا. يوفّر bridges/compat.lua تنفيذًا أصليًا لما نستخدمه، فيُستفاد من ox_lib عند وجوده ويُستبدل عند غيابه. ولا شيء في الـ manifest يعتمد عليه.

السكربتات المعنية

السلة
Spirit RP
Discord