انتقل إلى المحتوى الرئيسي

🧩 إنشاء جسر إطار عمل مخصص

يدعم Dream Bridge ESX, QBCore, و QBX بشكل افتراضي. إذا كنت تستخدم إطار عمل مختلف أو معدل، يمكنك تنفيذ جسر مخصص الخاص بك لضمان التوافق.

يوفر هذا الدليل لك خطوات إنشاء جسر جديد باستخدام القالب المدمج custom.

💡 ملاحظة: QBX (Qbox) متوافق تمامًا مع جسر QBCore. لا حاجة لتنفيذ منفصل.


📁 هيكل الجسر

يتم وضع جميع الجسور في مجلد bridge/. كل إطار عمل (مثل esx, qbcore, custom) له مجلد فرعي خاص به يحتوي على:

  • client.lua
  • server.lua
هيكل الجسر

يكتشف الجسر تلقائيًا الإطار النشط الخاص بك عبر GetResourceState.

مهم: إذا تم إعادة تسمية مورد إطار العمل الخاص بك (مثل es_extendedroleplay_framework)، قد يفشل الكشف التلقائي.


🚀 كيفية استخدام جسر custom

استخدم جسر custom:

  • إذا كنت تستخدم إطار عمل مستقل أو غير رسمي/غير مدعوم
    ➡️ قم بإنشاء جسر جديد بناءً على القالب custom.
  • إذا كنت بحاجة لتعديل/تغيير شيء في جسر موجود.
    ➡️ حاول تعديل الجسر الموجود أولاً. على سبيل المثال، إذا كانت جدول owned_vehicles الخاص بك مختلفًا عن الجدول الافتراضي. في هذه الحالة، تحتاج فقط لتعديل الوظائف المتعلقة بالمركبات في الجسر الموجود. لا حاجة لإنشاء جسر جديد أو تعديل الكل.
  • إذا لم يتم اكتشاف إطار عمل مدعوم بشكل افتراضي.
    ➡️ إذا قمت بإعادة تسمية مورد إطار العمل الخاص بك، قد لا يتم الكشف عنه تلقائيًا (مثل es_extended -> roleplay_framework). في هذه الحالة، تحتاج إلى استخدام GetResourceState لمورد إطار العمل الخاص بك المعاد تسميته في ملف الجسر الصحيح. جسر custom GetResourceState

🛠️ البدء

  1. انسخ مجلد bridge/custom
    أعد تسميته ليتطابق مع اسم إطار عملك المخصص (مثل bridge/myframework).
  2. عدّل كل من client.lua و server.lua
    نفذ منطقك في الوظائف المقدمة.
  3. ضبط منطق كشف الإطار العمل
    استبدل أو قم بتوسيع فحوصات GetResourceState لكشف إطار عملك المخصص.

✅ مثال: client.lua

مثال client.lua
if GetResourceState('my_framework') ~= 'started' then return end

DreamFramework.ServerFramework = 'myframework'
DreamFramework.ServerFrameworkLoaded = true

function DreamFramework.showHelpNotification(text)
-- رمز عرض المساعدة المخصص الخاص بك
end

function DreamFramework.getPlayerJobName()
return exports['my_framework']:GetJobName()
end

✅ مثال: server.lua

مثال server.lua
if GetResourceState('my_framework') ~= 'started' then return end

DreamFramework.ServerFramework = 'myframework'
DreamFramework.ServerFrameworkLoaded = true

function DreamFramework.getPlayerFromId(source)
return exports['my_framework']:GetPlayer(source)
end

function DreamFramework.getPlayerMoney(source, account)
local player = DreamFramework.getPlayerFromId(source)
return player.money or 0
end

🧠 أي وظائف يجب تنفيذها؟

يجب على جسرك تنفيذ جميع الوظائف المتضمنة في القالب المخصص وجميع الجسور الأخرى. وتشمل ذلك:

  • وظائف اللاعبين (مثل getPlayerFromId, getPlayerName)
  • إدارة الوظائف
  • الجرد والنقود
  • ملكية المركبات
  • الأحداث مثل OnPlayerLoaded, OnPlayerJobChange
  • أي وظائف أخرى يحتوي عليها الجسر... تحقق من ملفات bridge/custom/client.lua و bridge/custom/server.lua للحصول على قائمة كاملة بالوظائف المطلوبة.
⚠️ الوظائف المطلوبة إلزامية

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

➡️ تحقق مرتين من ملفات bridge/myframework/client.lua و bridge/myframework/server.lua لضمان تغطية الوظائف بالكامل.

وجود وظائف مفقودة = تجربة مكسورة.


⏰ التعامل مع الأحداث

يجب تشغيل بعض الأحداث يدويًا للتوافق:

RegisterNetEvent('myfw:playerLoaded', function(playerId)
OnPlayerLoaded(playerId)
end)

RegisterNetEvent('myfw:jobChanged', function(playerId, newJob)
OnPlayerJobChange(playerId, newJob.name)
end)

💬 نصائح

  • استخدم سجلات مثل print("[Bridge] تم تحميل الجسر المخصص") لتبسيط عملية التصحيح.
  • اختبر كل وظيفة بشكل فردي في بيئة مراقبة.
  • استفد من مجلد custom كقاعدة - فهو مملوء بالفعل بجميع القوالب المطلوبة.

🙌 ساهم بجسرك

هل قمت بإنشاء جسر عملي لإطار عملك الخاص؟
لا تتردد في مشاركته معنا - ساعد الآخرين على الاستفادة من تكاملك!

🧠 يمكن أن تصبح مساهمتك جزءًا من المشروع الرسمي، وستحصل على الاعتراف الكامل بعملك.
💡 إذا كان لديك أي أسئلة أو تحتاج إلى مساعدة، لا تتردد في التواصل معنا على خادم Discord الخاص بنا.


تمنياتنا بتطوير ممتع! 🚀