sv_utils.lua
DutyPlayers = {}
Framework = "qb"
local Core
if GetResourceState("qbx_core") == "started" or Config.framework == "qbx" then
Framework = "qbx"
Core = exports.qbx_core
lib.print.info("Detected Framework: QBOX")
elseif GetResourceState("es_extended") == "started" or Config.framework == "esx" then
Framework = "esx"
Core = ESX
lib.print.info("Detected Framework: ESX")
elseif GetResourceState("qb-core") == "started" or Config.framework == "qb" then
Framework = "qb"
Core = exports['qb-core']:GetCoreObject()
lib.print.info("Detected Framework: QB")
else
Framework = Config.framework
end
webhook = "WEBHOOK HERE"
lib.callback.register('cdw-bossmenu:getWebhook', function(source)
if webhook ~= "" then
return webhook
else
return false
end
end)
function GetPlayerJob(src)
local jobName = ""
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(src)
jobName = Player.PlayerData.job.name
return jobName
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(src)
jobName = xPlayer.getJob().name
return jobName
elseif Framework == "qbx" then
local Player = Core:GetPlayer(src)
jobName = Player.PlayerData.job.name
return jobName
else
--Custom Framework here
return "Unknown"
end
end
function IsPlayerBoss(src)
local jobName = ""
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(src)
jobName = Player.PlayerData.job.isboss
return jobName
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(src)
if not xPlayer then return false end
local job = xPlayer.getJob()
if job and job.grade_name then
return job.grade_name == "boss"
end
return false
elseif Framework == "qbx" then
local Player = Core:GetPlayer(src)
jobName = Player.PlayerData.job.isboss
return jobName
else
--Custom Framework here
return "Unknown"
end
end
function GetJobSalary(src)
local salary = 0
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(src)
salary = Player.PlayerData.job.grade.payment
return salary
elseif Framework == "qbx" then
local Player = Core:GetPlayer(src)
salary = Player.PlayerData.job.payment
return salary
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(src)
salary = xPlayer.getJob().salary
return salary
else
--Custom Framework here
return 0
end
end
function GetPlayerGrade(src)
local GradeName = ""
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(src)
GradeName = Player.PlayerData.job.grade.name
return GradeName
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(src)
GradeName = xPlayer.getJob().grade_label
return GradeName
elseif Framework == "qbx" then
local Player = Core:GetPlayer(src)
GradeName = Player.PlayerData.job.grade.name
return GradeName
else
--Custom Framework here
return "Unknown"
end
end
function GetPlayerGradeFromIdf(idf)
local GradeName = ""
if Framework == "qb" then
local Player = Core.Functions.GetPlayerByCitizenId(idf)
GradeName = Player.PlayerData.job.grade.name
return GradeName
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromIdentifier(idf)
GradeName = xPlayer.getJob().grade_label
return GradeName
elseif Framework == "qbx" then
local Player = Core:GetPlayerByCitizenId(idf)
GradeName = Player.PlayerData.job.grade.name
return GradeName
else
--Custom Framework here
return "Unknown"
end
end
function AddMoney(playerId, amount)
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(playerId)
Player.Functions.AddMoney("cash", amount)
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(playerId)
xPlayer.addMoney(amount)
elseif Framework == "qbx" then
local Player = Core:GetPlayer(playerId)
Player.Functions.AddMoney("cash", amount)
else
--Custom Framework here
return false
end
end
function RemoveMoney(playerId, amount)
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(playerId)
return Player.Functions.RemoveMoney("cash", amount)
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(playerId)
return xPlayer.removeMoney(amount)
elseif Framework == "qbx" then
local Player = Core:GetPlayer(playerId)
return Player.Functions.RemoveMoney("cash", amount)
else
--Custom Framework here
return false
end
end
function GetPlayerFullName(playerId)
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(playerId)
local fullname = Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname
return fullname
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(playerId)
local fullname = xPlayer.getName()
return fullname
elseif Framework == "qbx" then
local Player = Core:GetPlayer(playerId)
local fullname = Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname
return fullname
else
--Custom Framework here
return "Unknown"
end
end
function GetIdentifier(playerId)
local identifier = nil
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(playerId)
identifier = Player.PlayerData.citizenid
return identifier
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(src)
identifier = xPlayer.getIdentifier()
return identifier
elseif Framework == "qbx" then
local Player = Core:GetPlayer(playerId)
identifier = Player.PlayerData.citizenid
return identifier
else
--Custom Framework here
return nil
end
end
function IsPlayerActive(identifier)
local deger = false
if Framework == "qb" then
local Player = Core.Functions.GetPlayerByCitizenId(identifier)
if Player then
deger = Player
end
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromIdentifier(identifier)
if xPlayer then
deger = xPlayer
end
elseif Framework == "qbx" then
local Player = exports.qbx_core:GetPlayerByCitizenId(identifier)
if Player then
deger = Player
end
else
--Custom Framework here
return nil
end
return deger
end
function SetJob(idf, jobname, grade)
if Framework == "qb" then
local Player = Core.Functions.GetPlayerByCitizenId(idf)
Player.Functions.SetJob(jobname, grade)
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromIdentifier(idf)
xPlayer.setJob(jobname, grade)
elseif Framework == "qbx" then
local Player = Core:GetPlayerByCitizenId(idf)
Player.Functions.SetJob(jobname, grade)
else
end
end
CreateThread(function()
while Framework == nil or Core == nil do Wait(100) end
while true do
Wait(1000 * 60)
for _, playerId in ipairs(GetPlayers()) do
local src = tonumber(playerId)
local identifier = nil
local onduty = false
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(src)
if Player and Player.PlayerData.job and Player.PlayerData.job.onduty then
onduty = true
identifier = Player.PlayerData.citizenid
end
elseif Framework == "qbx" then
local Player = Core:GetPlayer(src)
if Player and Player.PlayerData.job and Player.PlayerData.job.onduty then
onduty = true
identifier = Player.PlayerData.citizenid
end
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(src)
if xPlayer and xPlayer.getJob() then
local job = xPlayer.getJob()
onduty = true
identifier = xPlayer.getIdentifier()
end
elseif Framework == "custom" then
--Custom Framework here
end
if onduty and identifier then
DutyPlayers[identifier] = (DutyPlayers[identifier] or 0) + 1
end
end
end
end)
AddEventHandler('playerDropped', function(reason)
local src = source
local identifier = nil
if Framework == "qb" then
local Player = Core.Functions.GetPlayer(src)
if Player then
identifier = Player.PlayerData.citizenid
end
elseif Framework == "qbx" then
local Player = Core:GetPlayer(src)
if Player then
identifier = Player.PlayerData.citizenid
end
elseif Framework == "esx" then
local xPlayer = Core.GetPlayerFromId(src)
if xPlayer then
identifier = xPlayer.getIdentifier()
end
else
--Custom Framework here
end
if identifier and DutyPlayers[identifier] then
local timeToAdd = DutyPlayers[identifier]
MySQL.update('UPDATE cdw_bossmenu SET time = time + ? WHERE identifier = ?', {
timeToAdd,
identifier
}, function(affectedRows)
end)
DutyPlayers[identifier] = nil
end
end)
lib.callback.register('cdw-bossmenu:OpenStash', function(source)
local src = source
local job = GetPlayerJob(src)
local result = MySQL.query.await('SELECT * FROM cdw_bossmenu WHERE identifier = ?', { GetIdentifier(src) })
if result[1] then
local perms = json.decode(result[1].perms)
if perms.stash then
return true
else
return false
end
else
return false
end
end)
RegisterNetEvent('cbw-bossmenu:OpenQBInventory', function(name)
local data = { label = 'Job Stash', maxweight = 400000, slots = 500 }
exports['qb-inventory']:OpenInventory(source, name, data)
end)
lib.callback.register('cdw-bossmenu:GetInventoryData', function(source)
local src = source
local job = GetPlayerJob(src)
local stashName = job .. "stash"
if GetResourceState("ox_inventory") == "started" then
local inv = exports.ox_inventory:GetInventory(stashName, false)
local items = exports.ox_inventory:GetInventoryItems(stashName, false)
if not inv then return "not_found" end
return {count = #items or 0, capacity = (inv.weight / inv.maxWeight) * 100 or 0}
else
return "not_found"
end
end)
-- For Ox Inventory Stash
-- This thread will register the stash for each job defined in Config.AccesCoords
CreateThread(function()
if GetResourceState("ox_inventory") == "started" then
for k,v in pairs(Config.AccesCoords) do
local stash = {
id = k .. "stash",
label = k .. "stash",
slots = v.stash.slots,
weight = v.stash.weight,
groups = {[v.job] = 0},
coords = v.coord,
}
exports.ox_inventory:RegisterStash(stash.id, stash.label, stash.slots, stash.weight, false, stash.groups, stash.coords)
end
end
end)
--for esx job grades
lib.callback.register("cdw-bossmenu:GetJobGrades", function(source, jobName)
local grades = {}
local result = MySQL.query.await([[
SELECT grade, label, salary, isboss
FROM job_grades
WHERE job_name = ?
ORDER BY grade ASC
]], { jobName })
for _, v in ipairs(result) do
grades[v.grade] = {
name = v.label .. (v.isboss == 1 and " (boss)" or ""),
salary = v.salary,
isBoss = v.isboss == 1
}
end
return grades
end)
Last updated