forked from Simnation/Main
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 |