The resource works out of the box with ESX and QBCore, but you can include your own framework. Also, the resource detects automatically if you are using ESX or QBCore.
CONFIG.Framework = Framework.ESX
-- or
CONFIG.Framework = Framework.QBCore
-- or
CONFIG.Framework = Framework.Custom
Modify ESX or QBCore methods
Client Side
You can find the client framework stuff inside client/api/framework/bridge.lua. In the client you will find a function like this for each framework with every method or event required inside:
local function loadESX()
ESX = exports['es_extended']:getSharedObject()
FRAMEWORK.GetPlayerName = function()
return ESX.GetPlayerData().fistName
end
FRAMEWORK.GetPlayerLastname = function()
return ESX.GetPlayerData().lastName
end
FRAMEWORK.GetPlayerJob = function()
if ESX.GetPlayerData().job == nil then
return nil
end
return ESX.GetPlayerData().job.name
end
FRAMEWORK.GetPlayerJobGrade = function()
return ESX.GetPlayerData().job.grade
end
RegisterNetEvent('esx:playerLogout') -- When a player logs out (multicharacter), reset their data
AddEventHandler('esx:playerLogout', function()
TriggerServerEvent('rcore_dispatch:server:removePlayer')
end)
end
Here you can modify each method to your needs.
Server Side
You can find the server framework stuff inside server/api/framework.lua. In the server you will find a function like this for each framework with every method or event required inside:
local function loadESX()
ESX = exports['es_extended']:getSharedObject()
if not ESX then return dbg.error('[rcore_dispatch] [error] Are you sure that you are using ESX?') end
GetPlayerFromId = function(source)
dbg.info('GetPlayerFromId: ' .. source)
local xPlayer = {}
local xplayer = ESX.GetPlayerFromId(source)
xPlayer.addMoney = function(money)
return xplayer.addMoney(money)
end
xPlayer.removeMoney = function(money)
return xplayer.removeMoney(money)
end
xPlayer.getMoney = function(money)
if not xplayer then
return nil
end
return xplayer.getMoney()
end
xPlayer.getRank = function()
if not xplayer then
return nil
end
local jobData = xplayer.getJob()
return jobData.grade, jobData.grade_label
end
xPlayer.getJob = function()
if not xplayer then
return nil
end
local jobData = xplayer.getJob()
return jobData.name, jobData.label
end
xPlayer.getSurname = function()
if not xplayer then
return nil
end
local name = xplayer.getName()
local surname = string.match(name, '%S+%s(%S+)')
return surname
end
return xPlayer
end
--- Event that loads the player into the dispatch
RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(playerId, xPlayer)
local job = xPlayer.getJob().name
if not job then return dbg.critical('No job detected in player with id ' .. xPlayer.source) end
if CONFIG.JOBS[job] then
LoadPlayer(xPlayer.source, job)
end
end)
RegisterNetEvent('esx:setJob') -- The stored data does not sync with the framework unless we tell it to
AddEventHandler('esx:setJob', function(playerId, job)
if job then
if CONFIG.JOBS[job.name] then
LoadPlayer(playerId, job.name)
else
UnloadPlayer(playerId, job.name)
end
end
end)
end
Here you can modify each method to your needs.
Custom Framework
To use a custom framework, follow these steps:
Create your own framework methods or events.
Inside the client-side code (client/api/framework/bridge.lua), create a new function for your custom framework and define the required methods and events. It is required to follow the structure of the functions for the traditional frameworks, an example for client would be:
local function loadESX()
RCORE = exports['rcore']:getSharedObject()
FRAMEWORK.GetPlayerName = function()
return RCORE.GetPlayerData().fistName
end
FRAMEWORK.GetPlayerLastname = function()
return RCORE.GetPlayerData().lastName
end
FRAMEWORK.GetPlayerJob = function()
if RCORE.GetPlayerData().job == nil then
return nil
end
return RCORE.GetPlayerData().job.name
end
FRAMEWORK.GetPlayerJobGrade = function()
return RCORE.GetPlayerData().job.grade
end
RegisterNetEvent('rcore:playerLogout') -- When a player logs out (multicharacter), reset their data
AddEventHandler('rcor:playerLogout', function()
TriggerServerEvent('rcore_dispatch:server:removePlayer')
end)
end
Inside the server-side code (server/api/framework.lua), create a new function for your custom framework and define the required methods and events. We recommend copying the function for a traditional framework and replace the events and function for your own custom framework methods.
Modify the framework setup in configs/sh_config.lua: