Passa al contenuto principale

🧩 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
Struttura del Ponte

Il ponte rileva automaticamente il framework attivo tramite GetResourceState.

Importante: Se il tuo resource del framework viene rinominato (ad esempio, es_extendedroleplay_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 modello custom.
  • 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 utilizzare GetResourceState per il tuo resource rinominato nel file ponte corretto. GetResourceState del Ponte Personalizzato

🛠️ Per Iniziare

  1. Copia la cartella bridge/custom
    Rinominala in modo che corrisponda al nome del tuo framework personalizzato (ad esempio, bridge/myframework).
  2. Modifica sia client.lua che server.lua
    Implementa la tua logica nelle funzioni fornite.
  3. Regola la logica di rilevamento del framework
    Sostituisci o estendi i controlli GetResourceState per rilevare il tuo framework personalizzato.

✅ Esempio: client.lua

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

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.lua e bridge/custom/server.lua per l'elenco completo delle funzioni richieste.
⚠️ Le Funzioni Richieste Sono Obbligatorie

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 custom come 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! 🚀