🧩 Creazione di un Ponte Framework Personalizzato
Dream Bridge supporta ESX, QBCore e QBX out of the box. Se stai utilizzando un framework diverso o modificato, puoi implementare il tuo ponte personalizzato per garantire la compatibilità.
Questa guida ti guiderà nella creazione di un nuovo ponte utilizzando il modello custom integrato.
💡 Nota: QBX (Qbox) è completamente compatibile con il ponte QBCore. Non è necessaria un'implementazione separata.
📁 Struttura del Ponte
Tutti i ponti si trovano nella cartella bridge/.
Ogni framework (ad esempio, esx, qbcore, custom) ha la propria sottocartella con:
- client.lua
- server.lua
 
Il ponte rileva automaticamente il framework attivo tramite GetResourceState.
Importante: Se il tuo resource del framework viene rinominato (ad esempio,
es_extended→roleplay_framework), il rilevamento automatico potrebbe fallire.
🚀 Come Utilizzare il Ponte Personalizzato
Utilizza il ponte custom:
- Stai utilizzando un framework standalone o non ufficiale/non supportato 
 ➡️ Crea un nuovo ponte basato sul modellocustom.
- Hai bisogno di modificare/cambiare qualcosa in un ponte esistente. 
 ➡️ Prova a modificare prima il ponte esistente. Ad esempio, la tua tabella owned_vehicles è diversa da quella predefinita. In questo caso devi solo modificare le funzioni relative ai veicoli nel ponte esistente. Non è necessario crearne uno nuovo o modificarli tutti.
- Nessun framework supportato viene rilevato automaticamente. 
 ➡️ Se hai rinominato il tuo resource del framework, potrebbe non essere rilevato automaticamente (ad esempio,es_extended->roleplay_framework). In questo caso, devi utilizzareGetResourceStateper il tuo resource rinominato nel file ponte corretto. 
🛠️ Per Iniziare
- Copia la cartella bridge/custom
 Rinominala in modo che corrisponda al nome del tuo framework personalizzato (ad esempio,bridge/myframework).
- Modifica sia client.luacheserver.lua
 Implementa la tua logica nelle funzioni fornite.
- Regola la logica di rilevamento del framework 
 Sostituisci o estendi i controlliGetResourceStateper rilevare il tuo framework personalizzato.
✅ Esempio: client.lua
if GetResourceState('my_framework') ~= 'started' then return end
DreamFramework.ServerFramework = 'myframework'
DreamFramework.ServerFrameworkLoaded = true
function DreamFramework.showHelpNotification(text)
    -- Il tuo codice personalizzato per la visualizzazione dell'aiuto
end
function DreamFramework.getPlayerJobName()
    return exports['my_framework']:GetJobName()
end
✅ Esempio: 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
🧠 Quali Funzioni Implementare?
Il tuo ponte deve implementare tutte le funzioni incluse nel modello custom e in tutti gli altri ponti. Questo include:
- Funzioni del giocatore (ad esempio, getPlayerFromId,getPlayerName)
- Gestione dei lavori
- Inventario e denaro
- Proprietà dei veicoli
- Eventi come OnPlayerLoaded,OnPlayerJobChange
- Qualsiasi altra funzione che il ponte ha...
Controlla i file bridge/custom/client.luaebridge/custom/server.luaper l'elenco completo delle funzioni richieste.
Ogni singola funzione nel modello del ponte deve essere implementata nel tuo ponte personalizzato.
Se manca anche una sola funzione, il tuo framework probabilmente genererà errori multipli, interromperà gli script che dipendono da tali funzioni e causerà un comportamento inaspettato.
➡️ Controlla due volte bridge/myframework/client.lua e bridge/myframework/server.lua per assicurarti di avere una copertura completa delle funzioni.
Funzioni mancanti = esperienza interrotta.
⏰ Gestione degli Eventi
Alcuni eventi devono essere attivati manualmente per la compatibilità:
RegisterNetEvent('myfw:playerLoaded', function(playerId)
    OnPlayerLoaded(playerId)
end)
RegisterNetEvent('myfw:jobChanged', function(playerId, newJob)
    OnPlayerJobChange(playerId, newJob.name)
end)
💬 Suggerimenti
- Utilizza log come print("[Ponte] Ponte personalizzato caricato")per un debug più semplice.
- Testa ogni funzione singolarmente in un ambiente controllato.
- Utilizza la cartella customcome base: è già precompilata con tutti gli stub richiesti.
🙌 Contribuisci con il Tuo Ponte
Hai creato un ponte funzionante per il tuo framework?
Sentiti libero di condividerlo con noi — aiuta gli altri a beneficiare della tua integrazione!
🧠 La tua contribuzione potrebbe diventare parte del progetto ufficiale e otterrai pieno credito per il tuo lavoro.
💡 Se hai domande o hai bisogno di aiuto, non esitare a contattarci sul nostro server Discord.
Buon coding! 🚀