🧩 Crear un puente personalizado de marco
Dream Bridge admite ESX, QBCore y QBX de forma nativa. Si estás usando otro marco o uno modificado, puedes implementar tu propio puente personalizado para garantizar la compatibilidad.
Esta guía te muestra cómo crear un nuevo puente utilizando la plantilla integrada custom
.
💡 Nota: QBX (Qbox) es totalmente compatible con el puente de QBCore. No se necesita una implementación separada.
📁 Estructura del puente
Todos los puentes se encuentran en la carpeta bridge/
.
Cada marco (por ejemplo, esx
, qbcore
, custom
) tiene su propia subcarpeta con:
client.lua
server.lua

El puente detecta automáticamente tu marco activo mediante GetResourceState
.
Importante: Si tu recurso de marco se renombra (por ejemplo,
es_extended
→roleplay_framework
), la detección automática podría fallar.
🚀 Cómo usar el puente personalizado
Usa el puente custom
:
- Estás usando un marco independiente o no oficial/no compatible
➡️ Crea un nuevo puente basado en la plantillacustom
. - Necesitas editar/cambiar algo en un puente existente.
➡️ Intenta editar primero el puente existente. Por ejemplo, tu tablaowned_vehicles
es diferente de la predeterminada. En este caso solo necesitas editar las funciones relacionadas con vehículos en el puente existente. No es necesario crear uno nuevo o editar todo. - Ningún marco compatible se detecta por defecto.
➡️ Si has renombrado tu recurso de marco, quizás no se detecte automáticamente (por ejemplo,es_extended
→roleplay_framework
). En este caso, debes usarGetResourceState
en tu recurso renombrado en el archivo de puente correcto.
🛠️ Comenzando
- Copia la carpeta
bridge/custom
Renómbrala para que coincida con el nombre de tu marco personalizado (por ejemplo,bridge/myframework
). - Modifica tanto
client.lua
comoserver.lua
Implementa tu lógica en las funciones proporcionadas. - Ajusta la lógica de detección del marco
Reemplaza o extiende las comprobaciones deGetResourceState
para detectar tu marco personalizado.
✅ Ejemplo: client.lua
if GetResourceState('my_framework') ~= 'started' then return end
DreamFramework.ServerFramework = 'myframework'
DreamFramework.ServerFrameworkLoaded = true
function DreamFramework.showHelpNotification(text)
-- Tu código personalizado para mostrar ayuda
end
function DreamFramework.getPlayerJobName()
return exports['my_framework']:GetJobName()
end
✅ Ejemplo: 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
🧠 ¿Qué funciones deben implementarse?
Tu puente debe implementar todas las funciones incluidas en la plantilla personalizada y en otros puentes. Esto incluye:
- Funciones de jugador (por ejemplo,
getPlayerFromId
,getPlayerName
) - Gestión de empleos
- Inventario & dinero
- Propietario de vehículos
- Eventos como
OnPlayerLoaded
,OnPlayerJobChange
- Cualquier otra función que tenga el puente...
Revisa los archivos
bridge/custom/client.lua
ybridge/custom/server.lua
para obtener la lista completa de funciones necesarias.
Cada función en la plantilla del puente debe implementarse en tu puente personalizado.
Si falta una sola función, tu marco probablemente lanzará múltiples errores, romperá scripts que dependan de esas funciones y causará comportamiento inesperado.
➡️ Revisa bridge/myframework/client.lua
y bridge/myframework/server.lua
para asegurarte de tener cobertura completa de funciones.
Funciones faltantes = experiencia rota.
⏰ Manejo de eventos
Algunos eventos deben activarse manualmente para la compatibilidad:
RegisterNetEvent('myfw:playerLoaded', function(playerId)
OnPlayerLoaded(playerId)
end)
RegisterNetEvent('myfw:jobChanged', function(playerId, newJob)
OnPlayerJobChange(playerId, newJob.name)
end)
💬 Consejos
- Usa registros como
print("[Bridge] Cargado puente personalizado")
para facilitar el depuración. - Prueba cada función individualmente en un entorno controlado.
- Utiliza la carpeta
custom
como base — ya está prellenada con todas las funciones necesarias.
🙌 Contribuye con tu puente
¿Hiciste un puente funcional para tu marco?
¡No dudes en compartírnoslo! Ayuda a otros a beneficiarse de tu integración.
🧠 Tu contribución puede convertirse parte del proyecto oficial, y recibirás todo el crédito por tu trabajo.
💡 Si tienes alguna pregunta o necesitas ayuda, no dudes en contactarnos en nuestro servidor de Discord.
¡Feliz programación! 🚀