🧩 إنشاء جسر إطار عمل مخصص
يدعم Dream Bridge ESX, QBCore, و QBX بشكل افتراضي. إذا كنت تستخدم إطار عمل مختلف أو معدل، يمكنك تنفيذ جسر مخصص الخاص بك لضمان التوافق.
يوفر هذا الدليل لك خطوات إنشاء جسر جديد باستخدام القالب المدمج custom
.
💡 ملاحظة: QBX (Qbox) متوافق تمامًا مع جسر QBCore. لا حاجة لتنفيذ منفصل.
📁 هيكل الجسر
يتم وضع جميع الجسور في مجلد bridge/
.
كل إطار عمل (مثل esx
, qbcore
, custom
) له مجلد فرعي خاص به يحتوي على:
client.lua
server.lua

يكتشف الجسر تلقائيًا الإطار النشط الخاص بك عبر GetResourceState
.
مهم: إذا تم إعادة تسمية مورد إطار العمل الخاص بك (مثل
es_extended
→roleplay_framework
)، قد يفشل الكشف التلقائي.
🚀 كيفية استخدام جسر custom
استخدم جسر custom
:
- إذا كنت تستخدم إطار عمل مستقل أو غير رسمي/غير مدعوم
➡️ قم بإنشاء جسر جديد بناءً على القالبcustom
. - إذا كنت بحاجة لتعديل/تغيير شيء في جسر موجود.
➡️ حاول تعديل الجسر الموجود أولاً. على سبيل المثال، إذا كانت جدول owned_vehicles الخاص بك مختلفًا عن الجدول الافتراضي. في هذه الحالة، تحتاج فقط لتعديل الوظائف المتعلقة بالمركبات في الجسر الموجود. لا حاجة لإنشاء جسر جديد أو تعديل الكل. - إذا لم يتم اكتشاف إطار عمل مدعوم بشكل افتراضي.
➡️ إذا قمت بإعادة تسمية مورد إطار العمل الخاص بك، قد لا يتم الكشف عنه تلقائيًا (مثلes_extended
->roleplay_framework
). في هذه الحالة، تحتاج إلى استخدامGetResourceState
لمورد إطار العمل الخاص بك المعاد تسميته في ملف الجسر الصحيح.
🛠️ البدء
- انسخ مجلد
bridge/custom
أعد تسميته ليتطابق مع اسم إطار عملك المخصص (مثلbridge/myframework
). - عدّل كل من
client.lua
وserver.lua
نفذ منطقك في الوظائف المقدمة. - ضبط منطق كشف الإطار العمل
استبدل أو قم بتوسيع فحوصاتGetResourceState
لكشف إطار عملك المخصص.
✅ مثال: 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
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 الخاص بنا.
تمنياتنا بتطوير ممتع! 🚀