2026-04-14 17:41:39 +02:00

159 lines
4.2 KiB
Lua

local licenses = {}
MySQL.ready(function()
local p = promise.new()
MySQL.query('SELECT type, label FROM licenses', function(result)
licenses = result
p:resolve(true)
end)
Citizen.Await(p)
ESX.Trace('[esx_license] : ' .. #licenses .. ' Loaded.')
end)
---@param identifier target identifier
---@param licenseType license type
---@param cb callback function
local function AddLicense(identifier, licenseType, cb)
MySQL.insert('INSERT INTO user_licenses (type, owner) VALUES (?, ?)', {licenseType, identifier}, function(rowsChanged)
if cb then
cb(rowsChanged)
end
end)
end
---@param identifier target identifier
---@param licenseType license type
---@param cb callback function
local function RemoveLicense(identifier, licenseType, cb)
MySQL.update('DELETE FROM user_licenses WHERE type = ? AND owner = ?', {licenseType, identifier}, function(rowsChanged)
if cb then
cb(rowsChanged)
end
end)
end
---@param licenseType license type
---@param cb callback function
local function GetLicense(licenseType, cb)
MySQL.scalar('SELECT label FROM licenses WHERE type = ?', {licenseType}, function(result)
if cb then
cb({type = licenseType, label = result})
end
end)
end
---@param identifier target identifier
---@param cb callback function
local function GetLicenses(identifier, cb)
MySQL.query('SELECT user_licenses.type, licenses.label FROM user_licenses LEFT JOIN licenses ON user_licenses.type = licenses.type WHERE owner = ?', {identifier},
function(result)
if cb then
cb(result)
end
end)
end
---@param identifier target identifier
---@param licenseType license type
---@param cb callback function
local function CheckLicense(identifier, licenseType, cb)
MySQL.scalar('SELECT type FROM user_licenses WHERE type = ? AND owner = ?', {licenseType, identifier}, function(result)
if cb then
if result then
cb(true)
else
cb(false)
end
end
end)
end
local function GetLicensesList(cb)
cb(licenses)
end
local function isValidLicense(licenseType)
local flag = false
for i=1,#licenses do
if licenses[i].type == licenseType then
flag = true
break
end
end
return flag
end
RegisterNetEvent('esx_license:addLicense')
AddEventHandler('esx_license:addLicense', function(target, licenseType, cb)
local xPlayer = ESX.Player(target)
if xPlayer then
if isValidLicense(licenseType) then
AddLicense(xPlayer.getIdentifier(), licenseType, cb)
else
print(('[esx_license]: Missing license type in db ^5%s^0 or someone try to use lua executor ID: ^5%s^0'):format(licenseType, target))
end
end
end)
RegisterNetEvent('esx_license:removeLicense')
AddEventHandler('esx_license:removeLicense', function(target, licenseType, cb)
local xPlayer = ESX.Player(source)
if xPlayer then
if Config.allowedJobs[xPlayer.getJob().name] then
local xTarget = ESX.Player(target)
if xTarget then
RemoveLicense(xTarget.getIdentifier(), licenseType, cb)
end
else
xPlayer.showNotification('Your job is not allowed to remove the license', 'error', 3000)
end
end
end)
AddEventHandler('esx_license:getLicense', function(licenseType, cb)
GetLicense(licenseType, cb)
end)
AddEventHandler('esx_license:getLicenses', function(target, cb)
local xPlayer = ESX.Player(target)
if xPlayer then
GetLicenses(xPlayer.getIdentifier(), cb)
end
end)
AddEventHandler('esx_license:checkLicense', function(target, licenseType, cb)
local xPlayer = ESX.Player(target)
if xPlayer then
CheckLicense(xPlayer.getIdentifier(), licenseType, cb)
end
end)
AddEventHandler('esx_license:getLicensesList', function(cb)
GetLicensesList(cb)
end)
ESX.RegisterServerCallback('esx_license:getLicense', function(source, cb, licenseType)
local xPlayer = ESX.Player(source)
if xPlayer then
GetLicense(licenseType, cb)
end
end)
ESX.RegisterServerCallback('esx_license:getLicenses', function(source, cb, target)
local xPlayer = ESX.Player(target)
if xPlayer then
GetLicenses(xPlayer.getIdentifier(), cb)
end
end)
ESX.RegisterServerCallback('esx_license:checkLicense', function(source, cb, target, licenseType)
local xPlayer = ESX.Player(target)
if xPlayer then
CheckLicense(xPlayer.getIdentifier(), licenseType, cb)
end
end)
ESX.RegisterServerCallback('esx_license:getLicensesList', function(source, cb)
GetLicensesList(cb)
end)