Pular para o conteúdo principal

🧩 Criando uma Ponte de Framework Personalizada

A Dream Bridge suporta ESX, QBCore e QBX prontamente. Se você estiver usando um framework diferente ou modificado, você pode implementar sua própria ponte personalizada para garantir compatibilidade.

Este guia irá te orientar na criação de uma nova ponte utilizando o modelo custom fornecido.

💡 Observação: O QBX (Qbox) é totalmente compatível com a ponte do QBCore. Não é necessária uma implementação separada.


📁 Estrutura da Ponte

Todas as pontes estão localizadas na pasta bridge/. Cada framework (por exemplo, esx, qbcore, custom) possui sua própria subpasta com:

  • client.lua
  • server.lua
Estrutura da Ponte

A ponte detecta automaticamente seu framework ativo via GetResourceState.

Importante: Se o recurso do seu framework for renomeado (por exemplo, es_extendedroleplay_framework), a detecção automática pode falhar.


🚀 Como Usar a Ponte Personalizada

Utilize a ponte custom:

  • Você está usando um framework independente ou não oficial/não suportado
    ➡️ Crie uma nova ponte com base no modelo custom.
  • Você precisa editar/mudar algo em uma ponte existente.
    ➡️ Tente editar a ponte existente primeiro. Por exemplo, sua tabela owned_vehicles é diferente da padrão. Neste caso, você só precisa editar as funções relacionadas a veículos na ponte existente. Não é necessário criar uma nova ou editar tudo.
  • Nenhum framework suportado é detectado por padrão.
    ➡️ Se você renomeou o recurso do seu framework, ele pode não ser detectado automaticamente (por exemplo, es_extended -> roleplay_framework). Neste caso, você precisa adicionar GetResourceState para o seu recurso renomeado no arquivo correto da ponte. Ponte Personalizada GetResourceState

🛠️ Primeiros Passos

  1. Copie a pasta bridge/custom
    Renomeie-a para corresponder ao nome do seu framework personalizado (por exemplo, bridge/myframework).
  2. Modifique tanto client.lua quanto server.lua
    Implemente sua lógica nos stubs de função fornecidos.
  3. Ajuste a lógica de detecção do framework
    Substitua ou estenda as verificações GetResourceState para detectar seu framework personalizado.

✅ Exemplo: client.lua

Exemplo client.lua
if GetResourceState('my_framework') ~= 'started' then return end

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

function DreamFramework.showHelpNotification(text)
-- Seu código personalizado de exibição de ajuda
end

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

✅ Exemplo: server.lua

Exemplo 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

🧠 Quais Funções Implementar?

Sua ponte deve implementar todas as funções incluídas no modelo customizado e em todas as outras pontes. Isso inclui:

  • Funções de jogador (por exemplo, getPlayerFromId, getPlayerName)
  • Gerenciamento de empregos
  • Inventário e dinheiro
  • Propriedade de veículos
  • Eventos como OnPlayerLoaded, OnPlayerJobChange
  • Quaisquer outras funções que a ponte tenha... Verifique os arquivos bridge/custom/client.lua e bridge/custom/server.lua para a lista completa de funções necessárias.
⚠️ Funções Obrigatórias São Mandatórias

Cada função no modelo de ponte deve ser implementada em sua ponte personalizada.
Se mesmo uma função estiver faltando, seu framework provavelmente lançará múltiplos erros, quebrará scripts que dependem dessas funções e causará comportamento inesperado.

➡️ Verifique bridge/myframework/client.lua e bridge/myframework/server.lua para garantir cobertura total de funções.

Funções faltando = experiência comprometida.


⏰ Manipulação de Eventos

Alguns eventos devem ser acionados manualmente para compatibilidade:

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

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

💬 Dicas

  • Use logs como print("[Ponte] Ponte personalizada carregada") para facilitar a depuração.
  • Teste cada função individualmente em um ambiente controlado.
  • Utilize a pasta custom como base — ela já está preenchida com todos os stubs necessários.

🙌 Contribua com Sua Ponte

Fez uma ponte funcional para seu próprio framework?
Sinta-se à vontade para compartilhá-la conosco — ajude outros a se beneficiarem da sua integração!

🧠 Sua contribuição pode se tornar parte do projeto oficial, e você receberá créditos completos pelo seu trabalho.
💡 Se tiver alguma dúvida ou precisar de ajuda, sinta-se à vontade para nos contatar em nosso servidor Discord.


Feliz codificação! 🚀