388 lines
		
	
	
		
			No EOL
		
	
	
		
			15 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			388 lines
		
	
	
		
			No EOL
		
	
	
		
			15 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
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 doesn’t 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 |