1
0
Fork 0
forked from Simnation/Main
Main/resources/[standalone]/cs_license/config/functions/sv_function.lua
2025-06-07 08:51:21 +02:00

388 lines
No EOL
15 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CodeStudio = CodeStudio or {}
if CodeStudio.ServerType == "QB" then
QBCore = exports['qb-core']:GetCoreObject()
elseif CodeStudio.ServerType == "ESX" then
ESX = exports['es_extended']:getSharedObject()
end
--[SAVE STUDIO IMAGES] If you are using Fivemanage, Fivemerr or Discord then put api key here otherwise put discord webhook *[PROTECTED]
lib.callback.register('cs:identity:fetchWebhookAPI', function(source)
local WebhookAPI = 'https://discord.com/api/webhooks/1378331858743459851/H1JY-QCOstRZhziqp011HdIn4oNOnVtBVgXBLqlTow2fWMYugJSixtxBgBoT3NsU4wmK'
return WebhookAPI
end)
function GetPlayer(source)
if CodeStudio.ServerType == 'QB' then
return QBCore.Functions.GetPlayer(source)
elseif CodeStudio.ServerType == 'ESX' then
return ESX.GetPlayerFromId(source)
end
end
function GetIdentifier(source)
local Player = GetPlayer(source)
if not Player then return end
if CodeStudio.ServerType == 'QB' then
return Player.PlayerData.citizenid
elseif CodeStudio.ServerType == 'ESX' then
return Player.identifier
end
end
function GetPlayerName(source)
local Player = GetPlayer(source)
if not Player then return end
if CodeStudio.ServerType == 'QB' then
return Player.PlayerData.charinfo.firstname, Player.PlayerData.charinfo.lastname
elseif CodeStudio.ServerType == 'ESX' then
return Player.get('firstName'), Player.get('lastName')
end
end
function GetNationality(source)
local Player = GetPlayer(source)
if not Player then return end
if CodeStudio.ServerType == 'QB' then
return Player.PlayerData.charinfo.nationality
elseif CodeStudio.ServerType == 'ESX' then
return 'Roleplay' -- Default value since ESX doesnt have a nationality field
end
end
function GetGender(source)
local Player = GetPlayer(source)
if not Player then return end
if CodeStudio.ServerType == 'QB' then
return Player.PlayerData.charinfo.gender == 0 and 'Male' or 'Female'
elseif CodeStudio.ServerType == 'ESX' then
return Player.get('sex') == 'm' and 'Male' or 'Female'
end
end
function GetBirthdate(source)
local Player = GetPlayer(source)
if not Player then return end
if CodeStudio.ServerType == 'QB' then
return Player.PlayerData.charinfo.birthdate
elseif CodeStudio.ServerType == 'ESX' then
return Player.get('dateofbirth')
end
end
function GetPlayerJob(source)
local Player = GetPlayer(source)
if not Player then return end
if CodeStudio.ServerType == 'QB' then
return Player.PlayerData.job.name, Player.PlayerData.job.grade.level, Player.PlayerData.job.grade.name
elseif CodeStudio.ServerType == 'ESX' then
return Player.job.name, Player.job.grade, Player.job.grade_label
end
end
function GetPlayerHeight(source)
if CodeStudio.ServerType == 'ESX' then
local Player = GetPlayer(source)
if not Player then return end
return Player.get('height')
end
end
lib.callback.register('cs:identity:getNearbyPlayer', function(source)
local players = {}
local PlayerPed = GetPlayerPed(source)
local pCoords = GetEntityCoords(PlayerPed)
if CodeStudio.ServerType == 'QB' then
for _, v in pairs(QBCore.Functions.GetPlayers()) do
local targetPed = GetPlayerPed(v)
if targetPed and PlayerPed ~= targetPed then
local tCoords = GetEntityCoords(targetPed)
local dist = #(pCoords - tCoords)
if dist < 10 then
local ped = GetPlayer(v)
if ped then
players[#players + 1] = {
id = v,
name = ped.PlayerData.charinfo.firstname .. " " .. ped.PlayerData.charinfo.lastname
}
end
end
end
end
elseif CodeStudio.ServerType == 'ESX' then
for _, v in pairs(ESX.GetPlayers()) do
local targetPed = GetPlayerPed(v)
if targetPed and PlayerPed ~= targetPed then
local tCoords = GetEntityCoords(targetPed)
local dist = #(pCoords - tCoords)
if dist < 10 then
local ped = GetPlayer(v)
if ped then
players[#players + 1] = {
id = v,
name = ped.getName()
}
end
end
end
end
end
return players
end)
lib.callback.register('cs:identity:deductMoney', function(source, amount)
local Player = GetPlayer(source)
if CodeStudio.ServerType == 'QB' then
local money = Player.PlayerData.money['cash']
if money >= amount then
Player.Functions.RemoveMoney("cash", amount)
return true
end
elseif CodeStudio.ServerType == 'ESX' then
local money = Player.getAccount('money').money
if money >= amount then
Player.removeAccountMoney('money', amount)
return true
end
end
return false
end)
RegisterNetEvent('cs:identity:refundStudio', function(refund)
local Player = GetPlayer(source)
if CodeStudio.ServerType == 'QB' then
Player.Functions.AddMoney("cash", refund)
elseif CodeStudio.ServerType == 'ESX' then
Player.addAccountMoney('money', refund)
end
end)
function addItem(source, item, metadata)
if metadata and metadata.firstname and metadata.lastname then
metadata.description = ('Name: %s'):format(metadata.firstname .. ' ' .. metadata.lastname)
end
if GetResourceState('ox_inventory') == 'started' then
exports['ox_inventory']:AddItem(source, item, 1, metadata)
elseif GetResourceState('qs-inventory') == 'started' then
exports['qs-inventory']:AddItem(source, item, 1, false, metadata)
elseif GetResourceState('tgiann-inventory') == 'started' then
exports["tgiann-inventory"]:AddItem(source, item, 1, nil, metadata, false)
elseif GetResourceState('origen_inventory') == 'started' then
exports['origen_inventory']:addItem(source, item, 1, metadata, false)
else
local Player = GetPlayer(source)
if CodeStudio.ServerType == 'QB' then
Player.Functions.AddItem(item, 1, nil, metadata)
elseif CodeStudio.ServerType == 'ESX' then
Player.addInventoryItem(item, 1, metadata)
end
end
end
function issueLicense(playerSrc, license, issue) --This Function triggers when license gets issued or revoked
--Supports qb-core Metadata License update + esx_license support
local Player = GetPlayer(playerSrc)
if CodeStudio.ServerType == 'QB' then
local licenseTable = Player.PlayerData.metadata['licences']
if issue then
if licenseTable[license] then return end
licenseTable[license] = true
else
licenseTable[license] = false
end
Player.Functions.SetMetaData('licences', licenseTable)
elseif CodeStudio.ServerType == 'ESX' then
local identifier = Player.identifier
if issue then
TriggerEvent('esx_license:addLicense', playerSrc, license)
else
MySQL.query.await('DELETE FROM user_licenses WHERE type = ? AND owner = ?', {license, identifier})
end
end
end
function createIDItems()
-- Register Public Licenses --
for itemName, v in pairs(allLicense) do
local function handleCardUse(source, data, itemKey)
lib.callback('cs:identity:getClosestPlayer', source, function(nearby)
local itemInfo = {}
if CodeStudio.IDSettings.useMetaData then
itemInfo = (data and data.metadata) or (data and data.info) or {}
itemInfo.card = allLicense[itemKey]
end
for k, playerID in pairs(nearby) do
if itemInfo.checkCard == 'codestudio' then
TriggerClientEvent('cs:identity:useCard', playerID, itemInfo, itemKey, source)
else
useCard(source, playerID, itemKey)
end
end
end)
end
if GetResourceState('qs-inventory') == 'started' then
exports['qs-inventory']:CreateUsableItem(itemName, function(source, item)
handleCardUse(source, item, itemName)
end)
elseif CodeStudio.ServerType == "QB" then
QBCore.Functions.CreateUseableItem(itemName, function(source, item)
handleCardUse(source, item, itemName)
end)
elseif CodeStudio.ServerType == "ESX" then
ESX.RegisterUsableItem(itemName, function(source, item, data)
if GetResourceState('ox_inventory') == 'started' then
handleCardUse(source, data, itemName)
else
handleCardUse(source, item, itemName)
end
end)
end
end
end
function createItems()
-- Register Job Badges Items --
for job, config in pairs(CodeStudio.Management) do
if config.JobBadge.Enable and config.JobBadge.ItemName then
local itemName = config.JobBadge.ItemName
local function handleBadgeUse(source, data, itemKey)
lib.callback('cs:identity:getClosestPlayer', source, function(nearby)
local itemInfo = {}
if CodeStudio.IDSettings.useMetaData then
itemInfo = (data and data.metadata) or (data and data.info) or {}
end
for k, playerID in pairs(nearby) do
if itemInfo.checkCard == 'codestudio' then
TriggerClientEvent('cs:identity:useBadge', playerID, itemInfo, itemKey, source)
else
useBadge(source, playerID, itemKey)
end
end
end)
end
if GetResourceState('qs-inventory') == 'started' then
exports['qs-inventory']:CreateUsableItem(itemName, function(source, item)
handleBadgeUse(source, item, itemName)
end)
elseif CodeStudio.ServerType == "QB" then
QBCore.Functions.CreateUseableItem(itemName, function(source, item)
handleBadgeUse(source, item, itemName)
end)
elseif CodeStudio.ServerType == "ESX" then
ESX.RegisterUsableItem(itemName, function(source, item, data)
if GetResourceState('ox_inventory') == 'started' then
handleBadgeUse(source, data, itemName)
else
handleBadgeUse(source, item, itemName)
end
end)
end
end
end
-- Register Worker IDs Items --
for k, config in pairs(CodeStudio.WorkerID) do
if config.ItemName then
local itemName = config.ItemName
local function handleWorkerIDUse(source, data, itemKey)
lib.callback('cs:identity:getClosestPlayer', source, function(nearby)
local itemInfo = {}
if CodeStudio.IDSettings.useMetaData then
itemInfo = (data and data.metadata) or (data and data.info) or {}
end
for k, playerID in pairs(nearby) do
if itemInfo.checkCard == 'codestudio' then
TriggerClientEvent('cs:identity:useWorkerID', playerID, itemInfo, itemKey, source)
else
useWorkerID(source, playerID, itemKey)
end
end
end)
end
if GetResourceState('qs-inventory') == 'started' then
exports['qs-inventory']:CreateUsableItem(itemName, function(source, item)
handleWorkerIDUse(source, item, itemName)
end)
elseif CodeStudio.ServerType == "QB" then
QBCore.Functions.CreateUseableItem(itemName, function(source, item)
handleWorkerIDUse(source, item, itemName)
end)
elseif CodeStudio.ServerType == "ESX" then
ESX.RegisterUsableItem(itemName, function(source, item, data)
if GetResourceState('ox_inventory') == 'started' then
handleWorkerIDUse(source, data, itemName)
else
handleWorkerIDUse(source, item, itemName)
end
end)
end
end
end
-- Register Forge/Fake IDs --
local function handleForgeIDUse(source, data, itemKey)
if not CodeStudio.IDSettings.useMetaData then return end
lib.callback('cs:identity:getClosestPlayer', source, function(nearby)
local itemInfo = (data and data.metadata) or (data and data.info) or {}
for k, playerID in pairs(nearby) do
if itemInfo.checkCard == 'codestudio' then
TriggerClientEvent('cs:identity:useCard', playerID, itemInfo, itemKey, source)
end
end
end)
end
if GetResourceState('qs-inventory') == 'started' then
exports['qs-inventory']:CreateUsableItem(CodeStudio.FakeID.itemName, function(source, item)
handleForgeIDUse(source, item, CodeStudio.FakeID.itemName)
end)
elseif CodeStudio.ServerType == "QB" then
QBCore.Functions.CreateUseableItem(CodeStudio.FakeID.itemName, function(source, item)
handleForgeIDUse(source, item, CodeStudio.FakeID.itemName)
end)
elseif CodeStudio.ServerType == "ESX" then
ESX.RegisterUsableItem(CodeStudio.FakeID.itemName, function(source, item, data)
if GetResourceState('ox_inventory') == 'started' then
handleForgeIDUse(source, data, CodeStudio.FakeID.itemName)
else
handleForgeIDUse(source, item, CodeStudio.FakeID.itemName)
end
end)
end
end
lib.addCommand(CodeStudio.LicenseCreator.creatorCommand, {
help = 'Create Licenses [Restricted]',
}, function(source, args, raw)
if isPlayerAllowed(source, CodeStudio.LicenseCreator.Restrict) then
TriggerClientEvent('cs:identity:creatorUI', source)
end
end)
if CodeStudio.LicenseChecker.Enable then
lib.addCommand(CodeStudio.LicenseChecker.checkCommand, {
help = 'Check Licenses [Restricted]',
}, function(source, args, raw)
if isPlayerAllowed(source, CodeStudio.LicenseChecker.Restrict) then
TriggerClientEvent('cs:identity:idCheck', source)
end
end)
end