framework.lua
The framework.lua config file allows you to change, modify or add your custom framework changes.
-- Framework detection and job counting configuration
local framework = {}
-- Auto-detect framework
local function detectFramework()
if GetResourceState('qbx_core') == 'started' then
return 'qbox'
elseif GetResourceState('qb-core') == 'started' then
return 'qbcore'
elseif GetResourceState('es_extended') == 'started' then
return 'esx'
else
return 'standalone'
end
end
framework.current = detectFramework()
-- Framework-specific job counting functions
framework.getJobCounts = {
qbox = function(jobCategories)
local jobCounts = {}
-- Initialize counts
for categoryKey, categoryData in pairs(jobCategories) do
jobCounts[categoryKey] = {
count = 0,
label = categoryData.label,
icon = categoryData.icon,
color = categoryData.color
}
end
-- Count QBox players
for _, player in pairs(exports.qbx_core:GetQBPlayers()) do
if player and player.PlayerData and player.PlayerData.job then
local playerJob = player.PlayerData.job
local isOnDuty = playerJob.onduty or false
if isOnDuty then
for categoryKey, categoryData in pairs(jobCategories) do
local isInCategory = false
-- Check by job type
if categoryData.jobTypes and #categoryData.jobTypes > 0 then
for _, jobType in ipairs(categoryData.jobTypes) do
if playerJob.type == jobType then
isInCategory = true
break
end
end
end
-- Check by job name
if not isInCategory and categoryData.jobCodes and #categoryData.jobCodes > 0 then
for _, jobCode in ipairs(categoryData.jobCodes) do
if playerJob.name == jobCode then
isInCategory = true
break
end
end
end
if isInCategory then
jobCounts[categoryKey].count = jobCounts[categoryKey].count + 1
end
end
end
end
end
return jobCounts
end,
qbcore = function(jobCategories)
local jobCounts = {}
local QBCore = exports['qb-core']:GetCoreObject()
-- Initialize counts
for categoryKey, categoryData in pairs(jobCategories) do
jobCounts[categoryKey] = {
count = 0,
label = categoryData.label,
icon = categoryData.icon,
color = categoryData.color
}
end
-- Count QBCore players
local players = QBCore.Functions.GetQBPlayers()
for _, player in pairs(players) do
if player and player.PlayerData and player.PlayerData.job then
local playerJob = player.PlayerData.job
local isOnDuty = playerJob.onduty or false
if isOnDuty then
for categoryKey, categoryData in pairs(jobCategories) do
local isInCategory = false
-- Check by job type
if categoryData.jobTypes and #categoryData.jobTypes > 0 then
for _, jobType in ipairs(categoryData.jobTypes) do
if playerJob.type == jobType then
isInCategory = true
break
end
end
end
-- Check by job name
if not isInCategory and categoryData.jobCodes and #categoryData.jobCodes > 0 then
for _, jobCode in ipairs(categoryData.jobCodes) do
if playerJob.name == jobCode then
isInCategory = true
break
end
end
end
if isInCategory then
jobCounts[categoryKey].count = jobCounts[categoryKey].count + 1
end
end
end
end
end
return jobCounts
end,
esx = function(jobCategories)
local jobCounts = {}
local ESX = exports['es_extended']:getSharedObject()
-- Initialize counts
for categoryKey, categoryData in pairs(jobCategories) do
jobCounts[categoryKey] = {
count = 0,
label = categoryData.label,
icon = categoryData.icon,
color = categoryData.color
}
end
-- Count ESX players
local xPlayers = ESX.GetExtendedPlayers()
for _, xPlayer in pairs(xPlayers) do
if xPlayer then
local playerJob = xPlayer.getJob()
-- ESX doesn't have onduty by default, check if using a duty system
local isOnDuty = true -- Assume on duty unless using a duty script
if isOnDuty then
for categoryKey, categoryData in pairs(jobCategories) do
local isInCategory = false
-- ESX doesn't have job types, only check job names
if categoryData.jobCodes and #categoryData.jobCodes > 0 then
for _, jobCode in ipairs(categoryData.jobCodes) do
if playerJob.name == jobCode then
isInCategory = true
break
end
end
end
if isInCategory then
jobCounts[categoryKey].count = jobCounts[categoryKey].count + 1
end
end
end
end
end
return jobCounts
end,
standalone = function(jobCategories)
-- Return empty counts for standalone
local jobCounts = {}
for categoryKey, categoryData in pairs(jobCategories) do
jobCounts[categoryKey] = {
count = 0,
label = categoryData.label,
icon = categoryData.icon,
color = categoryData.color
}
end
return jobCounts
end
}
-- Get player count based on framework
framework.getPlayerCount = {
qbox = function()
local count = 0
for _, _ in pairs(exports.qbx_core:GetQBPlayers()) do
count = count + 1
end
return count
end,
qbcore = function()
local QBCore = exports['qb-core']:GetCoreObject()
local players = QBCore.Functions.GetQBPlayers()
local count = 0
for _, _ in pairs(players) do
count = count + 1
end
return count
end,
esx = function()
local ESX = exports['es_extended']:getSharedObject()
local xPlayers = ESX.GetExtendedPlayers()
return #xPlayers
end,
standalone = function()
-- Use native FiveM function
return #GetPlayers()
end
}
return frameworkLast updated