
- ESX
- QBCore
- vRP
Von Luke

Ein Framework-Adapter gibt deiner Ressource eine kleine Schnittstelle, während ESX-, QBCore- und Qbox-Details an einem Ort bleiben. Beginne mit einer reinen Leseoperation, überprüfe sie auf jedem unterstützten Framework und füge Geld- oder Inventaroperationen nur hinzu, wenn ihr Fehlerverhalten definiert ist.
Die hier gezeigten Konfigurations- und Codebeispiele beziehen sich auf FiveM für GTA V Legacy. Enhanced hat andere Laufzeit- und Kompatibilitätsregeln; überprüfe die Legacy-zu-Enhanced-Änderungen von Cfx.re bevor du sie auf einen Enhanced-Server anwendest.
Das folgende Beispiel gibt den angemeldeten Charakter-Identifikator zurück, oder nil wenn kein Charakter geladen ist. Es läuft nur auf dem Server. Es konvertiert keine vorhandenen Identifikatoren und sorgt auch nicht dafür, dass die drei Frameworks eine Datenbank teilen. Verwende pro Bereitstellung ein ausgewähltes Framework.
Erstelle resources/[local]/character_adapter/ mit den folgenden drei Dateien. Dieses Beispiel wählt QBCore. Für ESX oder Qbox ändere sowohl die Manifest-Abhängigkeit als auch den framework Wert. Aktiviere nicht alle drei Frameworks, um den Adapter zu testen.
fxmanifest.lua:
fx_version 'cerulean'
game 'gta5'
dependency 'qb-core'
server_scripts { 'adapter.lua', 'server.lua' }adapter.lua:
local framework = 'qbcore' -- 'esx', 'qbcore' or 'qbox'
CharacterAdapter = {}
if framework == 'esx' then
local ESX = exports['es_extended']:getSharedObject()
function CharacterAdapter.identifier(src)
local player = ESX.GetPlayerFromId(src)
return player and player.identifier or nil
end
elseif framework == 'qbcore' then
local QBCore = exports['qb-core']:GetCoreObject()
function CharacterAdapter.identifier(src)
local player = QBCore.Functions.GetPlayer(src)
return player and player.PlayerData.citizenid or nil
end
elseif framework == 'qbox' then
function CharacterAdapter.identifier(src)
local player = exports.qbx_core:GetPlayer(src)
return player and player.PlayerData.citizenid or nil
end
else
error('Select a supported framework in adapter.lua')
endserver.lua:
RegisterCommand('adapter_check', function(src, args)
if src ~= 0 then return end -- server console only
local target = tonumber(args[1])
if not target or target < 1 or target % 1 ~= 0 then
print('Usage: adapter_check <player server ID>')
return
end
local identifier = CharacterAdapter.identifier(target)
print(identifier and 'Character resolved.' or 'No loaded character.')
end, false)Hinzufügen ensure character_adapter nach dem ausgewählten Framework in deiner aktiven Serverkonfiguration. Mit einem angemeldeten Testcharakter, dessen Server-ID 12 ist, führe adapter_check 12 in der FXServer-Konsole aus. Erwarte Character resolved.; wiederhole dies, nachdem der Charakter die Verbindung trennt, und erwarte No loaded character.. Der Befehl gibt absichtlich keine Identifikatoren aus.
Wiederhole dies auf separaten ESX- und Qbox-Testinstallationen, nachdem du deren Abhängigkeit und Adapter-Branch ausgewählt hast. Eine Lua-Syntaxprüfung oder ein gemockter Export-Test allein kann eine Live-Framework-Integration nicht bestätigen.
Dokumentiere für jede neue Operation Argumente, Rückgabewerte und Fehler. Beim Hinzufügen zum Inventar muss zwischen vollem Inventar und unbekannten Gegenständen unterschieden werden. Geldoperationen müssen unterstützte Framework-Methoden nutzen und deren Erfolgsergebnis beibehalten. Gib niemals bedingungslos Erfolg zurück und ändere nicht PlayerData.money direkt.
Halte Lebenszyklus-Handler spezifisch für das installierte Framework. playerJoining ist kein Beweis dafür, dass ein Charakter geladen wurde. Verwende lokale Handler für lokale Ereignisse; mache interne Grant- oder Job-Update-Handler nicht aus Bequemlichkeit über das Netzwerk zugänglich.
Prüfe fehlende Spieler, Ressourcenstartreihenfolge, Charakterwechsel und erneute Verbindungen. Teste bei Schreiboperationen auch verweigerten Zugriff, doppelte Anfragen, unzureichendes Guthaben und Teilfehler. Leite keine Bedeutung aus dem Inhalt von Kennungen ab und bewahre jede Migrationszuordnung als Wiederherstellungsnachweis auf.
Quelle: docs.qbox.re · Quelle: qbcore.org · Quelle: esx-framework/esx_core · Cfx.re – Ereignisse abhören
Gleichzeitige Nutzung von ESX und QBCore: Warum das nicht machbar ist





